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