在Verilog中何時用wire,何時用reg?
Verilog HDL中的變量可以定義為wire型和reg型,這兩種類型的變量在定義時要設置位寬,缺省為1位,變量的每一位可以取0、1、x、z,其中x代表未預置初始狀態,z代表高阻狀態。
reg相當于存儲單元,wire型相當于物理連線,即reg型變量保持最后一次的賦值,而wire型變量需要持續的驅動。
那么,在Verilog HDL中何時用wire,何時用reg型變量呢?
wire為連線,本身不帶邏輯性,所以輸入什么輸出就是什么
若變量放在begin…end內,則聲明為reg型;否則,聲明為wire型
在always塊中的變量,只能是reg型
使用wire型變量時,必須搭配assign
input、output、inout聲明的變量,默認都是wire型
若wire和reg用錯了,編譯器會提醒,一般不用太擔心,下面再從仿真和綜合的角度解釋一下。
簡單來說,硬件描述語言有兩種用途:仿真、綜合,對于wire和reg的理解,也可以從這兩個角度來考慮。
從仿真的角度來說,HDL語言面對的是編譯器,相當于軟件思路,這時:
wire對應于連續賦值,如assign
reg對應于過程賦值,如always塊、initial塊
從綜合的角度來說,HDL語言面對的是綜合器,要從電路的角度來考慮,這時:
wire型的變量綜合出來一般是一根導線。
reg變量在always塊中有兩種情況:(1) always后的敏感表中是(a orb or c)形式的,也就是不帶時鐘邊沿的,綜合出來還是組合邏輯。(2) always后的敏感表中是(posedgeclk)形式的,也就是帶邊沿的,綜合出來一般是時序邏輯,會包含觸發器。
在設計中,一般來說我們并不知道輸入信號是來自上一級寄存器的輸出還是組合邏輯的輸出,那么對于本級而言就是一根導線,也就是wire型。而輸出信號則由你自己來決定是寄存器輸出還是組合邏輯輸出,wire型和reg型都可以,但通常整個設計的外部輸出(即最頂層模塊的輸出)是寄存器輸出,這樣電路比較穩定。
責任編輯:xj
原文標題:在Verilog中何時用wire,何時用reg?
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
-
Verilog
+關注
關注
28文章
1351瀏覽量
110100 -
Reg
+關注
關注
0文章
20瀏覽量
11486 -
Wire
+關注
關注
0文章
23瀏覽量
15880
原文標題:在Verilog中何時用wire,何時用reg?
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論