数组输入从未使用过

mik*_*e_b 1 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
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个8位宽的寄存器,其中包含16个地址(0-15).

sha*_*111 6

以下部分警告很重要.

从不使用输入"addr3:2".

这里addr是四位并被ra声明为reg [7:0] ra [0:3];.假设ra被称为寄存器阵列(存储器).这声明了一个4字节的内存 .

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

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

现在是警告的第二部分.

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

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