出现时序违例怎么解决-VIVADO

2023-10-10 07:10

本文主要是介绍出现时序违例怎么解决-VIVADO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


在工程应用中,经常会使用不同频率的时钟。
在不同条件下,出现时序违例。
在出现时序违例时,导致编译时间过长。

一、出现时序违例?

时序分析的测试程序:

`timescale 1ns/1ps
module test_top_1 (input pri_clock,    // 50M主时钟input sec_clk,input	A1,output	A2);//MMCM生成20M、30M、50M、100M、200M的衍生时钟
wire clk20m,clk30m,clk50m,clk100m,clk200m;
wire locked;clk_wiz_0 gen_clk(// Clock out ports.clk20m(clk20m),     // output clk20m.clk30m(clk30m),     // output clk30m.clk50m(clk50m),     // output clk50m.clk100m(clk100m),     // output clk100m.clk200m(clk200m),     // output clk200m// Status and control signals.reset(1'b0), // input reset.locked(locked),       // output locked// Clock in ports.clk_in1(pri_clock));      // input clk_in1//使用50M的时钟生成逻辑复位信号
reg rst_n;
reg [15:0] rstn_cnt=0;
always @(posedge clk50m) begin : proc_logic_rstif(~locked) beginrst_n <= 0;rstn_cnt<=0;end else if(rstn_cnt>=1000)beginrst_n <= 1;rstn_cnt<=rstn_cnt;end	else beginrst_n<=0;rstn_cnt<=rstn_cnt+1;end
endreg [31:0] cnt_1;
reg [31:0] cnt_2;
reg [31:0] cnt_3;
reg [31:0] cnt_4;
reg [31:0] cnt_5;//在20M的时钟域下,异步复位同步释放,计数器1增加
always @(posedge clk20m or negedge rst_n) begin : proc_cnt_1if(~rst_n) begincnt_1 <= 0;end else if(A1)beginif(cnt_5>=50000)cnt_1<=0;else cnt_1 <= cnt_1+1;end
end//在30M的时钟域下,异步复位同步释放,计数器2增加
always @(posedge clk30m or negedge rst_n) begin : proc_cnt_2if(~rst_n) begincnt_2 <= 0;end else if(cnt_1>31'hff)begincnt_2 <= cnt_2+1;end else cnt_2<=0;	
end//在50M的时钟域下,异步复位同步释放,计数器3增加
always @(posedge clk50m or negedge rst_n) begin : proc_cnt_3if(~rst_n) begincnt_3 <= 0;end else if(cnt_5>31'hffff)begincnt_3 <= cnt_3+1;end
end//在100M的时钟域下,异步复位同步释放,计数器4增加
always @(posedge clk100m or negedge rst_n) begin : proc_cnt_4if(~rst_n) begincnt_4 <= 0;end else if(cnt_3>32'hffffff)begincnt_4 <= cnt_4+1;end
end//在200M的时钟域下,异步复位同步释放,计数器5增加
always @(posedge clk200m or negedge rst_n) begin : proc_cnt_5if(~rst_n) begincnt_5 <= 0;end else if(cnt_1>=8933)begincnt_5 <= cnt_5+1;end
end//使用clk200m分频,得出40m时钟
localparam priod_cnt_40=200/40;
reg [7:0] div_cnt;
reg clk40m;
always @(posedge clk200m or negedge rst_n) begin : proc_div_cntif(~rst_n) begindiv_cnt <= 0;clk40m<=0;end else if(div_cnt>=(priod_cnt_40>>1)-1)begindiv_cnt<=0;clk40m<=~clk40m;	end else begin 	div_cnt <= div_cnt+1;clk40m<=clk40m;end 
endreg [15:0] cnt_6;
always @(posedge clk40m or negedge rst_n) begin : proc_cnt_6if(~rst_n) begincnt_6 <= 0;end else if(cnt_5==199)begincnt_6 <= 0;end else cnt_6<=cnt_6+1;
end//另一路输入时钟
//sec_clk
reg [15:0] cntx_1;
always @(posedge sec_clk or negedge rst_n) begin : proc_cntx_1if(~rst_n) begincntx_1<= 0;end else begincntx_1<= cntx_1+1;end
endassign A2=cnt_1[31]&cnt_2[31]&cnt_3[31]&cnt_4[31]&cnt_5[31]&cnt_6[15]&cntx_1[15];endmodule : test_top_1 

1.1编译过程中2.4节(布线初始化后)更新时序信息
图1:编译过程
1.2编译过程中2.4节中间时序总结
图2:编译过程
1.3编译过程中第5节更新时序
图3:编译过程
编译完成后时序总结
图4:总结
导致时序违例的原因
图5:警告
![图6:时序违例](https://img-blog.csdnimg.cn/d3eeab60f94549afa29da883f41bd84b.png细节

注:工程编译时间过长,也没有提示错误,可以看一下编译过程中的时序信息。如果负的太多,先分析一下,等的话不知道要等到什么时候…(千年等一回,啊 。 。 。。)

二、解决方法

1.编译过程中

如图1-图3所示,在编译过程中,出现负时序。
修改组合逻辑减小逻辑级数与扇出。
编译结果如图:
修改逻辑后

2.编译完

查看vavido工具罗列的时钟。
下图显示的时钟是由MMCM分频倍频得出(自动生成时序约束),没有给出程序中105行200M分频的40M。
时钟树
对生成的时钟重新命名,并对40M时钟进行约束。

#create_clock -name pri_clock -period 20 -waveform {0 10} [get_ports pri_clock]create_generated_clock -name clk20m [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT0] 
create_generated_clock -name clk30m [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT1]
create_generated_clock -name clk50m [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT2]
create_generated_clock -name clk100m [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT3]
create_generated_clock -name clk200m [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT4]create_generated_clock -name clk40m -source [get_pins gen_clk/inst/mmcm_adv_inst/CLKOUT4] -divide_by 5 [get_pins clk40m_reg/Q]create_clock -name sec_clk -period 100 -waveform {0 50} [get_ports sec_clk]
set_clock_groups -asynchronous -group [get_clocks clk200m] -group [get_clocks sec_clk]#min = -(保持时间)
#max = 建立时间 
set_input_delay -clock clk20m -max 2.0  [get_ports A1]
set_input_delay -clock clk20m -min -1.5  [get_ports A1]
set_output_delay -clock clk200m -max -4.167   [get_ports A2]
set_output_delay -clock clk200m -min -0.0  [get_ports A2]

重新编译后:
时钟约束
上图包括程序中出现的所有时钟。
时序总结如下图。
修改后总结

总结

从发现问题,到解决问题;
从vivado工具的警告和报错,提示需要关注时序分析;
从小工程发展成大工程,时序分析还是挺重要的一个环节。

这篇关于出现时序违例怎么解决-VIVADO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/178822

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360