Verilog中共有19種數(shù)據(jù)類型。
基本的四種類型: reg型、wire型、integer型、parameter型。
其他類型:large型、medium型、small型、scalared型、time型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。
這14中數(shù)據(jù)類型除time外都與基本邏輯單元建庫有關。
A、常 量
(1)數(shù) 字
整數(shù),整型常量即整常數(shù)有以下4種進制表示形式:1)二進制(b或B);2)十進制(d或D);3)十六進制(h或H);4)八進制(o或O)。
數(shù)字表達式分為三種:
1)<位寬><進制><數(shù)字>,這是最完整的形式。
2)<進制><數(shù)字>,數(shù)字的位寬采用默認位寬(不同的機器系統(tǒng)不同,至少32位)。
3)<數(shù)字>,采用默認進制(十進制)。
示例:(位寬指的是時間所占位數(shù),而不是指十六進制有幾位。如示例二,每一位十六進制數(shù)字需要4位二進制數(shù)字表示,所以2位十六進制的位寬為8)
8'b10101100 //位寬為8的二進制數(shù)字10101100
8'ha2 //位寬為8的十六進制數(shù)字a2
x值和z值:在數(shù)字電路中,x代表不定值,z代表高阻值。一個x可以定義十六進制的4位,八進制的3位。z的表示方式同x相同,另外z亦可以用“?”來表示。(case塊中用得較多)
4'b10x0 //位寬為4的二進制數(shù)從低位數(shù)起第二位為不定值
4'b101z //位寬為4的二進制數(shù)從低位數(shù)起第一位為高阻值
12'dz //位寬為12的10進制數(shù),其值為高阻值(形式一)
12'd? //位寬為12的10進制數(shù),其值為高阻值(形式二)
8'h4x //位寬為8的十六進制數(shù),其低4位為不定值
負數(shù):在位寬前面加一個減號,減號必須在數(shù)字定義表達式的最前面。
-8'd5 //代表5的補數(shù)(采用8位二進制表示)
下劃線:用于區(qū)別開數(shù)字的表達式以提高程序的可讀性。不能用在位寬和進制的地方,只能用在數(shù)字之間(數(shù)字前也不可以)。
16'b1010_1011_1111_1010 //合法形式
常量未加標志時,默認為32位的十進制數(shù),字母用八位的ASCII值表示。
"AB"=16'b01000001_01000010 //字符串AB,為十六進制數(shù)16'h4142
(2)參數(shù)型(parameter)
用parameter來定義一個標志符代表一個常量,稱作符號常量,他可以提高程序的可讀性和可維護性。parameter是參數(shù)型數(shù)據(jù)的關鍵字,在每一個賦值語句的右邊都必須是一個常數(shù)表達式。即該表達式只能包含數(shù)字或先前已經(jīng)定義的參數(shù)。
parameter msb=7; //定義參數(shù)msb=7
parameter r=5.7; //定義r為一個實型參數(shù)5.7
parameter byte_size=8,byte_msb=byte_size-1; //利用常數(shù)表達式賦值
參數(shù)型常量經(jīng)常用于定義延遲時間和變量寬度。在模塊和實例引用時,可以通過參數(shù)傳遞改變在被引用模塊或?qū)嵗幸呀?jīng)定義的參數(shù)。
本書(1)(p31)介紹了兩種方法:
1)引用實例時,通過參數(shù)的傳遞來改變已經(jīng)定義的參數(shù)值。 Decode #(4,0) D1(A4,F16)
2)在多層次的模塊中,改變參數(shù)需要使用defparam命令。 defparam Test.T.B1.P=2; //Test、T、B1分別是高層模塊中的底層模塊實例。
B、變 量 網(wǎng)絡數(shù)據(jù)類型表示結(jié)構實體之間的物理連接。網(wǎng)絡數(shù)據(jù)類型的變量不能儲存數(shù)值,而且必須受到驅(qū)動器(門或連續(xù)賦值語句assign)的驅(qū)動。 (1)wire型,默認為高阻值z。 網(wǎng)絡數(shù)據(jù)類型包括 wire型 和 tri型 數(shù)據(jù)。 wire用于表示單個門驅(qū)動或者連續(xù)賦值語句驅(qū)動的網(wǎng)絡數(shù)據(jù)類型; tri型則用來表示多驅(qū)動器驅(qū)動的網(wǎng)絡型數(shù)據(jù)。 如果沒有定義wire和tri的邏輯強度,在多驅(qū)動元的情況下邏輯值會發(fā)生沖突,從而產(chǎn)生不確定值。(z的優(yōu)先級最低,x的優(yōu)先級最高) | wire / tri | 0 | 1 | x | z | 0 | 0 | x | x | 0 | 1 | x | 1 | x | 1 | x | x | x | x | x | z | 0 | 1 | x | z |
wire經(jīng)常用來表示以assign為關鍵字的組合邏輯信號。Verilog程序模塊中輸入輸出的信號類型默認時自動定義為wire型。參數(shù)定義格式如下;
wire [n-1,0] 數(shù)據(jù)名1,數(shù)據(jù)名2...數(shù)據(jù)名i; //表示共有 i 條總線,每臺總線內(nèi)有n條線路。或者 wire [n,1] 數(shù)據(jù)名1,數(shù)據(jù)名2...數(shù)據(jù)名i;
[n-1,0] 和 [n,1] 表示該數(shù)據(jù)的位寬為n。如:
wire a; //定義了1個1位的wire數(shù)據(jù)
wire [7,0] b; //定義了1個8位的wire數(shù)據(jù)
wire [4,1] a,b; //定義了2個4位的wire數(shù)據(jù)
(2)reg型,默認為不定值x。
寄存器是存儲單元的抽象,寄存器數(shù)據(jù)類型的關鍵字是reg。常用來表示always模塊內(nèi)的指定信號,代表觸發(fā)器。在always模塊內(nèi)被賦值的每一個信號都必須定義成reg型。格式與wire型類似:
reg [n-1,0] 數(shù)據(jù)名1,數(shù)據(jù)名2,...數(shù)據(jù)名i;
reg [n,1] 數(shù)據(jù)名1,數(shù)據(jù)名2,...數(shù)據(jù)名i;
reg數(shù)據(jù)可以賦正值,也可以賦負值。但是當一個reg數(shù)據(jù)是一個表達式的操作式時,它的值被當做無符號值,即正值。如:4位的reg被賦值為-1,在表達式中為+15.
reg型只是表示被定義的信號將被用在always模塊中,并不是說reg型數(shù)據(jù)就一定是存儲器或觸發(fā)器的輸出。
(3)memory型(特殊的reg)
在Verilog中通過對reg數(shù)據(jù)建立數(shù)組來對存儲器進行建模,用來買哦書RAMROM和reg文件。verilog中沒有多維數(shù)組存在,memory型數(shù)據(jù)是通過擴展reg型數(shù)據(jù)的地址范圍實現(xiàn)的。存儲器的地址索引必須是常數(shù)表達式(n-1,m-1等必須是常量,符號常量也可以)。如:
reg [n-1,0] 存儲器名[m-1,0];
reg [n-1,0] 存儲器名[m,1];
在這里[n-1,0]定義了存儲器中每一個存儲單元的大小,即n位寄存器。存儲器名后面的[m-1,0],表示定義的存儲器中有多少個這樣的寄存器。
reg [7,0] mem[255,0]; //256個8位寄存器的存儲器mem
reg [n-1,0] rega; //一個n位的寄存器
reg mema[n-1,0] //n個1位的寄存器形成的存儲器
rega = 0; //合法,對n位的寄存器賦值位0
mema = 0; //非法,不能對完整的存儲器直接賦值
mema[3] = 0; //合法,將mema中第三個存儲單元賦值為0
完整的Word格式文檔51黑下載地址:
新建 Microsoft Word 文檔 (4) - 副本.docx
(21.51 KB, 下載次數(shù): 20)
2018-11-2 12:10 上傳
點擊文件名下載附件
Verilog
|