关于QuartusII对ram块的综合

  之前在看Altera的官方教程上就有说明,如果我们定义一个reg [`word_w]user_ram[`word_d]  ; QuartusII会自动综合成为一个ram—— 当然有一些前提:(后续补充)

  今天就这个知识点看QuartusII 的反应如何 。因为最近在看《CPU自制入门》 我选定的DE1-SOC只有3w多个lab,我移植了原始的工程编译居然提示需要10w个lab,所以分析与综合过了之后place的时候就挂掉了,提示lab不足。所以就在折腾哪里可以节省资源

  在gpr.v 里面刚好有一个定义

reg [`WordDataBus]           gpr [`REG_NUM-1:0]; 

可是下面的代码中却有了reset过程

            for (i = 0; i < `REG_NUM; i = i + 1) begin
                gpr[i]         <= #1 `WORD_DATA_W‘h0;
            end

在综合成ram的特例中说明了,如果有了reset过程就不能生成ram了。好先来看看有了reset QuartusII 给个什么反应

  i的循环语句QuartusII 给出了警告说发现了latch,这个有点不明白。最后看rtl viewer

                

  12层大概都是张这个样子而资源使用情况呢

        

  大家看分析与综合之后的报告,资源使用情况怎么会是这样呢?(我这么说是想大家一会留意一下屏蔽掉ram的reset功能之后资源占用情况)

  仔细看综合报告的倒数第二行 : 说最后的资源使用情况有可能不同。

好,现在让我们看看屏蔽掉ram的reset之后分析与综合之后的情况如何,首先看综合报告

第二行就说明了,发现了一个没有被推论RAM实体—— 似乎言外之意是你没有调用这么一个block,我发现了我来调用。

倒数第二行的说明也是说资源不可以相信上面的—— 和没有屏蔽reset的时候资源使用情况是一样的。

结论: 分析与综合之后的资源使用率是估算的,是不准确的

好,我们再看看QuartusII 说发现了ram,那么它是怎么处理的,当然是看rtl viewer

    呵呵,QuarutsII 真的是自己调用了ram。

时间: 2024-10-13 07:58:10

关于QuartusII对ram块的综合的相关文章

FPGA的嵌入式RAM

FPGA中的嵌入式RAM分为两种:专用的BRAM和分布是RAM(用LUT实现的).这两种RAM又可以配置成单端口和双端口的RAM和ROM.双端口RAM又可以根据读写地址是否在同一块分为Double Port 和Two Port.读取方式也有多种方式,包括:Read first, Write first, No change 等. Block RAM和分布式RAM 在FPGA实现RAM时,可在专用Block RAM和分布式RAM中实现.这两者的选择不仅会影响资源选择,同时还会严重地影响性能和功耗.

关于verilog中语句可不可综合

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter.     (2

verilog 不可综合语句

最近在温习Verilog,让可综合不可综合搞得头大.在网上发现了这篇文章,整理的非常整齐. 转自http://bbs.ednchina.com/BLOG_ARTICLE_1770084.HTM 基础知识:verilog 不可综合语句  (1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,

oracle三种类型坏块的处理思路总结(没有物理备份)

坏块的发生,很罕见,但生产系统偶尔还是会出现.如果有物理备份,处理起来相对简单,直接进行块级recover即可,但如果只有逻辑备份呢?处理起来要分四种情况,在此总结一下: 一.块的data部分坏了,在sql执行扫描到这个块的时候会报ORA-01578: ERROR at line 1:ORA-01578: ORACLE data block corrupted (file # 21, block # 12)ORA-01110: data file 21: '/u01/app/oracle/ora

RAM/ROM IP一次性总结

1, 若需要修改memory mode, 需重新编译; 若不需要修改memory mode, 直接修改宏参数即可; 2, 宏参数列表: 3, 注意用LE搭memory的情况; 4, memory type与读写触发边沿(triggering) 注意,read/write triggering与地址/数据锁存是有区别的. 把triggering point理解为实际读/写发生的时间点,可以是上升沿或者下降沿:但地址/数据的锁存永远是在上升沿发生的. 5, 名词解释 -- continuous re

进阶项目(10)基于Altera厂商的SignalTapII在线调试逻辑分析仪使用讲解

写在前面的话 在诸多数字系统设计书籍中,关于FPGA开发的基本流程,几乎都介绍到了嵌入式逻辑分析仪(或称之为虚拟逻辑分析仪)的相关知识,包括为什么要有这样的在线调试逻辑分析仪,它可以做什么,什么情况下使用,基于什么样的原理,有哪些逻辑分析仪等等.读者在知道了它的种种之后,存在脑袋中的很大疑问就是如何使用,那么本篇章梦翼师兄就将带领大家解开这些疑团,教给大家如何使用基于Altera厂商的SignalTapII对具体的工程进行在线调试. 背景知识 如果您是经验丰富的FPGA数字系统设计工程师或者已经

Stratix内嵌存储器测试报告

     Stratix和Stratix GX系列器件内嵌TriMatrix存储块包括512-bit M512块.4-Kbit M4K块及512-Kbit M-RAM块.TriMatrix存储结构可对输入和输出RAM块的信号加上寄存器级,实现同步(pipelined) RAM.所有TriMatrix存储器输入均为寄存器级,提供同步写周期.输出寄存器可被旁路(bypassed).全同步的简单或真正双端口TriMatrix存储器的工作速度高达312MHz,可工作于flow-through模式(仅有输

(转)FPGA异步时序和多时钟模块

http://bbs.ednchina.com/BLOG_ARTICLE_3019907.HTM   第六章   时钟域 有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域.换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口.虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPG**外各种系统限制,只使用一个时钟常常又不现实.FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送

时钟域译文转载

第六章   时钟域 有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域.换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口.虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPG**外各种系统限制,只使用一个时钟常常又不现实.FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证.本章讨论一下在FPGA设计中多时钟域