作者:汪文祥 邢金璋 來源:華章科技 FPGA是一種特殊的集成電路,這意味著它首先是一種集成電路。現(xiàn)在的集成電路絕大多數(shù)都是晶體管集成電路,大家日常接觸最多的是CMOS晶體管集成電路。 晶體管集成電路是什么?通俗來說,就是用金屬導(dǎo)線把許許多多由晶體管構(gòu)成的邏輯門、存儲單元連接成一個電路,具備一定的邏輯功能。 不過,各位讀者設(shè)計數(shù)字邏輯電路時,是否進(jìn)行過用導(dǎo)線連接晶體管的實驗?顯然沒有。大家一般是用一種硬件描述語言(比如VerilogHDL)寫寫代碼,然后運行綜合軟件(比如Vivado),電路就設(shè)計出來了。 這一流程并不是各類課程實驗中所獨有的,它其實與現(xiàn)在工業(yè)界常見的ASIC設(shè)計流程是一致的。FPGA的設(shè)計流程一般有5個步驟:
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è)計進(jìn)行功能仿真驗證。所謂功能仿真驗證,就是通過軟件仿真模擬的方式查看電路的邏輯功能行為是否符合最初的設(shè)計需求。 通常我們給電路輸入指定的激勵,觀察電路輸出是否符合預(yù)期,如果不符合則表明電路邏輯功能有錯誤。這種錯誤要么是因為第1步的電路設(shè)計就有錯誤,要么是第2步編寫的代碼不符合電路設(shè)計。 發(fā)現(xiàn)功能錯誤后需要返回前面相應(yīng)的步驟進(jìn)行修正,然后再按照流程一步步推進(jìn)。如此不斷迭代,直到不再發(fā)現(xiàn)錯誤,就可以進(jìn)入下一階段了。 需要指出的是,由于我們對電路是在RTL級建模,因此功能仿真階段不考慮電路的延遲。 04 綜合實現(xiàn)綜合實現(xiàn)階段完成從HDL代碼到真實芯片電路的轉(zhuǎn)換過程。這個過程類似于編譯器把高級語言轉(zhuǎn)換成目標(biāo)機器的二進(jìn)制代碼的過程。 這個階段分為綜合和實現(xiàn)兩個子階段。
如果整個綜合實現(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)》一書。
本文摘編自《CPU設(shè)計實戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。 延伸閱讀《CPU設(shè)計實戰(zhàn)》 推薦語:深入剖析CPU設(shè)計與開發(fā)的關(guān)鍵環(huán)節(jié);從零開始逐步構(gòu)建一個功能完善的CPU;全面培養(yǎng)CPU設(shè)計的工程化思維與實戰(zhàn)能力。 |
19款電子扎帶
電路板識別電子標(biāo)簽