语句是:
input wire[11:0] addr,//接入的是dsp_ea[14:3]
output reg[16:0] q,
reg[7:0] headers[0:256*8-1],
//'define TEST
'ifdef TEST
....
'else
always@(posedge clk)begin
if(rden)begin
q[7:0]<=headers[addr[11:0]];
q[15:8]<=headers[addr[11:0]+1];
end
end
'endif
编译时没有语法错误,但是会显示逻辑单元不够用而出错,会占用9万多个逻辑单元。但是注释掉q[7:0]<=headers[addr[11:0]]; 和q[15:8]<=headers[addr[11:0]+1];这两条语句则只用9千多个逻辑单元。最开始q是8位的reg型,后来逻辑有改动,将q设为16位的reg或者wire都出现这个问题。
FPGA芯片是EP3C55F484I7,用的是QUARTUSII 11.1。
此帖出自
小平头技术问答
reg[7:0] headers[0:256*8-1]
headers定义为8位2048的深度。16Kbit全部用逻辑资源做了,肯定超啊。
看你的代码是做ROM吧,直接调用ROM块的IP核,这样FPGA就会用分布RAM块做存储的逻辑了。逻辑单元使用量也下来了。
if(rden)begin
q[7:0]<=headers[addr[11:0]];
q[15:8]<=headers[addr[11:0]+1];
end
end
这个是怎么定义的,一次可以从rom中读两个地址,取两个数?
个人感觉问题应该是这个原因。。。
一周热门 更多>