本次分享華為公司的《大規(guī)模邏輯設(shè)計(jì)指導(dǎo)書》中的內(nèi)容。
1 目的
本規(guī)范的目的是提高書寫代碼的可讀性 可修改性 可重用性 優(yōu)化代碼綜合和仿真的結(jié) 果 指導(dǎo)設(shè)計(jì)工程師使用VerilogHDL規(guī)范代碼和優(yōu)化電路 規(guī)范化公司的ASIC設(shè)計(jì)輸入從而做到- 邏輯功能正確
- 可快速仿真
- 綜合結(jié)果最優(yōu)( 如果是hardware model)
- 可讀性較好
2 范圍
本規(guī)范涉及Verilog HDL編碼風(fēng)格 編碼中應(yīng)注意的問題 Testbench的編碼等本規(guī)范適用于Verilog model的任何一級 RTL ehavioral, gate_level) 也適用于出于仿真綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊.3 定義
- Verilog HDL:Verilog 硬件描述語言
- FSM:有限狀態(tài)機(jī)
- 偽路徑:靜態(tài)時序分析 STA 認(rèn)為是時序失敗 而設(shè)計(jì)者認(rèn)為是正確的路徑。
4 引用標(biāo)準(zhǔn)和參考資料
下列標(biāo)準(zhǔn)包含的條文 通過在本標(biāo)準(zhǔn)中引用而構(gòu)成本標(biāo)準(zhǔn)的條文 在標(biāo)準(zhǔn)出版時 所示版本均為有效 所有標(biāo)準(zhǔn)都會被修訂 使用本標(biāo)準(zhǔn)的各方應(yīng)探討 使用下列標(biāo)準(zhǔn)最新版本的可能性。5規(guī)范內(nèi)容
5.1 Verilog 編碼風(fēng)格
本章節(jié)中提到的Verilog編碼規(guī)則和建議適應(yīng)于 Verilog model的任何一級 RTL behavioral,gate_level) 也適用于出于仿真 綜合或二者結(jié)合的目的而設(shè)計(jì)的模塊5.1.1
選擇有意義的信號和變量名 對設(shè)計(jì)是十分重要的 命名包含信號或變量諸如出處 有效狀態(tài)等基本含義 下面給出一些命名的規(guī)則- 用有意義而有效的名字 有效的命名有時并不是要求將功能描述出來 如:
-
For( I = 0; I < 1024; I = I + 1)
-
Mem[I] <= #1 32’b0;
-
用連貫的縮寫
長的名字對書寫和記憶會帶來不便 甚至帶來錯誤 采用縮寫時應(yīng)注意同一信號在模塊中的一致性 縮寫的例子如下Addr :addressPntr :pointerClk :clockRst :reset -
用最右邊的字符下劃線表示低電平有效 高電平有效的信號不得以下劃線表示 短暫 的引擎信號建議采用高有效
如 Rst_ Trdy, Irdy Idsel. -
大小寫原則
名字一般首字符大寫 其余小寫 但parameter, integer 定義的數(shù)值名可全部用大寫兩個詞之間要用下劃線連接。如 Packetaddr, Datain, Memwr Memce_ -
全局信號名字中應(yīng)包含信號來源的一些信息如 D_addr[7:2] 這里的 D 指明了地址是解碼模塊(Decoder module)中的地址
-
同一信號在不同層次應(yīng)保持一致性
-
自己定義的常數(shù) 類型等用大寫標(biāo)識
如 parameter CYCLE=100 -
避免使用保留字
如 in out x z等不能夠做為變量 端口或模塊名 -
添加有意義的后綴 使信號名更加明確 常用的后綴如下:
5.1.2 Modules
-
頂層模塊應(yīng)只是內(nèi)部模塊間的互連
Verilog設(shè)計(jì)一般都是層次型的設(shè)計(jì) 也就是在設(shè)計(jì)中會出現(xiàn)一個或多個模塊 模塊間的調(diào)用在所難免 可把設(shè)計(jì)比喻成樹 被調(diào)用的模塊就是樹葉 沒被調(diào)用的模塊就是樹根 那么在這個樹根模塊中 除了內(nèi)部的互連和模塊的調(diào)用外 盡量避免再做邏輯 如不能再出現(xiàn)對reg變量賦值等 這樣做的目的是為了更有效的綜合 因?yàn)樵陧攲幽K中出現(xiàn)中間邏輯 Synopsys 的design compiler 就不能把子模塊中的邏輯綜合到最優(yōu)。 -
每一個模塊應(yīng)在開始處注明文件名 功能描述 引用模塊 設(shè)計(jì)者 設(shè)計(jì)時間及版權(quán)信息等,如:
-
Filename﹕ RX_MUX.v
-
Author﹕
-
Description﹕
-
Calledby﹕Topmodule
-
RevisionHistory﹕99-08-01
-
Revision1.0
-
Email﹕ M@sz.huawei.com.cn
-
Company﹕ HuaweiTechnology.Inc
-
Copyright(c) 1999, HuaweiTechnologyInc, All right reserved
-
不要對Inpu t進(jìn)行驅(qū)動, 在module 內(nèi)不要存在沒有驅(qū)動的信號 更不能在模塊端口中出現(xiàn)沒有驅(qū)動的輸出信號,避免在仿真或綜合時產(chǎn)生warning 干擾錯誤定位。
-
每行應(yīng)限制在80個字符以內(nèi) 以保持代碼的清晰 美觀和層次感 一條語句占用一行 如果較長 超出80個字符 則要換行
-
電路中調(diào)用的 module名 用 Uxx 標(biāo) 示 向量大小表 示要清晰 采用基于名字(namebased )的調(diào)用而非基于順序的(orderbased),如:
-
InstanceUInstance2(
-
.DataOut(DOUT ),
-
.DataIn(DIN ),
-
.Cs_(Cs_)
-
);
-
用一個時鐘的上沿或下沿采樣信號, 不能一會兒用上沿 ,一會兒用下沿 ,如果既要用上沿又要用下沿 ,則應(yīng)分成兩個模塊設(shè)計(jì)。建議在頂層模塊中對Clock做一非門,在層次模塊中如果要用時鐘下沿就可以用非門產(chǎn)生的Posedge Clk_, 這樣的好處是在整個設(shè)計(jì)中采用同一種時鐘沿觸發(fā), 有利于綜合。基于時鐘的綜合策略
-
在模塊中增加注釋
對信號 參量 引腳 模塊 函數(shù)及進(jìn)程等加以說明 便于閱讀與維護(hù) -
Module 名要用大寫標(biāo)示 且應(yīng)與文件名保持一致, 如
-
Module DFF_ASYNC_RST(
-
Reset,
-
Clk,
-
Data,
-
Qout
-
);
-
嚴(yán)格芯片級模塊的劃分
只有頂層包括IO引腳(pads) 中間層是時鐘產(chǎn)生模塊 JTAG 芯片的內(nèi)核(CORE)這樣便于對每個模塊加以約束仿真 對時鐘也可以仔細(xì)仿真 -
模塊輸出寄存器化
對所有模塊的輸出加以寄存 如圖1 使得輸出的驅(qū)動強(qiáng)度和輸入的延遲可以預(yù)測 從而使得模塊的綜合過程更簡單 -
輸出驅(qū)動的強(qiáng)度都等于平均的觸發(fā)器驅(qū)動強(qiáng)度
-
將關(guān)鍵路徑邏輯和非關(guān)鍵路徑邏輯放在不同模塊
- 將相關(guān)的組合邏輯放在同一模塊 有助于DC對其進(jìn)行優(yōu)化 因?yàn)镈C通常不能越過模塊的邊界來優(yōu)化邏輯。
-
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112321 -
HDL
+關(guān)注
關(guān)注
8文章
330瀏覽量
48077 -
編碼
+關(guān)注
關(guān)注
6文章
969瀏覽量
55798 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70800
原文標(biāo)題:【華為】verilog語言編寫規(guī)范(一)
文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
System Verilog常見問題及語言參考手冊規(guī)范
System Verilog問題和語言參考手冊規(guī)范
討論Verilog語言的綜合問題
Verilog硬件描述語言參考手冊免費(fèi)下載

評論