Home Articles

verilog模块中reg和wire之间的区别是什么

Asked
Viewed 1011 times
11

reg和wire之间有什么区别?我们什么时候应该使用reg以及何时应该在verilog模块中使用wire . 我有时也注意到输出再次被声明为reg . 例如,在D触发器中的reg Q.我已经在某处读过 - “程序赋值语句的目标输出必须是reg数据类型 . ”什么是程序转让声明?我已经彻底搜索了这个,但未能找到明确的解释 .

3 Answers

  • 12

    程序块指的是 alwaysalways_ffalways_combalways_latchinitial 等块 . 程序赋值语句是指将值分配给reg,整数等, but not wire(网络) .

    wire 元素必须是 continuously driven 的东西,并且不能存储值 . 此后,使用 continuous assignment 语句为它们分配值 .

    reg 可用于在程序块中创建 registers . 因此,它可以 store 一些 Value .

    reg elements can 用作输出 within 实际模块 declaration . 但是, reg elements cannot 连接到模块 instantiation 的输出端口 .

    因此,reg可以将一条线作为 assign 声明 . 在另一方面,一根电线可以作为程序块的 RHS 驱动一个寄存器 .

    有关 regwire 声明的明确说明,请参考下图:

    enter image description here

    因此,每当推断存储/保存某些值的顺序逻辑时,将该变量/端口声明为 reg . 这里, Q 是一个 reg inside 一个模块,但是当这个模块在其他模块中时_1145290_,那么这个端口必须连接到 wire .

    请记住, wire 只能推断出组合逻辑,而 reg 可以推断出组合逻辑或顺序逻辑 .

    戴夫的博客是详细信息的良好来源 . 有关详细信息,请参阅synthesizing differenceVerilog wire-reg链接 .

  • 3

    Wire:-

    > Wires are used for connecting different elements. They can be treated
    > as physical wires. They can be read or assigned. No values get stored
    > in them. They need to be driven by either continuous assign statement
    > or from a port of a module.
    

    Reg:-

    > Contrary to their name, regs don't necessarily correspond to
    > physical registers. They represent data storage elements in
    > Verilog/SystemVerilog. They retain their value till next value is
    > assigned to them (not through assign statement). They can be
    > synthesized to FF, latch or combinatorial circuit. (They might not be
    > synthesizable !!!)
    

    电线和注册来自Verilog时间表 . SystemVerilog为它们添加了一种称为逻辑的新数据类型 . 接下来的问题是这个逻辑数据的类型是什么,以及它与我们的旧的wire / reg有何不同 .

    Logic:-

    正如我们所看到的,reg数据类型在Verilog中有点误导 . SystemVerilog的逻辑数据类型的添加是为了消除上述困惑 . 背后的想法是拥有一种称为逻辑的新数据类型,至少不会给人一种硬件可合成的印象 . 逻辑数据类型不允许多个驱动程序 . 在多个赋值的情况下,它具有最后一个赋值获胜行为(这意味着它没有硬件等价) . 如果多个驱动程序尝试使用不同的值驱动它们,则Reg / Wire数据类型会给出X.逻辑数据类型只是分配最后一个赋值 . reg / wire和逻辑之间的下一个区别是逻辑可以由assign块,端口输出和像这个逻辑a的过程块一样驱动;
    分配a = b ^ c; //线样式
    总是(c或d)a = c d; // reg style
    MyModule模块(.out(a),. in(xyz)); //线样式

  • 0

    reg和wire之间的简单区别是,reg用于verilog中的组合或时序电路,而有线用于组合电路

    reg用于存储一个值,但导线继续驱动某些东西,并且在模块初始化时导线连接到输出端但是reg未连接

Related