數據類型及常量、變量
數據類型
數據類型是用來表示數字電路中的數據存儲和傳送單元
4種基本的數據類型
integer(整形)
parameter類型
reg
wire(線網)
常量
在程序運行的過程中,其值不允許被改變
包括:
數字(包括整形,x和z值,負數)
parameter常量(或稱符號常量)
1. 整數型常量
二進制 (b/B)
十進制 (d/D)
十六進制 (h/H)
八進制 (o/O)
整常數的3種表達方式
<位寬>'<進制><數字> | 完整的表達方式 | 8'11000101或 8'hc5 |
<進制><數字> | 缺省位寬,有機器系統決定,至少32位 | hc5 |
<數字> | 缺省進制為十進制,位寬默認為32位 | 197 |
表達方式 | 說明 | 舉例 |
---|
注:位寬表示二進制時的寬度
2.x和z值
x表示不定值(8'b1001xxxx或8’h9x);
z表示高阻值(8'b1001zzzz或8’h9z);
每個字符代表的二進制的寬度取決于所用的進制;
當用二進制表示時,以表明位寬的數若用x或者z表示某些位,則只有在最左邊的x或z具有擴展性例如:8'bzx = 8'bzzzz_zzzx 8'b1x = 8'b0000_001x
?是z的另一種表示符號,建議在case語句中使用?表示高阻態z。
casez (select) 4'h???1: out=a; 4'h??1?: out=b; 4'h?1??: out=c; 4'h1???: out=d; endcase
3.負數
在位寬前邊加一個負號,表示負數;
如:-8’d5 //5的補數 =8'11111011
負號不能放在位寬和進制之間,也不能放在進制和數字之間
4.parameter常量(符號常量)
用parameter來定義一個標示符,代表一個常量,稱為符號常量
格式:
parameter 參數名1 = 表達式, 參數名2 = 表達式;
parameter 參數型數據的確認符,后邊的為賦值語句表
每個賦值語句的右邊必須為常數表達式,且只能包含數字或先前定義過的符號常量:
parameter addrwidth =16; //合法
parameter addrwidth = addrwidth * 2 //非法
常用參數來定義延時時間和變量寬度
可用字符串表示的任何地方,都可用定義的參數來代替;
參數是本地的,其定義只在本模塊有效;
在模塊或實例例化時,可通過參數傳遞改變在被引用模塊或實例中已定義的參數
localparam 符號常量:
格式:
localparam 參數名1 = 表達式, 參數名2 = 表達式;
localparam 參數型數據的確認符,后邊的為賦值語句表
parameter可作為在頂層模塊中例化底層模塊時傳遞參數的接口;
localparam的作用域僅僅限于當前module,不能作為參數傳遞的接口;
實例:
module mod (out, ina, inb); ... parameter cycle = 8, real_cinstant = 2.039; ... endmodule module test; ... mod #(6,3.19) mk(out,ain,bin); //對mod模塊的實例引用及參數的傳遞 ... endmodule
變量
在程序運行過程中,其值可以改變的量,稱為變量;
常用的有3種:
網絡型(nets)
寄存器型(register)
數組(memory)
1.net型變量
輸出始終隨輸入的變化二變化的變量(表示結構實體之間的物理連接)
常用的net變量為wire。
wire型變量
最常用的nets型變量,常用來表示以assign語句賦值的組合邏輯信號
模塊中的輸入/輸出信號類型缺省為wire型
可用做任何方程式的輸入,或“assign”語句和實例元件的輸出。
2.register 型變量
對應具有狀態保持作用的電路元件(如觸發器,寄存器)
常用來表示過程塊語句(initial always,task,function)內的指定信號
常用register型變量:
reg:常代表觸發器
integer:32位帶符號整數型變量
real:64位帶符號實數型變量
time:無符號時間變量
register變量與net變量的根本區別:register變量要被明確的賦值,并且在被重新賦值前一直保持原值
register變量必須通過過程語句塊賦值,不能使用assign語句塊賦值
在過程語句塊內賦值的每個信號必須定義成register型。
reg型變量
在過程塊中被賦值的信號,往往代表觸發器,但不一定就是觸發器(也可以是組合邏輯信號)
· reg與wire的區別:
//reg型變量既可以生成觸發器,也可以生成組合邏輯 //wire型變量只能生成組合邏輯 //用reg變量生成組合邏輯 module rw1(a,b,out1,out2); input a,b; output out1, out2; reg out1; wireout2; assign out2 = a; //連續賦值語句 always @(b) //電平觸發 out1 <=~b; //過程賦值語句 endmodule? //用reg變量生成觸發器 module rw2(clk,d,out1,out2); input clk,d; output out1, out2; reg out1; wire????out2; assign out2 = d & ~out1; //連續賦值語句 always @(posedge clk) //邊沿觸發 begin out1 <= d; //過程賦值語句 end endmodule
· 邊沿觸發和電平觸發的區別:
邊沿觸發:posedge定義為上升沿觸發,只有在后面信號由低變高的時候才觸發,negedge正好相反,為下降沿觸發。
電平觸發:當敏感信號發生變化是觸發
3.memory型變量——數組
有若干個相同寬度的reg向量構成的數組
Verilog 通過reg型變量簡歷數組來對存儲器建模
memory型變量可描述RAM,ROM和reg文件
memory型變量通過擴展reg型變量的地址范圍來生成
reg [n-1:0] 存儲器名[m-1:0]; 每個存儲單元位寬為n,共有m個存儲單元
例:
reg [n-1:0] rega; //一個n位的寄存器;
reg mema [n-1:0] ; //n個一位寄存器組成的存儲器
賦值方式不同:
一個n位的寄存器可用一條賦值語句賦值,一個完整的存儲器則不行,若要對某存儲器中的存儲單元進行讀寫操作,必須指明該單元在存儲器中的地址!
例:
rega=0; //合法賦值語句
mema=0; // 非合法賦值語句
mema[8]=1;//合法賦值語句
mema[1023:0]=0; //合法賦值語句
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5336瀏覽量
120232 -
ROM
+關注
關注
4文章
563瀏覽量
85733 -
RAM
+關注
關注
8文章
1368瀏覽量
114647 -
觸發器
+關注
關注
14文章
2000瀏覽量
61132 -
Verilog語言
+關注
關注
0文章
113瀏覽量
8224
原文標題:IC學霸筆記 | Verilog基本語法之數據類型
文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論