|
发表于 2007-12-5 11:02:12
|
显示全部楼层
[例25] 使用非阻塞赋值语句,由于两个always 块对同一变量q 赋值产生竞争冒险的程序:
module badcode1 (q, d1, d2, clk, rst_n);
output q;
input d1, d2, clk, rst_n;
reg q;
always @(posedge clk or negedge rst_n)
if (!rst_n) q <= 1'b0;
else q <= d1;
always @(posedge clk or negedge rst_n)
if (!rst_n) q <= 1'b0;
else q <= d2;
endmodule
当综合工具(如Synopsys)读到[例25]的代码时,将产生以下警告信息:
Warning: In design 'badcode1', there is 1 multiple-driver
net with unknown wired-logic type.
如果忽略这个警告,继续编译例26,将产生两个触发器输出到一个两输入与门。其综合级前仿真与综合
后仿真的结果不完全一致。
原则6:严禁在多个always 块中对同一个变量赋值。
刚看到的 |
|