版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-3-161 數(shù)據(jù)類(lèi)型用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)存數(shù)據(jù)類(lèi)型用來(lái)表示數(shù)字電路硬件中的數(shù)據(jù)存儲(chǔ)和傳送的元素。儲(chǔ)和傳送的元素。Verilog HDLVerilog HDL共有共有19種數(shù)據(jù)類(lèi)型,分種數(shù)據(jù)類(lèi)型,分2 2大類(lèi)數(shù)據(jù):大類(lèi)數(shù)據(jù): 線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型 表示器件之間的物理連接。表示器件之間的物理連接。 其數(shù)值由驅(qū)動(dòng)元件決定,如果沒(méi)有驅(qū)動(dòng)元件連接到其數(shù)值由驅(qū)動(dòng)元件決定,如果沒(méi)有驅(qū)動(dòng)元件連接到線網(wǎng)上,線網(wǎng)上,則其默認(rèn)值為高阻則其默認(rèn)值為高阻Z Z。 寄存器類(lèi)型寄存器類(lèi)型 表示數(shù)據(jù)的儲(chǔ)存單元。表示數(shù)據(jù)的儲(chǔ)存單元。 其默認(rèn)值為不定其默認(rèn)值為不定X X。 兩者最大的區(qū)別:兩者最大的區(qū)別: 寄存器類(lèi)
2、型保持最后一次的賦值,而線網(wǎng)類(lèi)型則需寄存器類(lèi)型保持最后一次的賦值,而線網(wǎng)類(lèi)型則需要持續(xù)的驅(qū)動(dòng)。要持續(xù)的驅(qū)動(dòng)。數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型2022-3-162wirewire(網(wǎng)絡(luò)連線)(網(wǎng)絡(luò)連線): 由模塊或門(mén)驅(qū)動(dòng)的連線。由模塊或門(mén)驅(qū)動(dòng)的連線。 驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻傳遞到輸出的連線上。傳遞到輸出的連線上。 例如:右圖上,例如:右圖上,selbselb的改的改變,會(huì)自動(dòng)地立刻影響或變,會(huì)自動(dòng)地立刻影響或門(mén)的輸出。門(mén)的輸出。 netsabslselbselanslout線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型2022-3-163線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型l線網(wǎng)型數(shù)據(jù)常用來(lái)表示以線網(wǎng)型數(shù)據(jù)常用來(lái)表示以assignassi
3、gn關(guān)鍵字指定的組合關(guān)鍵字指定的組合邏輯信號(hào)。邏輯信號(hào)。lVerilogVerilog程序模塊中輸入輸出信號(hào)類(lèi)型缺省時(shí)自動(dòng)程序模塊中輸入輸出信號(hào)類(lèi)型缺省時(shí)自動(dòng)定義為定義為wirewire型。型。lwirewire型信號(hào)可以用作任何方程式的輸入,也可以用型信號(hào)可以用作任何方程式的輸入,也可以用作作“assign”assign”語(yǔ)句或?qū)嵗妮敵?。語(yǔ)句或?qū)嵗妮敵?。l定義格式:定義格式: wire wire 位寬位寬 數(shù)據(jù)名數(shù)據(jù)名1, 1, 數(shù)據(jù)名數(shù)據(jù)名2, 2, 數(shù)據(jù)名數(shù)據(jù)名n;n; wire a; / wire a; /定義了一個(gè)一位的定義了一個(gè)一位的wirewire型數(shù)據(jù)型數(shù)據(jù) wir
4、e 7:0 b;/wire 7:0 b;/定義了一個(gè)八位的定義了一個(gè)八位的wirewire型數(shù)據(jù)型數(shù)據(jù) wire 4:1 c,d; /wire 4:1 c,d; /定義了二個(gè)四位的定義了二個(gè)四位的wirewire型數(shù)據(jù)型數(shù)據(jù)2022-3-164線網(wǎng)類(lèi)型變量的種類(lèi):線網(wǎng)類(lèi)型變量的種類(lèi):類(lèi)型 功能 wire, triwire, tri 對(duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。?duì)應(yīng)于標(biāo)準(zhǔn)的互連線(缺?。﹕upply1, supply2 supply1, supply2 對(duì)應(yīng)于電源線或接地線對(duì)應(yīng)于電源線或接地線wor, trior wor, trior 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線或邏輯連
5、接wand, triand wand, triand 對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接對(duì)應(yīng)于有多個(gè)驅(qū)動(dòng)源的線與邏輯連接trireg trireg 對(duì)應(yīng)于有電容存在能暫時(shí)存儲(chǔ)電平連接對(duì)應(yīng)于有電容存在能暫時(shí)存儲(chǔ)電平連接tri1, tri0 tri1, tri0 對(duì)應(yīng)于需要上拉或下拉的連接對(duì)應(yīng)于需要上拉或下拉的連接 如果不明確地說(shuō)明連接是何種類(lèi)型,默認(rèn)為如果不明確地說(shuō)明連接是何種類(lèi)型,默認(rèn)為wirewire類(lèi)型。類(lèi)型。 其中只有其中只有wire, tri , supply1, supply2wire, tri , supply1, supply2是可是可綜合的,其余只能用于仿真語(yǔ)句綜合的,其余只能用
6、于仿真語(yǔ)句2022-3-165線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型lVerilogVerilog語(yǔ)法規(guī)定可以對(duì)語(yǔ)法規(guī)定可以對(duì)wirewire型變量有多個(gè)驅(qū)動(dòng),型變量有多個(gè)驅(qū)動(dòng),但只有用于仿真,在實(shí)際電路中,對(duì)任何信號(hào)但只有用于仿真,在實(shí)際電路中,對(duì)任何信號(hào)有多個(gè)驅(qū)動(dòng)源都會(huì)產(chǎn)生不確定的后果,因此綜有多個(gè)驅(qū)動(dòng)源都會(huì)產(chǎn)生不確定的后果,因此綜合是過(guò)不去的合是過(guò)不去的 wire a,b,c; assign c =a; assign c =b;l在在VerilogVerilog定義中,定義中,wirewire、tritri功能是完全一致功能是完全一致的,提供這兩種不同名稱的目的是為了與模型的,提供這兩種不同名稱的目的是為了與
7、模型中所使用的變量實(shí)際情況相一致。中所使用的變量實(shí)際情況相一致。2022-3-166wire a b;ababcNAND2wire a,b,c; assign c =a & b ;線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型2022-3-167寄存器類(lèi)型寄存器類(lèi)型 寄存器型變量具有存儲(chǔ)性,即在接受下一個(gè)寄存器型變量具有存儲(chǔ)性,即在接受下一個(gè)賦值前,將保持原值,默認(rèn)的初始狀態(tài)為賦值前,將保持原值,默認(rèn)的初始狀態(tài)為“X”X”。 寄存器數(shù)據(jù)類(lèi)型包含下列寄存器數(shù)據(jù)類(lèi)型包含下列5 5類(lèi)數(shù)據(jù)類(lèi)型:類(lèi)數(shù)據(jù)類(lèi)型:lreg: reg: 最常用的,用于行為描述中對(duì)寄存器類(lèi)的說(shuō)明最常用的,用于行為描述中對(duì)寄存器類(lèi)的說(shuō)明lintegerinte
8、ger:3232位帶符號(hào)整形變量位帶符號(hào)整形變量ltimetime:6464位無(wú)符號(hào)時(shí)間變量位無(wú)符號(hào)時(shí)間變量lrealreal:6464位浮點(diǎn)、雙精度、帶符號(hào)實(shí)形變量位浮點(diǎn)、雙精度、帶符號(hào)實(shí)形變量lrealtimerealtime:其特征與:其特征與realreal型變量一致型變量一致2022-3-168寄存器類(lèi)型寄存器類(lèi)型(reg)(reg)l定義寄存器數(shù)據(jù)類(lèi)型的關(guān)鍵字是定義寄存器數(shù)據(jù)類(lèi)型的關(guān)鍵字是regreg,可以通過(guò)賦值語(yǔ)句,可以通過(guò)賦值語(yǔ)句改變寄存器存儲(chǔ)的值。改變寄存器存儲(chǔ)的值。lregreg類(lèi)型數(shù)據(jù)的缺省初始值為不定值類(lèi)型數(shù)據(jù)的缺省初始值為不定值x x,這在電路仿真時(shí)這在電路仿真時(shí)需
9、要十分注意,需要十分注意,建議仿真前都建議仿真前都要明確要明確給給每一個(gè)寄存器確每一個(gè)寄存器確定初始值定初始值。l在在“always“always或或initial”initial”塊內(nèi)被賦值每一個(gè)信號(hào)都必須定塊內(nèi)被賦值每一個(gè)信號(hào)都必須定義成義成regreg類(lèi)型類(lèi)型。l定義方式:定義方式:reg reg 位寬位寬 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, 數(shù)據(jù)名數(shù)據(jù)名i;i;reg rega; /reg rega; /定義了一個(gè)定義了一個(gè)1 1位位regreg型數(shù)據(jù)型數(shù)據(jù)reg 3:0 regb; /reg 3:0 regb; /定義一個(gè)定義一個(gè)4 4位的位的regreg型數(shù)據(jù)型數(shù)據(jù)reg
10、4:0 regc, regd; /reg 4:0 regc, regd; /定義兩個(gè)定義兩個(gè)5 5位的位的regreg型數(shù)據(jù)型數(shù)據(jù)2022-3-169 regreg型變量能保持其值,直到它被賦于新值。型變量能保持其值,直到它被賦于新值。 regreg型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)信號(hào)。信號(hào)。 常用行為語(yǔ)句結(jié)構(gòu)來(lái)給常用行為語(yǔ)句結(jié)構(gòu)來(lái)給regreg類(lèi)型的變量賦值。類(lèi)型的變量賦值。abslselbselansloutreg_areg_selreg_b 寄存器(寄存器(registerregister)類(lèi)型變量)類(lèi)型變量2022-3-1610wireclk,d
11、;reg q;always ( posedge clk ) q = d; reg reg型數(shù)據(jù)常用來(lái)表示型數(shù)據(jù)常用來(lái)表示“always”always”模塊內(nèi)的指定模塊內(nèi)的指定信號(hào),代表觸發(fā)器。信號(hào),代表觸發(fā)器。寄存器類(lèi)型寄存器類(lèi)型(reg)(reg)2022-3-1611d dout2out2AND2i1AND2i1clkclkout1out1D D Q QDFFDFFmodule rw2( clk, d, out1, out2 ) ; input clk, d;output out1, out2; reg out1; wire out2;assign out2 = d & (out1 );
12、always (posedge clk) begin out1 = d ; endendmodule 用寄存器用寄存器(reg)(reg)類(lèi)型變量生成觸發(fā)器例子類(lèi)型變量生成觸發(fā)器例子2022-3-1612寄存器類(lèi)型寄存器類(lèi)型(reg)(reg)注意:注意: regreg型只表示被定義的信號(hào)將用在型只表示被定義的信號(hào)將用在“alwaysalways或或initial”initial”塊內(nèi),理解這一點(diǎn)很重要。雖然塊內(nèi),理解這一點(diǎn)很重要。雖然regreg型信號(hào)常常是寄存型信號(hào)常常是寄存器或觸發(fā)器的輸出器或觸發(fā)器的輸出, ,但并不是說(shuō)但并不是說(shuō)regreg型信號(hào)一定是寄存器型信號(hào)一定是寄存器或觸發(fā)器的
13、輸出?;蛴|發(fā)器的輸出。aout2BUFFbINVout1module rw1( a, b, out1, out2 ) ;input a, b;output out1, out2;reg out1;wire out2; assign out2 = a ; always (b) out1 = b;endmodule 2022-3-1613regreg和和wirewire類(lèi)型變量的區(qū)別類(lèi)型變量的區(qū)別lregreg類(lèi)型的變量可以被直接賦予數(shù)值,向類(lèi)型的變量可以被直接賦予數(shù)值,向外輸出信號(hào)外輸出信號(hào)l而而wirewire類(lèi)型的變量值是由驅(qū)動(dòng)它的電路決類(lèi)型的變量值是由驅(qū)動(dòng)它的電路決定的定的2022-3-1
14、614位選擇和部分選擇位選擇和部分選擇 l位選擇從向量中抽取特定的位。形式如下:位選擇從向量中抽取特定的位。形式如下: wirewire或者或者regreg向量名向量名bit_select_exprbit_select_exprl reg 5:0 State;reg 5:0 State;l wire 3:0 Prtwire 3:0 Prt;lState1 & State4 /State1 & State4 /寄存器位選擇。寄存器位選擇。lPrt0 | Bbq /Prt0 | Bbq /線網(wǎng)位選擇。線網(wǎng)位選擇。2022-3-1615位選擇和部分選擇位選擇和部分選擇l在部分選擇中,向量的連續(xù)序列被
15、選擇。形式在部分選擇中,向量的連續(xù)序列被選擇。形式如下:如下:l wirewire或者或者regreg向量名向量名 常數(shù)表達(dá)式常數(shù)表達(dá)式1:1:常數(shù)表達(dá)式常數(shù)表達(dá)式22l reg 5:0 State;reg 5:0 State; wire 3:0 Prtwire 3:0 Prt; State4:1 /State4:1 /寄存器部分選擇。寄存器部分選擇。 Prt3:2 /Prt3:2 /線網(wǎng)部分選擇。線網(wǎng)部分選擇。2022-3-1616存儲(chǔ)器存儲(chǔ)器l通過(guò)對(duì)通過(guò)對(duì)regreg型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器型變量建立數(shù)組來(lái)對(duì)存儲(chǔ)器進(jìn)行進(jìn)行建模建模。reg n-1:0 reg n-1:0 存儲(chǔ)器名存儲(chǔ)器名m
16、-1:0m-1:0;lregn-1:0regn-1:0定義了存儲(chǔ)器中每一個(gè)存儲(chǔ)單元的大小,定義了存儲(chǔ)器中每一個(gè)存儲(chǔ)單元的大小,即該存儲(chǔ)單元是一個(gè)即該存儲(chǔ)單元是一個(gè)n n位的寄存器。位的寄存器。l存儲(chǔ)器名后的存儲(chǔ)器名后的m-1:0 m-1:0 則定義了該存儲(chǔ)器中有多少個(gè)則定義了該存儲(chǔ)器中有多少個(gè)這樣的寄存器這樣的寄存器( (即地址),最后用分號(hào)結(jié)束定義語(yǔ)句。即地址),最后用分號(hào)結(jié)束定義語(yǔ)句。reg 7:0 mema255reg 7:0 mema255:0; /256x80; /256x8位的存儲(chǔ)器。位的存儲(chǔ)器。2022-3-1617存儲(chǔ)器存儲(chǔ)器l一個(gè)由一個(gè)由n n個(gè)個(gè)1 1位寄存器構(gòu)成的存儲(chǔ)器組
17、不同于一個(gè)位寄存器構(gòu)成的存儲(chǔ)器組不同于一個(gè)n n位的寄存位的寄存器。器。 reg n-1:0 rega; /reg n-1:0 rega; /一個(gè)一個(gè)n n位的寄存器位的寄存器 reg meman-1:0; /reg meman-1:0; /一個(gè)由一個(gè)由n n個(gè)個(gè)1 1位寄存器構(gòu)成存儲(chǔ)器組位寄存器構(gòu)成存儲(chǔ)器組l一個(gè)一個(gè)n n位的寄存器可以在一條賦值語(yǔ)句里進(jìn)行賦值,而一個(gè)位的寄存器可以在一條賦值語(yǔ)句里進(jìn)行賦值,而一個(gè)完整的存儲(chǔ)器則不行。完整的存儲(chǔ)器則不行。 rega =0; /rega =0; /合法賦值語(yǔ)句合法賦值語(yǔ)句 mema =0; /mema =0; /非法賦值語(yǔ)句非法賦值語(yǔ)句 mema
18、3=0;/mema3=0;/正確正確. .給給memorymemory中的第中的第3 3個(gè)存儲(chǔ)單元賦值個(gè)存儲(chǔ)單元賦值0.0.2022-3-1618 輸入口(輸入口(inputinput)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),)可以由寄存器或網(wǎng)絡(luò)連接驅(qū)動(dòng),(即外部連接它可以是(即外部連接它可以是regreg或或wirewire型),但它本身型),但它本身只能是只能是wirewire型。型。 輸出口輸出口(output)(output)可以是可以是wirewire或或regreg型,但它本身只型,但它本身只能驅(qū)動(dòng)線網(wǎng)型,即外部連接它只能是能驅(qū)動(dòng)線網(wǎng)型,即外部連接它只能是wirewire型型 。 輸入輸入/
19、/輸出口輸出口(inout)(inout)只能定義為只能定義為wirewire型,并且與型,并且與它連接也只能是它連接也只能是wirewire型。型。 如果信號(hào)變量是在過(guò)程塊如果信號(hào)變量是在過(guò)程塊 (initial(initial塊塊 或或 alwaysalways塊塊) )中被賦值的,必須把它聲明為寄存器類(lèi)型變量中被賦值的,必須把它聲明為寄存器類(lèi)型變量 如何選擇數(shù)據(jù)類(lèi)型如何選擇數(shù)據(jù)類(lèi)型2022-3-1619如何選擇數(shù)據(jù)類(lèi)型如何選擇數(shù)據(jù)類(lèi)型舉例說(shuō)明例化時(shí)數(shù)據(jù)類(lèi)型舉例說(shuō)明例化時(shí)數(shù)據(jù)類(lèi)型的選擇的選擇module top;wire y; reg a, b; DUT u1(y,a,b); initia
20、l begin a = 0; b = 0; #10 a =1; . endendmodule 模塊模塊DUT的邊界的邊界輸入口輸入口輸出口輸出口輸出輸出/入口入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B);output Y;input A,B: wire Y, A, B; and (Y, A, B);endmodule2022-3-1620 選擇數(shù)據(jù)類(lèi)型時(shí)常犯的錯(cuò)誤選擇數(shù)據(jù)類(lèi)型時(shí)常犯的錯(cuò)誤 把模塊的輸入信號(hào)定義為寄存器類(lèi)型了。把模塊的輸入信號(hào)定義為寄存器類(lèi)型了。 把例化后的輸出連接出去時(shí),把它定義為寄存把例化后的輸出
21、連接出去時(shí),把它定義為寄存器類(lèi)型了。器類(lèi)型了。 在過(guò)程塊中對(duì)變量賦值時(shí),忘了把它定義為寄在過(guò)程塊中對(duì)變量賦值時(shí),忘了把它定義為寄存器類(lèi)型(存器類(lèi)型(regreg)或已把它定義為連接類(lèi)型了)或已把它定義為連接類(lèi)型了(wirewire)。)。這是經(jīng)常犯的三個(gè)錯(cuò)誤!這是經(jīng)常犯的三個(gè)錯(cuò)誤!如何選擇數(shù)據(jù)類(lèi)型如何選擇數(shù)據(jù)類(lèi)型2022-3-1621參數(shù)(參數(shù)(parametersparameters)l在在Verilog Verilog 中用中用parameterparameter定義一個(gè)代表常量的標(biāo)識(shí)符定義一個(gè)代表常量的標(biāo)識(shí)符, ,稱稱為符號(hào)常量為符號(hào)常量, ,采用標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性采用
22、標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性和可維護(hù)性,且在和可維護(hù)性,且在有限狀態(tài)機(jī)中經(jīng)常使用符號(hào)常量。有限狀態(tài)機(jī)中經(jīng)常使用符號(hào)常量。l參數(shù)型常數(shù)也經(jīng)常用于定義延遲時(shí)間和變量寬度。參數(shù)型常數(shù)也經(jīng)常用于定義延遲時(shí)間和變量寬度。l parameter parameter 參數(shù)名參數(shù)名1 1表達(dá)式表達(dá)式1 1,,參數(shù)名參數(shù)名n n表達(dá)式表達(dá)式n n;parameter wordsize=16,parameter wordsize=16, memsize=256; / memsize=256; /定義二個(gè)參數(shù);定義二個(gè)參數(shù);reg wordsize-1:0 memmemsize-1:0; /reg word
23、size-1:0 memmemsize-1:0; /存儲(chǔ)器聲明存儲(chǔ)器聲明l參數(shù)是本地的,其定義只在本模塊內(nèi)有效參數(shù)是本地的,其定義只在本模塊內(nèi)有效2022-3-1622參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞來(lái)改變被引用在模塊或?qū)嵗脮r(shí)可通過(guò)參數(shù)傳遞來(lái)改變被引用模塊或?qū)嵗幸讯x的參數(shù)。模塊或?qū)嵗幸讯x的參數(shù)。參數(shù)(參數(shù)(parametersparameters)module adder (a, b,sum); parameter wid = 8; Input wid-1:0 a,b; output wid:0 sum; endmodulemodule TOP(in
24、a,inb,out); input 8:0 ina,inb; output 9:0 out; . adder u1(ina,inb,out,); defparam u1.wid=9; endmodule參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 方法一方法一2022-3-1623參數(shù)(參數(shù)(parametersparameters)module adder (a, b,sum); parameter wid = 8; Input wid-1:0 a,b; output wid:0 sum; endmodulemodule TOP(ina,inb,out); input 8:0 ina,inb; outpu
25、t 9:0 out; . adder #(9) u1(ina,inb,out,);endmodule參數(shù)值的改寫(xiě)參數(shù)值的改寫(xiě): : 方法二方法二2022-3-1624賦值運(yùn)算符賦值運(yùn)算符l分連續(xù)賦值和過(guò)程賦值兩種分連續(xù)賦值和過(guò)程賦值兩種l過(guò)程賦值主要用于兩種結(jié)構(gòu)模塊過(guò)程賦值主要用于兩種結(jié)構(gòu)模塊(initial(initial和和always)always),分為阻塞和非阻塞賦值。,分為阻塞和非阻塞賦值。l連續(xù)賦值語(yǔ)句只能對(duì)線網(wǎng)型變量進(jìn)行賦值,連續(xù)賦值語(yǔ)句只能對(duì)線網(wǎng)型變量進(jìn)行賦值,而不能對(duì)寄存器變量進(jìn)行賦值而不能對(duì)寄存器變量進(jìn)行賦值l連續(xù)賦值語(yǔ)句的語(yǔ)法為連續(xù)賦值語(yǔ)句的語(yǔ)法為: : assign
26、assign # #延時(shí)量延時(shí)量 線網(wǎng)型變量名線網(wǎng)型變量名= = 賦值表達(dá)式賦值表達(dá)式 只要右端表達(dá)式中任一個(gè)操作數(shù)值發(fā)生變化,只要右端表達(dá)式中任一個(gè)操作數(shù)值發(fā)生變化,就會(huì)立即觸發(fā)對(duì)被賦值變量的更新操作就會(huì)立即觸發(fā)對(duì)被賦值變量的更新操作2022-3-1625連續(xù)賦值語(yǔ)句應(yīng)用連續(xù)賦值語(yǔ)句應(yīng)用l對(duì)標(biāo)量線網(wǎng)賦值對(duì)標(biāo)量線網(wǎng)賦值wire a,b;wire a,b; assign a =b; assign a =b;l對(duì)矢量線網(wǎng)賦值對(duì)矢量線網(wǎng)賦值wire 7:0 a,b;wire 7:0 a,b; assign a =b; assign a =b;l對(duì)矢量線網(wǎng)某幾位賦值對(duì)矢量線網(wǎng)某幾位賦值wire 7:0
27、 a,b;wire 7:0 a,b; assign a3:0 =b4:1; assign a3:0 =b4:1;l對(duì)任意拼接線網(wǎng)賦值對(duì)任意拼接線網(wǎng)賦值wire a,b;wire a,b;wire 1:0 c,d;wire 1:0 c,d; assign c = a , b; assign a , b=d; assign c = a , b; assign a , b=d;2022-3-1626VerilogVerilog中的大小中的大小(size)(size)與符號(hào)與符號(hào)lVerilogVerilog會(huì)根據(jù)表達(dá)式中變量長(zhǎng)度對(duì)表達(dá)式值自動(dòng)地進(jìn)行調(diào)整。會(huì)根據(jù)表達(dá)式中變量長(zhǎng)度對(duì)表達(dá)式值自動(dòng)地進(jìn)行調(diào)整
28、。lVerilogVerilog自動(dòng)截?cái)嗷驍U(kuò)展賦值語(yǔ)句中右邊的值以適應(yīng)左邊變量自動(dòng)截?cái)嗷驍U(kuò)展賦值語(yǔ)句中右邊的值以適應(yīng)左邊變量的長(zhǎng)度。的長(zhǎng)度。module sign_size; reg 3:0 a, b; reg 15:0 c; initial begin a = -1; / a是無(wú)符號(hào)數(shù),因此其值為是無(wú)符號(hào)數(shù),因此其值為1111 b = 8; c= 8; / b = c = 1000 #10 b = b + a; / 結(jié)果結(jié)果10111截?cái)嘟財(cái)? b = 0111 #10 c = c + a; / c = 10111 endendmodule 當(dāng)一個(gè)當(dāng)一個(gè)負(fù)數(shù)賦值給負(fù)數(shù)賦值給無(wú)符號(hào)變量無(wú)符號(hào)變
29、量如如regreg時(shí),時(shí),VerilogVerilog自自動(dòng)完成二進(jìn)動(dòng)完成二進(jìn)制補(bǔ)碼計(jì)算制補(bǔ)碼計(jì)算2022-3-1627邏輯反與位反的對(duì)比邏輯反與位反的對(duì)比module negation(); reg 3: 0 rega, regb; reg 3: 0 bit; reg log; initial begin rega = 4b1011; regb = 4b0000; end initial fork #10 bit = rega; / num = 0100 #20 bit = regb; / num = 1111 #30 log = !rega; / num = 0 #40 log = !re
30、gb; / num = 1 #50 $finish; joinendmodule! logical not 邏輯反邏輯反 bit-wise not 按位反按位反 邏輯反的結(jié)果為一位邏輯反的結(jié)果為一位1 1,0 0或或x x。按位反的結(jié)果與操作數(shù)按位反的結(jié)果與操作數(shù)的位數(shù)相同的位數(shù)相同 邏輯反操作符將操作數(shù)邏輯反操作符將操作數(shù)的邏輯值取反。例如,若的邏輯值取反。例如,若操作數(shù)為全操作數(shù)為全0 0,則其邏輯值,則其邏輯值為為0 0,邏輯反操作值為,邏輯反操作值為1 1。2022-3-1628邏輯等邏輯等case等(綜合工具不支持等(綜合工具不支持!)等式運(yùn)算符等式運(yùn)算符2022-3-1629等式運(yùn)
31、算符等式運(yùn)算符l“=”“=”和和“!=”!=”又稱為邏輯等式運(yùn)算符。其結(jié)又稱為邏輯等式運(yùn)算符。其結(jié)果由兩個(gè)操作數(shù)的值決定。由于操作數(shù)中某些果由兩個(gè)操作數(shù)的值決定。由于操作數(shù)中某些位可能是不定值位可能是不定值x x和高阻值和高阻值z(mì),z,結(jié)果可能為不定結(jié)果可能為不定值值x x。l而而“=”=”和和“!=”!=”運(yùn)算符則不同運(yùn)算符則不同, ,它在對(duì)操它在對(duì)操作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值x x和高阻值和高阻值z(mì) z也進(jìn)行比較也進(jìn)行比較, ,兩個(gè)操作數(shù)必需完全一致,兩個(gè)操作數(shù)必需完全一致,其結(jié)其結(jié)果才是果才是1 1,否則為,否則為0 0。lcasecase等只能用于仿真
32、描述,不能用于等只能用于仿真描述,不能用于RTLRTL描述描述。2022-3-1630相等操作符相等操作符 賦值操作符,將等式右邊表達(dá)式的值拷貝到左邊賦值操作符,將等式右邊表達(dá)式的值拷貝到左邊。注意邏輯等與注意邏輯等與casecase等的差別等的差別= 邏輯等邏輯等= = case等等= = =2b1x=2b0 x 值為值為0,因?yàn)椴幌嗟龋驗(yàn)椴幌嗟?b1x=2b1x 值為值為x,因?yàn)榭赡懿?,因?yàn)榭赡懿幌嗟?,也可能相等相等,也可能相?b1x=2b0 x 值為值為0,因?yàn)椴幌嗤?,因?yàn)椴幌嗤?b1x=2b1x 值為值為1,因?yàn)橄嗤?,因?yàn)橄嗤琣 = 2b1x;b = 2b1x;if (a = b)
33、 $display( a is equal to b);else $display( a is not equal b);a = 2b1x;b = 2b1x;if (a = b) $display( a is identical b);else$display(a is not identic b);2022-3-1631wire7:0in, out;wire2:0sft;assignout = in 4; assign a7:4 = 4b0000;assign a3:0 = b7:4; 移位運(yùn)算符移位運(yùn)算符(右移位運(yùn)算符右移位運(yùn)算符) )都用都用0 0來(lái)填補(bǔ)移出空位。來(lái)填補(bǔ)移出空位。 202
34、2-3-1632條件運(yùn)算符條件運(yùn)算符條件條件? :module likebufif( in, en, out); input in; input en; output out; assign out = (en = 1) ? in : bz;endmodulemodule like4to1( a, b, c, d, sel, out); input a, b, c, d; input 1: 0 sel; output out; assign out = sel = 2b00 ? a : sel = 2b01 ? b : sel = 2b10 ? c : d;endmodule 如果條件值為如果
35、條件值為x x或或z z,則,則結(jié)果可能為結(jié)果可能為x x或或z z2022-3-1633條件操作符條件操作符 每個(gè)條件操作符必須有三個(gè)參數(shù),缺少任何一個(gè)都會(huì)產(chǎn)生每個(gè)條件操作符必須有三個(gè)參數(shù),缺少任何一個(gè)都會(huì)產(chǎn)生錯(cuò)誤。最后一個(gè)操作數(shù)作為缺省值。錯(cuò)誤。最后一個(gè)操作數(shù)作為缺省值。語(yǔ)法為:語(yǔ)法為: = ? :其意思是:其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expressionregistger = condition ? true_value:false_value;例如:例如:assign out
36、 = (sel = 0) ? a : b;assign out = (sel = 0) ? a : b;若若selsel為為0 0則則out=aout=a;若;若selsel為為1 1則則out=bout=b。如果。如果selsel為為x x或或z z,若,若a=b=0a=b=0,則,則out=0out=0;若;若abab,則,則outout值不確定。值不確定。 上式中,若上式中,若conditioncondition為真為真, ,則則registerregister等于等于true_valuetrue_value;若;若conditioncondition為假為假, ,則則registerr
37、egister等于等于false_valuefalse_value。若條件值不確。若條件值不確定,且定,且true_valuetrue_value和和false_valuefalse_value不相等,則輸出不確定值。不相等,則輸出不確定值。2022-3-1634賦值語(yǔ)句賦值語(yǔ)句l在在Verilog HDLVerilog HDL中,信號(hào)有兩種賦值方式中,信號(hào)有兩種賦值方式 阻塞阻塞(Blocking)(Blocking)賦值方式賦值方式 “ “= ”= ”,如,如 b = a;b = a; 賦值語(yǔ)句執(zhí)行完后賦值語(yǔ)句執(zhí)行完后, ,塊才結(jié)束。塊才結(jié)束。b b的值在賦值語(yǔ)句執(zhí)行完后立刻就改變的。的值
38、在賦值語(yǔ)句執(zhí)行完后立刻就改變的。描述時(shí)序電路可能會(huì)產(chǎn)生意想不到的結(jié)果。描述時(shí)序電路可能會(huì)產(chǎn)生意想不到的結(jié)果。 非阻塞非阻塞(Non_Blocking)(Non_Blocking)賦值方式賦值方式“ ”,如,如b=a;b=a; 塊結(jié)束后才完成賦值操作。塊結(jié)束后才完成賦值操作。b b的值并不是立刻就改變的。的值并不是立刻就改變的。這是一種比較常用的賦值方法(特別在編寫(xiě)可這是一種比較常用的賦值方法(特別在編寫(xiě)可綜合時(shí)序模塊時(shí))。綜合時(shí)序模塊時(shí))。2022-3-1635阻塞賦值阻塞賦值l阻塞賦值操作符用等號(hào)阻塞賦值操作符用等號(hào)(=)(=)表示。阻塞賦值時(shí)先計(jì)算表示。阻塞賦值時(shí)先計(jì)算等號(hào)右手方向(等號(hào)右
39、手方向(RHSRHS)值,這時(shí)賦值語(yǔ)句不允許任何)值,這時(shí)賦值語(yǔ)句不允許任何別的別的VerilogVerilog語(yǔ)句干擾,直到現(xiàn)行賦值完成時(shí),即把語(yǔ)句干擾,直到現(xiàn)行賦值完成時(shí),即把RHSRHS賦值給賦值給LHSLHS時(shí),它才允許別的賦值語(yǔ)句執(zhí)行。時(shí),它才允許別的賦值語(yǔ)句執(zhí)行。l一般可綜合的阻塞賦值操作在一般可綜合的阻塞賦值操作在RHSRHS不能設(shè)定有延遲,不能設(shè)定有延遲,( (即使是零延遲也不允許即使是零延遲也不允許) )。若在。若在RHSRHS加上延遲,則在加上延遲,則在延遲期間會(huì)阻止賦值語(yǔ)句的執(zhí)行延遲期間會(huì)阻止賦值語(yǔ)句的執(zhí)行, , 延遲后才執(zhí)行賦值,延遲后才執(zhí)行賦值,在需綜合的模塊設(shè)計(jì)中不
40、可使用這種風(fēng)格的代碼。在需綜合的模塊設(shè)計(jì)中不可使用這種風(fēng)格的代碼。l阻塞賦值的執(zhí)行可認(rèn)為是只有一個(gè)步驟的操作:阻塞賦值的執(zhí)行可認(rèn)為是只有一個(gè)步驟的操作:計(jì)算計(jì)算RHSRHS并更新并更新LHSLHS,此時(shí)不能允許有來(lái)自任何其他,此時(shí)不能允許有來(lái)自任何其他VerilogVerilog語(yǔ)句干擾語(yǔ)句干擾。所謂阻塞的概念是指在同一個(gè)。所謂阻塞的概念是指在同一個(gè)alwaysalways塊中,其后面的賦值語(yǔ)句從概念上(即使不設(shè)塊中,其后面的賦值語(yǔ)句從概念上(即使不設(shè)定延遲)是在前一句賦值語(yǔ)句結(jié)束后再開(kāi)始賦值的定延遲)是在前一句賦值語(yǔ)句結(jié)束后再開(kāi)始賦值的2022-3-1636阻塞賦值阻塞賦值q1 q2q3dc
41、lk移位寄存器電路移位寄存器電路module pipeb1 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; reg 7:0 q3, q2, q1; always (posedge clk) begin q1 = d; q2 = q1; q3 = q2; end endmodule 不正確地使用的阻塞賦值來(lái)描述移位寄存器。(方式不正確地使用的阻塞賦值來(lái)描述移位寄存器。(方式1 1)q3dclk實(shí)際綜合的結(jié)果實(shí)際綜合的結(jié)果在上面的模塊中,按順序進(jìn)行的阻塞賦值將使得在下一個(gè)在上面的模塊中,按順序進(jìn)行的阻塞賦值將使得在下一個(gè)時(shí)鐘上升沿時(shí)刻,所有
42、寄存器輸出值都等于輸入值時(shí)鐘上升沿時(shí)刻,所有寄存器輸出值都等于輸入值d d 。2022-3-1637阻塞賦值阻塞賦值用阻塞賦值來(lái)描述移位寄存器也是可行,但這種風(fēng)格并不好。用阻塞賦值來(lái)描述移位寄存器也是可行,但這種風(fēng)格并不好。module pipeb2 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; reg 7:0 q3, q2, q1; always (posedge clk) begin q3 = q2; q2 = q1; q1 = d; end endmoduleq1 q2q3dclk 上面模塊中,阻塞賦值次序是經(jīng)過(guò)仔細(xì)安排的,以使
43、仿真上面模塊中,阻塞賦值次序是經(jīng)過(guò)仔細(xì)安排的,以使仿真的結(jié)果與移位寄存器相一致。雖然該模塊可被綜合成移位寄的結(jié)果與移位寄存器相一致。雖然該模塊可被綜合成移位寄存器,但不建議使用這種風(fēng)格的模塊來(lái)描述時(shí)序邏輯。存器,但不建議使用這種風(fēng)格的模塊來(lái)描述時(shí)序邏輯。 移位寄存器電路移位寄存器電路(方式(方式2 2)2022-3-1638阻塞賦值阻塞賦值 module pipeb3 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; reg 7:0 q3, q2, q1; always (posedge clk) q1 = d; always (pose
44、dge clk) q2 = q1; always (posedge clk) q3 = q2; endmodule不好的用阻塞賦值來(lái)描述移位時(shí)序邏輯的風(fēng)格(方式不好的用阻塞賦值來(lái)描述移位時(shí)序邏輯的風(fēng)格(方式3 3) 阻塞賦值分別被放在不同阻塞賦值分別被放在不同alwaysalways塊里。仿真時(shí),這些塊的先塊里。仿真時(shí),這些塊的先后順序是隨機(jī)的,因此可能會(huì)出現(xiàn)錯(cuò)誤的結(jié)果,這是后順序是隨機(jī)的,因此可能會(huì)出現(xiàn)錯(cuò)誤的結(jié)果,這是VerilogVerilog中中的競(jìng)爭(zhēng)冒險(xiǎn)。按不同的順序執(zhí)行這些塊將導(dǎo)致不同的結(jié)果。但的競(jìng)爭(zhēng)冒險(xiǎn)。按不同的順序執(zhí)行這些塊將導(dǎo)致不同的結(jié)果。但是,這些代碼的綜合結(jié)果卻是正確的流水
45、線寄存器。是,這些代碼的綜合結(jié)果卻是正確的流水線寄存器。 q1 q2q3dclk移位寄存器電路 前仿真和后仿真的結(jié)果前仿真和后仿真的結(jié)果可能會(huì)不一致可能會(huì)不一致2022-3-1639阻塞賦值阻塞賦值module pipeb4 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; reg 7:0 q3, q2, q1; always (posedge clk) q2 = q1; always (posedge clk) q3 = q2; always (posedge clk) q1 = d; endmodule不好的用阻塞賦值來(lái)描述移位時(shí)序邏
46、輯的風(fēng)格(方式不好的用阻塞賦值來(lái)描述移位時(shí)序邏輯的風(fēng)格(方式4 4)僅把僅把a(bǔ)lwaysalways塊的次序的作些變動(dòng),也可以被綜合成正確的塊的次序的作些變動(dòng),也可以被綜合成正確的移位寄存器邏輯,但仿真結(jié)果可能不正確。移位寄存器邏輯,但仿真結(jié)果可能不正確。q1 q2q3dclk移位寄存器電路移位寄存器電路2022-3-1640非阻塞賦值非阻塞賦值l非阻塞賦值操作符用小于等于號(hào)非阻塞賦值操作符用小于等于號(hào)( (即即=)=)表示。表示。l為什么稱非阻塞賦值?這是因?yàn)樵谫x值操作時(shí)刻開(kāi)始時(shí)為什么稱非阻塞賦值?這是因?yàn)樵谫x值操作時(shí)刻開(kāi)始時(shí)計(jì)算非阻塞賦值符的計(jì)算非阻塞賦值符的RHSRHS表達(dá)式,表達(dá)式,賦
47、值操作時(shí)刻結(jié)束同時(shí)賦值操作時(shí)刻結(jié)束同時(shí)更新更新LHSLHS。在計(jì)算非阻塞賦值在計(jì)算非阻塞賦值RHSRHS表達(dá)式,其他的表達(dá)式,其他的VerilogVerilog語(yǔ)句,包括其他的語(yǔ)句,包括其他的VerilogVerilog非阻塞賦值語(yǔ)句都能同時(shí)計(jì)算非阻塞賦值語(yǔ)句都能同時(shí)計(jì)算RHSRHS表達(dá)式。非阻塞賦值允許其他的表達(dá)式。非阻塞賦值允許其他的erilogerilog語(yǔ)句同時(shí)進(jìn)行語(yǔ)句同時(shí)進(jìn)行操作。操作。l非阻塞賦值的操作可以看作為兩個(gè)步驟的過(guò)程:非阻塞賦值的操作可以看作為兩個(gè)步驟的過(guò)程: 1)1)在賦值時(shí)刻開(kāi)始時(shí),同時(shí)計(jì)算非阻塞賦值在賦值時(shí)刻開(kāi)始時(shí),同時(shí)計(jì)算非阻塞賦值RHSRHS表達(dá)式表達(dá)式 2)2
48、)在賦值時(shí)刻結(jié)束時(shí),同時(shí)更新非阻塞賦值在賦值時(shí)刻結(jié)束時(shí),同時(shí)更新非阻塞賦值LHSLHS表達(dá)式表達(dá)式l非阻塞賦值操作只能用于對(duì)寄存器類(lèi)型變量進(jìn)行賦值,非阻塞賦值操作只能用于對(duì)寄存器類(lèi)型變量進(jìn)行賦值,因此只能用在因此只能用在“initial”initial”塊和塊和“always”always”塊等過(guò)程塊中。塊等過(guò)程塊中。非阻塞賦值不允許用于連續(xù)賦值,即非阻塞賦值不允許用于連續(xù)賦值,即assignassign語(yǔ)句。語(yǔ)句。2022-3-1641非阻塞賦值非阻塞賦值module pipen1 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; re
49、g 7:0 q3, q2, q1; always (posedge clk) begin q1 = d; q2 = q1; q3 = q2; end endmodule正確的用非阻塞賦值來(lái)描述時(shí)序邏輯的設(shè)計(jì)風(fēng)格正確的用非阻塞賦值來(lái)描述時(shí)序邏輯的設(shè)計(jì)風(fēng)格 #1#1 如果在如果在begin-endbegin-end塊中同時(shí)有多個(gè)非阻塞賦值語(yǔ)句,則它塊中同時(shí)有多個(gè)非阻塞賦值語(yǔ)句,則它們的賦值是同時(shí)的,并不是按照先后次序賦值。們的賦值是同時(shí)的,并不是按照先后次序賦值。q1 q2q3dclk2022-3-1642非阻塞賦值非阻塞賦值module pipen2 (q3, d, clk); output 7:0 q3; input 7:0 d; input clk; reg 7:0 q3, q2, q1; always (posedge clk) begin q3 = q2; q2 = q1; q1 = d; end endmodule正確的用非阻塞賦值來(lái)描述時(shí)序邏輯的設(shè)計(jì)風(fēng)格正確的用非阻塞賦值來(lái)描述時(shí)序邏輯的設(shè)計(jì)風(fēng)格 #2#2q1 q2q3dclk2022-3-1643非阻塞賦值非阻塞賦值module pipen3 (q3, d, clk); output 7:0 q3; input 7:0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程分包補(bǔ)充協(xié)議書(shū)范本
- 標(biāo)準(zhǔn)平房租賃合同書(shū)
- 磚塊砌體采購(gòu)合同
- 招標(biāo)方案文件編寫(xiě)方法
- 熱力管道建設(shè)招標(biāo)預(yù)算
- 短期服務(wù)合同樣本
- 攝影配樂(lè)服務(wù)協(xié)議
- 建筑地樁勞務(wù)合作
- 專業(yè)建議潤(rùn)滑油銷(xiāo)售合同的優(yōu)化建議
- 小學(xué)食堂食材供應(yīng)商招募
- 舞蹈演出編導(dǎo)排練合同模板
- 滬科版2024-2025學(xué)年七年級(jí)數(shù)學(xué)上冊(cè)計(jì)算專題訓(xùn)練專題18期末復(fù)習(xí)-四大必考題型總結(jié)(學(xué)生版+解析)
- 路燈安裝工程項(xiàng)目實(shí)施重點(diǎn)、難點(diǎn)和解決方案
- 2024年產(chǎn)品技術(shù)秘密保護(hù)協(xié)議版B版
- 2024短劇行業(yè)發(fā)展趨勢(shì)分析報(bào)告
- 社會(huì)學(xué)概論-第一次形成性考核-國(guó)開(kāi)(SC)-參考資料
- 南京審計(jì)大學(xué)《計(jì)量經(jīng)濟(jì)學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年廣東省深圳市羅湖區(qū)翠園中學(xué)九年級(jí)(上)期中語(yǔ)文試卷
- 新媒體營(yíng)銷(xiāo)對(duì)企業(yè)品牌傳播的影響與對(duì)策8700字【論文】
- 期末測(cè)試-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 建筑施工安全知識(shí)培訓(xùn)
評(píng)論
0/150
提交評(píng)論