[求助] 求教大神,一条语句占用了FPGA9万多个逻辑单元

lakas   2013-4-16 15:42 楼主
语句是:
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。

回复评论 (7)

回复 楼主 lakas 的帖子

你要实现什么功能啊?
reg[7:0] headers[0:256*8-1]
headers定义为8位2048的深度。16Kbit全部用逻辑资源做了,肯定超啊。
看你的代码是做ROM吧,直接调用ROM块的IP核,这样FPGA就会用分布RAM块做存储的逻辑了。逻辑单元使用量也下来了。
点赞  2013-4-16 17:05
设计思路有问题,不能用逻辑来做存储器!
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2013-4-16 20:10
设计思路有问题,不能用逻辑来做存储器!
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2013-4-16 20:10

回复 沙发 deweyled 的帖子

这个headers设计是师兄做的,这么做是为了在帧头匹配时提高实时性。即使16Kbit全部用逻辑资源做了也不该使用9万多个逻辑单元啊。之前这些语句是没有问题的,最初q是八位的寄存器,我将q从8位的改为16位之后出现了问题。
点赞  2013-4-16 23:13

回复 4楼 eeleader 的帖子

谢谢回复。但是这么做是为了提高实时性,而且原因也不是headers占用过多资源。
点赞  2013-4-16 23:14
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中读两个地址,取两个数?
个人感觉问题应该是这个原因。。。
学习的乐趣在于分享。
点赞  2013-4-16 23:58
楼主说下问题是怎么解决的呢?
点赞  2013-5-28 15:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复