FPGA优化之高扇出

Fanout,即扇出,模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因此,在写代码时应尽量避免高扇出的情况。但是,在某些特殊情况下,受到整体结构设计的需要或者无法修改代码的限制,则需要通过其它优化手段解决高扇出带来的问题。以下就介绍三个这样的方法:

首先来看下面这个实例,如图1所示为转置型FIR滤波器中的关键路径时序报告,在DSP in FPGA的FIR专题中有介绍转置型结构FIR滤波器输入数据的扇出较大,在图1中所示为11,因此net delay高达1.231ns。如图2所示,输入数据驱动了11个DSP48E1。

图1

图2

在没有优化情况下,该设计的fmax:206.016MHz

1. 寄存器复制

寄存器复制是解决高扇出问题最常用的方法之一,通过复制几个相同的寄存器来分担由原先一个寄存器驱动所有模块的任务,继而达到减小扇出的目的。通过简单修改代码,如图3所示,复制了4个寄存器:din_d0、din_d1、din_d2、din_d3,din_d、din_d0、din_d1、din_d2分别驱动2个DSP48E1,din_d3驱动3个DSP48E1。其中在代码中为防止综合器优化相同寄存器,在对应信号上加入了(* EQUIVALENT_REGISTER_REMOVAL="NO" *)属性避免被优化。

图3

综合实现后得到时序报告如图4所示,该数据路径上输入数据fanout减为2,对应net delay也减小到了0.57ns。得到设计如图5所示,与期望的相同,复制了4个寄存器来分担fanout。经过寄存器优化后得到fmax:252.143MHz

图4

图5

2. max_fanout属性

在代码中可以设置信号属性,将对应信号的max_fanout属性设置成一个合理的值,当实际的设计中该信号的fanout超过了这个值,综合器就会自动对该信号采用优化手段,常用的手段其实就是寄存器复制。属性设置如下代码所示:

(* max_fanout = "3" *)reg  signed [15:0] din_d;

将din_d信号的max_fanout属性设置成3,经过综合实现后,得到时序报告如图6所示,其中fanout只有2,相应的net delay也只有0.61ns,自动优化效果还不错。结构如图7所示,其中din_d_12_1、din_d_12_2、din_d_12_3是综合器优化后自动添加,即实现了寄存器复制功能。经过设置max_fanout属性优化后得到fmax:257.135MHz

图6

图7

3. BUFG

通常BUFG是用于全局时钟的资源,可以解决信号因为高扇出产生的问题。但是其一般用于时钟或者复位之类扇出超级大的信号,此类信号涉及的逻辑遍布整个芯片,而BUFG可以从全局的角度优化布线。而且一块FPGA芯片中BUFG资源也有限,在7k325tffg900上也仅有32个,如果用于普通信号的高扇出优化也不大现实。因此,在时钟上使用BUFG是必须的,但是如果设计中遇到某些复位信号因高扇出产生的时序问题时,可以在此信号上使用BUFG来优化。

综上,在遇到信号高扇出时,对于普通信号可采用寄存器复制或者设置max_fanout属性优化;而对于复位信号,可加入BUFG优化。

FPGA优化之高扇出,布布扣,bubuko.com

时间: 2024-10-11 13:13:17

FPGA优化之高扇出的相关文章

关于 FPGA 内部信号扇入扇出

扇入.扇出系数 扇入系数是指门电路允许的输入端数目.一般门电路的扇入系数为1—5,最多不超过8.扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力.一般门电路的扇出系数为8,驱动器的扇出系数可达25.扇出系数体现了门电路的负载能力. 灌电流.拉电流 当逻辑门输出端是低电平时,灌入逻辑门的电流称为灌电流,灌电流越大,输出端的低电平就越高.当逻辑门输出端是高电平时,逻辑门输出端的电流是从逻辑门中流出,这个电流称为拉电流.简单的理解就是逻辑门的输入(灌电流)和输出电流(拉电流). 上.下拉电

Java秒杀系统方案优化---高性能高并发实战

Java秒杀系统方案优化---高性能高并发实战网盘地址:https://pan.baidu.com/s/1htNv2zq 密码: ssyt备用地址(腾讯微云):https://share.weiyun.com/889808c023b6e9d9f504399a5b07276f 密码:1WaUHB 亮眼的!高并发秒杀系统核心技术 课程以"秒杀"场景为例,但技术都是通用的,举一反三,方得始终应对大并发:多层次多粒度缓存+消息队列异步+服务器分布式部署 专业的压测工具:有依有据,鉴证系统的优化

多 “维” 优化——前端高并发策略的更深层思考

作者:徐嘉伟,腾讯web前端开发 高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest 导读 一项指标的变好,总少不了相应优化策略的实施.优化并不是简单的一蹴而就,而是个不断迭代与推翻的过程.更深层的优化方案,往往是在某种思维策略之下,对问题场景和基本策略优缺的深刻理解后做出的当下最优的权衡结果.本文笔者从前端高并发优化这一具体点出发,逐步向大家阐述笔者在优化的"术"之上思维层面的一些思考.希望能给各位带来共鸣和感悟. 背景: 之所以会以前端高并发这

Java秒杀系统方案优化 高性能高并发实战 视频教程

第1章 课程介绍及项目框架搭建 1-1 Java高并发商城秒杀优化导学 1-2 项目环境搭建(Eclipse) 1-3 项目环境搭建(IDEA) 1-4 集成mybatis 1-5 安装redis 1-6 集成redis上 1-7 集成redis中 1-8 集成redis下第2章 实现用户登录以及分布式session功能 2-1 两次md5 2-2 登录功能实现上 2-3 登录功能实现下 2-4 jsr303参数校验 2-5 异常处理 2-6 分布式session上 2-7 分布式session

Java优化高性能高并发+高并发程序设计

第1章 课程介绍及项目框架搭建1-1 Java高并发商城秒杀优化导学1-2 项目环境搭建(Eclipse)1-3 项目环境搭建(IDEA)1-4 集成mybatis1-5 安装redis1-6 集成redis上1-7 集成redis中1-8 集成redis下第2章 实现用户登录以及分布式session功能2-1 两次md52-2 登录功能实现上2-3 登录功能实现下2-4 jsr303参数校验2-5 异常处理2-6 分布式session上2-7 分布式session下第3章 秒杀功能开发及管理后

Java优化高性能高并发+高并发程序设计视频教程

转自:https://www.cnblogs.com/ajianku/p/10236573.html 第1章 课程介绍及项目框架搭建1-1 Java高并发商城秒杀优化导学1-2 项目环境搭建(Eclipse)1-3 项目环境搭建(IDEA)1-4 集成mybatis1-5 安装redis1-6 集成redis上1-7 集成redis中1-8 集成redis下第2章 实现用户登录以及分布式session功能2-1 两次md52-2 登录功能实现上2-3 登录功能实现下2-4 jsr303参数校验2

PK2244-Java秒杀系统方案优化 高性能高并发实战

新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853  获取资料. 下载地址:http://pan.baidu.com/s/1jI05TPW 谢谢大家的支持,我会努力给大家分享高质量教程 作者:源猿缘链接:https://www.jianshu.com/

项目四:Java秒杀系统方案优化-高性能高并发实战

技术栈 前端:Thymeleaf.Bootstrap.JQuery 后端:SpringBoot.JSR303.MyBatis 中间件:RabbitMQ.Redis.Druid 功能模块 分布式会话,商品列表页,商品详情页,订单详情页,系统压测,缓存优化,消息队列,接口安全. 一.项目框架搭建 1.Spring Boot环境搭建 2.集成Thymeleaf,Result结果封装 3.集成Mybatis+Druid 4.集成Jedis+Redis安装+通用缓存Key封装 二.实现登录功能 1.数据库

FPGA开发全攻略——时序约束

原文链接: FPGA开发全攻略连载之十二:FPGA实战开发技巧(5) FPGA开发全攻略连载之十二:FPGA实战开发技巧(6)(原文缺失,转自:FPGA开发全攻略—工程师创新设计宝典) 5.3.3 和FPGA接口相关的设置以及时序分析5.3.3.1 使用约束文件添加时序约束 一般来讲,添加约束的原则为先附加全局约束,再补充局部约束,而且局部约束比较宽松.其目的是在可能的地方尽量放松约束,提高布线成功概率,减少ISE 布局布线时间.典型的全局约束包括周期约束和偏移约束.在添加全局时序约束时,需要根