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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

13、 狀態(tài)機(jī)的各狀態(tài)名,加后綴_S,與其他信號(hào)進(jìn)行區(qū)分,增加可讀性。4. 文件頭規(guī)則4.1. 文件頭規(guī)則表文件頭規(guī)則表:File Header Rule Lists。使用FH表示文件頭規(guī)則。表 3文件頭規(guī)則表規(guī)則號(hào)規(guī)則級(jí)別FH_1每個(gè)文件必須包含一個(gè)文件頭M1FH_2文件頭的始末都要有文件頭標(biāo)志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時(shí)鐘策略描述RFH_4.3重要時(shí)序描述RFH_4.4測(cè)試特性描述RFH_

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論