使用稍后在verilog

时间:2017-01-01 21:47:36

标签: conditional verilog instantiation mux

假设我有以下实例化 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随后编译所有行而不是按顺序编译(在这种情况下)? 感谢

2 个答案:

答案 0 :(得分:0)

这取决于你的合成器。我只与Xilinx合作过。就我而言,Xilinx接受此类型定义进行仿真。但是对于综合,你需要在实例化之前定义一个wire / reg。

答案 1 :(得分:0)

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

wire down;

如果您从未声明向下,则会隐式声明。 IEEE 1800-2012第6.10节规定:

  

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

然后:

  

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

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

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