手把手教你學FPGA設計基于大道至簡的至簡設計法
序隨著微電子技術(shù)的發(fā)展,可編程門陣列(FPGA)技術(shù)已經(jīng)成為信息產(chǎn)業(yè)最熱門的技術(shù)之一,其應用范圍遍及電子、通信、自動化、醫(yī)療、軍事和航空航天等多個熱門領(lǐng)域。在數(shù)字集成電路設計領(lǐng)域,前端驗證工作通常依托FPGA,并由那些精通硬件構(gòu)架的FPGA系統(tǒng)工程師來完成。因此,FPGA技術(shù)的設計和開發(fā)已成為當前發(fā)展迅速的朝陽行業(yè)之一。作者曾在華為海思、展訊通信等集成電路設計企業(yè)參與了FPGA大型項目的開發(fā)設計,近年來又在明德?lián)P科技教育公司從事FPGA的教學培訓,從而有機會深入研究和采用多種教學方法進行試驗,以便把那些構(gòu)成FPGA設計基礎的知識模塊和工具平臺,變成FPGA學習者能夠?qū)嶋H運用的方法,而更重要的是能夠幫助學習者消化核心功能及其設計流程。于是,本書便應運而生,旨在為FPGA學習者提供一種FPGA的至簡設計方法。與一些將FPGA設計的理論知識和軟件工具作為敘述重點的教程不同,本書的重點不在于介紹FPGA設計是什么,而側(cè)重于引導學習者怎么做。經(jīng)過這樣設計后的內(nèi)容可以引起學習者濃厚的興趣,并使學習者在短時間內(nèi)快速掌握FPGA設計方法,正如諾貝爾文學獎獲得者、法國作家AnatoleFrance的精辟格言:教學的全部藝術(shù)就是喚醒年輕心靈的天然好奇心。
黃君凱
2016年10月于廣州暨南園
前言
隨著我國工業(yè)智能化的發(fā)展,工業(yè)企業(yè)的個性化需求劇增。相應的,對FPGA/IC行業(yè)人才的需求,特別是高端人才的需求也隨之劇增。然而,目前國內(nèi)的FPGA/IC教育相對落后:高等院校缺乏項目經(jīng)驗豐富的教師;現(xiàn)有教材陳舊,無法跟上最新技術(shù)的發(fā)展;學習資料缺乏,大都重視軟件操作示范,不重視設計理念傳授等。這些客觀因素使學生對FPGA/IC望而生畏,即使有大量學生立志學好FPGA/IC設計,但多數(shù)不得要領(lǐng),最終放棄學習。由于失去了群眾基礎,導致國內(nèi)缺乏高素質(zhì)的FPGA人才,從而對我國工業(yè)智能化的發(fā)展產(chǎn)生了一定的影響。為了擴大FPGA/IC設計的群眾基礎,降低FPGA/IC設計的學習門檻,明德?lián)P科技教育公司(簡稱明德?lián)P)結(jié)合培訓班、企業(yè)內(nèi)訓,以及多年國內(nèi)頂尖企業(yè)的工作經(jīng)驗,研發(fā)出一套FPGA/IC設計流程至簡設計法。至簡設計法是明德?lián)P豐富項目經(jīng)驗的結(jié)晶,它將高級的設計技巧轉(zhuǎn)化成幾條規(guī)則,掌握了這些規(guī)則就相當于擁有多年的經(jīng)驗。至簡設計法流程中的每一步都簡單易操作,容易上手,便于掌握。掌握至簡設計法,可以實現(xiàn)0仿真、0調(diào)試、一次成功的設計,極大地提高了工作效率。明德?lián)P致力于打造最簡單、最實用、最高效的FPGA/IC設計法,不遺余力地為普及FPGA/IC設計,提升客戶競爭力,提高我國該行業(yè)整體的設計能力做貢獻。很多同學在剛開始學習FPGA/IC設計時都會走彎路,下面是兩位學員的學習經(jīng)歷與心得。學員一:①買一本書,花大量的時間學習語法;②到網(wǎng)上搜一些資料,類似大全、玩轉(zhuǎn)之類的速成之法;③買一個開發(fā)板,看代碼、下載例程看現(xiàn)象。學員一的情況具有普遍性,作為一個剛接觸FPGA的初學者,這似乎是必經(jīng)之路,很多學員在來明德?lián)P學習之前就以這樣的方式學了大約半年的時間。當然,這樣的學習方法不是說學不好,而是很難學好,或者需花費很長的時間。以看書學習為例,可以說書是根源,學習任何知識都離不開書,書作為一個知識體系,要求全面、系統(tǒng),但作為初學者就沒有必要學得那么全面、系統(tǒng)了。很多學員在學Verilog時,就是拿一本書,仔仔細細地看,花費了不少時間,但效果卻不理想。我們都知道,Verilog的很多語法是不能綜合的,而這些語法也沒有實際的電路與之對應,當然在具體的邏輯設計時也是不能用的,但書上并不會很明確地指出。再舉一個例子,也是很多人都犯過的一個錯誤:以普通信號作為always的敏感信號列表。當我們這樣寫的時候,根本不會意識到這是錯誤的,因為書上就是這么教的。有經(jīng)驗的工程師都知道,對于Verilog語法,書上是一個全集,很多用法作為知識點是對的,但在實際應用中就是錯誤的。因此,太依賴書本的學習,反而會學得全而不好,還浪費時間。學員二:一開學我立馬就買了當時很多人推薦的某一品牌的一款開發(fā)板,但卻不知道怎么學,上來就死摳代碼,感覺好費勁啊!一方面我當時的基礎確實很差,本科時候就沒寫過任何代碼;另一方面看別人寫的代碼本來就費解,而賣家的視頻也是蜻蜓點水一帶而過,視頻上提到的問題不是我的問題,我想解決的問題視頻中又沒說,反正我的困惑與賣家的視頻就不在一個頻道上,可能我的問題人家壓根兒就覺得不是問題,因為我當時就是不折不扣的零基礎。就這樣,我混混沌沌地看了好多天代碼,最終還是云里霧里。當時有人跟我講過要去仿真看波形,而不是看代碼,但是裝什么軟件,怎么裝,軟件怎么用,我一點都不知道。確實蠻痛苦的。以上兩位同學遇到的問題,相信大多數(shù)初學者也遇到過,也很受困擾。明德?lián)P在培訓學員的過程中發(fā)現(xiàn)了一個普遍存在的問題:不同的人,代碼風格往往也是不一樣的。而一套優(yōu)秀的代碼規(guī)范,對團隊、企業(yè)有非常強的指導意義,可以給他人提供一個可讀性強、便于維護糾錯的環(huán)境,這可以大大提高團隊、企業(yè)的工作效率。而市面上大多數(shù)FPGA教材往往并不重視代碼規(guī)范,大篇幅的軟件使用、語法知識和大量理論知識令初學者望而生畏,其實很多語法在實際工程中并沒有機會用到。另外,很多FPGA書籍都會講一個個獨立的項目如何實現(xiàn),以及針對不同項目的相應設計思路,但卻缺少一套通用的設計方法,這樣同學們最多只能學一個項目會一個項目,而不能舉一反三。也正是因為如此,才有這本書創(chuàng)作的初衷。為了幫助更多的FPGA學習者更好地理解FPGA設計的精髓,提高學習效率,明德?lián)P提出了至簡的設計思想,并創(chuàng)作了這本書。大道至簡與至簡設計法大道至簡出自老子的《道德經(jīng)》:萬物之始,大道至簡,衍化至繁。大道至簡是指大道理(基本原理、方法和規(guī)律)是極其簡單的,簡單到一兩句話就能說明白,把復雜冗繁的表象層層剝離之后就是事物最本質(zhì)的東西。所謂真?zhèn)饕痪湓?假傳萬卷書。一門技術(shù)一門學問,弄得很深奧是因為沒有看穿實質(zhì),就像FPGA的學習,搞得很復雜是因為沒有抓住代碼的關(guān)鍵。1.大道至簡,抓住根本大道理是極其簡單的,簡單到一兩句話就能說明白。事情難就難在簡單,簡單不是敷衍了事,也不是單純幼稚,而是最高級的智慧和成熟睿智的表現(xiàn)。
至簡設計法是明德?lián)P通過多年的教學經(jīng)驗找到的學習FPGA的關(guān)鍵和根本方法。FPGA學習既不能花大量時間在軟件工具/語法上,也不能花精力在獨立的知識點上,而應花費80%的時間在20%的核心功能上。什么是核心功能?至簡設計中一個完整的設計流程就是核心功能。注意,這里說的是設計流程,而非項目流程。市面上的FPGA設計教程大部分講的都是項目流程,即介紹功能新建項目加入設計文件編譯工程配置引腳上板。這些流程都是介紹軟件是怎么用的,而最重要的設計文件是如何設計的,都沒有詳細介紹。至簡設計法的設計流程,講的是實現(xiàn)一個功能的過程,是將功能轉(zhuǎn)化成代碼的過程。不僅簡單的UART/SPI/VAG/IIC/攝像頭采集,甚至復雜的邊緣檢測/SDRAM接口/軟件無線電等,都可以采用這個設計流程將功能轉(zhuǎn)化成代碼。2.大道至簡,衍化至繁大道至簡是一種哲學,無論是做人還是做事它都會給人以指導。在當今這個大千世界中,我們要學會把復雜變成簡單,用智慧創(chuàng)造簡單,在變遷中不斷地升華。至簡設計法是先將復雜的模塊劃分成簡單的模塊,再用模塊設計流程設計出來。FPGA學習的過程,就是不斷地將復雜的模塊,劃分成簡單模塊,再用至簡設計法設計的過程。不斷地重復這個過程,像搭積木一樣一層層地堆砌,最終就能通過簡單的規(guī)則做出復雜的設計。3.大道至簡,凝聚智慧大道至簡,經(jīng)過整合創(chuàng)新,跳出原來的框框,去粗取精,抓住關(guān)鍵和根本,揮動奧卡姆剃刀,剔除無效的、可有可無的、非本質(zhì)的東西,提煉出精華。至簡設計法,看似簡單的幾個規(guī)則,然而總結(jié)歸納出這些規(guī)則,卻需要相當大的智慧:必須要有眾多領(lǐng)域的項目經(jīng)驗,才能獲知各領(lǐng)域的設計需求和要點;必須要有豐富的工作經(jīng)驗,才能擁有高超的設計技巧;必須要有豐富的教學經(jīng)驗,明白學習的難點和重點,明白學生思考的方式,才能將高超的設計技巧轉(zhuǎn)成可學習和操作的流程;必須要有很大的智慧,不斷地歸納和總結(jié),才能將這些流程和步驟變得簡單易用。至簡設計法,是結(jié)合以上要點,經(jīng)過明德?lián)P多年探索的智慧結(jié)晶。在此,我希望與更多FPGA學習者分享,讓更多的人應用此設計方法,在FPGA設計學習和做實際項目中得心應手,為推進國家產(chǎn)業(yè)智能化發(fā)展貢獻綿薄之力。
本書共8章,分為三篇,其中每篇對應的章和具體內(nèi)容介紹如下:第一篇包括第1~4章,主要介紹FPGA設計核心模塊。本書提出把模塊分為三大類型,即計數(shù)器架構(gòu)、狀態(tài)機架構(gòu)及FIFO架構(gòu),并配有項目設計練習。第二篇包括第5、6章,主要介紹模塊的由來模塊劃分。本書總結(jié)了兩大類常見的模塊劃分應用場合,即FPGA內(nèi)部模塊之間的交互和FPGA與外設的交互,并配有實踐練習。第三篇包括第7、8章,主要介紹基于OV7670的圖像采集,以及基于SDRAM的VGA顯示控制器。應用前兩篇提到的三大架構(gòu)及模塊劃分來完成這個工程,進一步深化對前面內(nèi)容的理解。本書特點1.注重設計思路本書重點講項目實現(xiàn)的整體思路,而并非講某一具體項目的實現(xiàn)。2.設計理念本書提出了至簡的設計理念,一次只考慮一個問題。3.優(yōu)秀的代碼風格及規(guī)范本書提供的代碼風格統(tǒng)一,代碼的規(guī)范是資深從業(yè)人員從多年工作經(jīng)驗中總結(jié)、提練,并結(jié)合明德?lián)P就業(yè)培訓班培訓成果所得到的。優(yōu)秀的代碼風格對團隊、企業(yè)都有非常大的指導意義。
4.注重實踐本書選擇以案例的形式進行編寫,所有方法均用例子闡述,并配有豐富的項目實踐練習。5.不羅列知識點堅持項目中遇到什么問題就解決(講解)什么問題,避免羅列知識點,讓FPGA學習者集中精力學習FPGA設計的核心。如何學習本書至簡設計法的目的,是對程序編寫工作中易出現(xiàn)的混亂狀態(tài)進行規(guī)范化,以達到簡便、有序、快捷的效果。本書通過例題引出概念,并詳舉大量實際案例進行分析、對比,幫助讀者理解至簡設計法的設計思想,清晰直觀地學習和掌握該方法。此外,作者對于二八定律在FPGA設計方面的應用有獨到見解:采取權(quán)值階梯模式,即強調(diào)核心功能的學習、鞏固和使用,以及一般功能在實際中邊做邊學的模式,來達到在最短的時間能獨立完成項目的效果。另外,希望讀者在完成項目時,先根據(jù)功能要求自己試著構(gòu)思、編寫代碼,再與給出的思路、代碼相比較,這樣讀者才能深刻理解至簡設計法,并把這套設計思想真正運用到實踐中去。從明德?lián)P就業(yè)培訓班的培訓成果來看,只要耐心學完整套設計思想,就能獨立完成項目設計。設計者拿到一個新項目,知道從哪里下手,且編寫的代碼可綜合,邏輯縝密,在設計過程中對邏輯變化考慮周全,就可在短時間內(nèi)調(diào)試成功并上板實現(xiàn)。本書雖然沒有語法篇,但通篇用到的語法都是比較簡單、常用的,有一定Verilog基礎的讀者讀起來必定毫無障礙,而初學者也不必擔心看不懂,明德?lián)P會推出配套視頻,介紹用到的語法知識點。另外,軟件使用篇也包括在配套視頻中,主要包括QuartusII,Modelsim,Gvim的使用。本書可作為高等院校電子工程類、自動控制類、計算機類等專業(yè)的教材,亦可供FPGA相關(guān)行業(yè)的愛好者和從業(yè)人員自學與參考。感謝參與本書部分內(nèi)容編寫及在編寫過程中提供寶貴建議的黃君凱、崔苗、李國慶和陳澤熹。還要感謝北京航空航天大學出版社的編輯老師們,在他們的大力支持和幫助下本書才得以與廣大讀者見面。由于作者水平有限,難免存在錯誤和遺漏之處,懇請各位讀者批評指正。同時,也歡迎大家就FPGA開發(fā)相關(guān)技術(shù)與作者交流,聯(lián)系郵箱:book@mdyedu.com。配套視頻、開發(fā)板購買地址以及例程源碼和相關(guān)資料下載地址:http://www.mdyedu.com/。潘文明易文兵2016年12月于深圳明德?lián)P科技教育有限公司