FPGA综合原则 (2008-06-07 13:03:56)

hegangben
2025-07-14 / 0 评论 / 0 阅读 / 正在检测是否收录...

问题一:

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

评论 (0)

取消