嗨,当我写这段代码时:
module memo(out1);
reg [3:0] mem [2:0] ;
output wire [3:0] out1;
initial
begin
mem[0][3:0]=4'b0000;
mem[1][3:0]=4'b1000;
mem[2][3:0]=4'b1010;
end
assign out1= mem[1];
endmodule
我收到以下警告,使代码无法合成
警告:Xst:1780 - 从不使用或分配信号 mem< 2> 。在优化过程中将修剪此未连接的信号。 警告:Xst:653 - 使用信号 mem< 1> 但从未分配。该无源信号将自动连接到值1000。 警告:Xst:1780 - 从不使用或分配信号> 。在优化过程中将修剪此未连接的信号。
为什么我会收到这些警告? 我没有分配mem [0],mem [1]和mem [2]的值!??谢谢你的帮助!
答案 0 :(得分:0)
您的模块没有输入和单个输出 - out1。我不完全确定模块的重点是你的大型系统,但你基本上是在初始化mem,但之后只使用mem [1]。你可以等效地拥有一个模块,它只将out1分配给值4'b1000(mem永远不会改变)。所以是的 - 你确实初始化了数组,但由于你没有使用任何其他值,xilinx工具正在合成期间优化你的模块并“修剪脂肪”。如果你要模拟这个模块(例如在modelsim中)你会看到你的初始化就好了。基于你的警告虽然我不确定为什么你得出你的代码是不可合成的结论。在我看来,你绝对可以合成它,但这只是一种奇怪的方式,将一个值分配给4'b1000。
关于使用初始开始在块ram中存储值(例如,制作ROM),这很好。我已经好几次没有问题了。这种情况的一个常见用途是将系数存储在块ram中,稍后将读出。这说明了这个模块的编写方式,无论如何都无法从内存中读取任何内容。