2001年3月IEEE正式批准了Verilog‐2001標準(IEEE1364‐2001),與Verilog‐1995相比主要有如下提升。
(1) Verilog‐2001容許將端口聲明和數據類型聲明放在同一條語句中,例子以下:
(2)Verilog‐2001中增長了ANSIC風格的輸入輸出端口聲明,能夠用於module,task和function。例子以下:
(3)對於含有parameter的module,例子以下:
Verilog‐2001中容許在聲明變量的同時對其進行初始化賦值,他是在initial語句中的0時刻開始執行。例子以下:
(1)逗號分開敏感列表
在敏感表中的變量能夠用逗號「,」分開,固然,固然or也是能夠的。例子以下:
always@(posedge clk,negedge rst)也是能夠的。
(2)組合邏輯的電平敏感@* //@(*) is also ok
「*」表明了邏輯塊中每一個被賦值的變量,例子以下:
(1)net型和reg型能夠聲明爲帶符號的變量
(2)函數的返回值能夠是有符號數
(3)Literal integer numbers能夠定義爲有符號的
(4)增長算數右移左移(>>>,<<<)
操做符「>>>」和「<<<」。對於有符號數,執行算術移位操做時,將符號位填補移出的位。例子以下:
(5)增長系統函數$signed,$unsigned
用於在無符號和有符號數之間的轉換
[<starting_bit>+」:width]從起始位開始遞增,位寬爲width
[<starting_bit>‐」:width]從起始位開始遞減,位寬爲width
其中,起始位能夠是變量,但位寬必須是整數。所以能夠用可變域選擇,用循環語句選取一個很長的向量全部位。
Verilog‐1995中只容許對reg,integer和time創建一維的數組,經常使用於RAM,ROM的建模。Verilog‐2001中能夠對net和variable創建多維數組。
Verilog‐1995不容許直接訪問矩陣字的某一位或某幾位,必須將整個矩陣字複製到另外一個暫存變量中,從暫存中訪問。
Verilog‐2001能夠直接訪問矩陣的某一維或某幾位。
增長乘方運算(power operate),運算符是**,若是其中有一個操做數是real類型的,返回值將是real類型。兩個操做數都是integer類型,返回纔是integer類型。
(1)可重入任務
任務本質上是靜態的,同時併發執行的多個任務共享存儲區。當某個任務在模塊中的多個地方被同時調用,則這兩個任務對同一塊地址空間進行操做,結果多是錯誤的。Verilog‐2001中增長了關鍵字automatic,內存空間是動態分配的,使任務成爲可重入的。
(2)遞歸函數
Verilog‐1995中對於不指定位數的位寬超過32爲的總線賦高阻時,只會對低32位賦值爲高阻,高位將爲0。
Verilog‐2001將高阻或不定態賦值給未指定位寬的信號時,能夠自動擴展到整個位寬範圍。
Verilog語法規定必須使用數值或常數表達式來定義向量的位寬和陣列的規模。
Verilog‐1995中要求上述表達式必須爲算數操做。
Verilog‐2001中可使用函數,成爲常數函數。他的數值在編譯或詳細描述中被肯定。
Verilog‐1995中在文件的輸入/輸出操做方面功能很是有限,文件操做常常藉助於Verilog PLI(編程語言接口),經過與C語言的文件輸入/輸出庫的訪問來處理。而且規定同時打開的I/O文件數不能多於31個。
Verilog‐2001增長了新的系統任務和函數,而且規定同時打開的文件數目爲230個。
Verilog‐1995中參數重載有兩種方法。一種是defparam語句顯式的從新定義。第二種是在模塊實體調用時使用#符號隱式的從新定義參數。
Verilog‐2001中增長了一種新的方法,成爲顯式參數重載。
Verilog‐2001新增了語句「generate」,經過generate循環,能夠產生一個對象(好比一個元件或一個模塊等)的多個例化,爲可變尺度的設計提供了方便。
generate語句通常在循環和條件語句中使用。Verilog‐2001增長了四個關鍵字generate、endgenerate、genvar和localparam,其中genvar是一個新的數據類型,用在generate循環中的標尺變量必須定義爲genvar型數據。
自1998年的Verilog一來,register一直用來描述一種變量的類型,這經常給初學者帶來困擾,誤認爲register和硬件中的寄存器一致。在Verilog‐2001參考手冊中將register變爲variable。
Verilog‐1995中支持`ifdef、`else、`endif、`undef進行條件編譯,Verilog‐2001中增長了`ifndef和`elseif
Verilog須要不斷的跟蹤源代碼的行號和文件名,可編程語言接口(PLII)能夠取得並利用行號和源文件的信息,以標記運行是的錯誤。但若是Verilog代碼通過其餘工具的處理,源碼的行號和文件名可能丟失。故在Verilog‐2001中增長了`line,用來標定源碼的行號和文件名。
隨着仿真器以外的其餘工具把Verilog做爲設計輸入,這些工具須要Verilog語言可以加入跟指定工具備關的信息和命令。
Verilog沒有定義標準的屬性,屬性的名字和數值由工具廠商或其餘標準來定義。目前尚無指定的標準。
Verilog‐1995標準將設計管理工做交給軟件來承擔,但各仿真工具的設計管理方法各不相同,不利於設計的共享。爲了更好地在設計人員之間共享Verilog設計,而且提升某個特定仿真的可重用性,Verilog‐‐2001標準增長了對設計內容的配置這部份內容。
增長關鍵字config、endconfig、design、instance、cell、use和liblist。
配置塊位於模塊定義以外,能夠指定每個Verilog模塊的版本及其源代碼的位置。Verilog程序設計從頂層模塊開始執行,找到在頂層模塊中實例化的模塊,進而肯定其源代碼的位置,照此順序,直到肯定整個設計的源程序。
configcfg4 ///給配置塊命名
designrtlLib.top ///指定從哪裏找到頂層模塊
defaultliblistrtlLibgateLib; ///設置查找實例模塊的默認順序
instancetest.dut.a2liblistggateLib; //明確指定模塊實例使用哪個庫
endconfig
Verilog‐2001增長了17個文件輸入/輸出任務:$fgetc、$ungetc、$fflush、$ferror、$fgets、$rewind、$swrite、$swriteb、$swriteo、$swriteh、$sformat、$sdf_annotate、$ffscanf、$sscanf、$fread、$ftell、$fseek。
增長了兩個轉換函數:$signed和$unsigned。
增長了命令行輸入任務:$test$plusargs和$value$plusargs。
VCD文件用於存儲選定的變量數值變化的信息,信息的記錄由VCD系統任務來完成。
在Verilog‐1995標準中只有一種類型的VCD文件,即四狀態類型,這種類型的VCD文件只記錄變量在0、1、x和z狀態之間的變化,並且不記錄信號強度信息。而在Verilog‐2001標準中增長了一種擴展類型的VCD文件,可以記錄變量在全部狀態之間的轉換,同時記錄信號強度信息。
擴展型VCD系統任務$dumpports、$dumpportsoff、$dumpportson、$dumpportsall、$dumpportslimit、$dumpportsflush、$vcdclose
(1)提升了ASIC/FPGA應用的正確性
①檢測脈衝的傳播錯誤
②負脈衝檢測
③新的時序約束檢查
④負時序約束
⑤提升了對SDF(標準延時文件)的支持
(2)編程語言接口PLI方面有所改進