任何人都可以解释两个Xilinx警告之间的区别:
Xst:1710 - FF / Latch reg_0(没有初始值)具有常量值 块中的0。这个FF / Latch将在期间进行修剪 优化过程。
Xst:1895 - 由于其他FF / Latch修剪,FF / Latch reg_1(没有 init值)在块中具有常量值0。这个FF / Latch 将在优化过程中进行修剪。
假设" reg"是一个字节长的寄存器。
答案 0 :(得分:0)
reg_0
被优化(也称为修剪),因为它从未被分配,但在分配其他寄存器或网络时被引用。由于它没有指定的初始值,因此合成器默认为零。因此,合成器可以保存翻牌,设计中reg_0
的任何使用都将被视为逻辑0。
reg_1
已经过优化,因为它的值取决于已经优化的其他触发器。使用以下示例:reg_1
取决于reg_0
。由于reg_0
始终为零(因为它永远不会被分配),reg_1
也将始终为零。因此,为什么它说"由于其他FF / Latch修剪"。合成器可以节省翻牌,设计中reg_1
的任何使用都将被视为逻辑0。
reg [7:0] reg_0;
reg [7:0] reg_1;
always @(posedge clk) begin
reg_1 <= in & reg_0;
end
总结:
结果相同,但原因不同。
如果设计中存在错误,解决Xst:1710问题,它可以自动解决Xst:1895。如果没有错误,那么这些警告就会指向死代码。