问题一:
QII V7.2编译总遇到"Error (10028):Can't resolve multiple constant drivers for net "rWE" at SRAM.v(144)"是什么原因啊?
[例1] 使用非阻塞赋值语句,由于两个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.
如果忽略这个警告,继续编译例1,将产生两个触发器输出到一个两输入与门。其综合级前仿真与综合
后仿真的结果不完全一致。
原则1:严禁在多个always 块中对同一个变量赋值。
简单地说吧,采用always @ posedge 或always @negedge 语句描述的时序电路在FPGA中实现的方式就是采用D触发器(DFF),D触发器在时钟跳变边沿锁存数据,触发器只能接受一个时钟。always @posedge 语句描述的是D触发器在上升沿到来时锁村数据,always @negedge 描述的是时钟边沿的下降沿锁存数据。由于D触发器只能在上升沿或下降沿锁存数据,一个D触发器不可能两个边沿都利用(具体原因去看D触发器的原理),因此也就无法实现了
评论 (0)