FPGA设计时序约束五、设置时钟不分析路径

一、背景

    在进行时序分析时,工具默认对所有的时序路径进行分析,在实际的设计中,存在一些路径不属于逻辑功能的,或者不需要进行时序分析的路径,使用set_false_path对该路径进行约束,时序分析时工具将会直接忽略路径不进行分析。

1.1 设置false path的场景   

可以设置为false path的路径包括

a)跨时钟域中添加的进行两次同步的逻辑单元

b) 只在FPGA通电启动时的寄存器

c)复位或测试的逻辑模块

d)异步的分布式RAM中读时钟和写时钟之间的路径

下面,展示一个对于上面提到的非功能单元的路径,在两个触发器中级联了两个选择器,选择器的选项信号相同。

 

1.2 set_false_path的优势

a)减少运行时间:将一些路径设置为false path后,时序分析工具无需耗费时间对该路径进行分析,也不需要对非功能模块路径进行优化,可以节省时间

b)提高QOR(quality of results):将路径设置为false path可以极大地提高QOR,综合,布局后的质量,优化设计也会极大地受工具尝试解决的时序问题影响。

    因为如果非功能模块的路径存在时序违例时,工具可能尝试去修复这些违例,这不仅会导致设计因为逻辑复制而变大,也可能因为非功能模块有更大的违例而忽略了实际功能模块的违例问题。只有正确的设置约束才能获取最好的结果。

二、set_false_path

2.1 设置说明

进入Timing Constraints,选择Exceptions中Set False Path

 

Set False Path设置界面如下

 

Start Point:设置false path的起点,可以为Cell pins,clocks,cells,I/O ports;

Through Points:设置false path经过的中间路径,可以为Nets,cells,cell pins;

End Points:设置false path的终点,可以为Cell pins,clocks,cells,I/O ports;

 

Setup/Hold:设置False path的路径的分析类型为Setup 或hold,不勾选时,两者都会为False Path

Rise/Fall:设置False path的路径中生效的边沿,不勾选时,不会进行边沿区分

Remove existing path exceptions before setting false path:勾选后,如果设置的路径上已存在其他exceptions约束,则会将其覆盖,不勾选则保留原有的约束。

备注:当使用through时没有设置-from和-to参数时需注意,所有经过through设置的线路都会被视为false path。

2.2 细节区分

a)多个-through时,顺序不同结果不同,下面两条约束不是等价的,第一条表示先通过cell1/pin1,再通过cell2/pin2的路径,第二条约束则相反

set_false_path -through cell1/pin1 -through cell2/pin2
set_false_path -through cell2/pin2 -through cell1/pin1

b)get_cells连接多个单元时,表示从复位端口reset到多个cells(ff1_reg,ff2_reg,ff3_reg)中的路径都将设为false path

set_false_path -from [get_ports reset] -to [get_cells {ff1_reg ff2_reg ff3_reg}]

c)不对两个异步时钟clk1,clk2间的路径进行分析,只会将从clk1到clk2间的路径设置为false path

set_false_path -from [get_clocks clk1] -to [get_clocks clk2]

d)如果要对clk1到clk2,clk2到clk1的路径都设置为false path,则需要两条约束命令

set_false_path -from [get_clocks clk1] -to [get_clocks clk2]
set_false_path -from [get_clocks clk2] -to [get_clocks clk1]

e)当需要对多个异步时钟间都不进行时序分析时,对异步时钟两两间设置false path则太繁琐,此时可使用set_clock_groups代替

set_clock_groups -name clk_group -asynchronous -group [get_clocks clk1] -group [get_clocks clk2] -group [get_clocks clk3]

f)在两个寄存器间的非正常逻辑功能路径中,设置false path可以只使用两个through,而不用指定start point和end point

 

命令中MUX1/a0和MUX2/a1位置不能换,交换后则表示先经过MUX2/a1再经过MUX1/a0

set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]

f)对于异步双端口分布式RAM,写操作和RAM的时钟是同步的,读操作可以不同步,因此,在写时钟和读时钟间设置false path符合设计需求,rd_clk为读时钟,wr_clk为写时钟,有两种约束方式可以实现

 

方法一、设置从写寄存器到读寄存器的false path

set_false_path -from [get_cells <write_registers>] -to [get_cells <read_registers>]

 方法二、设置从写使能端口WE到RAM的路径

set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ <PATTERN_FOR_DISTRIBUTED_RAMS>}]

三、工程示例

工程代码

module timing(clk1,clk2,clk3,clk4,ce,d1,d2,out,ff1_2,ff4 );
input clk1,clk2,clk3,clk4,ce,d1,d2;
output out,ff1_2,ff4;
reg ff1,ff1_2,ff2,ff3,ff4;
wire comb,comb4;
always@(posedge clk1,negedge ce)
beginif(!ce)beginff1<=0;ff1_2<=0;endelse beginff1<=d1;ff1_2<=ff1;end
end
always@(posedge clk2,negedge ce)
beginif(!ce)ff2<=0;else beginff2<=d2;end
end
assign comb=ff1*ff2;
always@(posedge clk3,negedge ce)
beginif(!ce)ff3<=0;else beginff3<=comb;end
end
assign out=ff3;
assign comb4=ff1_2*out;
always@(posedge clk4,negedge ce)
beginif(!ce)ff4<=0;else beginff4<=comb4;end
end
endmodule

主时钟和生成时钟约束

create_clock -period 10.000 -name create_clk1 -waveform {0.000 5.000} [get_ports clk1]create_generated_clock -name gen_clk_2 -source [get_pins ff1_reg/C] -divide_by 4 -add -master_clock create_clk1 [get_pins ff2_reg/C]create_generated_clock -name gen_clk_3 -source [get_pins ff1_reg/C] -multiply_by 4 -add -master_clock create_clk1 [list [get_pins ff2_reg/C] [get_pins ff3_reg/C]]create_generated_clock -name gen_clk_4 -source [get_pins ff1_reg/C] -edges {1 4 5} -edge_shift {0.000 1.000 0.000} -add -master_clock create_clk1 [get_pins ff4_reg/C]

未设置set_false_path时,异步时钟路径create_clk1存在到gen_clk_4的路径,下图蓝色线所示路径

 

设置create_clk1到gen_clk_4的false path约束,inter-clock paths中只剩gen_clk_3到gen_clk_4的路径,无create_clk1到gen_clk_4的路径

set_false_path -from [get_clocks create_clk1] -to [get_clocks gen_clk_4]

 

四、参考资料

用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

提取码:mylt  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度车牌识别AI Linux使用方法-armV7交叉编译

1、获取百度ai的sdk 百度智能云-登录 (baidu.com) 里面有两个版本的armV7和armV8架构。v7架构的性能比较低往往需要交叉编译&#xff0c;v8的板子性能往往比较好&#xff0c;可以直接在板子上编译。 解压到ubuntu里面。这里介绍v7架构的。 2、ubuntu环境配置 ubuntu下安装软件…

网络编程基础知识总结——IP,端口,协议

目录 1. 什么是网络编程&#xff1f; 2. 网络编程的三要素 3. IP 3.1 IP地址的概念 3.2 IP地址的分类 3.3 IPv4解析 3.4 Ipv6解析 4. IPv4 的使用细节 5. 特殊IP地址 4. 端口号 5. 协议 5.1 UDP协议 5.2 TCP协议 1. 什么是网络编程&#xff1f; 总的来说就是一句…

[计算机提升] Windows系统权限

1.2 Windows系统权限 在Windows操作系统中&#xff0c;权限是指授予用户或用户组对系统资源进行操作的权利。权限控制是操作系统中重要的安全机制&#xff0c;通过权限控制可以限制用户对系统资源的访问和操作&#xff0c;从而保护系统安全。 Windows操作系统中包含以下几种权…

Leetcode算法解析——查找总价格为目标值的两个商品

1. 题目链接&#xff1a;LCR 179. 查找总价格为目标值的两个商品 2. 题目描述&#xff1a; 商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 示例 1&#xff1a; 输入&#xff1a;price …

大语言模型迎来重大突破!找到解释神经网络行为方法

前不久&#xff0c;获得亚马逊40亿美元投资的ChatGPT主要竞争对手Anthropic在官网公布了一篇名为《朝向单义性&#xff1a;通过词典学习分解语言模型》的论文&#xff0c;公布了解释经网络行为的方法。 由于神经网络是基于海量数据训练而成&#xff0c;其开发的AI模型可以生成…

以单颗CMOS摄像头重构三维场景,维悟光子发布单目红外3D成像模组

维悟光子近期发布全新单目红外3D成像模组,现可提供下游用户进行测试导入。通过结合微纳光学元件编码和人工智能算法解码,维悟光子单目红外3D成像模组采用单颗摄像头,通过单帧拍摄,可同时获取像素级配准的3D点云和红外图像信息,可被应用于机器人、生物识别等广阔领域。 市场…

Qt 5.12.12 静态编译(MinGW)

前置准备 系统环境 版本 Windows 11 专业版 版本 22H2 安装日期 ‎2023/‎6/‎18 操作系统版本 22621.2428 体验 Windows Feature Experience Pack 1000.22674.1000.0依赖工具 gcc Qt 5.12.12 安装 MinGW 后自动安装 https://download.qt.io/archive/qt/5.12/5.12.12/qt-ope…

三防PDA手持终端开发板-联发科MTK6765平台安卓主板方案

三防手持终端安卓主板方案采用了联发科12nm八核MT6765处理器&#xff0c;配备4G64GB内存(可选配6GB256GB)&#xff0c;并搭载最新的Android 10.0操作系统。该方案支持许多功能&#xff0c;包括高亮显示屏、高清摄像头、NFC、3A快速充电、1D/2D扫描(可选配)、高精度定位(可选配)…

VMware _ Ubuntu _ root 密码是什么,怎么进入 root 账户

文章目录 进入 root 账户设置 root 密码小结 在 VMware 安装 ubuntu 虚拟机之后&#xff0c;root 用户的密码是什么&#xff1f;安装的过程也没有提示输入 root 用户的密码&#xff0c;只有创建第一个非 root 用户的密码。但是 root 用户是存在的&#xff0c;又怎么切换到 root…

红帽Linux的安装和部署

目录 一、红帽Linux的安装阶段 1、下载redhat7.9的iso镜像 2、安装阶段 二、红帽Linux的配置阶段 1、第一次进入装机配置 2、进入机器后的一些配置 三、远程连接阶段 1、关闭防火墙 2、使用Xshell远程连接&#xff08;其他连接工具也行&#xff09; 1.开启SSH服务 2.连…

利达卓越:关注环保事业,持续赋能科技

随着全球环境问题的日益突出,绿色金融作为一种新兴的金融模式逐渐受到各国的重视。绿色金融是指在金融活动中,通过资金、信贷和风险管理等手段,支持环境友好和可持续发展的项目和产业。绿色金融的出现是为了应对气候变化、资源短缺、污染问题等现实挑战,促进经济的绿色转型和可…

基于海洋捕食者优化的BP神经网络(分类应用) - 附代码

基于海洋捕食者优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于海洋捕食者优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.海洋捕食者优化BP神经网络3.1 BP神经网络参数设置3.2 海洋捕食者算法应用 4…

Delay-Based 拥塞控制算法

上班七天了&#xff0c;有点崩溃&#xff0c;看一篇论文提神&#xff1a;A Delay-Based Approach for Congestion Avoidance in Interconnected Heterogeneous Computer networks&#xff0c;来自 Raj Jain&#xff0c;1989 年。这篇论文基于下图展开&#xff1a; 是不是很熟…

SiC外延片测试方案

外延材料是实现器件制造的关键&#xff0c;主要技术指标有外延层厚度、晶格布局&#xff0c;材料结构&#xff0c;形貌以及物理性质&#xff0c;表面粗糙度和掺杂浓度等。下面阐述SiC外延表面常见的测试手段&#xff1a; 1. 外延层厚度&#xff08;傅里叶变换红外FT-IR&#xf…

SpringBoot通过配置切换注册中心(多注册中心nacos和eureka)

场景&#xff1a; 因项目需要&#xff0c;一个springcloud微服务工程需要同时部署到A,B两个项目使用&#xff0c;但A项目使用Eureka注册中心&#xff0c;B项目使用Nacos注册中心&#xff0c;现在需要通过部署时修改配置来实现多注册中心的切换。 解决思路&#xff1a; 如果同时…

Eslint配置 Must use import to load ES Module(已解决)

最近在配置前端项目时&#xff0c;eslint经常会碰到各种报错&#xff08;灰常头疼~&#xff09; Syntax Error Error No ESLint configuration found.Syntax Error: Error: D:\dmq\dmq-ui.eslintrc.js: Environment key “es2021” is unknown at Array.forEach ()error in ./…

UE4 快速入门 1

安装 https://www.unrealengine.com/zh-CN/download Launcher ue4.23 editor visual studio 2019 社区版 文档学习

IO流:java中解码和编码出现乱码说明及代码实现

IO流&#xff1a;java中解码和编码的代码实现 一、UTF-8和GBK编码方式二、idea和eclipse的默认编码方式三、解码和编码方法四、代码实现编码解码 五、额外知识扩展 一、UTF-8和GBK编码方式 如果采用的是UTF-8的编码方式&#xff0c;那么1个英文字母 占 1个字节&#xff0c;1个…

Qt QMultiMap

QMultiMap 文章目录 QMultiMap摘要QMultiMapQMultiMap 特点代码示例 关键字&#xff1a; Qt、 QMultiMap、 容器、 键值、 键值重复 摘要 今天在观摩小伙伴撸代码的时候&#xff0c;突然听到了QMultiMap自己使用Qt开发这么就&#xff0c;竟然都不知道&#xff0c;所以趁没…

git cherry-pick命令

问题场景&#xff1a; 需要把dev分支的代码&#xff0c;合并到master分支中&#xff0c;但是又不能根据整个分支合并&#xff0c;所有使用cherry-pick命令&#xff0c;根据提交的commit号来合并 问题描述&#xff1a; 原因分析&#xff1a; 解决方案&#xff1a; 1.在dev分支…