5個步驟帶你入門FPGA設(shè)計流程
本文轉(zhuǎn)載自微信公眾號「大數(shù)據(jù)DT」,作者汪文祥 邢金璋。轉(zhuǎn)載本文請聯(lián)系大數(shù)據(jù)DT公眾號。
FPGA是一種特殊的集成電路,這意味著它首先是一種集成電路?,F(xiàn)在的集成電路絕大多數(shù)都是晶體管集成電路,大家日常接觸最多的是CMOS晶體管集成電路。
晶體管集成電路是什么?通俗來說,就是用金屬導(dǎo)線把許許多多由晶體管構(gòu)成的邏輯門、存儲單元連接成一個電路,具備一定的邏輯功能。
不過,各位讀者設(shè)計數(shù)字邏輯電路時,是否進行過用導(dǎo)線連接晶體管的實驗?顯然沒有。大家一般是用一種硬件描述語言(比如VerilogHDL)寫寫代碼,然后運行綜合軟件(比如Vivado),電路就設(shè)計出來了。
這一流程并不是各類課程實驗中所獨有的,它其實與現(xiàn)在工業(yè)界常見的ASIC設(shè)計流程是一致的。FPGA的設(shè)計流程一般有5個步驟:
- 電路設(shè)計。
- 代碼編寫。
- 功能仿真。
- 綜合實現(xiàn)。
- 上板調(diào)試。
01 電路設(shè)計
首先,需要根據(jù)需求規(guī)格制定電路設(shè)計方案。例如,需求是設(shè)計一個MIPS CPU,我們要把這個需求一步步分解、細(xì)化,得到一個能夠滿足需求的電路設(shè)計方案。
我們要決定分成幾個流水級,這里放幾個觸發(fā)器,那里放幾個運算器,它們之間怎么連接,整個電路的狀態(tài)轉(zhuǎn)換行為是怎樣的,等等。
通常,我們將電路設(shè)計細(xì)化到寄存器傳輸級(Register Transfer Level,RTL)就可以了,無須精確到邏輯門級別或是晶體管級別。
02 代碼編寫
代碼編寫階段的工作是把第1步中完成的電路設(shè)計方案用硬件描述語言(Hardware Description Language,HDL)表述出來,成為一種EDA工具能夠看得懂的形式。
03 功能仿真
功能仿真階段的工作是對第2步中用HDL語言描述出來的設(shè)計進行功能仿真驗證。所謂功能仿真驗證,就是通過軟件仿真模擬的方式查看電路的邏輯功能行為是否符合最初的設(shè)計需求。
通常我們給電路輸入指定的激勵,觀察電路輸出是否符合預(yù)期,如果不符合則表明電路邏輯功能有錯誤。這種錯誤要么是因為第1步的電路設(shè)計就有錯誤,要么是第2步編寫的代碼不符合電路設(shè)計。
發(fā)現(xiàn)功能錯誤后需要返回前面相應(yīng)的步驟進行修正,然后再按照流程一步步推進。如此不斷迭代,直到不再發(fā)現(xiàn)錯誤,就可以進入下一階段了。
需要指出的是,由于我們對電路是在RTL級建模,因此功能仿真階段不考慮電路的延遲。
04 綜合實現(xiàn)
綜合實現(xiàn)階段完成從HDL代碼到真實芯片電路的轉(zhuǎn)換過程。這個過程類似于編譯器把高級語言轉(zhuǎn)換成目標(biāo)機器的二進制代碼的過程。
這個階段分為綜合和實現(xiàn)兩個子階段。
- 綜合階段將HDL描述的設(shè)計編譯為由基本邏輯單元連接而成的邏輯網(wǎng)表,不過此時的網(wǎng)表還不是最終的門級電路網(wǎng)表。
- 實現(xiàn)階段才會將綜合出的邏輯網(wǎng)表映射為FPGA中的具體電路,即將邏輯網(wǎng)表中的基本邏輯單元映射到FPGA芯片內(nèi)部固有的硬件邏輯模塊上(稱為“布局”)。隨后,基于布局的拓?fù)?,利用FPGA芯片內(nèi)部的連線資源,將各個映射后的邏輯模塊連接起來(稱為“布線”)。
如果整個綜合實現(xiàn)過程沒有發(fā)生異常,EDA工具將生成一個比特流(Bitstream)文件。通俗來說,這個比特流文件描述的就是最終的電路,但這個文件只有FPGA芯片能讀得懂。
05 上板調(diào)試
俗話說:“是騾子是馬拉出來遛遛”。不管功能仿真得多正確,最終還是要看實際電路能否正常工作。
在上板調(diào)試階段,首先要將綜合實現(xiàn)階段生成的比特流文件下載到FPGA芯片中,隨后運行電路觀察其工作是否正常,如果發(fā)生問題就要調(diào)試、定位出錯的原因。
圖片
小結(jié)一下,上面介紹的FPGA一般設(shè)計流程給出了總的脈絡(luò),以便讀者先建立一個正確的整體概念。FPGA設(shè)計流程中還包含很多細(xì)節(jié),可參考《CPU設(shè)計實戰(zhàn)》一書。
關(guān)于作者:汪文祥,工學(xué)博士,龍芯中科技術(shù)股份有限公司首席工程師,中國科學(xué)院大學(xué)崗位教授。主要研究方向為處理器體系結(jié)構(gòu)設(shè)計、處理器驗證及計算機系統(tǒng)性能分析優(yōu)化等,參與了多項國家“核高基”、863 和 973 項目,在國內(nèi)外各種期刊會議發(fā)表文章十余篇,申請專利數(shù)十項,授權(quán)專利十余項。
邢金璋,碩士畢業(yè)于中國科學(xué)院計算技術(shù)研究所,2015年加入龍芯中科技術(shù)股份有限公司,從事處理器核結(jié)構(gòu)設(shè)計工作,是龍芯小、中系列處理器核演進版本的主要結(jié)構(gòu)設(shè)計者之一。近年來,積極參與“龍芯杯”全國大學(xué)生計算機系統(tǒng)能力培養(yǎng)大賽的技術(shù)支持、培訓(xùn)等工作。
本文摘編自《CPU設(shè)計實戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。