我试图建立一个寄存器数组,并希望消除警告。我在下面创建了一个最小的示例设计。为什么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)。
答案 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
的所有位都需要}应该用完,并且应该删除警告。
现在是警告的第二部分。
如果该端口属于顶级块或者属于子块,则该端口将被保留并保持未连接状态,并保留该子块的层次结构。
即使这些位未被使用,它们也将由综合工具保留并保持未连接状态。如果这些行在顶部实例化块中可用。理解这是非常合理的事情。