使用稍后在 verilog 中定义的条件变量

Posted

技术标签:

【中文标题】使用稍后在 verilog 中定义的条件变量【英文标题】:using a conditional variable which is defined later in 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 随后编译所有行而不是按顺序(在这种情况下)? 谢谢

【问题讨论】:

【参考方案1】:

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

wire down;

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

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

然后:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于使用稍后在 verilog 中定义的条件变量的主要内容,如果未能解决你的问题,请参考以下文章

make--变量 条件判断 函数定义及调用

verilog条件编译

verilog中对同一个变量有判断条件的赋值

ansible之条件判断

Verilog语言的条件语句

R dplyr mutate 条件 when_case 无法更新数据帧