verilog中的數(shù)據(jù)類型大體可以分成net types和variable types。在verilog中的數(shù)據(jù)表示如下形式:
<bits>'<representation><value>
比如說4'b0001表示這個數(shù)據(jù)定義為四位寬,二進(jìn)制類型,除此之外還可以定義為16進(jìn)制4'h1,八進(jìn)制4'01,十進(jìn)制4'd1,除了這些常見數(shù)據(jù)之外,verilog還有兩個特殊變量:'x'和'z','x'表示的是未知數(shù)據(jù),'z'表示的是設(shè)置為高阻態(tài),數(shù)據(jù)定義方法跟其他一樣:4'bx。下面講述數(shù)據(jù)類型
net type
net數(shù)據(jù)用來描述不同組件之間的物理聯(lián)系,本身不能用于存儲數(shù)據(jù)或者驅(qū)動數(shù)據(jù),通常使用assign來將數(shù)據(jù)復(fù)制到到線上,比如說:
assign a=1'b1;
wire
最常用的數(shù)據(jù)類型,我們使用線網(wǎng)類型來聲明信號,這些信號是我們設(shè)計中非?;镜狞c(diǎn)對點(diǎn)連接,可以理解為電路中導(dǎo)線。
wire a;
assign a=1'b1;
wor&wand
這個類型的是將基本邏輯門插入電路,wor是邏輯或門,wand是邏輯與門,在我們使用這個類型的時候我們必須多次分配信號。我們這樣做是因為每個賦值代表底層邏輯門的一個輸入。我們可以很容易地在verilog中使用線類型來建模組合邏輯。因此,不建議使用wor和wand類型。
wor a;
wand b;
wire c,d;
//c也創(chuàng)建或門
assign a=c;
//d創(chuàng)建與門
assign b=d;
tri,triand,trior
使用這些類型的方式與wire、wor和wand類型完全相同。事實(shí)上,這些類型的功能完全相同。然而,我們可以使用它們來更清楚地顯示我們的設(shè)計意圖,verilog設(shè)計中也可以很容易地使用wire類型來表示它們的功能,不經(jīng)常用。
tri a;
assign tri=1'bz;
suppy0 & supply1
我們可以使用這些類型將信號綁定到二進(jìn)制1或0的常量值。由于這會產(chǎn)生一個與接地或Vcc相連的網(wǎng)絡(luò),因此我們不需要為這種類型分配數(shù)據(jù),也能用wire來實(shí)現(xiàn)。
supply0 a;// assign a=0;
supply1 b;//b=1;
variable type
我們在verilog中使用variable類型來存儲值。當(dāng)我們?yōu)樽兞款愋唾x值時,它會保持該值,直到再次賦值。
reg
verilog中最常用的變量類型是reg類型。每當(dāng)需要在設(shè)計中存儲值時,我們都可以使用此類型,用于對verilog中的組合邏輯進(jìn)行建模。我們需要在always模塊下使用賦值。
reg a;
always@(posedge clk)begin//時鐘過后觸發(fā)a
a<=b;
end
numeric variable type
verilog有兩種常見的數(shù)字類型,整形和實(shí)型,出這兩種之外的類型都用于單個數(shù)據(jù)位。
integer type
整數(shù)類型,是一個32位的2s補(bǔ)碼數(shù),可以用來表示verilog中任何整數(shù),當(dāng)我們使用整數(shù)類型時,我們?yōu)樽兞糠峙鋽?shù)值而不是二進(jìn)制值,我們通常在verilog中使用整數(shù)作為常量或循環(huán)變量。
integer i;
for(i=0;i<=32;i=i+1)begin
a<=1;
end
real type
除了整數(shù)類型,我們還可以在verilog中使用實(shí)數(shù)類型。我們使用這種類型來存儲非整數(shù),即也有小數(shù)部分的數(shù)字。實(shí)數(shù)類型通常在verilog中實(shí)現(xiàn)為64位浮點(diǎn)數(shù)。因此,它不能直接合成,我們通常只在verilog的testbench使用真實(shí)類型,我們可以使用十進(jìn)制或科學(xué)記數(shù)法為實(shí)數(shù)類型賦值。
real a;
a=2.5;
#1000
a=1e-3;
除了numerical type,所有的類型都是一個數(shù)據(jù)位寬我們在verilog中也可以通過數(shù)據(jù)總線來傳輸數(shù)據(jù),因此可以定義數(shù)據(jù)位寬。size是[位寬-1:0]/[位寬:1]表示幾個位寬
<type><size><variable_name>
reg [3:0] a;//a為4位寬
always@(posedge clk)begin
a<=4'b1010;
//a<=4'ha;//16進(jìn)制
end
數(shù)組
我們還可以在verilog中創(chuàng)建和使用數(shù)組類型,我們只需在變量名后面添加一個額外的字段,該字段聲明數(shù)組中有多少元素。<elements>字段來聲明數(shù)組的大小。
<type><size><variable_name><elements>
reg [2:0] a [7:0];//3位寬的數(shù)組,數(shù)組中有8個元素
我們可以使用方括號訪問數(shù)組類型中的各個元素。例如,下面的verilog代碼顯示了如何將5h值分配給示例數(shù)組中的最后一個元素。
a[7] =3'h5;
參考:An Introduction to Verilog Data Types and Arrays - FPGA Tutorial文章來源:http://www.zghlxwxcb.cn/news/detail-513245.html
這是個好網(wǎng)站!文章來源地址http://www.zghlxwxcb.cn/news/detail-513245.html
到了這里,關(guān)于verilog基礎(chǔ):數(shù)據(jù)類型定義的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!