reg类型变量综合电路_verilog语言中wire型变量和reg 型变量的区别
標簽:
wire與reg類型的區(qū)別:
wire型數(shù)據(jù)常用來表示以assign關(guān)鍵字指定的組合邏輯信號。模塊的輸入輸出端口類型都默認為wire型。默認初始值是z。
reg型表示的寄存器類型。always模塊內(nèi)被賦值的信號,必須定義為reg型,代表觸發(fā)器。
默認初始值是x。
reg 類型不一定是寄存器變量,例如組合邏輯中reg類型變量。
reg相當于存儲單元,wire相當于物理連線。
Verilog 中變量的物理數(shù)據(jù)分為線型和寄存器型。這兩種類型的變量在定義時要設(shè)置位寬,缺省為1位。變量的每一位可以是0,1,X,Z。其中x代表一個未被預置初始狀態(tài)的變量或者是由于由兩個或多個驅(qū)動裝置試圖將之設(shè)定為不同的值而引起的沖突型線型變量。z代表高阻狀態(tài)或浮空量。
線型數(shù)據(jù)包括wire,wand,wor等幾種類型在被一個以上激勵源驅(qū)動時,不同的線型數(shù)據(jù)有各自決定其最終值的分辨辦法。
兩者的區(qū)別是:寄存器型數(shù)據(jù)保持最后一次的賦值,而線型數(shù)據(jù)需要持續(xù)的驅(qū)動
輸入端口可以由net/reg驅(qū)動,但輸入端口只能是net,如a = b & c,輸入端口a 只能是net型,但其驅(qū)動b,c可以是net/reg型;輸出端口可以使net/reg類型,輸出端口只能驅(qū)動net,如a = b & c,模塊的輸出端口b,c可以是net/reg型,但它們驅(qū)動的a必須是net型;若輸出端口在過程塊(always/initial)中賦值則為reg型,若在過程塊外賦值則為net型。用關(guān)鍵詞inout聲明一個雙向端口, inout端口不能聲明為寄存器類型,只能是net類型。
wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發(fā),輸出才會反映輸入。
不指定就默認為1位wire類型。專門指定出wire類型,可能是多位或為使程序易讀。wire只能被assign連續(xù)賦值,reg只能在initial和always中賦值。wire使用在連續(xù)賦值語句中,而reg使用在過程賦值語句中。
在連續(xù)賦值語句中,表達式右側(cè)的計算結(jié)果可以立即更新表達式的左側(cè)。在理解上,相當于一個邏輯之后直接連了一條線,這個邏輯對應(yīng)于表達式的右側(cè),而這條線就對應(yīng)于wire。在過程賦值語句中,表達式右側(cè)的計算結(jié)果在某種條件的觸發(fā)下放到一個變量當中,而這個變量可以聲明成reg類型的。根據(jù)觸發(fā)條件的不同,過程賦值語句可以建模不同的硬件結(jié)構(gòu):如果這個條件是時鐘的上升沿或下降沿,那么這個硬件模型就是一個觸發(fā)器;如果這個條件是某一信號的高電平或低電平,那么這個硬件模型就是一個鎖存器;如果這個條件是賦值語句右側(cè)任意操作數(shù)的變化,那么這個硬件模型就是一個組合邏輯。
wire型的變量綜合出來一般是一根導線;
reg變量在always塊中有兩種情況: ?? always后的敏感表中是(a or b or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯 ? always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發(fā)器(Flip-Flop)
在設(shè)計中,輸入信號一般來說你是不知道上一級是寄存器輸出還是組合邏輯輸出,那么對于本級來說就是一根導線,也就是wire型。而輸出信號則由你自己來決定是寄存器輸出還是組合邏輯輸出,wire型、reg型都可以。但一般的,整個設(shè)計的外部輸出(即最頂層模塊的輸出),要求是寄存器輸出,較穩(wěn)定、扇出能力也較好。
Notes:七七八八的也看不太懂,總之wire賦值用assign,reg在always內(nèi)使用。
————————————————————————————————————————————————
1、從仿真角度來說,HDL語言面對的是編譯器,相當于使用軟件思路,此時:
wire對應(yīng)于連續(xù)賦值,如assign;
reg對應(yīng)于過程賦值,如always,initial;
2、從綜合角度,HDL語言面對的是綜合器,相當于從電路角度來思考,此時:
wire型變量綜合出來一般情況下是一根導線。
reg變量在always中有兩種情況:
(1)always @(a or b or c)形式的,即不帶時鐘邊沿的,綜合出來還是組合邏輯;
(2)always @(posedge clk)形式的,即帶有邊沿的,綜合出來一般是時序邏輯,會包含觸發(fā)器(Flip-Flop)
3、設(shè)計中,輸入信號一般來說不能判斷出上一級是寄存器輸出還是組合邏輯輸出,對于本級來說,就當成一根導線,即wire型。而輸出信號則由自己來決定是reg還是組合邏輯輸出,wire和reg型都可以。但一般的,整個設(shè)計的外部輸出(即最頂層模塊的輸出),要求是reg輸出,這比較穩(wěn)定、扇出能力好。
4、Verilog中何時要定義成wire型?
情況一:assign語句
例如:
reg? ?a,b;
wire? out;
......
assign?? out = a & b;
如果把out定義成reg型,對不起,編譯器報錯!
情況二:元件實例化時必須用wire型
例如:
wire?? dout;
ram?? u_ram
(
....
.out(dout);
)
wire為無邏輯連線,wire本身不帶邏輯性,所以輸入什么就的輸出什么。所以如果用always語句對wire變量賦值,對不起,編譯器報錯。
那么你可能會問,? assign??? c = a & b;?? 不是對wire的賦值嗎?
并非如此,綜合時是將? a & b綜合成 a、b經(jīng)過一個與門,而c是連接到與門輸出線,真正綜合出來的是與門&,不是c。
5、何時用reg、何時用wire?
大體來說,reg和wire類似于C、C++的變量,但若此變量要放在begin...end之內(nèi),則該變量只能是reg型;在begin...end之外,則用wire型;
使用wire型時,必須搭配assign;reg型可以不用。
input、output、inout預設(shè)值都是wire型。
在Verilog中使用reg型,并不表示綜合出來就是暫存器register:在組合電路中使用reg,組合后只是net;在時序電路中使用reg,合成后才是以Flip-Flop形式表示的register觸發(fā)器。
6、reg和wire的區(qū)別:
reg型數(shù)據(jù)保持最后一次的賦值,而wire型數(shù)據(jù)需要持續(xù)的驅(qū)動。wire用在連續(xù)賦值語句assign中;reg用于always過程賦值語句中。
在連續(xù)賦值語句assign中,表達式右側(cè)的計算結(jié)果可以立即更新到表達式的左側(cè),可以理解為邏輯之后直接連接了一條線,這個邏輯對應(yīng)于表達式的右側(cè),這條線對應(yīng)于wire;
在過程賦值語句中,表達式右側(cè)的計算結(jié)果在某種條件的觸發(fā)下放到一個變量當中,這個變量可以聲明成reg型,根據(jù)觸發(fā)條件的不同,過程語句可以建模不同的硬件結(jié)構(gòu):
(1)如果這個條件是時鐘上升沿或下降沿,那硬件模型就是一個觸發(fā)器,只有是指定了always@(posedge or negedge)才是觸發(fā)器。
(2)如果這個條件是某一信號的高低電平,那這個硬件模型就是一個鎖存器。
(3)如果這個條件是賦值語句右側(cè)任意操作數(shù)的變化,那這個硬件模型就是一個組合邏輯。
7、過程賦值語句always@和連續(xù)賦值語句assign的區(qū)別:
(1)wire型用于assign的賦值,always@塊下的信號用reg型。這里的reg并不是真正的觸發(fā)器,只有敏感列表內(nèi)的為上升沿或下降沿觸發(fā)時才綜合為觸發(fā)器。
(2)另一個區(qū)別,舉例:
wire???? a;
reg????? b;
assign???? a = 1'b0;
always@(*)
b = 1'b0;
上面例子仿真時a將會是0,但是b的狀態(tài)是不確定的。因為Verilog規(guī)定,always@(*)中的*指的是該always塊內(nèi)的所有輸入信號的變化為敏感列表,就是說只有當always@(*)塊內(nèi)輸入信號發(fā)生變化,該塊內(nèi)描述的信號才會發(fā)生變化。
像always@(*)? b= 1'b0; 中由于1‘b0是個常數(shù),一直沒有變化,由于b的足組合邏輯輸出,所有復位時沒有明確的值--即不確定狀態(tài),又因為always@(*)塊內(nèi)沒有敏感信號變化,此時b信號一直保持不變,即不確定是啥,取決于b的初始狀態(tài)。
標簽:
來源: https://blog.csdn.net/kebu12345678/article/details/85529791
總結(jié)
以上是生活随笔為你收集整理的reg类型变量综合电路_verilog语言中wire型变量和reg 型变量的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《python初级爬虫》(一)
- 下一篇: 你拍一我拍一上学得学计算机,儿歌你拍一我