EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——verilog中wire 和 reg 一、wire(组合逻辑) 1.wire用来连接模块实例化的输入和输出端口; 2.wire用作实际模块声明中输入和输出; 3.wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,无法存储值; 4.wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,无法存储值; 5.wire元素是assign语句左侧唯一的合法类型; 6.wire 元素是在基于Verilog的设计中连接两片的无状态方式; 7.wire 元素是在基于Verilog的设计中连接两片的无状态方式; // wire 的一些正确使用
' c4 ]1 E6 E9 d) u wire A,B,C,D,E ; //1-bit wide ) ]+ c9 a- ~# _7 j) k* W; Z7 G: `" `9 L; t
wire [8:0] Wide; //9-bit
2 g$ ~. m4 J" A2 E9 s& x1 M0 L0 h$ @ assign A= B & C; ' z" E z7 @$ N/ `2 F) U0 H
always @(B or C)
. Q: |$ v# J+ o begin $ `: P; R& d% e t+ s& t2 p6 p% E z
I=B | C; ' i2 @3 |" L- d7 T9 B
end
; G. P+ v4 G+ o r9 H% A# _1 e. [ 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一些合法使用! k5 a0 J0 s' ]* u" C- O
wire A,B;
. S4 h0 u1 J! }: P. `: B: z* x$ E reg I,J,K; // 1-bi
+ u: n5 m% `2 f! o2 \: \ treg [8:0] Wide; // 9-bit( a8 I# x) E8 l3 G
always @(A or B) begin
* {0 r8 e- ~7 K4 s1 P I=A | B; // using a reg as the left - hand side of an always% N0 p/ z; ]; @' T0 N" }
initial begin // using a reg in an initial block / b# q$ l6 o9 W# _# D" j/ @
J=1'b1;
, h( }& z7 b! G w' N8 |, L' o9 G( t% c' n #1 s9 y0 g$ K: @* I
J=1'b0;) v0 @9 \' @0 y& ?. G2 {: M
end
4 `% c* t' P0 z# h4 L, _ always @(posedge Clock) begin// using a reg to create a positive -edge - triggered register e# d6 D5 C$ k& v9 J$ l
K<=I;
3 z7 U0 q% k6 S, b3 H/ h8 B5 q/ \! \ end 三、wire 和 reg 何时可以互换 1.两者都可以出现在assign语句和 always 模块中=或<=的右侧; 2.两者都可以连接到模块实例的输入端口; 5 {3 e" z( |6 C. O, N9 v' M D
|