1 整數、實數和時間寄存器類型
整數是一種通用的寄存器數據類型,用於對數量進行操作,使用integer進行聲明。
integer counter; //一般用途的變量用作計數器
initial
counter = -1; //把-1存儲到寄存器中
實數:實常量和實數寄存器數據類型使用關鍵字real來聲明,可以用十進制或科學計數法來表示。實數聲明不能帶有范圍,其默認值為0.如果將一個實數賦予一個整數,那么實數將會被取為最接近的整數。
real delta; //定義一個名為delta的實型變量
時間寄存器:仿真是按照仿真時間進行的,verilog使用一個特殊的時間寄存器數據類型來保存仿真時間。時間變量通過使用關鍵字time來聲明,其寬度與具體實現無關,最小為64位。通過調用系統函數$time可以取得當前的仿真時間。
2 數組
Verilog中允許聲明reg、integer、time、real、realtime及其向量類型的數組,對數組的維數沒有限制,即可聲明任意維數的數組。線網數組也可用於連接實例的端口,數組中的每個元素都可以作為一個標量或者向量,以同樣的方式來使用,形如<</span>數組名>[<</span>下標>]。
Integer count[0:7]; //由八位計數變量組成的數組
reg bool [31:0]; //由32個1位的布爾寄存器變量組成的數組
wire [7:0] w_array2 [5:0]; //聲明8位向量的數組
注意:不要把數組和線網或寄存器向量混淆起來。向量是一個單獨的元件,它的位寬是n,數組由多個元件組成,其中每個元件的位寬為n或1.
3 存儲器
Verilog中使用寄存器一維數組來表示存儲器。數字的每個元素成為一個元素或一個字(word),由一個數組索引來指定。每個字的位寬為1位或者多位。注意n個1位寄存器和一個n位寄存器是不同的。如果需要訪問存儲器中的一個特定的字,則可通過子的地址作為數組的下標來完成。
reg mem1bit[0:1023]; //1k的1位存儲器
reg [7:0] membyte [0:1023]; //1k的字節(8位)存儲器membyte
membyet[511] //取出membyte中地址511所處的字節
4 參數
Verilog使用關鍵字parameter在模塊內定義常數。參數代表常數,不能像變量那樣賦值,但是每個模塊實例的參數值可以在編譯階段被重載。通過參數重載使得用戶可以對模塊實例進行定制。除此之外還可以對參數的類型和范圍進行定義。
parameter port_id = 5; //定義常數port_id 為5
5 字符串
字符串保存在reg類型的變量中,每個字符占用8位(一個字節),因此寄存器變量的寬度應足夠大,以保證容納全部字符。如果寄存器變量的寬度大於字符串的大小,則verilog用0來填充左邊的空余位。如果寄存器變來那個的寬度小於字符串的大小,則verilog截去字符串最左邊的位。