Verilog HDL 中wire和reg的区别 以及 模块调用时信号类型的确定方法

wire和reg的区别

  1. reg相当于存储单元,wire相当于物理连线。
  2. reg保持最后一次的赋值,而wire需要持续的驱动。
  3. wire使用在连续赋值语句assign中,reg使用在过程赋值语句中(always、测试文件中的initial)。(除此之外,元件实例化时必须使用wire类型)
  4. wire若无驱动器连接,其值为z,reg默认初始值为不定值x
  5. wire表示直通,没有逻辑性,即输入有变化,输出马上无条件反应(如与、非门的简单连接);
    reg表示一定要有触发,输出才会反应输入的状态,在没有输入的情况下可以保持原来的值,但不直接与实际的硬件电路对应。
  6. 在过程赋值语句(always)中,可以理解成表达式右侧的结果在某种触发下放到一个变量中,这个变量可以被声明成reg类型,根据触发条件的不同,可以建模不同的硬件结构:
    1)时钟的上升沿或下降沿 ———— 触发器
    2)某一信号的高电平或低电平 ———— 锁存器
    3)赋值语句右侧任意操作数的变化 ————组合逻辑
  7. 对于组合逻辑输出变量,可以直接用assign,若不指定reg类型,则默认为一位wire,当wire为多位时,需专门指定wire的类型。
  8. 在Verilog中使用reg,并不表示综合出来就是暂存器register,在组合电路中使用,组合后只是net,在时序电路中使用,综合才是Flip-Flop形式表示的register触发器。
  9. 输入端口可由wire/reg驱动,但输入端口只能是wire类型;
    输出端口只能驱动wire,但输出端口可以是wire/reg类型。

模块调用时信号类型的确定方法

信号可分为端口信号和内部信号,出现在端口列表中的即为端口信号,其它则为内部信号。
1)对于端口信号,输入端口只能是wire类型,输出端口为wire或reg类型。若输出端口在过程块(begin…end)中赋值则为reg类型,在过程块外赋值(包括实例化语句)为wire类型;
2)内部信号类型与输出端口相同,判断方法也与输出端口相同。
3)若信号既需要在过程块中赋值,又需要在过程块外赋值时,需要一个中间信号转换。这种情况是有可能出现的,如决断信号。

你可能感兴趣的:(Verilog HDL 中wire和reg的区别 以及 模块调用时信号类型的确定方法)