-1

嗨,当我写这段代码时:

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

我收到以下警告,使代码无法合成

WARNING:Xst:1780 -从未使用或分配信号mem<2> 。这个未连接的信号将在优化过程中被修剪。WARNING:Xst:653 - 使用信号mem<1>但从未分配。此无源信号将自动连接到值 1000。警告:Xst:1780 - 信号 >从未使用或分配。这个未连接的信号将在优化过程中被修剪。

为什么我会收到这些警告?我没有分配 mem[0] ,mem[1] 和 mem[2] 的值吗!??谢谢你的帮助!

4

1 回答 1

0

你的模块没有输入,只有一个输出——out1。我不完全确定模块对于您的更大系统有什么意义,但您基本上是在初始化 mem,但随后只使用 mem[1]。您可以等效地拥有一个仅将 out1 分配给值 4'b1000 的模块(mem 永远不会更改)。所以是的——你确实初始化了数组,但是因为你没有使用xilinx 工具在综合和“修整”期间优化您的模块的任何其他值。如果你要模拟这个模块(比如在 modelsim 中),你会看到你的初始化很好。根据您的警告,尽管我不确定您为什么得出您的代码不可综合的结论。在我看来,您绝对可以合成它,但是将单个值分配给 4'b1000 只是一种奇怪的方式。

关于使用initial开始在块ram中存储值(例如制作ROM)很好。我已经做了几次没有问题。这样做的一个常见用途是将系数存储在块 ram 中,稍后会读出这些系数。这说明了这个模块的编写方式,无论如何都无法从内存中读取任何内容。

于 2013-05-26T03:43:37.907 回答