微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于二维数组编译为什么会占用那么多逻辑单元

关于二维数组编译为什么会占用那么多逻辑单元

时间:10-02 整理:3721RD 点击:
我现在是CPU+CPLD的结构。我的CPLD链接1602的LCD,然后我在CPLD内开辟32个byte的ram空间作为1602液晶屏的显示buf。然后我的CPU通过地址线和数据线以及读写控制线对这个显示buf进行刷新即可。
中间对显示buf的操作,我把程序列出,各位帮我看看这样是不是有问题,这段程序加上去,编译结果,logic elements多了进400个,狂晕啊。(使用的是EPM1270T144).
input [13:0] cpld_addr;
inout [7:0] cpld_data;
input cpld_nwr;
reg[7:0] lcd_buf[31:0];
always @(posedge cpld_nwr or posedge reset)
  begin
  if(reset)
   begin
   end
  else
   begin
   if(cpld_addr[13:5] == 'd0)
         lcd_buf[cpld_addr[4:0]] = cpld_data;
   end
  end

一看哥们就是做单片机的,memory资源很少的。可不像C语言那样可以释放空间。

楼上的哥们眼光不错。请问有什么方式可以优化啊?

没法优化,硬件对应的是电路。软件是流程。

LS兄弟说得对,如果你非要用32个REG来做BUF,那这个资源省不了。
如果CPLD中有RAM资源的话,也可以考虑RAM,一样的效果。

除了32个寄存器外,还有1个5bits的地址译码器,和1个10bits的比较器,这些都要用LE构造。
不知道EPM1270T144的LE内部有多少资源,400个可能也是所需要的。
如果用RAM肯定能省LE,你可以告诉综合器采用RAM综合你的2维变量。
但是FPGA中RAM还是比较大的,32Bytes用1个Block RAM肯定够了。

把寄存器阵列改成RAM。
reg[7:0] led_buf[31:0]是寄存器阵列。很消耗资源。

呵呵,用CPLD是不是太浪费了做这个啊。CPLD那么贵,而且你这样做,每个数据地址位都是一个触发器啊。用的资源太多了,当然划不来了。不如加个小单片机,就几块钱。你这个CPLD成本贵啊!

上一篇:sopc是什么 psoc呢?
下一篇:i2C 总线

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top