EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——verilog中wire 和 reg 一、wire(组合逻辑) 1.wire用来连接模块实例化的输入和输出端口; 2.wire用作实际模块声明中输入和输出; 3.wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,无法存储值; 4.wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,无法存储值; 5.wire元素是assign语句左侧唯一的合法类型; 6.wire 元素是在基于Verilog的设计中连接两片的无状态方式; 7.wire 元素是在基于Verilog的设计中连接两片的无状态方式; // wire 的一些正确使用
* p2 |! x$ T$ o! n# L wire A,B,C,D,E ; //1-bit wide 6 u: K) a% g: K+ j( C, z& s" V2 b
wire [8:0] Wide; //9-bit
2 O+ j) U8 [% `0 m& P7 } assign A= B & C; ' |5 `5 p% @4 Z7 S) }1 E# D5 L
always @(B or C) 2 `, g1 e2 Z8 l4 V P. S6 J$ J
begin 1 r. x& N% m1 B9 r P
I=B | C;
! g' v; B( H) n7 F+ s: C; s& ? end
7 L; C v; E6 c# q. T# n' r+ r mymodule mymodule_instance(.In(D),Out(E)); 二、reg(组合和时序逻辑) 1.reg可以连接到模块实例化的输入端口; 2.reg 不能连接到模块实例化的输出端口; 3.reg 可以用作实际模块声明中的输出; 4.reg 不能 用作实际模块声明中的输入; 5.reg是always 模块中 = 或者 <= 左侧的唯一正确类型; 6.reg是initial模块中 = 左侧唯一的合法类型; 7.reg**不能用在assign的左边**; 8.reg 当与always @(posedge Clock)块结合使用时,reg可用于创建寄存器。 //reg一些合法使用" A/ f! t" `3 g9 ], ~7 M# ^0 y3 _; K& J) N
wire A,B; 8 w: c b7 w2 H* p
reg I,J,K; // 1-bi
( O; q; c/ [# N+ M% o treg [8:0] Wide; // 9-bit7 K$ n$ t6 @7 e) ~9 ]. E
always @(A or B) begin + X; _7 p0 U, g
I=A | B; // using a reg as the left - hand side of an always
2 s6 G/ u: f' A initial begin // using a reg in an initial block
, k3 g" J: m* h4 g% Q- i( y5 w J=1'b1; c; ?" |8 t$ r4 [% \7 Y
#1 9 `( l! |+ ~( x) P( K' L
J=1'b0;
& d, l; F: |: v* e/ b# Q3 D end
+ r+ v3 }" X& E ^" d always @(posedge Clock) begin// using a reg to create a positive -edge - triggered register
4 s: T8 [" K# X# x K<=I;/ D) i2 }4 u/ C/ x- r! Q1 Z
end 三、wire 和 reg 何时可以互换 1.两者都可以出现在assign语句和 always 模块中=或<=的右侧; 2.两者都可以连接到模块实例的输入端口;
y ~" F1 Q( G" X+ L |