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