<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Verilog HDL基礎知識4之wire & reg

Verilog HDL基礎知識4之wire & reg

作者: 時(shí)間:2024-02-20 來(lái)源:電子森林 收藏

簡(jiǎn)單來(lái)說(shuō)硬件描述語(yǔ)言有兩種用途:1、仿真,2、綜合。

本文引用地址:http://dyxdggzs.com/article/202402/455502.htm

對于,也要從這兩個(gè)角度來(lái)考慮。

從仿真的角度來(lái)說(shuō),HDL語(yǔ)言面對的是編譯器(如Modelsim等),相當于軟件思路。 這時(shí): 對應于連續賦值,如assign

對應于過(guò)程賦值,如always,initial

從綜合的角度來(lái)說(shuō),HDL語(yǔ)言面對的是綜合器(如DC等),要從電路的角度來(lái)考慮。 這時(shí):

1、型的變量綜合出來(lái)一般是一根導線(xiàn);

2、變量在always塊中有兩種情況:(1)、always后的敏感表中是(a or b or c)形式的,也就是不帶時(shí)鐘邊沿的,綜合出來(lái)還是組合邏輯(2)、always后的敏感表中是(posedge clk)形式的,也就是帶邊沿的,綜合出來(lái)一般是時(shí)序邏輯,會(huì )包含觸發(fā)器(Flip-Flop)

在設計中,輸入信號一般來(lái)說(shuō)你是不知道上一級是寄存器輸出還是組合邏輯輸出,那么對于本級來(lái)說(shuō)就是一根導線(xiàn),也就是wire型。而輸出信號則由你自己來(lái)決定是寄存器輸出還是組合邏輯輸出,wire型、reg型都可以。但一般的,整個(gè)設計的外部輸出(即最頂層模塊的輸出),要求是寄存器輸出,較穩定、扇出能力也較好。

為什么在verilog中要定義wire?

有幾種情況變量需要定義成wire。

一、assign 語(yǔ)句
例如:
reg a,b;
wire and_result;
...
assign and_result =a&&b;
你可以試試把wire定義成reg。綜合器會(huì )報錯。
二、元件例化時(shí)候的輸出必須用wire
例如:
wire dout;
ram u_ram
(
...
.out(dout)
...
);
wire按照國外的教材上面的定義:
wire為無(wú)邏輯連線(xiàn)。只做連線(xiàn),wire本身是不帶邏輯性的,所以輸入什么輸出就是什么。所以你嘗試著(zhù)用always語(yǔ)句對wire變量賦值。綜合器就會(huì )報錯。
那么你可能會(huì )問(wèn)。assign c =a&&b不是就是對wire的賦值嗎?
其實(shí)并非如此。綜合器綜合時(shí)將a&&b綜合成ab經(jīng)過(guò)一個(gè)與門(mén)。而c只是連接到與門(mén)輸出的線(xiàn)。正真綜合出與門(mén)的是&&。而不是c。

總結

大體上來(lái)說(shuō),wire和reg都類(lèi)似于C/C++的變量,但若此變量要放在begin…end內,該變量就需使用reg,在begin…end之外,則使用wire。

另外使用wire時(shí),需搭配assign;reg則不必。

input,ouput,inout默認值都是wire。

若wire和reg用錯地方,compiler都會(huì )提醒,所以不必太擔心。

一個(gè)很重要的觀(guān)念,在Verilog中使用reg,並不表示合成后就是寄存器(register)。若在組合電路中使用reg,合成后仍只是net,唯有在循序電路中使用reg,合成后才會(huì )以flip-flop形式表示成register。

Verilog中reg和wire的區別

組合邏輯輸出變量,可以直接用assign。

如果不指定為reg類(lèi)型,那么就默認為1位wire類(lèi)型,故無(wú)需指定1位wire類(lèi)型的變量。

專(zhuān)門(mén)指定出wire類(lèi)型,可能是多位或為使程序易讀。

wire只能被assign連續賦值,reg只能在initial和always中賦值。

比如:  
 module lddata(clk,rst,cs,din,dout,tmpdata);   input clk, rst,cs;
 input din;
 output dout,tmpdata;
 reg tmpdata;
 always@(posedge clk or negedge rst)
 if(!rst)
     tmpdata <=0;
     else
     tmpdata<= din;
 assign dout = tmpdata|cs;
 endmodule

其實(shí)他們是不同的抽象級別,wire 如同vhdl中的signal類(lèi)型,是和實(shí)際的物理連接對應的,而reg屬于算法描述層次用的類(lèi)型,和實(shí)際電路沒(méi)有直接的對應關(guān)系,也就是說(shuō)它相當于c語(yǔ)言中的變量(int,float等),vhdl中的variable。reg不和實(shí)際的電路如寄存器對應,高層次的描述時(shí)用。而always其實(shí)算是算法級描述的語(yǔ)句,所以其中的變量必須聲明為reg。

比如:一個(gè)簡(jiǎn)單的組合邏輯的例子,用了reg類(lèi)型  
module mux(a,b,c,sel);
 input a,b,sel;
 output c;reg c;
 always @(sel or a or b)
 if(sel ==1'b0) c=a;
 else c=b;
 endmodule;

這個(gè)綜合出來(lái)就是一個(gè)簡(jiǎn)單的二選一選擇器,組合邏輯電路。

看它描述的方式,是不是就是把電路的行為(功能)描述出來(lái)了,這種就是算法級描述。

wire表示直通,即輸入有變化,輸出馬上無(wú)條件地反映(如與、非門(mén)的簡(jiǎn)單連接)。reg表示一定要有觸發(fā),沒(méi)有輸入的時(shí)候可以保持原來(lái)的值,但不直接實(shí)際的硬件電路對應(并非不能生成實(shí)際電路)。

線(xiàn)網(wǎng)型數據包括wire,wand,wor等幾種類(lèi)型,需要在被一個(gè)或一個(gè)以上驅動(dòng)源驅動(dòng)時(shí),才能各自決定其不同線(xiàn)網(wǎng)型數據的最終值。

兩者的區別是:reg寄存器型數據保持最后一次的賦值,而wire線(xiàn)網(wǎng)型數據需要持續的驅動(dòng)。



關(guān)鍵詞: FPGA verilog HDL wire reg

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>