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

这篇具有很好参考价值的文章主要介绍了出现时序违例怎么解决-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_rst
	if(~locked) begin
		rst_n <= 0;
		rstn_cnt<=0;
	end else if(rstn_cnt>=1000)begin
		rst_n <= 1;
		rstn_cnt<=rstn_cnt;
	end	else begin
		rst_n<=0;
		rstn_cnt<=rstn_cnt+1;
	end
end

reg [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_1
	if(~rst_n) begin
		cnt_1 <= 0;
	end else if(A1)begin
		
		if(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_2
	if(~rst_n) begin
		cnt_2 <= 0;
	end else if(cnt_1>31'hff)begin
		cnt_2 <= cnt_2+1;
	end else 
		cnt_2<=0;	
end


//在50M的时钟域下,异步复位同步释放,计数器3增加
always @(posedge clk50m or negedge rst_n) begin : proc_cnt_3
	if(~rst_n) begin
		cnt_3 <= 0;
	end else if(cnt_5>31'hffff)begin
		cnt_3 <= cnt_3+1;
	end
end


//在100M的时钟域下,异步复位同步释放,计数器4增加
always @(posedge clk100m or negedge rst_n) begin : proc_cnt_4
	if(~rst_n) begin
		cnt_4 <= 0;
	end else if(cnt_3>32'hffffff)begin
		cnt_4 <= cnt_4+1;
	end
end



//在200M的时钟域下,异步复位同步释放,计数器5增加
always @(posedge clk200m or negedge rst_n) begin : proc_cnt_5
	if(~rst_n) begin
		cnt_5 <= 0;
	end else if(cnt_1>=8933)begin
		cnt_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_cnt
	if(~rst_n) begin
		div_cnt <= 0;
		clk40m<=0;
	end else if(div_cnt>=(priod_cnt_40>>1)-1)begin
		div_cnt<=0;
		clk40m<=~clk40m;	
	end else begin 	
		div_cnt <= div_cnt+1;
		clk40m<=clk40m;
	end 
end

reg [15:0] cnt_6;
always @(posedge clk40m or negedge rst_n) begin : proc_cnt_6
	if(~rst_n) begin
		cnt_6 <= 0;
	end else if(cnt_5==199)begin
		cnt_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_1
	if(~rst_n) begin
		 cntx_1<= 0;
	end else begin
		 cntx_1<= cntx_1+1;
	end
end

assign 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节(布线初始化后)更新时序信息
vivado时序不满足怎么办,fpga开发
1.2编译过程中2.4节中间时序总结
vivado时序不满足怎么办,fpga开发
1.3编译过程中第5节更新时序
vivado时序不满足怎么办,fpga开发
编译完成后时序总结
vivado时序不满足怎么办,fpga开发
导致时序违例的原因
vivado时序不满足怎么办,fpga开发
vivado时序不满足怎么办,fpga开发vivado时序不满足怎么办,fpga开发

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

二、解决方法

1.编译过程中

如图1-图3所示,在编译过程中,出现负时序。
修改组合逻辑减小逻辑级数与扇出。
编译结果如图:
vivado时序不满足怎么办,fpga开发

2.编译完

查看vavido工具罗列的时钟。
下图显示的时钟是由MMCM分频倍频得出(自动生成时序约束),没有给出程序中105行200M分频的40M。
vivado时序不满足怎么办,fpga开发
对生成的时钟重新命名,并对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时序不满足怎么办,fpga开发
上图包括程序中出现的所有时钟。
时序总结如下图。
vivado时序不满足怎么办,fpga开发

总结

从发现问题,到解决问题;
从vivado工具的警告和报错,提示需要关注时序分析;
从小工程发展成大工程,时序分析还是挺重要的一个环节。文章来源地址https://www.toymoban.com/news/detail-740495.html

到了这里,关于出现时序违例怎么解决-VIVADO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电脑出现错误代码0xc0000225怎么办,解决0xc0000225的办法

    通常情况下电脑出现0xc0000225错误代码都是在点奥蓝屏的额状态下显示的,那么应该如何解决错误代码0xc0000225的问题呢?今天本文就给大家介绍几种解决办法,希望能够给大家提供一些帮助。 解决办法一:检查硬盘连接和电线 首先,您需要确保与系统硬盘相关的连接和电缆没

    2024年02月04日
    浏览(34)
  • 苹果手机无法开机?黑屏打不开怎么办?出现这种问题的解决办法分享!

    各位在使用苹果手机的小伙伴有没有遇到 苹果手机突然就黑屏开不了机,打电话也没有任何反应,手机也无法关机重启,这是什么问题呢? 我们遇到这种问题该如何去处理呢? 小编今天就来跟大家说说苹果手机突然开不了机的原因以及解决办法。 一、电量不足 长按iPhone电

    2024年02月09日
    浏览(22)
  • 无主之地3出现UE4崩溃怎么办?无主之地3出现UE4崩溃深入解析原因及解决方案

    无主之地3(Borderlands 3)出现UE4崩溃,通常指的是游戏运行时基于虚幻引擎4(Unreal Engine 4,简称UE4)开发的部分出现崩溃现象。 下面一起来看看原因及解决方法介绍吧! 原因 1. 驱动程序问题:•显卡驱动程序过时或不兼容可能导致UE4崩溃。确保您的显卡驱动是最新的,并且

    2024年04月09日
    浏览(25)
  • 电脑出现错误代码0x80070035要怎么办?教你解决错误代码0x80070035

    电脑刚开机就收到提示电脑出现错误代码0x80070035?出现这样的问题可能是电脑网络练级错误或网络路径的问题,有什么办法可以解决错误代码0x80070035的办法呢?今天就来讨论一下错误代码的问题应该如何解决。 检查网络 首先我们先排查一下电脑网络连接的问题,先检查一下

    2024年02月05日
    浏览(22)
  • 电脑出现错误代码0xc000000e怎么办,解决错误代码0xc000000e的几种办法

    最近有看到小伙伴们提问,电脑出现错误代码0xc000000e怎么办?一旦电脑提示这种错误代码就会导致电脑无法正常运行,软件或游戏将会不能打开,今天就关于这个问题,教大家解决错误代码0xc000000e的几种办法。 1.硬盘错误:出现错误代码0xc000000e的原因可能是硬盘驱动器出现

    2024年02月08日
    浏览(30)
  • 【数字IC基础】时序违例的修复

    基本思路是减少数据线的延时、减少 Launch clock line 的延时、增加capture clock line的delay 加强约束,重新进行综合 ,对违规的路径进行进一步的优化,但是一般效果可能不是很明显降低时钟的频率,但是这个一般是在项目最初的时候决定的,这个时候很难再改变 拆分组合逻辑,

    2024年02月14日
    浏览(20)
  • 【FPGA中时序违例的处理方法】——详解

    【FPGA中时序违例的处理方法】——详解 FPGA作为一种可编程逻辑器件,被广泛应用于数字电路设计和验证中。然而,在实际应用中,由于各种因素的干扰,可能会出现时序违例问题。时序违例是指由于时钟信号传输延迟等原因,导致数据信号无法按照预期的时序到达目标寄存

    2024年01月23日
    浏览(67)
  • [静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径

    一个 数字芯片工程师 的 核心竞争力 是什么?不同的工程师可能给出不同的答复,有些人可能提到 硬件描述语言 ,有些人可能会提到对于 特定算法和协议的理解 ,有些人或许会提到 对于软硬件的结合划分 ,作者想说,这些说法, 其实对也不对 ,硬件描述语言,翻来覆去

    2023年04月22日
    浏览(34)
  • 【已解决】华为手机短接后有提示音但在其他设备里显示未知设备或者USB-SER怎么办 | 华为荣耀手机短接后未知设备里面出现“USB-SER” 端口如何解决

    电脑提前打开 设备管理器 ,短接插线后注意观察电脑反应,如果成功的话电脑会有设备连接提示音并在设备管理器里刷新出华为麒麟深刷端口( HUAWEI USB COM 1.0 (COM3) )。如果电脑没任何反应,你应该检查短接工具,数据线,电脑插口,手机是否关机状态,然后多短接几次试

    2024年02月13日
    浏览(62)
  • 网络连接出现意外错误怎么办

    一般而言,这问题属于动态链失效所致,重新注册,修复网络。 下面就是小编整理的 方法/步骤 开始→运行→输入:ncpa.cpl 按回车键打开网络连接。 右键点击本地连接,出现:网络连接,出现意外错误。 的提示。 开始→运行(或者使用Win+R快捷键也能调出运行)。 注册动态

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包