假设我有以下实例化
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随后编译所有行而不是按顺序编译(在这种情况下)? 感谢
答案 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中的逻辑。
现在,就使用之前分配之前的值而言,这是完全合法的。只要在使用或分配后未声明。