VerilogHDL編碼規(guī)范_第1頁
VerilogHDL編碼規(guī)范_第2頁
VerilogHDL編碼規(guī)范_第3頁
VerilogHDL編碼規(guī)范_第4頁
VerilogHDL編碼規(guī)范_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VerilogHDL編碼規(guī)范1 目的為了FPGA、芯片IP核開發(fā)設(shè)計和驗證人員之間更好地進行交流,提高代碼的可讀性,可維護性,特制定本規(guī)范,作為程序編寫的指導(dǎo)文件。本規(guī)范包括強制性規(guī)范和推薦性規(guī)范。2 適用范圍FPGA、芯片IP核邏輯設(shè)計和仿真驗證。編程語言采用Verilog語言。3 相關(guān)規(guī)定1. 本規(guī)范內(nèi)容為邏輯設(shè)計崗位、仿真驗證崗位員工必備基礎(chǔ)知識,新員工入職時必須通過參加相關(guān)培訓(xùn)掌握本規(guī)范。2. 本規(guī)范的掌握、執(zhí)行情況是新員工轉(zhuǎn)正考核的重要內(nèi)容。在新員工見習(xí)階段,其內(nèi)部導(dǎo)師每月須抽查代碼并將審核結(jié)果填入代碼審查表。3. 項目經(jīng)理應(yīng)不定期抽查項目成員的代碼,并將編程規(guī)范執(zhí)行情況填入代碼審查

2、表作為項目成員考核依據(jù)。4. 本規(guī)范為內(nèi)部職稱晉升考試內(nèi)容。目錄1. 嚴格級別定義52. 工程規(guī)則62.1. 工程規(guī)則表62.2. 工程規(guī)則詳細說明63. 命名規(guī)則73.1. 命名規(guī)則表73.2. 命名規(guī)則詳細說明74. 文件頭規(guī)則114.1. 文件頭規(guī)則表114.2. 文件頭示例124.3. 結(jié)構(gòu)頭示例145. 注釋規(guī)則155.1. 注釋規(guī)則表155.2. 注釋規(guī)則詳細說明156. 編碼規(guī)則176.1. 編碼規(guī)則表176.2. 編碼規(guī)則詳細說明177. 綜合規(guī)則247.1. 綜合規(guī)則表247.2. 綜合規(guī)則詳細說明248. 靜態(tài)時序分析規(guī)則288.1. 靜態(tài)時序分析規(guī)則表288.2. 靜態(tài)時

3、序分析規(guī)則詳細說明289. 仿真規(guī)則329.1. 仿真規(guī)則表329.2. 仿真規(guī)則詳細說明3210. 設(shè)計風(fēng)格規(guī)則3510.1. 設(shè)計風(fēng)格規(guī)則表3510.2. 設(shè)計風(fēng)格規(guī)則詳細說明3511. 重用化設(shè)計3911.1. 層次設(shè)計和模塊劃分3911.2. 參數(shù)化4112. 常用縮寫表431. 嚴格級別定義n Mandatory 1(M1)必須遵守。若不能遵守,則修改設(shè)計。對于違背其中任何一條的設(shè)計,都不予認可。n Mandatory 2(M2)應(yīng)該遵守。若不能遵守,必須提供說明文檔。此類規(guī)則影響設(shè)計的性能,盡可能遵守。n Recommended(R)建議遵守。此類規(guī)則影響代碼的可讀性和可維護性,允

4、許出現(xiàn)個別例外。對于出現(xiàn)例外的代碼,若影響到了代碼的可讀性,要求重新編寫。2. 工程規(guī)則2.1. 工程規(guī)則表工程規(guī)則表:Project Convention Rule Lists。使用PC表示命名規(guī)則。表 1工程規(guī)則表規(guī)則號規(guī)則級別PC_1一個頂層文件夾命令為top_xxxM2PC_2頂層文件夾下,至少包括以下四個子文件夾M22.2. 工程規(guī)則詳細說明PC_1一個頂層文件夾命令為top_xxxM2n 一個頂層文件夾命令為top_xxx,xxx為工程的識別名稱PC_2頂層文件夾下,至少包括以下四個子文件夾M2n 頂層文件夾下,至少包括以下四個子文件夾n gen_project文件夾:存放工程文件

5、n src_rtl文件夾:存放verilog源文件n explain文件夾:存放注釋說明文檔n src_diag文件夾:存放測試程序代碼,可進一步分為軟件調(diào)試程序、硬件調(diào)試程序n 與linux服務(wù)器上實現(xiàn)的平臺架構(gòu)保持一致3. 命名規(guī)則3.1. 命名規(guī)則表命名規(guī)則表:Naming Convention Rule Lists。使用NC表示命名規(guī)則。表 2命名規(guī)則表規(guī)則號規(guī)則級別NC_1一個文件一個moduleM2NC_2文件名與module名相同RNC_3僅可使用字母、數(shù)字和下劃線M1NC_4以字母開頭M2NC_5不能以大小寫區(qū)分命名M1NC_6縮寫間用下劃線隔開RNC_7結(jié)構(gòu)體系命名一致M2N

6、C_8參數(shù)與宏定義使用大寫M2NC_9信號名、任務(wù)名、函數(shù)名、實例名用小寫M2NC_10命名有含義RNC_11一致的時鐘信號名M2NC_12一致的復(fù)位信號名M2NC_13一致的低有效信號名M2NC_14有限狀態(tài)機變量,以<fsm_cs>,<fsm_ns>命名RNC_15鎖存器變量,加后綴_latRNC_16三態(tài)信號,加后綴_zRNC_17異步信號,加后綴_aRNC_18禁止使用Verilog和VHDL關(guān)鍵字M1NC_19所取名稱不超過32個字符M2NC_20同一個詞的縮寫一致RNC_21縮寫后見文知意RNC_22實例名由module名衍生M2NC_23描述多位總線時,使

7、用一致的編號順序M2NC_24輸入信號加前綴i_M2NC_25輸出信號加前綴o_M2NC_26雙向IO信號加前綴b_M2NC_27延遲信號加后綴_dlyM2NC_28專用寄存器信號加前綴r_M2NC_29不能用 ”reg”,作為最后的后綴名M2NC_30狀態(tài)機的各狀態(tài)名,加后綴_SR3.2. 命名規(guī)則詳細說明NC_1一個文件一個moduleM2n 一個文件一個module,不同module設(shè)計在不同的文件中。module與文件一一對應(yīng)。NC_2文件名與module名相同Rn 如果module名是design_unit_name,那么存儲文件名應(yīng)為design_unit_name.v。NC_3僅

8、可使用字母、數(shù)字和下劃線M1n A to Z,a to z,0 to 9,_。注意,不可使用連續(xù)下劃線。NC_4以字母開頭M1n 以下劃線開始,可能導(dǎo)致語法錯誤。在一些EDA工具中,不允許以下劃線開始。NC_5不能以大小寫區(qū)分命名M1n 不要使用ABC,abC,abc代表三個不同的命名。n Verilog HDL大小寫敏感,VHDL大小寫不敏感。n 為移植性考慮,必須遵守這條規(guī)則。NC_6縮寫詞間用下劃線隔開Rn 例如:RAM 地址可命名為ram_addr。NC_7結(jié)構(gòu)體系命名一致M2圖 1結(jié)構(gòu)體系命名規(guī)則n 實例化時,與rst_n相連的信號應(yīng)命名為rst_n,不推薦使用異于端口名的命名方式。

9、如此一來,從上到下,一些層層相連的端口會有相同的命名,左圖所示為建議用法。n 考慮到端口定義會區(qū)分端口類別,如i_addr和o_addr,這兩者相連時采用共同的部分,即addr。NC_8參數(shù)與宏定義使用大寫M2圖 2定義參數(shù)與宏NC_9信號名、任務(wù)名、函數(shù)名、實例名用小寫M2圖 3接口、信號、任務(wù)、函數(shù)和實例命名NC_10使用有含義的命名Rn 命名應(yīng)表征該信號的用途。NC_11一致的時鐘信號名M2n 推薦使用clk作為時鐘信號的前綴。時鐘頻率確定的,用頻率作為后綴如clk_sys_25m表示25M的系統(tǒng)時鐘。NC_12一致的復(fù)位信號名M2n 推薦使用rst作為復(fù)位信號的前綴。NC_13一致的低

10、有效信號名M2n 推薦使用_n作為低有效信號的后綴。NC_14有限狀態(tài)機變量,以<fsm_cs>,<fsm_ns>命名Rn fsm_cs:finite state machine_current state,有限狀態(tài)機當前狀態(tài)。n fsm_ns:finite state machine_next state,有限狀態(tài)機下一狀態(tài)。n 多個狀態(tài)機時,在fsm后加后綴。后綴名必須言簡意賅。例如,有兩個狀態(tài)機,一個用于串行接收,另一個用于串行發(fā)送,可這樣命名:fsm_recv_cs,fsm_recv_ns;fsm_send_cs,fsm_send_ns.NC_15鎖存器變量,加

11、后綴_latRNC_16三態(tài)信號,加后綴_zRNC_17異步信號,加后綴_aRNC_18禁止使用Verilog和VHDL關(guān)鍵字M1NC_19所取名稱不超過32個字符M2n 三態(tài):高電平、低電平、高阻。NC_20同一個詞的縮寫一致RNC_21縮寫后見文知意Rn RAM地址,使用縮寫ram_addr,不使用縮寫ra。n 參考常用縮寫表。NC_22實例名由module名衍生M2n 僅一個實例時,可使用<module_name>_inst。n 多個實例時,采取見名知意的命名方式。NC_23描述多位總線時,使用一致的編號順序M2n 推薦使用x - 1 : 0,不推薦使用x : 1。x表示寬度

12、。NC_24輸入信號加前綴i_M2n 如input 21 : 0 i_addr.NC_25輸出信號加前綴o_M2n 如output 15: 0 o_data.NC_26雙向IO信號加前綴b_M2n 如b_data.NC_27延遲信號加后綴_dlyM2n 多級延遲時,加后綴_dly1(一級延遲)、_dly2(兩級延遲)。NC_28專用寄存器信號加前綴r_M2n 專用寄存器信號加前綴r_,以區(qū)別普通輸出信號。NC_29不能用 ”reg”,作為最后的后綴名M2n 因為綜合工具會給寄存器自動加上_reg, 如果命名里就用_reg作為后綴名則擾亂了網(wǎng)表的可讀性。NC_30狀態(tài)機的各狀態(tài)名,加后綴_SRn

13、 狀態(tài)機的各狀態(tài)名,加后綴_S,與其他信號進行區(qū)分,增加可讀性。4. 文件頭規(guī)則4.1. 文件頭規(guī)則表文件頭規(guī)則表:File Header Rule Lists。使用FH表示文件頭規(guī)則。表 3文件頭規(guī)則表規(guī)則號規(guī)則級別FH_1每個文件必須包含一個文件頭M1FH_2文件頭的始末都要有文件頭標志M1FH_3文件頭參數(shù)FH_3.1文件名M2FH_3.2作者及其聯(lián)系方式M2FH_3.3發(fā)布版本及版本描述M2FH_3.4發(fā)布日期M2FH_3.5功能段M2FH_3.6參數(shù)描述M2FH_4其他信息RFH_4.1復(fù)位策略描述RFH_4.2時鐘策略描述RFH_4.3重要時序描述RFH_4.4測試特性描述RFH_

14、4.5如果存在異步接口,提供異步接口描述RFH_4.6查看方法描述RFH_5其他結(jié)構(gòu)也要有頭信息M2FH_6結(jié)構(gòu)頭的始末都要有結(jié)構(gòu)頭標志M2FH_7結(jié)構(gòu)頭參數(shù)FH_7.1結(jié)構(gòu)名及返回數(shù)據(jù)類型M2FH_7.2結(jié)構(gòu)類型M2FH_7.3功能段M2FH_7.4參數(shù)描述M24.2. 文件頭示例圖 4文件頭示例一n “+FHDR”和“-FHDR”是文件頭標志,“+”表示開始,“-”表示結(jié)束。n FILE NAME:文件名。n AUTHOR:作者。n CONTACT INFOMATION:作者聯(lián)系方式。n RELEASE VERSION:發(fā)布版本。n VERSION DESCRIPTION:對該版本的描述。

15、n RELEASE DATE:發(fā)布日期。n PURPOSE:本文件的功能。n PARAMETERS:本文件中定義的參數(shù)。圖 5文件頭示例二n Error! Reference source not found. 所示文件頭包含最基本的文件信息,是最簡文件頭。n Error! Reference source not found. 所示文件頭包含比Error! Reference source not found. 所示文件頭更多的信息。n 任何文件頭不能比Error! Reference source not found. 所示文件頭更簡單。n 文件頭應(yīng)包含盡可能多的信息,使文件更容易理解、使

16、用和維護。n 修改部分在文件頭末尾續(xù)上。n 添加Notes,強調(diào)需要注意的地方。4.3. 結(jié)構(gòu)頭示例圖 6結(jié)構(gòu)頭n 結(jié)構(gòu)頭,用于對函數(shù)或任務(wù)進行說明,置于函數(shù)或任務(wù)前。n “+CHDR”和“-CHDR”是結(jié)構(gòu)頭標志,“+”表示開始,“-”表示結(jié)束。我們使用“+CHSC”和“-CHSC”。n CONSTRUCT NAME & RETURN VALUES:結(jié)構(gòu)名和返回值。n TYPE:類型。函數(shù)和任務(wù)的其中一種。n PURPOSE:本結(jié)構(gòu)頭的功能。n PARAMETERS:本結(jié)構(gòu)中定義的參數(shù)。結(jié)構(gòu)中定義的參數(shù)無需在文件頭中列出。5. 注釋規(guī)則5.1. 注釋規(guī)則表注釋規(guī)則表:Comments

17、 Rule Lists。用CT表示注釋規(guī)則。表 4注釋規(guī)則表規(guī)則號規(guī)則級別CT_1注釋接口聲明M1CT_2注釋內(nèi)部信號聲明RCT_3注釋功能塊RCT_4使用/,不使用/*/RCT_5注釋實例化語句M2CT_6刪除不必要的代碼RCT_7注釋“綜合指令”RCT_8注釋條件編譯指令R注釋的作用:n 幫助代碼使用者理解設(shè)計者的設(shè)計思路。n 提高代碼的可讀性和可移植性。n 便于維護和管理。5.2. 注釋規(guī)則詳細說明CT_1注釋接口聲明M1圖 7接口聲明注釋CT_2注釋內(nèi)部信號聲明Rn 內(nèi)部信號,如reg型和wire型,要有描述性注釋。在描述性注釋中,應(yīng)該表明被注釋者的用途或功能。CT_3注釋功能塊Rn

18、always塊和assign語句要有描述性注釋。CT_4使用/,不使用/*/Rn 使用/,不使用/*/。CT_5注釋實例化語句M2圖 8實例化語句注釋CT_6刪除不必要的代碼Rn 不必要的代碼:舊代碼,未使用的代碼。n 盡可能保持代碼整潔。CT_7注釋“綜合指令”R圖 9綜合指令n 綜合指令有:full_case,parallel_case,async_set_reset and so on。n 避免使用綜合指令,如果用到,要對綜合指令給出詳細的注釋。CT_8注釋條件編譯指令R圖 10條件編譯指令注釋6. 編碼規(guī)則6.1. 編碼規(guī)則表編碼規(guī)則表:Coding Style Rule Lists。

19、使用CS表示編碼規(guī)則。表 5編碼規(guī)則表規(guī)則號規(guī)則級別CS_1按列表方式對齊M2CS_2使用空格縮進,不用Tab縮進M2CS_3每行一條語句M1CS_4每行聲明一個接口M1CS_5保持接口順序M2CS_6集中聲明內(nèi)部信號RCS_7每行不超過72個字符RCS_8不可重定義參數(shù)RCS_9保持常數(shù)間的關(guān)系RCS_10實例化時,使用接口映射,不使用位置映射M1CS_11接口連接中避免表達式M1CS_12有限狀態(tài)機使用參數(shù)編碼M1CS_13復(fù)雜等式中使用圓括號M2CS_14顯式聲明wire類型變量M1CS_15操作數(shù)寬度必須匹配M1CS_16條件表達式應(yīng)該是1位的數(shù)值RCS_17一個always塊操作一個

20、寄存器RCS_18有限狀態(tài)機編碼風(fēng)格RCS_19if-else if-else結(jié)構(gòu)中,盡量提煉共同條件RCS_20非行末分號、逗號后加一空格RCS_21雙目運算符前后各加一空格RCS_22除縮進外,不出現(xiàn)連續(xù)空格RCS_23位拼接符的前括號后、后括號前不加空格RCS_24復(fù)雜的條件判斷,用if-else代替?:RCS_25if-else嵌套不超過三級RCS_26條件判斷語句的與或個數(shù)盡量少RCS_27條件表達式必須是充分條件M1CS_28if-else 與 case 語句的選擇R6.2. 編碼規(guī)則詳細說明CS_1按列表方式對齊M2n module與endmodule,always塊中的begi

21、n與end、if與else、case與endcase,成對出現(xiàn),且這四對關(guān)鍵字之間的代碼要對齊。CS_2使用空格縮進,不用Tab縮進M1n 不同的編輯環(huán)境下,Tab代表的空格數(shù)可能不一致??s進一次,使用空格鍵往右移四個空格。CS_3每行一條語句M1圖 11 每行一條語句CS_4每行聲明一個接口M1圖 12 每行聲明一個接口CS_5保持接口順序M2n 接口聲明順序與module接口列表中的順序一致。n input wire i_A,wire不省略。n 按功能集中。建議順序:時鐘、復(fù)位、地址、數(shù)據(jù)。n 建議在module接口列表中直接聲明接口。CS_6集中聲明內(nèi)部信號Rn 內(nèi)部信號聲明放在接口聲明

22、之后,且集中聲明。CS_7每行不超過72個字符Rn 除了空格,每行不超過72個字符。CS_8不可重定義參數(shù)Rn 'define與'undef成對使用,以避免參數(shù)重定義。CS_9保持常數(shù)間的關(guān)系R圖 13保持常數(shù)間的關(guān)系n 如果常數(shù)間存在關(guān)系,如倍數(shù)關(guān)系,應(yīng)該在定義時予以保持。如上圖所示,若定義WORD等于32,則無法表達它與HALFWORD的倍數(shù)關(guān)系。當改變了HALFWORD的值,卻忘了相應(yīng)地修改WORD的值,這便會破壞他們之間的倍數(shù)關(guān)系,產(chǎn)生意想不到的結(jié)果。CS_10實例化時,使用接口映射,不使用位置映射M1圖 14接口映射與位置映射n 左圖為接口映射,右圖為位置映射。接口映

23、射根據(jù)接口連線對應(yīng)另一個接口,而位置映射緊緊根據(jù)接口在接口列表的位置對應(yīng)相連,容易出錯。CS_11接口連接中避免表達式M1圖 15接口連接中避免表達式CS_12有限狀態(tài)機使用參數(shù)編碼M1圖 16有限狀態(tài)機使用參數(shù)編碼CS_13復(fù)雜等式中使用圓括號M2圖 17復(fù)雜等式中使用圓括號CS_14顯式聲明wire類型變量M1圖 18顯式聲明wire類型變量n 不能依賴語法的隱式聲明。n 嚴格的類型檢測原則下,必須顯示聲明。CS_15操作數(shù)寬度必須匹配M1圖 19操作數(shù)寬度必須匹配CS_16條件表達式應(yīng)該是1位的數(shù)值R圖 20條件表達式應(yīng)該是1位的數(shù)值CS_17一個always塊操作一個寄存器Rn 一個a

24、lways塊只對一個變量賦值。n 簡化代碼,增加可讀性,方便修改與維護。CS_18有限狀態(tài)機編碼風(fēng)格Rn Mealy狀態(tài)機,使用兩段式編碼風(fēng)格。Mealy狀態(tài)機,輸出是當前狀態(tài)和所有輸入信號的函數(shù)。n 摩爾狀態(tài)機,使用三段式編碼風(fēng)格。摩爾狀態(tài)機,輸出是當前狀態(tài)的函數(shù)。n FSM將時序部分(狀態(tài)轉(zhuǎn)移部分)和組合部分(判斷狀態(tài)轉(zhuǎn)移條件和產(chǎn)生輸出)分開,寫為兩個always語句,即為兩段式有限狀態(tài)機。將組合部分中的判斷狀態(tài)轉(zhuǎn)移條件和產(chǎn)生輸出再分開寫,則為三段式有限狀態(tài)機。n 區(qū)別:二段式在組合邏輯特別復(fù)雜時適用,但要注意需在后面加一個觸發(fā)器以消除組合邏輯對輸出產(chǎn)生的毛刺。三段式?jīng)]有這個問題,因為第三

25、個always會生成觸發(fā)器。觸發(fā)器是由兩個鎖存器構(gòu)成的一個主從觸發(fā)器,輸出對輸入是不透明的,必須在時鐘的上升/下降沿才會將輸入體現(xiàn)到輸出,所以能夠消除輸入的毛刺信號。n 建議狀態(tài)機編寫采用三段式。圖 21三段式編碼風(fēng)格CS_19if-else if-else結(jié)構(gòu)中,盡量提煉共同條件Rn 盡量提煉共同條件,減少分支數(shù),簡化代碼。CS_20非行末分號、逗號后加一空格RCS_21雙目運算符前后各加一空格RCS_22除縮進外,不出現(xiàn)連續(xù)空格RCS_23位拼接符的前括號后、后括號前不加空格R圖 22空格與縮進CS_24復(fù)雜的條件判斷,用if-else代替?:R圖 23復(fù)雜條件判斷CS_25if-else

26、嵌套不超過三級M2n 超過三級時,建議重新分析該語句段結(jié)構(gòu),改寫代碼。n if-else if-else的分支數(shù)應(yīng)盡可能少。參考CS-19。CS_26條件判斷語句的與或個數(shù)盡量少Rn 兩個時,放在同一行。n 超過兩個時,分行寫,且邏輯運行符放在前一行的行末位置。CS_27條件表達式必須是充分條件M1n 條件表達式必須是充分條件,若不然,存在設(shè)計缺陷。CS_28if-else 與 case 語句的選擇Rn 平行結(jié)構(gòu)的條件,優(yōu)先寫成case結(jié)構(gòu),例如地址譯碼等n 條件之間有優(yōu)先級、重復(fù)和嵌套的情況則是寫成if else結(jié)構(gòu)7. 綜合規(guī)則7.1. 綜合規(guī)則表綜合規(guī)則表:Synthesis Rule

27、Lists。使用SS表示綜合規(guī)則。表 6綜合規(guī)則表規(guī)則號規(guī)則級別SS_1僅使用可綜合語句M1SS_1.1Waveform statement are prohibitedM1SS_1.2禁止使用系統(tǒng)任務(wù)和函數(shù)(如,$display)M1SS_1.3禁止使用#延時語句M1SS_1.4禁止使用real和event數(shù)據(jù)類型M1SS_1.5每個always敏感列表僅包含一個時鐘信號M1SS_1.6Loop must be in a static rangeM1SS_2避免內(nèi)嵌任何綜合腳本M2SS_3避免full_case和parallel_case綜合指令M2SS_4完整的組合邏輯代碼段M2SS_5禁

28、止使用verilog原語M1SS_6未使用的輸入接口必須驅(qū)動M1SS_7未使用的輸出接口要連線RSS_8頂層模塊避免膠連邏輯M2SS_9未盡case語句段應(yīng)有default分支M2SS_10在default語句中回到狀態(tài)機RSS_11一個寄存器只能在一個always塊中賦值M1SS_12if語句后要有else語句M17.2. 綜合規(guī)則詳細說明SS_1僅使用可綜合語句M1n 可綜合代碼中不使用casex.n 盡量不用casez.n 設(shè)計人員遵守。SS_2避免內(nèi)嵌任何綜合腳本M2SS_3避免full_case和parallel_case綜合指令M2圖 24 full_case與parallel_c

29、asen 盡量不使用full_case和parallel_case.n 若使用,則可能會給仿真工具和綜合工具提供不一致的信息。n 若使用,可能會導(dǎo)致前仿真與后仿真不一致。n 若使用,可能會形成不正確的邏輯。n 增加使用形式驗證工具的難度。圖 25 full_case錯誤應(yīng)用例n full_case覆蓋初始缺省賦值。n en信號在優(yōu)化過程中被去除。n 形成與設(shè)計初衷不同的邏輯。SS_4完整的組合邏輯代碼段M2圖 26組合邏輯語句段n Missing condition:只考慮到a = 1'b1的情況,未考慮到a = 1'b0的情況。n Missing assignment:2&#

30、39;b11后應(yīng)該有賦值語句。2'b01后可能丟失了賦值語句。SS_5禁止使用verilog原語M1n Verilog User-Defined-Primitive(UDP),用戶自定義原語,可以使用。n Verilog built-in primitive,verilog固有原語,禁止使用。SS_6未使用的輸入接口必須驅(qū)動M1n 避免任何不確定輸入。不確定輸入可能導(dǎo)致芯片出現(xiàn)致命錯誤。SS_7未使用的輸出接口要連線Rn 不連線時,不影響功能,但可能讓使用者糊涂。圖 27未使用的輸出接口連線規(guī)則SS_8頂層模塊避免膠連邏輯M2圖 28頂層模塊避免膠連邏輯n 膠連邏輯,是連接復(fù)雜邏輯電路

31、的簡單邏輯電路的統(tǒng)稱。n 頂層模塊應(yīng)該只包含結(jié)構(gòu)樹上的葉層次。n 頂層模塊中的膠連邏輯不能與任何模塊中的組合邏輯合并,從而限制了綜合優(yōu)化。SS_9未盡case語句段應(yīng)有default分支M2n case語句段沒有default分支,同時狀態(tài)未盡,則會產(chǎn)生意料之外的鎖存器。n 對于有限狀態(tài)機,若狀態(tài)未盡,必須加default分支;若狀態(tài)已盡,不加default分支。圖 29 case語句段的default分支SS_10在default語句中回到狀態(tài)機Rn 防止狀態(tài)機跑飛,陷入混亂,應(yīng)在default中回到狀態(tài)機。SS_11一個寄存器只能在一個always塊中賦值M1n 當一個寄存器在多個alwa

32、ys塊中被賦值,綜合時會出問題。SS_12if語句后要有else語句M1n 必須加else,否則會生成鎖存器。8. 靜態(tài)時序分析規(guī)則8.1. 靜態(tài)時序分析規(guī)則表靜態(tài)時序分析規(guī)則表:Static Timing Analysis Rule Lists。使用STA表示靜態(tài)時序分析規(guī)則。表 7規(guī)則號規(guī)則級別STA_1避免組合環(huán)路M2STA_2使用同步設(shè)計M2STA_3簡化寄存器時鐘源M2STA_4避免多周期路徑和偽路徑M2STA_5避免將時鐘信號用作數(shù)據(jù)M2STA_6避免使用鎖存器M28.2. 靜態(tài)時序分析規(guī)則詳細說明STA_1避免組合環(huán)路M2圖 30 組合回路圖 31 組合邏輯環(huán)n 圖中a、b、c構(gòu)

33、成了組合邏輯環(huán)。STA_2使用同步設(shè)計M2n 僅在無法避免時使用異步設(shè)計,且與同步設(shè)計分開。n 一些靜態(tài)時序分析工具不能恰當處理異步設(shè)計。n 須仔細驗證異步設(shè)計的功能和時序。圖 32異步設(shè)計STA_3簡化寄存器時鐘源M2n 避免給寄存器提供內(nèi)部生成時鐘和門控時鐘。門控時鐘,指用使能信號打開或關(guān)閉的時鐘信號。n 若內(nèi)部生成時鐘或門控時鐘無法避免(例如,低功耗設(shè)計),將這部分線路放在頂層的一個單獨模塊中。n 為防止寄存器保存數(shù)據(jù)時出現(xiàn)穩(wěn)定性問題,應(yīng)提供盡可能簡單的時鐘信號。圖 33 簡單時鐘STA_4避免多周期路徑和偽路徑M2n 時序例外是指路徑需要不止一個時鐘周期。n 時序例外應(yīng)標明路徑的始末位

34、置。n 時序例外會增加編譯時間,盡量減少時序例外。圖 34 多周期路徑STA_5避免將時鐘信號用作數(shù)據(jù)M2n 將時鐘信號直接或間接連至寄存器的數(shù)據(jù)輸入端,會導(dǎo)致時序擾亂或競爭。圖 35時鐘信號連至寄存器數(shù)據(jù)輸入端STA_6避免使用鎖存器M2n 在設(shè)計中,不推薦使用鎖存器。n 如果在設(shè)計中出現(xiàn)了不可避免的鎖存器,則必須提供文檔,說明每個鎖存器的特殊時序要求。9. 仿真規(guī)則9.1. 仿真規(guī)則表仿真規(guī)則表:Simulation Rule Lists。使用SIM表示仿真規(guī)則。表 8仿真規(guī)則表規(guī)則號規(guī)則級別SIM_1在時序always塊中使用非阻塞賦值M1SIM_2在組合always塊中使用阻塞賦值M1

35、SIM_3組合always塊的敏感列表必須完備M1SIM_4避免冗余敏感列表M1SIM_5初始化控制存儲單元M2SIM_6不可對信號賦不定值xM1SIM_7避免使用延遲賦值M29.2. 仿真規(guī)則詳細說明SIM_1在時序always塊中使用非阻塞賦值M1圖 36時序always塊SIM_2在組合always塊中使用阻塞賦值M1n 在always塊中使用阻塞賦值,用于產(chǎn)生組合邏輯。n 在組合always塊中使用非阻塞賦值,可能導(dǎo)致人為競爭。綜合后,這種競爭會消失。即使競爭消失,也不允許在組合always塊中使用非阻塞賦值。n 阻塞賦值可使電路被正確分析,防止RTL級與門級電路仿真結(jié)果不一致。SIM

36、_3組合always塊的敏感列表必須完備M1n 敏感列表不完備,將導(dǎo)致前仿真與后仿真不一致。n 當敏感列表包含所有敏感變量,一律用“*”代替。圖 37敏感列表不完備SIM_4避免冗余敏感列表M1n 仿真時,敏感列表中多余的信號,會產(chǎn)生不必要的分析計算,增加仿真時間。圖 38敏感列表冗余SIM_5初始化控制存儲單元M2n 所有控制存儲單元,包括控制路徑中的所有鎖存器和寄存器,都應(yīng)該在初始時刻復(fù)位或置位。n 控制路徑是指,信號從寄存器出來,貫穿整個控制條件邏輯。n 未賦初值的鎖存器或寄存器,其初值(0或x)與仿真工具有關(guān)。不同的仿真工具,初值可能不同。SIM_6不可對信號賦不定值xM1n 防止不定

37、值x在電路中蔓延,尤其是在控制路徑中。n 仿真時,如果控制路徑中存在不定值x,它可能使所有相關(guān)電路產(chǎn)生不明狀態(tài)鏈。圖 39賦不定值xSIM_7避免使用延遲賦值M2n Avoid using both inter- and intra-assignment delay.n 目前的綜合工具忽略賦值延遲,因此,賦值延遲可能使RTL級與門級仿真結(jié)果不一致。圖 40賦值延遲10. 設(shè)計風(fēng)格規(guī)則10.1. 設(shè)計風(fēng)格規(guī)則表設(shè)計風(fēng)格規(guī)則表:Design Style Guidelines Rule Lists。使用DS表示設(shè)計風(fēng)格。 表 9設(shè)計風(fēng)格規(guī)則表規(guī)則號規(guī)則級別DS_1IP接口設(shè)計規(guī)則DS_1.1輸出信號

38、應(yīng)為寄存器型M2DS_1.2寄存器應(yīng)在時鐘信號的單個沿觸發(fā)RDS_1.3IP接口應(yīng)連至總線RDS_1.4提供輸入輸出相對時鐘的延遲的詳細信息M1DS_2同步設(shè)計IPM2DS_3提供時鐘策略文檔M1DS_4避免手動時鐘門控M2DS_5復(fù)位規(guī)則DS_5.1IP必須可以復(fù)位M2DS_5.2提供復(fù)位策略文檔M1DS_6避免任何工藝依賴單元M1DS_7提供額外的功能行為模型R10.2. 設(shè)計風(fēng)格規(guī)則詳細說明DS_1.1輸出信號應(yīng)為寄存器型M2n IP輸出為寄存器類型時,因為寄存器只有在時鐘的上升/下降沿才會將數(shù)據(jù)輸出,使得輸入延遲和輸出強度更可預(yù)計。n 在always塊中賦值的信號。圖 41 IP輸出信

39、號為寄存器型DS_1.2寄存器應(yīng)在時鐘信號的單個沿觸發(fā)Rn 簡化與之交互的電路的設(shè)計。DS_1.3IP接口應(yīng)連至總線Rn IP應(yīng)通過多路復(fù)用總線與系統(tǒng)剩余組件相連。n 當點對點方案不可行時,應(yīng)使用工業(yè)標準。DS_1.4提供輸入輸出相對時鐘的延遲的詳細信息M1n 必須以文檔或文字模板的形式,將輸入輸出相對時鐘的延遲的詳細信息提交給IP綜合者。n 對于軟核,可以采用該軟核輸入時鐘百分比的形式提供這類信息。n 軟核:功能經(jīng)過驗證的、可綜合的、實現(xiàn)后電路結(jié)構(gòu)總門數(shù)在5000門以上的Verilog HDL模型。n 固核:在某一種FPGA器件上實現(xiàn)的、經(jīng)驗證是正確的、總門數(shù)在5000門以上的電路結(jié)構(gòu)編碼文

40、件。n 硬核:在某一種專用集成電路工藝的器件上實現(xiàn)的、經(jīng)驗證是正確的、總門數(shù)在5000門以上的電路結(jié)構(gòu)版圖掩膜。圖 42 detail information of delayDS_2同步設(shè)計IPM2n 盡管異步設(shè)計在能耗方面有優(yōu)勢,但它會產(chǎn)生一些問題,如穩(wěn)定性方面。DS_3提供時鐘策略文檔M1n 有哪些時鐘?相互之間什么關(guān)系?分別有何用途?圖 43時鐘策略DS_4避免手動時鐘門控M2n 設(shè)計者必須避免插入任何手動門控時鐘單元來門控時鐘信號。n 如果設(shè)計者需要在IP中使用門控時鐘,應(yīng)該讓電源優(yōu)化工具代為處理。圖 44門控時鐘DS_5.1IP必須可以復(fù)位M2n 必須設(shè)計復(fù)位機制,以使IP回到初始

41、狀態(tài)。n 控制單元必須可以復(fù)位,以確保IP的正確性。n 考慮到存儲區(qū),數(shù)據(jù)路徑不必復(fù)位。DS_5.2提供復(fù)位策略文檔M1n 文檔應(yīng)包含必需信息。DS_6避免任何工藝依賴單元M1n 軟核不應(yīng)像硬核或特殊工藝單元那樣包含工藝依賴單元。n 如果軟核包含工藝依賴單元,當使用不同工藝時,會出現(xiàn)問題,從而難以復(fù)用。DS_7提供額外的功能行為模型Rn 鼓勵I(lǐng)P提供者開發(fā)更高抽象層次的功能模型。例如,總線功能模型。n 在這些模型的基礎(chǔ)上,IP驗證人員可以高效地在更高抽象層次上進行功能驗證。11. 重用化設(shè)計11.1. 層次設(shè)計和模塊劃分 SOC設(shè)計是由多個模塊組成,對于設(shè)計復(fù)雜規(guī)模又大的電路,我們需要對它進行劃分(Partitioning),然后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論