语句是:
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。
回复 楼主 lakas 的帖子
你要实现什么功能啊?
reg[7:0] headers[0:256*8-1]
headers定义为8位2048的深度。16Kbit全部用逻辑资源做了,肯定超啊。
看你的代码是做ROM吧,直接调用ROM块的IP核,这样FPGA就会用分布RAM块做存储的逻辑了。逻辑单元使用量也下来了。
设计思路有问题,不能用逻辑来做存储器!
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
设计思路有问题,不能用逻辑来做存储器!
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
回复 沙发 deweyled 的帖子
这个headers设计是师兄做的,这么做是为了在帧头匹配时提高实时性。即使16Kbit全部用逻辑资源做了也不该使用9万多个逻辑单元啊。之前这些语句是没有问题的,最初q是八位的寄存器,我将q从8位的改为16位之后出现了问题。
回复 4楼 eeleader 的帖子
谢谢回复。但是这么做是为了提高实时性,而且原因也不是headers占用过多资源。
always@(posedge clk)begin
if(rden)begin
q[7:0]<=headers[addr[11:0]];
q[15:8]<=headers[addr[11:0]+1];
end
end
这个是怎么定义的,一次可以从rom中读两个地址,取两个数?
个人感觉问题应该是这个原因。。。