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