使用在VERILOG

使用在VERILOG

问题描述:

假设我有以下实例
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;使用在VERILOG

假设有很多个多路复用器和它们的输出去的输入被放置在它们下面复用器后面定义条件变量。

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

这取决于你的合成器。我只与Xilinx合作。在我的情况下,赛灵思接受这种类型定义进行仿真。但是对于综合来说,你需要在实例化之前定义一个wire/reg。

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

wire down; 

如果你从来没有声明下来像这样,将隐式声明。 第IEEE 1800年至2012年的状态6.10:

如果一个标识符出现在连续的赋值语句的左手侧,并且该标识符 先前尚未在范围连续赋值语句出现在那里宣布或 在任何范围内,其声明可以从连续 赋值语句出现的范围直接引用(参见23.9),那么默认净类型的隐式标量净应为 。有关连续赋值语句的讨论,请参见10.3。

然后:

见22.8为用'default_nettype 编译器指令隐式声明蚊帐类型的控制的讨论。

这(I相信)典型地是指用Verilog一个线逻辑 SystemVerilog中。

现在,只要使用之前的值是分配,这是完全合法的。只要在使用或分配后不宣布。