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

2019-03-25 08:26发布

语句是:
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条回答
deweyled
1楼-- · 2019-03-25 15:22
< / 你要实现什么功能啊?
reg[7:0] headers[0:256*8-1]
headers定义为8位2048的深度。16Kbit全部用逻辑资源做了,肯定超啊。
看你的代码是做ROM吧,直接调用ROM块的IP核,这样FPGA就会用分布RAM块做存储的逻辑了。逻辑单元使用量也下来了。
eeleader
2楼-- · 2019-03-25 17:31
设计思路有问题,不能用逻辑来做存储器!
eeleader
3楼-- · 2019-03-25 22:09
设计思路有问题,不能用逻辑来做存储器!
lakas
4楼-- · 2019-03-26 03:52
 精彩回答 2  元偷偷看……
lakas
5楼-- · 2019-03-26 07:44
谢谢回复。但是这么做是为了提高实时性,而且原因也不是headers占用过多资源。
tx_xy
6楼-- · 2019-03-26 07:59
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中读两个地址,取两个数?
个人感觉问题应该是这个原因。。。

一周热门 更多>