走近FPGA - 預(yù)告篇

本文由電子科技大學(xué)碩士研究生劉豐瑞同學(xué)主筆,黃樂天老師潤色和修改,硬木課堂聯(lián)合出品。原文刊載于知乎專欄《片上征途》:?https://zhuanlan.zhihu.com/p/149973731
?在3個(gè)月前,片上征途專欄發(fā)表了“走近SoC預(yù)告篇”。相信大家已經(jīng)搬著小板凳等著我們發(fā)布文章了。然而3個(gè)月過去了,我們好像沒有什么動(dòng)作。造成為什么我們沒有動(dòng)作的原因并不是懶,主要有以下:
首先是我們?yōu)榱艘咔闇?zhǔn)備了《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》這門課程的在線課程。包括更新PPT、教材以及實(shí)驗(yàn)教程。這牽涉了我的導(dǎo)師、我?guī)熜忠约拔业暮艽笠徊糠志Α?/p>
其次是我們?yōu)橹С旨瘎?chuàng)賽Arm杯,做了一系列的線上講座。包括了Cortex-M3/M0的處理器IP如何使用、調(diào)試,如何利用CMSDK來快速搭建SoC等等。這些講座也耗費(fèi)了我們不少精力。當(dāng)然這些講座都很成功。后面希望看到這些講座的知友們可以移步到極術(shù)社區(qū)觀看。?
第三就是我們?cè)跍?zhǔn)備下學(xué)期要開始的微處理器與片上系統(tǒng)挑戰(zhàn)性課程,這個(gè)課程是準(zhǔn)備以MooC的形式在中國大學(xué)MooC上線。通過線上線下混合教學(xué)的方式,幫助我電的同學(xué)走完了一個(gè)專用SoC從需求分析到原型驗(yàn)證的全過程。?
以上三件事做下來,其實(shí)也就沒有什么時(shí)間了。但真正阻止我們開始“走近SoC”的主要原因是我們發(fā)現(xiàn)很多同學(xué)的FPGA設(shè)計(jì)實(shí)現(xiàn)能力不行?;旧蠜]有辦法獨(dú)立的完成一個(gè)稍微復(fù)雜一點(diǎn)的邏輯電路設(shè)計(jì)。這點(diǎn)在教學(xué)和Arm杯的培訓(xùn)中都發(fā)現(xiàn)了。而我的導(dǎo)師@其實(shí)我是老莫在挑戰(zhàn)性課程建設(shè)的答辯場上也被資深教授給潑了冷水。按目前的教學(xué)模式和教學(xué)深度,大部分學(xué)生確實(shí)沒有能力自己定義并實(shí)現(xiàn)一個(gè)加速器電路,然后將其集成到SoC中。?
非常有意思的一點(diǎn)是,我和我的師兄們都是當(dāng)年我導(dǎo)師@其實(shí)我是老莫 EDA技術(shù)本科班上的學(xué)生。導(dǎo)師當(dāng)年所設(shè)計(jì)的多道練習(xí)題目確實(shí)起到了幫助我們由淺入深,逐次遞進(jìn)的掌握了硬件描述語言和FPGA設(shè)計(jì)的過程。而反觀現(xiàn)在的很多在線教程,其實(shí)存在很大的問題。?
目前可以看到的FPGA在線教程主要有這么幾種:?
第一種是技術(shù)愛好者的自由博客,多見于CSDN等網(wǎng)站。這些博客對(duì)于解決某個(gè)點(diǎn)上的問題確實(shí)是很有幫助的,我們也大量閱讀這些博客來學(xué)習(xí)到相關(guān)知識(shí)點(diǎn)。但是這類博客最大的問題是零散且對(duì)于初學(xué)者不夠友好。初學(xué)者很難說能直接通過學(xué)習(xí)這些博客很好的入門的。?
第二種是原廠的技術(shù)資料、白皮書以及培訓(xùn)視頻。這些自然是學(xué)習(xí)FPGA必然要去參考的學(xué)習(xí)資料。但是這些資料同樣對(duì)于初學(xué)者并不友好。冗長的技術(shù)手冊(cè),大部分還是英文的,對(duì)于基礎(chǔ)知識(shí)幾乎為零的初學(xué)者而言無異于天書。原廠的視頻也是有同樣的問題,專業(yè)性有余但不夠友好。動(dòng)輒1個(gè)小時(shí)的培訓(xùn)視頻是很難讓初學(xué)者堅(jiān)持下去的。?
第三種是各個(gè)開發(fā)板廠家所推出的資料和視頻教程,這些應(yīng)該是大家最常接觸到的一種。也是很多同學(xué)們學(xué)習(xí)FPGA的起點(diǎn)。但是這類教程的普遍問題在于開發(fā)板的廠家畢竟不是專業(yè)搞教育出身的,很多視頻/教程在制作的過程中不知不覺就變成了開發(fā)板功能展示。?
第四種是一些培訓(xùn)機(jī)構(gòu)推出的教程和視頻,這些教程和視頻的最大問題在于良莠不齊。而去很多培訓(xùn)機(jī)構(gòu)的教程是其線下教學(xué)版本直接翻錄以后做到線上的,并不適合線上學(xué)習(xí)。?
第五種就是高校教師做的了,這類教程我不想太多的評(píng)價(jià)。感覺大部分還是比較冗長,需要實(shí)際動(dòng)手的部分很少/很簡單,看視頻的時(shí)間多了就會(huì)有“腦子說它懂了,手卻說它不會(huì)”的感覺。?
因此我們就有意來做一個(gè)“走近FPGA”系列,通過我們對(duì)于學(xué)習(xí)FPGA過程中的理解和感悟,來總結(jié)成一個(gè)個(gè)的小文章。通過知乎這個(gè)平臺(tái)的優(yōu)勢(shì),通過文字、圖片、視頻綜合的運(yùn)用來幫助大家自學(xué)。這樣一方面可以督促我們反思自己的學(xué)習(xí)和思考是否到位,另外一方面也有助于幫助到更多的人來學(xué)習(xí)。當(dāng)然,更重要的是能夠讓我們后續(xù)如果擔(dān)任課程助教的話,沒有那么辛苦……?
我們把這個(gè)系列取名叫“走近FPGA”而不是“走進(jìn)FPGA”,其實(shí)是在向CCTV“走近科學(xué)”學(xué)習(xí)。因?yàn)椤白呓茖W(xué)”這類電視節(jié)目不能替代專業(yè)知識(shí)的學(xué)習(xí),只能“走近”而無法“走進(jìn)”。同樣,我們也無法保證看完了我們的系列文章各位就能夠“包教包會(huì)”,我們也同樣只能讓各位“走近”。最終要想完全學(xué)會(huì)FPGA,還需要長期的自學(xué)和在實(shí)際工作中不斷的歷練。?
學(xué)習(xí)FPGA,必然需要有對(duì)應(yīng)的開發(fā)平臺(tái)。因此我們這個(gè)系列選擇的是硬木課堂的FPGA板:https://item.taobao.com/item.htm?id=612427051465?

選擇這個(gè)開發(fā)板的原因有兩點(diǎn):1.目前我電大量的在采用這個(gè)板子開課,我們的《微嵌》和后續(xù)的挑戰(zhàn)性課程都用這個(gè)系列的板子。2.這個(gè)板子已經(jīng)被用于支持集創(chuàng)賽的Arm杯,有了一定的群眾基礎(chǔ)。?
我們這個(gè)系列將會(huì)以應(yīng)用為導(dǎo)向,所以大家在看我們這個(gè)系列之前還是有必要來補(bǔ)充一些基礎(chǔ)知識(shí)的。?

首先建議大家閱讀《FPGA原理與結(jié)構(gòu)》[日]天野英晴主編, 趙謙 譯
介紹FPGA的基本硬件結(jié)構(gòu)和可編程的原理,理解清楚這些以后才更更好的理解如何對(duì)FPGA進(jìn)行應(yīng)用開發(fā)。?

其次大家可以閱讀由我校盧友亮老師編寫的《Xilinx FPGA原理與實(shí)踐—基于Vivado和Verilog HDL》。這本書使用的是和我們同系列的FPGA開發(fā)板。雖然型號(hào)上有一定的差距,但是基本操作方法可以比較方便的借鑒。
?最后的最后,要給我的導(dǎo)師打個(gè)廣告。新一屆的保送又要開始了,如果有對(duì)微處理器、片上系統(tǒng)感興趣的同學(xué)可以查看這個(gè)網(wǎng)頁聯(lián)系我的導(dǎo)師:http://faculty.uestc.edu.cn/huangletian/zh_CN/index.htm?
我其實(shí)我不太想告訴你們的是——我現(xiàn)在有點(diǎn)想當(dāng)師兄了,有個(gè)師弟能幫著干活不香嗎?
?