【问题标题】:using a conditional variable which is defined later in verilog使用稍后在 verilog 中定义的条件变量
【发布时间】:2017-01-01 21:47:35
【问题描述】:

假设我有以下实例化
first_mux_input=top.middle.down[i]; second_mux_input=top.middle.down[i+1]; assign down = (select[i])? first_mux_input:second_mux_input;

假设有很多多路复用器,它们的输出进入位于它们下方的多路复用器的输入。

我在定义变量“down”之前使用它。这是否合法,因为 verilog 随后编译所有行而不是按顺序(在这种情况下)?
谢谢

【问题讨论】:

    标签: conditional verilog instantiation mux


    【解决方案1】:

    assign 语句不是声明。声明将是:

    wire down;
    

    如果您从未像这样声明 down,它将被隐式声明。 IEEE 1800-2012 第 6.10 节规定:

    如果标识符出现在连续赋值语句的左侧,并且该标识符 之前没有在连续赋值语句出现的范围内声明或 在其声明可以从连续的范围中直接引用的任何范围内 赋值语句出现(见 23.9),则默认网络类型的隐式标量网络应为 假定。有关连续赋值语句的讨论,请参见 10.3。

    然后:

    有关使用 `default_nettype 隐式声明的网络的类型控制的讨论,请参见 22.8 编译器指令。

    这(我相信)通常意味着 Verilog 中的 wire 和 SystemVerilog 中的 逻辑。

    现在,就使用在赋值之前的值而言,这是完全合法的。只要在使用或赋值后未声明即可。

    【讨论】:

      【解决方案2】:

      这取决于您的合成器。我只与赛灵思合作过。在我的例子中,赛灵思接受这种类型定义进行仿真。但是对于综合,您需要在实例化之前定义一个线/寄存器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        相关资源
        最近更新 更多