请教:always语句中能出现实例化语句
时间:10-02
整理:3721RD
点击:
如题:
在always语句中能不能出现实例化的语句(如and a1(out, a,b))啊 ?
我在编译一个module时,如下:
always @(r or g or b or en)
multiplier m1(.mult_out(y1), .mult_a(Y_NUM1), .mult_b(r));
multiplier m2(.mult_out(y2), .mult_a(Y_NUM2), .mult_b(g));
multiplier m3(.mult_out(y3), .mult_a(Y_NUM3), .mult_b(b));
adder a1(.add_out(y), .add_a(y1), .add_b(y2),.add_c(y3), .add_d(Y_OFFSET));
endmodule
其中multiplier 和adder是我分别定义的两个module,在这里只是对这两个module进行实例化。
出现always语句就会出错,提示说unexpected token: 'multiplier'(指的是第一个multiplier)
而我一旦屏蔽掉always时则没有问题。
我在想是不是“在always语句中不能出现实例化的语句(如and a1(out, a,b))”?但我又没有在树上查到相关的明确说明
盼知情者告知!
在always语句中能不能出现实例化的语句(如and a1(out, a,b))啊 ?
我在编译一个module时,如下:
always @(r or g or b or en)
multiplier m1(.mult_out(y1), .mult_a(Y_NUM1), .mult_b(r));
multiplier m2(.mult_out(y2), .mult_a(Y_NUM2), .mult_b(g));
multiplier m3(.mult_out(y3), .mult_a(Y_NUM3), .mult_b(b));
adder a1(.add_out(y), .add_a(y1), .add_b(y2),.add_c(y3), .add_d(Y_OFFSET));
endmodule
其中multiplier 和adder是我分别定义的两个module,在这里只是对这两个module进行实例化。
出现always语句就会出错,提示说unexpected token: 'multiplier'(指的是第一个multiplier)
而我一旦屏蔽掉always时则没有问题。
我在想是不是“在always语句中不能出现实例化的语句(如and a1(out, a,b))”?但我又没有在树上查到相关的明确说明
盼知情者告知!
上層的線路連結直接接就好,只要宣告 wire 即可, 不需要放 always@(....).
verilog 裡, always 是 behavior 的 寫法.你既然已經用實例化,有 and a1 (out, a, b), 不需要 always.
另外的講法就是說已經是 netlist, 寫 always 幹麻? always 是給 synopsys dc 看的, 讓 dc 來實例化.
好好学学verilog。
谢谢各位的解答!
always语句中不能实例化语句,实例化语句和always块是平行的。
写代码时就要考虑代码用于什么方向上!
你用电平敏感的,肯定不行啊。但是边沿触发的就没有问题
always语句中不能实例化语句,实例化语句和always块是平行的。
