代碼規(guī)范的文檔,就是一份設(shè)計工程師的血淚史。
命名規(guī)范
命名規(guī)范包括模塊命名規(guī)范和代碼命名規(guī)范,代碼命名需要有確定的含義,提高代碼可讀性和可維護(hù)性。模塊名命名規(guī)范處理好認(rèn),一眼就能把看出你是哪個IP里面的一個子模塊之外,更重要的一個原因是防止兩個module重名 ,比如你把模塊起名叫,shift_reg_dly_module,但是整個soc中可能會有其他IP也叫這個module名,這樣同名不同工的文件,會影響集成級的工作。
所以代碼規(guī)范module命名這樣,子系統(tǒng)_子模塊_function_module。例如ddr_shift_reg_dly_module。避免模塊名重名。
綜合自動插時鐘門控
并不是所有的寄存器都需要帶復(fù)位,這樣規(guī)范顛覆初入行的朋友認(rèn)知。有研究表明,帶復(fù)位的寄存器和不帶復(fù)位的寄存器相比,面積會相差10%。但是這樣也有一個原則,就是控制寄存器必須帶復(fù)位,數(shù)據(jù)寄存器可以不復(fù)位,但是不能用去做條件。
計數(shù)器,必須有使能端和清零端,不允許裸奔
always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin o_cnt[7:0] <= 8’d0; end else if(cnt_clr == 1’b1)begin o_cnt[7:0] <= 8’d0; end else if (cnt_en == 1’b1)begin o_cnt[7:0] <= o_cnt[7:0] + 1'b1; end end
數(shù)據(jù)寄存器帶使能打拍鎖存使用
always @(posedge clk)begin if(data_vld) dout[63:0] <= din; end
這種寫法綜合自動插時鐘門控,而且不帶復(fù)位。注意不能裸奔。
always @(posedge clk)begin dout[63:0] <= din; end
這樣寫就GG了
優(yōu)先使用spram
有一種代碼規(guī)范是要求必須使用spram,single port ram。即使有同時讀寫的需求,也自己做邏輯,將讀寫分開做。強(qiáng)烈這么要求的原因是,有研究數(shù)據(jù)表明,在某工藝下,spram比dpram的面積基本會小30%。
30%的memory收益,這個收益還是很猛的。
memory規(guī)范操作
Memory必須先寫后讀,讀寫使能默認(rèn)復(fù)位值必須是無效值。不用的時候不允許讀,否則會出現(xiàn)上電后芯片的memory一直掃描讀寫,徒增功耗。
Memory的數(shù)據(jù)讀出必須鎖存后使用。
memory和logic分開
Memory不散在邏輯中,將memory的讀寫控制端口都從IP的頂層伸出統(tǒng)一管理,為的是mem方便統(tǒng)一替換處理。而且后端實(shí)現(xiàn)上memory放邊擺開。
方便不同工藝的適配,比如你要換一個工藝,那你的memory要全部替換,就要在logic里面找,假如有些工藝十分惡心,要加個寄存器或者輸出到寄存器上,你就要一層層穿線到頂層寄存器模塊。作為IP供應(yīng)商也應(yīng)該做好memory的wrapper提供給客戶,方便客戶替換。
后端實(shí)現(xiàn)memory放邊擺開,logic要也考慮到memory的走線,所以對于memory的入口和出口都要是寄存器。不然PR出了問題,該做的還是得做。
模塊必須寄存器入寄存器出
在后端布局布線過程中,邏輯少的模塊之間還好,但harden之間有邏輯交互,兩個harden的距離并不一定擺的位置靠近。如果不是寄存器入寄存器出,會導(dǎo)致兩個harden之間交互的信號時序差。造成工作反復(fù)。
自研IP不建議用`define來定義參數(shù)
要求用parameter,define使用要謹(jǐn)慎,因?yàn)閐efine是全局定義的,如果再使用過程中不當(dāng),沒有undef掉,可能會影響其他IP的同名define值。正確使用沒問題,無對錯,遵守公司代碼規(guī)范即可 。
審核編輯:劉清
-
計數(shù)器
+關(guān)注
關(guān)注
32文章
2284瀏覽量
96038 -
數(shù)據(jù)寄存器
+關(guān)注
關(guān)注
0文章
33瀏覽量
7968 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8484
原文標(biāo)題:那些年我不理解的Verilog代碼規(guī)范,現(xiàn)在終于悟了
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
verilog 代碼規(guī)范
FPGA實(shí)戰(zhàn)演練邏輯篇40:代碼書寫規(guī)范
關(guān)于Android命名規(guī)范
Verilog HDL代碼書寫規(guī)范
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載34:Verilog代碼書寫規(guī)范
關(guān)于Android命名規(guī)范
FPGA的代碼書寫規(guī)范
Verilog代碼書寫規(guī)范
簡單介紹一下-Verilog-AMS的基礎(chǔ)知識

評論