转载 寄存器平衡实例

在quartus的设置里有,物理综合综合优化,register retiming,是针对网表的优化。

我们知道在组合逻辑之间插入寄存器可以优化设计的时序,而如果只是调整寄存器的位置来优化实现,这种技术被称为寄存器平衡。《高级设计》一书中提供了一个简单代码实例用以展示这种技术。这里我们需要注意的是本文介绍的是基于代码级别的寄存器平衡技术,各个eda厂家提供的编译工具里也有一只选项叫做寄存器平衡,这个我们会在后面讨论。


以下是加法器代码片段:

module addera(

output reg [7:0] Sum,

input [7:0] A,B,C,

input clk);

reg [7:0] rA,rB,rC;

always @ (posedge clk) begin

rA<=A;

rB<=B;

rC<=C;

Sum<=rA+rB+rC;

end

endmodule

原书使用Synplify对上述代码进行了编译,这里我们使用QuartusII软件来编译上述代码,编译后的结果,如图1所示。

图1:加法器直接实现的结果

如果比较图1和原书的编译结果,我们还是能看到一点点区别,原书中编译出来的加法器是一个三输入加法器,而这里是两个两输入加法器,其实本质并无区别,关键路径都需要经过两次加法。

那么如果我们对上述代码进行寄存器平衡处理,那么代码需要修改如下所示。

以下是修改后加法器的代码片段:

module adderb(

output reg [7:0] Sum,

input [7:0] A,B,C,

input clk);

reg [7:0] rABSum,rC;

always @ (posedge clk) begin

rABSum<=A+B;

rC<=C;

Sum<=rABSum+rC;

end

endmodule

将上述修改后的代码在QuartusII中编译后的结果如图2所示。

图2:通过寄存器平衡后的加法器实现

优化后编译结果和原书的结果一模一样,关键路径上只有一次加法操作。

时间: 2024-07-29 19:55:53

转载 寄存器平衡实例的相关文章

【转载】Oracle实例和Oracle数据库(Oracle体系结构)

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/leshami/article/details/5529239 --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --======================================

【转载】shell实例手册

原文地址:shell实例手册  作者:没头脑的土豆 shell实例手册 0说明{ 手册制作: 雪松 更新日期: 2013-12-06 欢迎系统运维加入Q群: 198173206 请使用"notepad++"打开此文档,"alt+0"将函数折叠后方便查阅 请勿删除信息,转载请说明出处,抵制不道德行为. 错误在所难免,还望指正! # shell实例手册最新下载地址: http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02

【转载】python实例手册

今天西爬虫的时候遇到了问题,在网上不停地查找资料,居然碰到两篇好文章: 1.python实例手册   作者:没头脑的土豆 另一篇在这:shell实例手册 python实例手册 #encoding:utf8 # 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请使用"notepad++"打开此文档,"alt+0"将函数折叠后方便查阅 请勿删除信息,转载请说明出处,抵制不道德

【转载】NativeSQL实例

转自:http://blog.sina.com.cn/s/blog_3f2c03e301017fqz.html ------------------------------------------------------------ 在ABAP程序中除使用 EXEC SQL 执行NativeSQL外,还有一种动态使用Native sql的方法:ADBC API 实例程序:ADBC_DEMO SAP提供的全局类有: cl_sql_connection cl_sql_statement ADBC A

转载 关键路径优化实例

这个实例是为了显示如何通过重组路径来对设计时序进行优化,首先我们来看原书给出的为优化的实例代码. 以下是优化之前的代码片段: module randomlogica( output reg [7:0] Out, input [7:0] A,B,C, input clk, input Cond1,Cond2); always @ (posedge clk) if (Cond1) Out<=A; else if (Cond2&&(C<8)) Out<=B; else Out&

转载python并行运算实例

Python的并发处理能力臭名昭著.先撇开线程以及GIL方面的问题不说,我觉得多线程问题的根源不在技术上而在于理念.大部分关于Pyhon线程和多进程的资料虽然都很不错,但却过于细节.这些资料讲的都是虎头蛇尾,到了真正实际使用的部分却草草结束了. 传统例子 在DDG https://duckduckgo.com/搜索“Python threading tutorial”关键字,结果基本上却都是相同的类+队列的示例. 标准线程多进程,生产者/消费者示例: 这里是代码截图,如果用其他模式贴出大段代码会

[转载]CSS教程:实例讲解定位Position

http://www.missyuan.com/thread-395406-1-1.html 1. position:static 所有元素的默认定位都是:position:static,这意味着元素没有被定位,而且在文档中出现在它应该在的位置. 一般来说,不用指定 position:static,除非想要覆盖之前设置的定位. #div-1 { position:static; } 2. position:relative 如果设定 position:relative,就可以使用 top,bot

STM32入门系列-使用C语言封装寄存器

STM32入门系列-使用C语言封装寄存器 具体实例:控制 GPIOC 端口的第 0 管脚输出一个低电平.首先我们需要知道GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址得到 GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址. 总线和外设基地址封装 根据寄存器的概念,我们可以使用 C 语言中的宏定义对寄存器进行定义.具体代码如下: //定义外设基地址 #define PERIPH_BASE ((unsigned int)0x40000000) 定义

[转载]synplify使用

评定综合好坏最重要的两个指标:速度是否快和面积是否小:synplify是专门针对FPGA/CPLD的逻辑综合工具:synplify两个最显著的特点是BEST和Timing driven引擎,使得综合结果在速度和面积上都达到比较理想的效果:synplify的几个版本使用相同的核心,但synlify pro的功能最强大: synplify综合过程包括三方面内容:1.对HDL源代码进行编译    synplify将输入的HDL源代码翻译成boolean表达式并优化逻辑关系:2.对编译的结果优化