vivado时序分析 实例

2023-11-13

vivado时序分析实例

建立余量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

保持余量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例分析

环境:Vivado 2019.2
芯片型号:xc7z020clg484-2

举例子说明怎么使用Reporte Timing Summary

建立源工程

module timing_analyze (
	input	wire			clk		,
	input	wire			reset	,
	input	wire	[ 4: 0]	data_in	,
	
	output	reg		[ 4: 0]	data_out
);

	reg		[ 4: 0]	data_tmp_in	;
	wire	[ 4: 0]	data_tmp_out;
	wire	[ 4: 0]	data_tmp2, data_tmp_3, data_tmp_4, data_tmp_5, data_tmp_6, data_tmp_7;
	wire	[ 4: 0]	data_cal_out;
	
	always @ (posedge clk)
		if (reset == 1'b1)
			data_tmp_in	<=	0;
		else
			data_tmp_in	<=	data_in;
			
	// 为了增加经过逻辑门的数量,做连续的乘法
	assign	data_tmp_2	=	data_tmp_in * data_tmp_in;
	assign	data_tmp_3	=	data_tmp_2 * data_tmp_in;
	assign	data_tmp_4	=	data_tmp_3 * data_tmp_2;
	assign	data_tmp_5	=	data_tmp_4 * data_tmp_3;
	assign	data_tmp_6	=	data_tmp_5 * data_tmp_4;
	assign	data_tmp_7	=	data_tmp_6 * data_tmp_5;
	assign	data_cal_out=	data_tmp_7;
	
	always @ (posedge clk)
		if (reset == 1'b1)
			data_out	<=	0;
		else
			data_out	<=	data_cal_out;

endmodule

在这里插入图片描述

添加.xdc文件
设定clk时钟为200MHz,T = 5ns

# create_clock - name clk - period 5.000 [get_ports clk]  // err
create_clock -name clk -period 5.000 [get_ports clk] 

查看时序报告
Run Systhesis、Run Implementation,可以在Design Runs状态栏看到下面的情况,impl_1一行有红色,表示布线的时序不通过

WNS 代表最差负时序裕量 (Worst Negative Slack)
TNS 代表总的负时序裕量 (Total Negative Slack),也就是负时序裕量路径之和。
WHS 代表最差保持时序裕量 (Worst Hold Slack)
THS 代表总的保持时序裕量 (Total Hold Slack),也就是负保持时序裕量路径之和。
这些值告诉设计者设计与时序要求相差多少。如果为正值,则说明能达到时序要求,若为负值,则说明时序达不到要求。

点Implementation -> Open Implementation -> Reporte Timing Summary,通过时序报告查看时序问题的产生原因,可以在Timing状态栏看到下面的情况,Design Timing Summary和Intra-Clock Paths时红色的,表示时序不合格的部分就在这里。
在这里插入图片描述
点击红色框中的选项可以看到,时序不合格的地方时clk时钟下的Setup时间不能达到要求,默认情况下最多显示10条每个时钟能显示的问题数量
在这里插入图片描述
时序分析
双击Path1,打开时序报告的界面。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Slack为-1.344ns,表示和5ns的建立时间的要求相比,这条线的路还差1.344ns,单击-1.344ns,弹出来一个对话框,可以看到这条线需要数据在9.417ns内到达第二个触发器的输入,但实际到达时间为10.761ns,导致建立时间不够。
在这里插入图片描述
Source Clock Path为时钟到第一级触发器的时间,Data Path为数据经过组合逻辑产生的延迟,Source Clock Path + Data Path算出的是数据延迟的综合,为10.761ns。Destination Clock Path算出的是Clock延迟的总和,为9.417ns

单击Path1,再点Implementation -> Open Implementation -> Schematic查看原理图,原理图中可以看到其经过的逻辑电路(高亮),并且在Divice界面里可以看到在FPGA内部的实际走线。原理图可以看到,最左边和最右边的器件是触发器,两级触发器之间的电路则是经过的逻辑器件。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

时序优化
根据时序分析已经找到了时序不通过的地方,可以采取三种解决办法,推荐第二种

  1. 简化逻辑
    通过减少器件的数目,来减少逻辑延迟,使之能符合时序要求,
    为了能只直观看到减少组合逻辑带来的好处,这里简单粗暴去掉一些乘法器,再运行一遍,可以看到时序直接通过

    	assign	data_tmp_2	=	data_tmp_in * data_tmp_in;
    	assign	data_tmp_3	=	data_tmp_2 * data_tmp_in;
    	assign	data_tmp_4	=	data_tmp_3 * data_tmp_2;
    //	assign	data_tmp_5	=	data_tmp_4 * data_tmp_3;
    //	assign	data_tmp_6	=	data_tmp_5 * data_tmp_4;
    //	assign	data_tmp_7	=	data_tmp_6 * data_tmp_5;
    	assign	data_cal_out=	data_tmp_4;
    

    在这里插入图片描述在这里插入图片描述

  2. 插入触发器
    通过在组合逻辑之间插入触发器,将原本需要一个周期完成的逻辑转换为两个周期完成,分散时序的压力,从而使时序达到要求
    有关流水线的优化,可以参考: 四输入乘法器的优化.

    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_2  <=  0;
       else                data_tmp_2  <=  data_tmp_in * data_tmp_in;
       
    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_3  <=  0;
       else	               data_tmp_3  <=  data_tmp_2 * data_tmp_in;
       
    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_4  <=  0;
       else                data_tmp_4  <=  data_tmp_3 * data_tmp_2;
    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_5  <=  0;
       else                data_tmp_5  <=  data_tmp_4 * data_tmp_3;
    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_6  <=  0;
       else                data_tmp_6  <=  data_tmp_5 * data_tmp_4;
    always @ (posedge clk)
       if (reset == 1'b1)  data_tmp_7  <=  0;
       else                data_tmp_7  <=  data_tmp_6 * data_tmp_5;
    
    assign	data_cal_out=	data_tmp_7;
    

    在这里插入图片描述在这里插入图片描述

  3. 用低频时钟
    修改约束文件,频率约束为5mHz,T = 20ns


20230119修改:
修改约束文件,频率约束为50MHz,T = 20ns


create_clock -name clk -period 20.000 [get_ports clk] 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vivado时序分析 实例 的相关文章

  • [FPGA系列] 扩展知识 --- 时钟小结

    一 基本概念 时钟域 由同一个时钟信号控制的区域 时钟抖动 Jitter 相对于理想时钟信号 实际时钟信号存在时而超前 时而之后的偏移 时钟偏斜 Skew 时钟信号到达数字电路各个部分所用时间的差异 时钟漂移 Wander 工程上解释 抖动
  • Xilinx ISE系列教程(9):LabTools下载、安装、使用教程(独立的下载工具)

    文章目录 1 ISE Vivado LabTools简介 2 ISE 14 7 Lab Tools下载 安装 3 Vivado 2018 3 LabTools下载 安装 1 ISE Vivado LabTools简介 Xilinx LabT
  • 【原创】always语句 和 initial语句

    过程语句 有 always语句 和 initial语句 相同点 1 always语句 和 initial语句 可以多次使用 2 always语句 和 initial语句 各语句块 整体 是独立运行 3 always语句 和 initial语
  • 2022芯原芯片设计 笔试题分析和讨论

    2022芯原设计笔试题分析和讨论 以下仅为个人理解和分析 不保证正确 欢迎大家发表自己的想法 讨论出正确答案 企业知识题 1 1 D 芯原的主要经营模式为芯片设计平台即服务 Silicon Platform as a Service SiP
  • 用Vscode编辑verilog代码配置

    这篇教程感觉很详细了 我这里分享一下vscode和插件的安装包链接 都是官网下载的 放心食用 用VSCode编辑verilog代码 iverilog编译 自动例化 自动补全 自动格式化等常用插件 链接 https pan baidu com
  • HDLBits刷题_Verilog Language_Procedures_Alwaysblock1

    学习内容 Since digital circuits are composed of logic gates connected with wires any circuit can be expressed as some combin
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • 采用Vivado 配置xilinx GTX的SATA设计

    从Vivado开始 配置GTX的时候 多了一个SATA协议支持 但有些小地方还需要自己另外设置 整理了一下 分享给大家 首先打开Transceivers wizard 打开页签 线速率和参考时钟选择 在协议里面选择SATA2或者SATA3
  • verilog 基本语法 {}大括号的使用

    的基本使用是两个 一个是拼接 一个是复制 下面列举了几种常见用法 基本用法 表示拼接 第一位 第二位 表示复制 4 a 等同于 a a a a 所以 13 1 b1 就表示将13个1拼接起来 即13 b1111111111111 拼接语法详
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • 从零开始zynq linux AXI DMA传输

    本文从0开始叙述过程 使用的工具为vivado2016 4 sdk也是2016 4 准备工作 首先下载如下的目标文件 1 下载xilinx官方的bootloader文件 git clone https github com Xilinx u
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • FPGA_MIG驱动DDR3

    FPGA MIG驱动DDR3 说明 FPGA zynq 7z100 DDR3 MT41K256M16TW 107 内存大小为512MB 数据接口为16bit 环境 Vivado2018 2 IP核 Memory Interface Gene
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 在vhdl中生成随机整数

    我需要在 vhdl 中生成 0 1023 之间的随机整数 但是我在互联网上找不到这方面的好资源 请问有人帮我吗 下面是生成范围 0 1023 内均匀 均匀 分布的整数的示例 请注意 floor必须在与最大值 1 相乘之后使用运算 在本例中为
  • 在 C 中操作 80 位数据类型

    我正在用 C 实现一些加密算法 其中涉及 80 位密钥 特定操作涉及将密钥旋转移位 x 个位数 我已经尝试过 long double 类型 如果我没记错的话 它是 80 位 但这不适用于位移运算符 我能想到的唯一替代方案是使用 10 个元素
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla

随机推荐

  • Arnold置乱变换的代码实现与置乱度分析

    1 传统Arnold置乱变换算法简介 Arnold置乱变换 又称为cat映射 是一种基于古典密码体制的图像加密算法 本质上是对长宽相等的图像进行拉伸与折叠操作以改变空间中像素点的位置 从而破坏图像相邻像素点之间的相关性 它的安全性较低 易利
  • 递归查找三级菜单以及Stream流filter()与map()的用法

    查询策略 需求 查询三级菜单 按层级返回并排序 1 给实体类添加字段 用来封装子菜单 TableField exist false 不映射数据库字段 TableField exist false private List
  • Docker私有仓库部署记录

    Docker私有仓库部署记录 原创 一 介绍 1 SSL证书安装部署 2 准备docker环境 3 私有仓库不同方式的部署 二 CA证书安装部署 1 获取SSL证书 可以通过各种云平台购买 或者申请短期免费SSL证书 或者自签证书 再或者使
  • python---迭代器, for循环底层原理

    目录 何为迭代 可迭代对象 迭代器对象 迭代器的优缺点 优点 缺点 for循环底层原理 迭代取值与索引取值对比 何为迭代 迭代器即用来迭代取值的工具 而迭代是重复反馈过程的活动 其目的通常是为了逼近所需的目标或结果 每一次对过程的重复称为一
  • Python+Selenium中级篇之3-二次封装Selenium中几个方法

    本文来介绍 如何把常用的几个webdriver的方法封装到自己写的一个类中去 这个封装过程叫二次封装Selenium方法 我们把打开站点 浏览器前进和后退 关闭和退出浏览器这这个方法封装到一个新写的类中去 我们按照如下层次结构在PyChar
  • Linux安全防护

    Linux高级运维 L014 2019年尚硅谷Linux运维全套视频 基本命令
  • 用本地机做跳板使服务器连接外网【mac】

    用自己的电脑做跳板使服务器连接外网 前提 整体流程 连接服务器 配置服务器 配置自己的电脑 前提 很多时候我们的服务器只能联内网 但是没法登外网 这样pip conda 啥的都没法用 很麻烦 一个简单的解决方法就是用自己的电脑作为跳板机 让
  • python读取excel数据

    文章目录 测试样本 python代码 对列表的行或列进行选取 测试样本 另存为文本文档 制表符分隔 类型 自己命名 python代码 from numpy import table with open test1 txt as f for
  • 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)

    文章目录 TOC 已完成 待完成 已完成 国产FPGA高云GW1NSR 4C 集成ARM Cortex M3硬核 高云FPGA系列教程 1 FPGA和ARM开发环境搭建 高云FPGA系列教程 2 FPGA点灯工程创建 程序下载和固化 高云F
  • React面试题汇总

    1 面试官 说说对 React 的理解 有哪些特性 React遵循组件设计模式 使用虚拟 DOM 来有效地操作 DOM 遵循从高阶组件到低阶组件的单向数据流 React 特性有很多 如 JSX 语法 单向数据绑定 虚拟 DOM 声明式编程
  • 【深度学习】 - 作业7: 图像超分辨率重建

    课程链接 清华大学驭风计划 代码仓库 Victor94 king MachineLearning MachineLearning basic introduction github com 驭风计划是由清华大学老师教授的 其分为四门课 包括
  • web端上传图片时 图片被旋转问题

    有些时候在web端上传图片会遇到这种情况 正向的图片 上传预览时就被旋转了 发生这种情况是因为 照片中包含很多属性来记录拍摄信息 想要读取这些属性 需要引入EXIF 可在npm上搜索exif js下载 EXIF中 包含一个Orientati
  • Qt内存管理及泄露后定位到内存泄漏位置的方法

    Qt内存管理机制 Qt使用对象父子关系进行内存管理 在创建类的对象时 为对象指定父对象指针 当父对象在某一时刻被销毁释放时 父对象会先遍历其所有的子对象 并逐个将子对象销毁释放 Qt内存管理代码示例 QLabel label new QLa
  • Linux 查找文件(find命令/locate命令)

    目录 一 find 我的东西在哪 二 更快速地定位文件 locate命令 一 find 我的东西在哪 随着文件增多 我们有时候记住某个文件放在哪个文件夹下了 此时搜索工具显得非常有用了 而find就是这样一个命令 可以帮助我们在指定范围内查
  • 多对一的4种查询方式

    多对一的概念在数据库中是十分常见的 下面将以多个学生对应一个老师的例子介绍4种多对一的查询方式 一 建立数据库 首先建立2种表 一种是teacher表 其中包含的字段有id 主键 name 一种是student表 其中包含的字段有id 主键
  • rsa加密

    public static class RSAHelper private static string privateKey private static string publicKey public static string GetP
  • LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)

    在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning 本篇文章看四篇代表性的自动化框架 HuggingGPT AutoGPT WebGPT WebCPM Augmented Language Models 增强语言模型 T
  • log4j Layout简介说明

    转自 log4j Layout简介说明 下文笔者讲述log4j的简介说明 如下所示 log4j Layout的功能 log4j Layout主要用于日志数据格式化 它有以下三种形式 HTMLLayout 将日志格式化为HTML表格形式 ht
  • 记录uni-app开发原生android插件,调用不了,没有返回值的问题。返回值为{}的问题。返回值为空的问题

    1 引入了原生插件但是调用不了没有返回值 这种情况大多数是开发原生插件的时候引入了aar库 但是打包的时候没有引入 把需要引入的库放在生成的文件目录下就可以比如 开发了一个叫t1 module 的插件 引入了一个printer lib 3
  • vivado时序分析 实例

    vivado时序分析实例 建立余量 保持余量 实例分析 建立余量 保持余量 实例分析 环境 Vivado 2019 2 芯片型号 xc7z020clg484 2 举例子说明怎么使用Reporte Timing Summary 建立源工程 m