FPGA中的速度优化

一、逻辑设计中的速度概念

逻辑设计速度相关的概念有三个:设计吞吐量、设计延时和设计时序。速度优化策略而言,吞吐量需要提高,延时应该降低,时序应该收敛(时序余量slave越大,收敛越强,移植性越好)。吞吐量提高的方法一般是采用大的并行设计,延时降低的方法则是采用缓存结构或者并行结构,时序收敛则需要综合考虑。

二、时序收敛的早期考虑

问题发现的越早,解决的成本越低。时序收敛考虑地越早,后面可能的问题就会越少。

先看一下标准FPGA设计流程:

(1)制定设计指导文件

(2)设计功能代码

(3)进行功能仿真

(4)编译设计

(5)时序分析

(6)时序调整直至时序收敛

在设计之初,大部分考虑都集中在如何实现功能上,而容易忽略时序问题。在制定指导文件时,应该建立时序收敛的概念,最好能提前对某些信号转换区给出时序约束图,通过设计提前消除隐患。

三、时序收敛的设计考虑

设计中,也就是得到时序分析报告后所需要的措施。时序分析报告会给出最大时钟频率的报告,这个参数直接决定了电路的时序收敛等级(频率越高,收敛越好)。整个设计中的考虑也是依靠对这个参数的优化来展开的。最大时钟频率相关参数有五个:

Tclk-q:时钟到达启动触发器时钟端,数据到达Q端(也就是触发器输出端)的延时,。

Tlogic:启动触发器和锁存触发器之间的延时

Trouting:布线延时,这个是EDA工具调整时序收敛常改变的参数。

Tsetup:建立时间,数据到达锁存触发器D端,时钟最快到达时间。

Tsekw:时钟偏斜,时钟到达启动触发器和锁存触发器之间的延时。

这五个参数中只有最后一个是正相关,其他都是负相关。所有在某些设计中,会人为制造Tskew来满足高速时序收敛。

四、时序收敛的总体考虑

总体考虑的基本原则:

①提前规划,有备无患②实时对应门级层次③预先计算资源用量,选择合适器件④并行原则,同步原则

具体优化方法则是需要在设计中一一验证。

(1)在关键路径上减少组合逻辑

关键路径,就是时序收敛最差的路径。这里是典型的水桶效应,将别的长木板锯下来补足短板,可以有效提高某些关键短板导致的收敛问题。减少组合逻辑,也就是减少Tlogic。至于如何减少,就根据逻辑表达式增加并行结构了,调整位置有时也可以做到。

(2)适当加入逻辑复制

逻辑复制,就是将一个信号作为多个输入改为若干个复制信号作为多个输入,从而减低扇出。扇出对逻辑延时的影响就好像工人工作时间对工作量的影响,要求工人必须同时开始同时结束,必然导致整体效率下降,增加工作时间的灵活性可以缓解工作压力。当然,逻辑复制也会增加资源消耗。寄存器逻辑复制不能解决内部寄存器的时序,但可以优化寄存器之间的时序。组合逻辑复制同样可以优化这逻辑之间的时序关系。而且,逻辑复制可以在布局布线层次上实现更好地效果,缓解面积紧张。

(3)在组合逻辑中加入寄存器

组合逻辑延时过大,会直接降低最大时钟频率,这时候在组合逻辑中间插入寄存器暂存,可以让数据歇一会,从而缓解时序紧张。也是降低逻辑延时的一种方法。

(4)寄存器平衡优化

常见的平衡优化有操作符平衡,就是使用括号将操作符尽量实现对称来保证硬件结构上的对称,进而减少关键路径的长度。

寄存器平衡,在Altera中被定义为寄存器重定时,通过移动关键路径和相邻路径上的组合逻辑来实现时序性能的提高

(5)并行结构优化

就是尽可能将输入应用起来。

(6)消除优先级

优先级,在if语句中体现尤为明显,对于选择结构,可以不考虑优先级,就可以使用case来编写,消除优先级,进而提高时序收敛性。

五、小结

时序收敛是时序是否符合要求的体现,掌握代码设计时的时序收敛方法是重要的。

FPGA中的速度优化的更多相关文章

  1. FPGA中改善时序性能的方法_advanced FPGA design

    本文内容摘自<advanced FPGA design>对应中文版是 <高级FPGA设计,结构,实现,和优化>第一章中的内容 FPGA中改善时序,我相信也是大家最关心的话题之一 ...

  2. web访问速度优化分析

    请求从发出到接收完成一共经历了DNS Lookup.Connecting.Blocking.Sending.Waiting和Receiving六个阶段,时间共计38ms.请求完成之后是DOM加载和页面 ...

  3. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  4. 【原创】Webpack构建中hash的优化

    背景: SPA的vue应用,采用webpack2构建,打包入口为main.js 输出:main模块打包成app.js,公共lib打包成vendor.js,公共样式打包成app.css,运行时依赖打包成 ...

  5. Tone Mapping算法系列二:一种自适应对数映射的高对比度图像显示技术及其速度优化。

    办公室今天停电,幸好本本还有电,同事们好多都去打麻将去了,话说麻将这东西玩起来也还是有味的,不过我感觉我是输了不舒服,赢了替输的人不舒服,所以干脆拜别麻坛四五年了,在办公室一个人整理下好久前的一片论文 ...

  6. FPGA中IBERT核的应用(转)

    https://wenku.baidu.com/view/50a12d8b9ec3d5bbfd0a74f7.html (必看)    摘要 IBERT即集成式比特误码率测试仪,是Xilinx专门用于具 ...

  7. 记一次cocos项目的加载速度优化

    半个月前,我们用cosos creator做了一个简单的小游戏,也许算不上小游戏吧..一边学cocos,一边做,几经波折后终于上线了.然鹅,功能是实现了,但是加载速度十分感人(毕竟没经验嘛,无辜脸). ...

  8. 在 Android开发中,性能优化策略十分重要

    在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...

  9. (转)网站速度优化技巧:Nginx设置js、css过期时间

    网站速度优化技巧:Nginx设置js.css过期时间 原文:http://www.webkaka.com/blog/archives/Nginx-set-the-expiration-time-for ...

  10. 详解Oracle数据货场中三种优化:分区、维度和物化视图

    转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...

随机推荐

  1. python中矩阵合并、拼接、组合

    1 numpy数组 1.1 append() import numpy as np a=np.array([[1,3],[5,7]]) b=np.array([[2,4],[6,8]]) c=np.a ...

  2. ORACLE cannot fetch plan for SQL_ID

    今天做SQL执行计划测试的时候,发现sqlplus无法正常打印执行计划,根据网上资料整理如下: ..... SYS@orcl> select *   2     from table(   3 ...

  3. 如何渲染最原始的yuv视频数据?

    一.整体思路 我们在用纹理增加细节那篇文章中提到过,要将图片渲染在屏幕上,首先要拿到图片的像素数组数据,然后将像素数组数据通过纹理单元传递到片段着色器中,最后通过纹理采样函数将纹理中对应坐标的颜色值采 ...

  4. queryset高级用法:select_related

    在提取某个模型的数据的同时,也提前将相关联的数据提取出来.比如提取文章数据,可以使用select_related将author信息提取出来,以后再次使用article.author的时候就不需要再次去 ...

  5. 在写dockerfile时替换国内源

    众所周知,Debian是linux发行版中官方源最难用的一个,这个傻逼源让我再构建docker镜像时卡了很久. ​ 那么能不能替换构建dockerfile时使用的源呢?显然是可以的 ​ 在与Docke ...

  6. Python函数每日一讲 - 一文让你彻底掌握Python中的getattr函数

    引言 在 Python 中,getattr() 函数是一种强大的工具,它允许我们在运行时动态地访问对象的属性和方法.本文将介绍 getattr() 函数的基本语法.常见用法和高级技巧,帮助大家更好地理 ...

  7. 【Azure 应用服务】在Azure Funciton中使用Powershell脚本函数,需要存储一些变量值如何解决?

    问题描述 使用Azure Function创建Powershell脚本来执行函数,在使用中需要存储一些不重要的参数.一般情况,存储的问题都是交给DB,Storage等来解决.但是有没有一种简单的办法呢 ...

  8. Java 对属性赋值的位置 执行的先后顺序

    1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 对属性赋值的位置: 6 * @author Bytezero·zhenglei! ...

  9. Java //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除)+优化

    1 //100以内的质数的输出(从2开始,到这个数-1结束为止,都不能被这个数本身整除) 2 boolean isFlag = true; //标识i是否被j除尽,修改其值 3 4 for(int i ...

  10. nginx rewrite 语法

    nginx rewrite 语法 一 定义 Rewrite主要实现url地址重写, 以及地址重定向,就是将用户请求web服 务器的地址重新定向到其他URL的过程. 二 语法格式 reweite fia ...