FPGA中改善时序性能的方法

  本文内容摘自《advanced FPGA design》对应中文版是 《高级FPGA设计,结构,实现,和优化》第一章中的内容

  FPGA中改善时序,我相信也是大家最关心的话题之一,在这本书中列举了一些方法供给大家参考。

1,插入寄存器(Add Register Layers),在中文版中被翻译成:添加寄存器层次。即,在关键路径中插入寄存器。

  这种方式会增加设计的时滞(clock latency)。插入了几个寄存器,结果输出就会延长几个周期,在不违反设计规格(对clock latency有要求)以及功能没有影响的时滞情况之下可以这么做。

2,并行结构。把串行改成并行。最典型的就是乘法器了。

  作为一个16bit的乘法器,最省资源的就是等待16个clock出结果,也可以是设计成面积最大但是出来结果速度最快的,只需要一个周期就可以出来结果。

3,逻辑展开(Flatten Logic Structures)。中文版同样翻译的很保守:展平逻辑结构。

  仔细看了看,觉得里面应该包含了连个知识点。第一是逻辑复制,特别是针对大扇出(详情在altera的官方视频资料中有提到),通常使用generate或者是在综合器中设定。第二个是消除代码中的优先级。这里需要多说一句:现在的工具很智能,就算你写成if   else 有优先级的结构,有时候也能综合出并行结构。如果并行也符合你的设计要求,为了安全起见,最好还是写成case这种并行结构比较好。

4,寄存器平衡 (Register Balancing)。

  寄存器平衡就是在你的关键路径中移动你的寄存器。第一就是你手动移动 ——  改代码。第二就是设定综合器让它自己移动 —— 不到万不得已不这么干,因为这么多导致代码移植性变差。

5,路径重组

  这是最有意思的一个方法,也是体现你的设计水平的方式。结果书中给出的例子确实让我惊讶了一下。为啥呢,先贴出代码

  第一版:

 1 module randomlogic_1(
 2     output reg [7:0] Out,
 3     input [7:0] A, B, C,
 4     input clk,
 5     input Cond1, Cond2);
 6 always @(posedge clk)
 7     if(Cond1)
 8         Out <= A;
 9     else if(Cond2 && (C < 8))
10         Out <= B;
11     else
12         Out <= C;
13 endmodule            

第二版:

 1 module randomlogic_2(
 2     output reg [7:0] Out,
 3     input [7:0] A, B, C,
 4     input clk,
 5     input Cond1, Cond2);
 6
 7 wire CondB = (Cond2 & !Cond1);
 8
 9 always @(posedge clk)
10     if(CondB && (C < 8))
11         Out <= B;
12     else if(Cond1)
13         Out <= A;
14     else
15         Out <= C;
16 endmodule

  从代码上来看2版好像还比第一版路径更长,因为 out <= B,的路径从  Cond2 && (C < 8) 变成了 (Cond2 & !Cond1) && (C < 8)。似乎还变长了,怎么叫优化了呢?实际上,如果我们不看下面的图,自己模仿RTL Viewer,发现2版的关键路径真的比1短。书中给出的图示也是如此,这是第一版的视图,关键路径经历了4个器件

这是第二版的视图,关键路径居然少了一个器件。

这就是我惊讶的地方,因为这种做法从代码上看不出来。所以需要更高的硬件知识才能驾驭啊。

时间: 2024-08-05 19:32:58

FPGA中改善时序性能的方法的相关文章

ASP.NET中26种性能优化方法

系统类  Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构,Guid 结构, ICloneable接口,IComparable接口,IConvertible接口, IDisposable类, 集合类      ICollection接口,IComparer接口,IDictionary接口.IDictionaryEnumerator接口 ,IEnumerab

nios中SDRAM时序约束的方法

SDRAMS时序约束十分重要,没有时序约束时,由于数据管脚到时钟的边沿延时不一致,容易导致数据采样出错, 最终导致软件无法加载,很常见的就是在软件下载的过程中找不到chip id. 下面这个方法新手可以参考学习一下! 这里主要是讲了一下时钟的约束, 主要参考特权同学的,链接如下: http://wenku.baidu.com/link?url=Tk1bi1nx0xCp9sp6QIGlpoCtTFzjmwO28-t_mR9L-3Y0nLgEX8y1qR7OBUbtFOBq8K7zELY-PM9Dt

js-JavaScript高级程序设计学习笔记21 改善JavaScript性能的方法

第24章 最佳实践 1.性能 1.避免全局查找 将在一个函数中会用到多次的全局对象保存在局部变量.比如多次使用document.getElement...,可以首先var doc=document,把document对象保存在本地的doc变量中. 2.避免with语句. with会创建自己的作用域,需要额外的作用域链查找 3.避免不必要的属性查找 如果需要多次用到对象属性,应该将其存储在局部变量中. 4.优化循环 减值迭代更快,优化循环体 5.展开循环 循环次数确定时,消除循环更快.Duff装置

FPGA中浮点运算实现方法——定标

有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种解决的方法就是採用定标.数的定标就是将要运算的浮点数扩大非常多倍,然后取整,再用这个数进行运算,运算得到的结果再缩小对应的倍数就能够了.在设计中,一定不要忘记小数点.在FPGA 中是体现不出来小数点的,小数点的位置仅仅有程序猿知道.Q表示小数点的位置,Q15就表示小数点在第15位. 浮点数(x)转

Sql Server中三种字符串合并方法的性能比较

最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.        示例:        有表內容﹕        名称  內容         1     abc        1      aaa        1      dddd        2      1223        2       fkdjfd           --------------------------------        结果﹕        1 

FPGA中的delay与latency

delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路.布线中,表示数据从一端到另一端经过的时间,通常以绝对时间衡量. 引起delay的有线延迟.门延迟等,通常是不希望出现的. latency和电路的逻辑设计有关,如果latency很大,通过提升工作的时钟频率,那么绝对的响应时间不会太长. 而delay很大,那么电路的工作频率会受限,从而影响电路的整体

【转】FPGA中的建立时间和保持时间的关系以及影响时钟的因素

时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽量较小时钟的延时对保证设计的稳定性有非常重要的意义. 1.1 建立时间与保持时间 建立时间(Tsu:set up time)是指在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器:保持时间(Th:hold time)是指数据稳定后保持的

数据仓库中的 SQL 性能优化(Hive篇)

一个Hive查询生成多个map reduce job,一个map reduce job又有map,reduce,spill,shuffle,sort等多个阶段,所以针对hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MR job)的优化,下文会分别阐述. 在开始之前,先把MR的流程图帖出来(摘自Hadoop权威指南),方便后面对照.另外要说明的是,这个优化只是针对Hive 0.9版本,而不是后来Hortonwork发起Stinger

Android性能优化方法(八)

Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习他人的布局.应该说是一个非常实用的工具. AD:WOT2014:用户标签系统与用户数据化运营培训专场 层级观察器(Hierarchy Viewer): Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具