大家好!又到了每日學(xué)習(xí)的時(shí)間了,今天我們聊一聊FPGA做開(kāi)發(fā)的時(shí)候,有哪些設(shè)計(jì)規(guī)范,從文檔到工程建立等,聊一聊也許你會(huì)學(xué)到很多東西,少走很多彎路哦!
在團(tuán)隊(duì)項(xiàng)目開(kāi)發(fā)中,為了使開(kāi)發(fā)的高效性、一致性、正確性,團(tuán)隊(duì)?wèi)?yīng)當(dāng)要有一個(gè)規(guī)范的設(shè)計(jì)流程。按照規(guī)范來(lái)完成項(xiàng)目的設(shè)計(jì)開(kāi)發(fā)工作,歸類(lèi)清晰明了的工程文件夾級(jí)別;項(xiàng)目應(yīng)擁有良好風(fēng)格和完整的文檔,如設(shè)計(jì)思路與調(diào)試記錄及器件選型等;代碼書(shū)寫(xiě)高效,即統(tǒng)一的書(shū)寫(xiě)規(guī)范,文件頭包含的信息完整,無(wú)論自己還是團(tuán)隊(duì)他人閱讀便一目了然。
一、文檔命名:
清晰的文檔命名能夠讓我們思路非常的清晰,所以FPGA工程文件夾的目錄要求層次鮮明,歸類(lèi)清晰。一個(gè)工程必須要有一個(gè)嚴(yán)整的框架結(jié)構(gòu),用來(lái)存放相關(guān)的文檔、設(shè)計(jì),不僅方便自己查看,也提高了項(xiàng)目的團(tuán)隊(duì)工作效率。
下面我們來(lái)舉例說(shuō)明:
一級(jí)文件夾為工程名
二級(jí)文件夾多個(gè):
用以存放源文件
用以存放Testbench文件
用來(lái)存放設(shè)計(jì)思路相關(guān)類(lèi)的文件
用來(lái)存放IP 核的文件
等等…
二、設(shè)計(jì)文檔化:
將自己對(duì)設(shè)計(jì)的思路和調(diào)試記錄在文檔中,有利于以后對(duì)模塊功能的添加和維護(hù),并且在項(xiàng)目聯(lián)調(diào)時(shí)方便項(xiàng)目組其他人員讀代碼。也方便不同廠家的FPGA之間移植,以及FPGA到ASIC的移植。如下圖就是設(shè)計(jì)文檔化的舉例說(shuō)明,文檔介紹清晰,功能分析明確,有利于以后對(duì)模塊功能的添加和維護(hù)。
設(shè)計(jì)思路:按照項(xiàng)目的要求,自頂向下的分成若干模塊,分別編寫(xiě)功能。頂層盡量只做行為描述,邏輯描述在底層編寫(xiě)。模塊的編寫(xiě)要有硬件電路思維方式,每一個(gè)模塊的設(shè)計(jì)都應(yīng)考慮是否存在該硬件電路,盡量采用同步設(shè)計(jì)。
三、編程風(fēng)格:
每個(gè)module應(yīng)存在于單獨(dú)的源文件中,源文件名應(yīng)與其所包含的模塊名相同。每個(gè)設(shè)計(jì)都應(yīng)該有一個(gè)完善的文件頭,包含公司名稱(chēng)、設(shè)計(jì)者、設(shè)計(jì)時(shí)間、文件名、所屬項(xiàng)目、模塊名稱(chēng)及功能、修改記錄及版本信息等內(nèi)容。代碼中的標(biāo)識(shí)符采用傳統(tǒng)C語(yǔ)言的命名方法,在單詞之間用下劃線分開(kāi),采用有意義,能反應(yīng)對(duì)象特征、作用和性質(zhì)的單詞命名標(biāo)識(shí)符,以此來(lái)增強(qiáng)程序的可讀性。為避免標(biāo)識(shí)符過(guò)于冗長(zhǎng),較長(zhǎng)的單詞可以適當(dāng)?shù)目s寫(xiě)。
四、代碼規(guī)范:
低電平有效的信號(hào),后綴名要用“_n”,比如低電平有效的復(fù)位信號(hào)“rst_n”
模塊名和信號(hào)名統(tǒng)一小寫(xiě)
變量名要小寫(xiě),如wire、reg、input、output等定義的
變量命名應(yīng)按照變量的功能用英文簡(jiǎn)潔表示出來(lái)“xxx_xxx_xxx”,避免過(guò)長(zhǎng)
采用大寫(xiě)字母定義常量參數(shù),參數(shù)名小于20個(gè)字母,如parameter TIME=20
時(shí)鐘信號(hào)應(yīng)前綴“clk”,復(fù)位信號(hào)應(yīng)前綴“rst”
對(duì)于頂層模塊的輸出信號(hào)盡量被寄存
三態(tài)邏輯避免在子模塊使用,可以在頂層模塊使用
到其它模塊的接口信號(hào)按:輸入、(雙向)、輸出的順序定義端口
一個(gè)模塊至少要有一個(gè)輸入、輸出,避免書(shū)寫(xiě)空模塊
時(shí)鐘事件的表達(dá)式用“posedge”或“negedge”的形式
If語(yǔ)句嵌套不能太多
建議不要使用include語(yǔ)句
建議每個(gè)模塊添加timescale
代碼中給出必要的注釋
每個(gè)文件有個(gè)一頭文件
每個(gè)文件只包含一個(gè)模塊
模塊名和文件名保持一致
異步復(fù)位,用if(xxx==1’b1) 或 if(xxx==1’b0)
同步時(shí)序邏輯的always block中有且只有一個(gè)時(shí)鐘信號(hào),并且在同一個(gè)沿動(dòng)作
采用同步設(shè)計(jì),避免使用異步邏輯
一般不要將時(shí)鐘信號(hào)作為數(shù)據(jù)信號(hào)的輸入
不要在時(shí)鐘路徑上添加任何buffer
在頂層模塊中,時(shí)鐘信號(hào)必須可見(jiàn)
不要采用向量定義的方式定義一組時(shí)鐘信號(hào)
不要在模塊內(nèi)部生成時(shí)鐘信號(hào),使用pll產(chǎn)生
盡量不使用任務(wù)
不使用事件變量
不使用系統(tǒng)函數(shù)
不使用disable語(yǔ)句
盡量不使用forever、repeat、while等循環(huán)語(yǔ)句
不使用不可綜合的運(yùn)算符
在一個(gè)always語(yǔ)句中有且只能有一個(gè)事件列表
移位變量必須是一個(gè)常數(shù)
時(shí)序邏輯語(yǔ)塊中統(tǒng)一使用非阻塞型賦值
組合邏輯語(yǔ)塊中使用阻塞型賦值
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618592
發(fā)布評(píng)論請(qǐng)先 登錄
簡(jiǎn)談FPGA的上電復(fù)位

簡(jiǎn)談FPGA研發(fā)設(shè)計(jì)相關(guān)規(guī)范(很實(shí)用)
簡(jiǎn)談FPGA研發(fā)設(shè)計(jì)相關(guān)規(guī)范(很實(shí)用)
國(guó)內(nèi)知名企業(yè)招聘FPGA研發(fā)工程師
FPGA至簡(jiǎn)設(shè)計(jì)法為什么這么簡(jiǎn)單
FPGA 研發(fā)設(shè)計(jì)相關(guān) 規(guī)范(企業(yè)中很實(shí)用)
明德?lián)P獨(dú)創(chuàng)“至簡(jiǎn)設(shè)計(jì)法”介紹
簡(jiǎn)談FPGA研發(fā)設(shè)計(jì)相關(guān)規(guī)范(企業(yè)中初入職場(chǎng)很實(shí)用)
明德?lián)P至簡(jiǎn)設(shè)計(jì)原理資料包(官方原版)
簡(jiǎn)談FPGA研發(fā)設(shè)計(jì)相關(guān)規(guī)范(企業(yè)中初入職場(chǎng)很實(shí)用)
簡(jiǎn)談基于FPGA的千兆以太網(wǎng)設(shè)計(jì)
簡(jiǎn)談FPGA的設(shè)計(jì)規(guī)范
FPGA和USB3.0通信-FX3硬件設(shè)計(jì)簡(jiǎn)談

評(píng)論