当前位置: 首页 > news >正文

【vivado】debug相关时钟及其约束关系

一、前言

在xilinx fpga的degug过程中,经常出现由于时钟不对而导致的观测波形失败,要想能够解决这些问题需要了解其debug的组成环境以及之间的数据流。本文主要介绍debug过程中需要的时钟及各时钟之间的关系。

二、debug相关时钟

Vivado 硬件管理器使用 JTAG 接口与 Vivado Debug 内核进行通信,Debug Hub在 FPGA 器件的 JTAG 边界扫描 (BSCAN) 接口和 Vivado Debug 内核之间提供接口。因此,要想完成完整的数据流需要了解三个时钟,即JTAG时钟、Debug Hub时钟和Debug Core时钟。

2.1 JTAG时钟

该时钟同步JTAG边界扫描(BSCAN)接口的内部状态机操作。在连接到目标器件时,通常会在 Vivado 硬件管理器中选择 JTAG 时钟频率。

可以使用 Open New Hardware Target 向导(使用时需要先关闭hardware mannger)或以下 Tcl 命令来修改 JTAG 频率:

set_property PARAM.FREQUENCY 250000 [get_hw_targets*/xilinx_tcf/Digilent/210203327962A]

使用要求:如果设计包含调试内核,需要确保JTAG时钟比debug hub时钟慢2.5倍。

2.2 Debug Hub时钟

Vivado Debug Hub 内核,在 FPGA 器件的 JTAG 边界扫描 (BSCAN) 接口和 Vivado Debug 内核之间提供接口。如果 Vivado IDE 在设计实现(implementation)步骤中检测到调试内核,则会自动插入 Debug Hub 内核。Vivado IDE 在设计实现步骤中自动选择驱动 Debug Hub 内核的时钟。

Xilinx 推荐 debug hub时钟频率在 100MHz 左右或更低,因为 JTAG 时钟速度不需要特别高的频率。

如果需要改变debug hub时钟频率可以在设计编译后实现前通过TCL指令更改:

connect_debug_port dbg_hub/clk [get_nets <clock_net_name>]

也可以在设计编译后实现前通过TCL命令将debug hub的时钟缩减到100M(对于具有非常高速度时钟的设计,建议这样做):

set_property C_CLK_INPUT_FREQ_HZ 200000000 [get_debug_cores dbg_hub]

set_property C_ENABLE_CLK_DIVIDER true [get_debug_cores dbg_hub]

这两条命令允许在debug hub内核中包含基于MMCM的时钟分频器,以实现100 MHz的时钟频率。

2.3 Debug Core时钟

Vivado IP 目录中提供的所有调试内核都需要一个时钟,以确保与被监控的输入信号或由调试内核驱动的任何输出信号同步。在内核发现和调试测量阶段,需要时钟是自由运行和稳定的。此外,时钟还应与被监控或驱动的信号同步。否则可能会导致周期性的数据错误。

2.4 调试流程及时钟要求

Debug Hub IP 在主机(通过支持串行接口的 BSCAN Primitive)和芯片上的调试内核(通过支持并行接口的 XSDB 接口)之间架桥。BSCAN  Primitive 时钟将数据串行移入和移出芯片到Debug Hub  IP。Debug Hub IP 收集数据,并使用Debug Hub时钟将其发送到并行接口上的所有调试内核,反之亦然。如果任何调试内核时钟不能自由运行或不稳定,则最终会得到损坏的数据,从而导致vivado 输出"Debug Cores not detected"消息。为了避免任何数据损坏,在调试内核检测过程中,必须确保JTAG时钟和debug hub时钟稳定且自由运行。

  1. Debug Hub时钟必须是自由运行且稳定的。Xilinx 推荐时钟由适当约束且满足时序的时钟驱动器驱动。
  2. 如果时钟由MMCM/PLL驱动,则在进行任何调试内核测量之前,需要确保MMCM/PLL锁定信号为高电平。如果时钟连接到Debug Hub或任何调试内核,并且 MMCM/PLL LOCKED 信号在调试操作中间转换为 0,则时钟可能会出现明显的抖动,从而可能会导致调试逻辑出现不可预测行为。
  3. 需要让所有相关的时钟自由运行和稳定,才可以正常进行调试,获取数据。

整个调试周期内各个时钟的要求如下表:

注:我自己在接手一个别人JESD204B建链不稳定的工程时,就发现 Vivado 时常会报ILA 时钟相关的错误,其原因就是该工程将JESD204B的恢复时钟作为了ILA核的时钟,而建链不稳定则恢复时钟也不稳,因此不满足上表中最后一行最后一列的 debug core clock应是稳定的要求,因此会导致vivado报错或者采不到波形。

三、相关报错

如果JTAG时钟处于非活动状态或不可用,将无法连接到硬件目标(hardware target)。

如果Debug Hub时钟处于非活动状态或不可用,Vivado硬件管理器会发出以下错误消息:

INFO: [Labtools 27-1434] Device xxx (JTAG device index = 0) is programmed 
with a design that has no supported debug core(s) in it.WARNING: [Labtools 27-3123] The debug hub core was not detected at User Scan Chain 1 
or 3. 
Resolution:1. Make sure the clock connected to the debug hub (dbg_hub) core is a free 
running clock and is active OR2. Manually launch hw_server with -e "set xsdb-user-bscan 
<C_USER_SCAN_CHAIN scan_chain_number>" to detect the debug hub at User Scan Chain of 2 or 4. To determine the user scan chain setting, open the implemented design and use: 
get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub].

如果任何调试核心时钟处于非活动状态或不可用,Vivado 硬件管理器会发出以下错误消息:

INFO: [Labtools 27-2302] Device xxx (JTAG device index = 1) is programmed 
with a design that has 1 ILA core(s).CRITICAL WARNING: [Labtools 27-1433] Device xxx (JTAG device index = 1) is 
programmed with a design that has an unrecognizable debug core (slave type = 17) at 
user chain = 1, index = 0.Resolution: 1) Ensure that the clock signal connected to the debug core and/or debug hub is clean and 
free-running.2) Ensure that the clock connected to the debug core and/or debug hub meets all timing constraints.3) Ensure that the clock connected to debug core and/or debug hub is faster than the JTAG clock frequency.

 注:在实际过程中还会有其他debug相关报错,不过大概率都是时钟的问题,从报错提示和上面时钟的要求入手解决即可。

四、参考资料

ug908:Vivado Design Suite User Guide Programming and Debugging

相关文章:

【vivado】debug相关时钟及其约束关系

一、前言 在xilinx fpga的degug过程中&#xff0c;经常出现由于时钟不对而导致的观测波形失败&#xff0c;要想能够解决这些问题需要了解其debug的组成环境以及之间的数据流。本文主要介绍debug过程中需要的时钟及各时钟之间的关系。 二、debug相关时钟 Vivado 硬件管理器使…...

什么是HTTP/2?

HTTP/2&#xff08;原名HTTP 2.0&#xff09;即超文本传输协议第二版&#xff0c;使用于万维网。HTTP/2主要基于SPDY协议&#xff0c;通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措&#xff0c;来减少网络延迟&#xff0c;提高客户端的页面加载…...

【ChatGPT with Date】使用 ChatGPT 时显示消息时间的插件

文章目录 1. 介绍2. 使用方法2.1 安装 Tampermonkey2.2 安装脚本2.3 使用 3. 详细文档指引4. 反馈5. 未来计划6. 开源协议X. Changelog 1. 介绍 有时我们希望看到 ChatGPT 的消息时间&#xff0c;但 ChatGPT 并没有显示消息时间的功能。 本项目通过 Tampermonkey 开发&#xf…...

STM:TIM定时器——定时中断

文章目录 1、TIM定时器1.1定时器类型1.2定时中断的基本结构 2 定时器初始化2.2 初始化定时器的步骤2.3 TIM库函数2.4 配置TIM2.4.1 Timer.c2.4.2 Timer.c2.4.3 main.c 1、TIM定时器 定时器的功能可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断。 他包含…...

jetson tx2 nx实现在ros1中yolov5实现

亲测用以下链接实现功能。 安装ros。Ubuntu18.04安装ROS Melodic&#xff08;详细&#xff0c;亲测安装完成&#xff0c;有清晰的截图步骤&#xff09;_ubuntu 18 ros melodic-CSDN博客文章浏览阅读10w次&#xff0c;点赞835次&#xff0c;收藏3.8k次。这也是我在ubuntu里面安…...

【SpringBoot笔记43】SpringBoot应用程序集成spring-boot-admin监控工具

这篇文章,主要介绍SpringBoot应用程序如何集成spring-boot-admin监控工具。 目录 一、spring-boot-admin监控工具 1.1、创建admin-client客户端 (1)引入依赖...

与队列和栈相关的【OJ题】

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 一、用队列实现栈&#xff1a; 1、2个队列的关联起来怎么由先进先出转变为先进后出&#xff1a;&#xff08;核心&#xff09; 2、认识各个函数干嘛用的&#xff1a; …...

Unity编辑器扩展

Unity编辑器扩展是指为Unity引擎开发者提供的一种扩展功能&#xff0c;可以增强Unity编辑器的功能和效能。这些扩展可以帮助开发者提高工作效率&#xff0c;简化工作流程&#xff0c;并提供更好的用户体验。本文将介绍Unity编辑器扩展的基本概念、开发流程以及一些常见的应用示…...

【kettle】kettle访问数据库系列文章及视频地址(更新中)

1.一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.这里整理了kettle访问数据库系列文章及视频地址整体链接&#xff0c;并及时补充、更新相关…...

共赴科技盛会“2024南京智博会”11月在南京国际博览中心召开

2024年&#xff0c;南京这座历史悠久的文化名城迎来了一场科技与智慧交织的盛会——南京智博会|南京国际智慧城市、物联网、大数据。本次博览会以智慧城市、人工智能、消费电子、物联网、大数据为主题&#xff0c;汇聚了全球各地的智能科技精英&#xff0c;共同探讨智慧城市建设…...

刷代码随想录有感(62):修建二叉搜索树

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(TreeNode* root, int low, int high){if(root NULL)return NULL;if(root->val < low)return traversal(root->right, low, high);if(root->val > high)return traversal(ro…...

AVL树的旋转

目录 1.平衡因子 2.旋转 a.节点定义 b.插入 插入 平衡因子更新 旋转 左单旋 右单旋 右左双旋 左右双旋 3.AVL树的验证 1.平衡因子 我们知道搜索二叉树有缺陷&#xff0c;就是不平衡&#xff0c;比如下面的树 什么是搜索树的平衡&#xff1f;就是每个节点的左右子树的…...

C++(动态规划之拆分整数)

其实我交上去都有点似懂非懂 题目&#xff1a;&#xff08;343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09;&#xff09; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 …...

unix C之环境变量

什么是环境变量 每个进程都有自己的一张环境变量表&#xff0c;表中的每个条目都是形如 keyvalue 的键值对形式的环境变量。 进程可以通过环境变量访问计算机资源。 在终端下输入env命令&#xff0c;可以查看环境变量列表。 通过echo $name 可以查看某个环境变量的值。 环…...

Flutter实战记录-协作开发遇到的问题

一.前言 Android项目使用了混合架构&#xff0c;部分模块使用Flutter进行开发。在电脑A上开发的项目提交到git仓库&#xff0c;电脑B拉取后进行操作&#xff0c;遇到两个问题&#xff0c;特此做一下记录&#xff1b; 二.问题A Settings file ‘D:\xxx\settings.gradle’ line…...

Linux 安装JDK和Idea

安装JDK 下载安装包 下载地址&#xff1a; Java Downloads | Oracle (1) 使用xshell 上传JDK到虚拟机 (2) 移动JDK 包到/opt/environment cd ~ cd /opt sudo mkdir environment # 在 /opt下创建一个environment文件夹 ls# 复制JDK包dao /opt/environment下 cd 下载 ls jd…...

c#绘制渐变色的Led

项目场景&#xff1a; c#绘制渐变色的button using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; using static System.Windows.Forms.AxHost;namespace WindowsFormsApp2 {public class Gradie…...

LifeCycle之ProcessLifeCycleOwner

问题&#xff1a;想要知道应用程序当前处在前台、后台、或从后台回到前台&#xff0c;想要知道应用的状态&#xff0c; LifeCycle提供了ProcessLifeCycleOwner的类&#xff0c;方便我们知道整个应用程序的生命周期情况 ProcessLifeCycleOwner 使用方法 1.首先添加依赖 imple…...

C++ | Leetcode C++题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution { public:bool exist(vector<vector<char>>& board, string word) {rows board.size();cols board[0].size();for(int i 0; i < rows; i) {for(int j 0; j < cols; j) {if (dfs(board, word, i, …...

如何通过PHP语言实现远程控制空调

如何通过PHP语言实现远程控制空调呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制空调&#xff0c;通过不同规格的通断器&#xff0c;来控制不同功率的空调的电源。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称…...

yfinance终极指南:5分钟掌握免费金融数据获取

yfinance终极指南&#xff1a;5分钟掌握免费金融数据获取 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在金融分析和量化投资领域&#xff0c;高质量的数据是一切分析的基础。…...

Swin Transformer部署避坑指南:从环境搭建到性能翻倍的实战手册

Swin Transformer部署避坑指南&#xff1a;从环境搭建到性能翻倍的实战手册 【免费下载链接】Swin-Transformer This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows". 项目地址: https://gitcode.…...

阿里云服务器上Certbot更新Let‘s Encrypt证书总超时?一个更换公网IP的实战解决记录

阿里云服务器Certbot更新Lets Encrypt证书超时问题深度解析与实战解决 最近在阿里云北京区域的服务器上更新Lets Encrypt证书时&#xff0c;遇到了一个看似简单却令人困扰的问题&#xff1a;Certbot在续签证书时频繁报错&#xff0c;提示acme-v02.api.letsencrypt.org连接超时。…...

AIVideo效果震撼:输入‘量子计算科普’生成带3D动画与专家语音的12分钟视频

AIVideo效果震撼&#xff1a;输入‘量子计算科普’生成带3D动画与专家语音的12分钟视频 只需输入一个主题词&#xff0c;就能自动生成包含专业分镜、精美画面、专家级配音的完整长视频——AIVideo让视频创作变得如此简单。 1. AIVideo&#xff1a;一站式AI视频创作革命 当我第…...

Go语言中的日志管理:从log到zap

Go语言中的日志管理&#xff1a;从log到zap 作为一个写了十几年代码的Go后端老兵&#xff0c;我深刻体会到日志管理在应用开发中的重要性。好的日志系统可以帮助我们快速定位问题&#xff0c;监控系统运行状态&#xff0c;甚至分析用户行为。Go语言提供了标准库log包来处理日志…...

懒人精灵实战:用Lua脚本读写安卓手游内存(以libunity.so为例)

懒人精灵实战&#xff1a;用Lua脚本读写安卓手游内存&#xff08;以libunity.so为例&#xff09; 在移动游戏开发与逆向工程领域&#xff0c;内存读写技术一直是一个既神秘又实用的技能。对于想要深入了解游戏机制或进行自动化测试的开发者来说&#xff0c;掌握这项技术无疑会带…...

PCIE差分对布线:从规范到实战的关键要点

1. PCIE差分对布线的基础认知 第一次接触PCIE差分对布线时&#xff0c;我盯着那些密密麻麻的走线头皮发麻。后来才发现&#xff0c;理解它的本质其实很简单——就像两个配合默契的舞者&#xff0c;必须保持完全同步的动作才能呈现完美表演。PCIE差分信号正是通过一对相位相反的…...

STM32G474低功耗模式怎么选?一张图看懂睡眠、停止、待机模式区别与实战选型

STM32G474低功耗模式实战选型指南&#xff1a;从睡眠到待机的全场景决策框架 当你面对一块需要连续工作数月的电池供电设备时&#xff0c;每个微安培的电流都变得至关重要。STM32G474系列作为意法半导体针对高性能低功耗场景推出的微控制器&#xff0c;提供了从轻度睡眠到深度休…...

Pixel Mind Decoder 前端交互设计:基于 JavaScript 的情绪看板开发

Pixel Mind Decoder 前端交互设计&#xff1a;基于 JavaScript 的情绪看板开发 1. 情绪看板的应用场景与价值 在现代数字化产品中&#xff0c;理解用户情绪变得越来越重要。无论是社交媒体监测、客服系统优化&#xff0c;还是心理健康应用开发&#xff0c;能够实时分析并可视…...

OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置

OpenClaw安全防护指南&#xff1a;GLM-4.7-Flash本地化部署的5个关键设置 1. 为什么需要特别关注OpenClaw的安全配置&#xff1f; 去年夏天&#xff0c;我在调试一个自动整理财务报告的OpenClaw任务时&#xff0c;差点酿成大错。当时AI助手误将包含敏感信息的临时文件上传到了…...