zoukankan      html  css  js  c++  java
  • 转载 寄存器平衡实例

    在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所示。

    4628.jpg

    图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所示。

    4628.jpg

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

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

  • 相关阅读:
    配置变量的信息
    Smarty保留变量信息
    选择排序
    java.utils.HashMap数据结构分析
    HashMap的工作原理
    Dubbo
    五种单例模式:
    Redis的持久化机制包括RBD和AOF两种,对于这两种持久化方式各有优势
    Zookeeper要安装在奇数个节点,但是为什么?
    Redis搭建多台哨兵
  • 原文地址:https://www.cnblogs.com/lianjiehere/p/4039538.html
Copyright © 2011-2022 走看看