1、模塊聲明的擴展
(1)Verilog‐2001允許將端口聲明和數據類型聲明放在同壹條語句中,例子如下:
(2)Verilog‐2001中增加了ANSIC風格的輸入輸出端口聲明,可以用於module,task和function。例子如下:
(3)對於含有parameter的module,例子如下:
2、帶有初始化的寄存器類型變量聲明
Verilog‐2001中允許在聲明變量的同時對其進行初始化賦值,他是在initial語句中的0時刻開始執行。例子如下:
3、敏感表的改進
(1)逗號分開敏感列表
在敏感表中的變量可以用逗號“,”分開,當然,當然or也是可以的。例子如下:
always@(posedge clk,negedge rst)也是可以的。
(2)組合邏輯的電平敏感@*//@(*) is also ok
“*”代表了邏輯塊中每個被賦值的變量,例子如下:
4、有符號算數運算的擴展
(1)net型和reg型可以聲明為帶符號的變量
(2)函數的返回值可以是有符號數
(3)Literal integer numbers可以定義為有符號的
(4)增加算數右移左移(>>>,<<<)
操作符“>>>”和“<<<”。對於有符號數,執行算術移位操作時,將符號位填補移出的位。例子如下:
(5)增加系統函數$signed,$unsigned
用於在無符號和有符號數之間的轉換
5、可變向量域的選擇
[<starting_bit>+”:width]從起始位開始遞增,位寬為width
[<starting_bit>‐”:width]從起始位開始遞減,位寬為width
其中,起始位可以是變量,但位寬必須是整數。因此可以用可變域選擇,用循環語句選取壹個很長的向量所有位。
6、多維數組的建立
Verilog‐1995中只允許對reg,integer和time建立壹維的數組,常用於RAM,ROM的建模。Verilog‐2001中可以對net和variable建立多維數組。
7、多維數組的賦值
Verilog‐1995不允許直接訪問矩陣字的某壹位或某幾位,必須將整個矩陣字復制到另壹個暫存變量中,從暫存中訪問。
Verilog‐2001可以直接訪問矩陣的某壹維或某幾位。
8、乘方運算符
增加乘方運算(power operate),運算符是**,如果其中有壹個操作數是real類型的,返回值將是real類型。兩個操作數都是integer類型,返回才是integer類型。
9、自動(可重入)任務和自動(遞歸)函數
(1)可重入任務
任務本質上是靜態的,同時並發執行的多個任務***享存儲區。當某個任務在模塊中的多個地方被同時調用,則這兩個任務對同壹塊地址空間進行操作,結果可能是錯誤的。Verilog‐2001中增加了關鍵字automatic,內存空間是動態分配的,使任務成為可重入的。
(2)遞歸函數
10、自動寬度擴展
Verilog‐1995中對於不指定位數的位寬超過32為的總線賦高阻時,只會對低32位賦值為高阻,高位將為0。
Verilog‐2001將高阻或不定態賦值給未指定位寬的信號時,可以自動擴展到整個位寬範圍。
11、常數函數
Verilog語法規定必須使用數值或常數表達式來定義向量的位寬和陣列的規模。
Verilog‐1995中要求上述表達式必須為算數操作。
Verilog‐2001中可以使用函數,成為常數函數。他的數值在編譯或詳細描述中被確定。
12、增加了文件輸入輸出操作
Verilog‐1995中在文件的輸入/輸出操作方面功能非常有限,文件操作經常借助於Verilog PLI(編程語言接口),通過與C語言的文件輸入/輸出庫的訪問來處理。並且規定同時打開的I/O文件數不能多於31個。
Verilog‐2001增加了新的系統任務和函數,並且規定同時打開的文件數目為230個。