数组输入从未使用过

时间:2015-11-11 03:41:25

标签: arrays verilog

我试图建立一个寄存器数组,并希望消除警告。我在下面创建了一个最小的示例设计。为什么addr的一部分未使用?

当我合成时,我收到警告:
WARNING:Xst:647 - Input <addr<3:2>> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.

module test(addr,in,out,wr,clk);
input [3:0] addr;
input [7:0] in;
output reg [7:0] out;
input wr;
input clk;
reg [7:0] ra [0:3];

always @(posedge clk)
begin
    if (wr)
        ra[addr] = in;
    else
        out <= ra[addr];
end
endmodule

我试图制作一个8位宽的寄存器,有16个地址(0-15)。

1 个答案:

答案 0 :(得分:6)

以下部分警告非常重要。

  

输入&#34; addr3:2&#34;从未使用过。

此处,addr为四位,ra声明为reg [7:0] ra [0:3];。假设ra被称为寄存器阵列(内存)。这声明了 4字节 的内存。

对于寻址4个字节,只有两位就足够了。因此,地址仅为00,01,10,11。 addr高位 从不使用,即在任何情况下都不使用位3:2。因此发出警告。

对于 16字节 的内存,您需要将ra声明为reg [7:0] ra [0:15];addr的所有位都需要}应该用完,并且应该删除警告。

现在是警告的第二部分。

  

如果该端口属于顶级块或者属于子块,则该端口将被保留并保持未连接状态,并保留该子块的层次结构。

即使这些位未被使用,它们也将由综合工具保留并保持未连接状态。如果这些行在顶部实例化块中可用。理解这是非常合理的事情。