FPGA从入门到精通(二十)SignalTapII
这一篇将介绍SignalTapII。
之前的工程我们是做仿真,设置激励,观察输出波形去判断代码没有问题,但事实上我们真实的需求是综合后的代码下载到FPGA芯片中能够符合预期。
其中可能出现问题的原因有:
1、我们是写testbench设置激励,事实上当代码量大时,不可能100%覆盖率,例如一个与门有四种可能的激励(0&0,0&1,1&0,1&1),当testbench的激励只涉及其中两种时就只有50%的覆盖率。如果不能把所有的可能性包含进去,就不能保证结果全部正确
2、硬件本身的信号干扰等问题也是可能的,高速系统的问题尤其多
逻辑分析仪的原理:
逻辑分析仪是属于数据域测试仪器中的一种总线分析仪,即以总线概念为基础,同时对多条数据线上的数据流进行观察和测试的仪器,利用时钟从测试设备上采集和显示数字信号 。逻辑分析仪通常只显示两个电压。设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电压者为1,低于参考电压者为0
在线调试的方式主要有两种:
1、利用外部测试设备,把内部信号传送到FPGA 针脚上,然后用示波器或者逻辑分析仪观察信号
2、利用嵌入式逻辑分析仪,过程是这样的:我们在SignalTapII设置采样时钟和选择想查看的信号,在 FPGA中开辟一个存储器,存储器的大小限制了我们能存储的信息量。根据采样时钟和信号对数据进行采样并放置在存储空间中。根据提前设置的触发条件,将触发前后的数据返回给测试软件进行波形显示。
我们采用流水灯作为例子来学习SignalTap II的使用,在SignalTap II中设置好采样的时钟、深度、要抓取的信号和触发条件,然后将综合后的程序下载到开发板中,使用PC端的串口调试助手发送数据,最后在SignalTap II中观察波形。详细步骤如下:
准备工作:打开流水灯工程,插好开发板。因为分析仪有点类似于,用户在图形化界面工具中的设置会被处理成一个模块,需要添加到原工程中,重新完成编译生成下载等过程,并将读取的数据返回进行显示。
Step1:打开SignalTapII
Step2:选择并添加采样时钟。采样时钟的频率越高,采集的数据点就越密集。开发板上采用的是50MHz的晶振,在引脚分配时已经将它作为输入的时钟信号 sys_clk,我们把它作为采样时钟。“ Named”、“Filter” 和“ Look in”用于精确查找我们所要添加的信号。Named是通过信号名称筛选信号,输入“syc_clk”可以快速准确定位到信号;Filter是根据信号类型来过滤我们所需要的信号,常用的有 “pre-synthesis” 和“post-fitting”,其中 “pre-synthesis” 代表综合前设计中的信号,与 Verilog 设计中存在的信号最为接近,用于选择RTL级的信号;而“ post-fitting” 用于选择综合优化、布局布线之后的一些信号,与设计电路的物理结构最为接近。“pre-synthesis ”并不能筛选出到所有信号节点,但寄存器端口和组合逻辑端口可以被提取到,大部分情况下我们使用 “pre-synthesis ”已经足够。Look in可以将信号筛选锁定在某个层次和模块,在一个复杂的工程包含多个不同层次的模块非常有用,能够帮助我们快速锁定信号所在的层次和模块,然后再去寻找具体的信号。
Step3:双击空白处,在对话框选择要观察的信号,这里我们需要的信号就是计数和输出信号
Step4:条件设置。采样深度是设置需要多大的存储空间来显示波形(所占用的总存储空间=要观察的信号总位宽x设置的采样深度),采样深度越大所占用的FPGA片上存储空间就越大,但资源有限,所以不要一味的追求更深的采样深度。这里选用1K的采样深度。通过 RAM 类型设置,用户可以选择使用哪一类型的存储器模块资源(例如M4K、M9K)来实现 SignalTap 存储器缓冲,从而防止使用到其他的存储器。我们使用的器件并不支持,所以显示为灰色默认 AUTO。采样模式分为分段采样和非分段采样(也叫循环采样),如果没有勾选上Segmented,就是非分段采样,在信号触发后就连续采样至采样深度;如果勾选上了“Segmented:”,就是分段采样,将采样深度分为 N 段,信号每触发一次就采样一段长度的数据,需要连续触发 N 次采样才能至采样深度。“2 512 sample segments”代表将采样深度分成2段,每段采样512个点。Type类型我们一般默认Continuous 即可。触发方式分为Trigger flow control、Trigger position和Trigger conditions。Trigger flow control是触发流程控制的设置,分为“ Sequential”和 “State-based”两种,基于状态用于较复杂的触发控制,对于一般的信号分析选择“ Sequential” 即可。“Trigger position”是触发位置,可以选择触发位置前后数据的比例,“Pre trigger position:”是保存触发信号发生之前的信号状态信息(88%触发前数据,12%触发后数据);“Center trigger position:”保存触发信号发生前后的数据信息,各占 50%;“Post trigger position:”保存触发信号发生之后的信号状态信息(12%触发前数据,88%触发后数据)。“Trigger conditions”是触发条件,可以选择触发条件的级别,最多可以设置 10 个触发级别。以“Sequential ”控制触发为例,对于多个级别的触发条件,如果非分段采样,则先等待判断 1 级触发条件是否满足,若满足则跳到触发条件 2 等待判断,否则继续等待,直到最后一级的触发条件判断满足后才正式开始捕获信号;对于分段采样,最后一级触发条件满足后开始捕获第一段信号,后面只需满足最后一级触发条件就再次捕获一段,也可以理解为前面级别的触发条件满足一次即可。大多数情况下1个触发条件已经足够了。触发条件的类型分为 “Basic” 和“Advanced”,我们选择默认的“ Basic ADN”即可。给观察信号设置触发条件,选中某个信号后右击弹出触发条件选择菜单,根据需求选择触发条件:“Don’t Care ”代表任意条件都触发,“Low” 表示信号低电平时触发,“Falling Edge”表示信号下降沿时触发,“Rising Edge ”表示信号上升沿时触发,“High” 表示信号高电平时触发,“Either Edge ”表示任意沿触发,如果是总线可以直接输入具体的值。同一列中的“Trigger Conditons ”属于同一级别,可以给该列中多个信号同时设置触发条件,但是要同时满足条件时才会触发,与触发条件级别的同时满足是有区别的。
如下图进行设置,cnt触发条件为计数到24999999(十进制)计满,flag的触发条件为高电平,led_out有四种状态不设置
在使用SignalTap II 抓取信号时,经常会遇到有些信号只在开机后很短的时间内出现(比如几十us),如果按常规在开机运行后,再打开SignalTap II 抓取信号,此时需要抓取的信号已经过了,不能被抓取到,所所以SignalTap II里有一个“Power-Up Trigger”功能,可以在开机后就进行信号的捕获,这样只要是上电运行后的信号都能被抓取到。
Step5:上述所有配置完成后一定!!!要在工程界面中点击“Start Analysis & Synthesis”图标进行分析和综合才能将在线逻辑分析仪映射到FPGA中,然后将生成的新.sof文件下载到我们的开发板中进行在线调试。
Step6:捕获信号。1是运行按钮,点击一次捕获一次信号;2是连续运行按钮,点击一次捕获连续进行;3是停止按钮,可以中止当前的信号捕获。Status栏显示着捕获状态,分为Not running(未运行)、Waiting for trigger(等待触发)和offloading acquired data(导出捕获到的数据)。
点击运行键,开始捕获信号,捕获完成后,设置区会自动切换到数据区,得到数据。
分析:cnt在计数值为17D783F(16进制)时flag拉高,led_out从一个灯亮到另一个灯亮(即1011到0111)。
SignalTap II嵌入式逻辑分析仪可以采用矢量波形(.vwf)、矢量表(.tbl)、矢量文件(.vec)、逗号分割数据(.csv)和Verilog数值更改转存(.vcd) 文件格式输出所捕获的数据。这些文件格式可以被第三方验证工具读入,显示和分析SignalTap II嵌入式逻辑分析仪所捕获的数据。点击“File”目录下的“export”,选择合适的文件类型,点击“ok”保存即可。
使用 SignalTap II 功能时会占用FPGA内部的存储资源,所以调试之后要将这部分资源释放掉。Assignments-Settings-SignalTap II Logic Analyzer-可以看到打勾,去掉这个勾即可关闭分析仪,然后再次综合就把在线逻辑分析仪所使用的资源给释放掉了,需要使用时再将其使能即可。
相关文章:

FPGA从入门到精通(二十)SignalTapII
这一篇将介绍SignalTapII。 之前的工程我们是做仿真,设置激励,观察输出波形去判断代码没有问题,但事实上我们真实的需求是综合后的代码下载到FPGA芯片中能够符合预期。 其中可能出现问题的原因有: 1、我们是写testbench设置激励…...

RHCE---shell 条件测试
文章目录 目录 文章目录 前言 一.条件测试 概述: 文件测试 整数测试: 总结 前言 当我们完成某一命令的编写时,除了观察输出的内容,我们又如何得知命令是否执行成功呢? 这里,我们需要用到条件测试 一.条…...

Linux下QT打开文件选择对话框时,程序报错退出
系统:Ubuntu QString fileName QFileDialog::getOpenFileName(this, "open", "./", "document Files (*.pdf)"); 调用该语句弹出文件对话框时,程序崩溃退出 错误提示: (Widget:5272): Gtk-WARNING **: 14…...
PyTorch中的intrusive_ptr
PyTorch中的intrusive_ptr 前言 intrusive_ptr與unique_ptr,shared_ptr等一樣,都是smart pointer。但是intrusive_ptr比較特別,它所指向的物件類型必須繼承自intrusive_ptr_target,而intrusive_ptr_target必須實現引用計數相關的…...

webrtc-stream编译报错记录
磁盘空间不足错误 错误信息 677.2 fatal: cannot create directory at blink/web_tests/external/wpt: No space left on device说明:这个错误是由于本地在配置docker资源时所给磁盘空间太小导致,直接根据镜像大小合理分配资源大小即可 pushd和popd执…...

什么是Docker CLI
Docker CLI(命令行界面)是一个工具,允许用户通过命令行或终端与Docker进行交互。Docker是一个开源平台,用于开发、运送和运行应用程序。Docker使用容器化技术来打包应用程序及其依赖项,以确保在不同环境中的一致性和隔…...

Java项目_家庭记账(简易版)
文章目录 简介代码实现 简介 该项目主要用来练习,Java的变量,运算符,分支结构和循环结构的知识点。 程序界面如下: 登记收入 登记支出 收支明细 程序退出 代码实现 package project;import java.util.Scanner;import sta…...

vscode json文件添加注释报错
在vscode中创建json文件,想要注释一波时,发现报了个错:Comments are not permitted in JSON. (521),意思是JSON中不允许注释 以下为解决方法: 在vscode的右下角中找到这个,点击 在出现的弹窗中输入json wit…...
vue3移动端嵌入pdf的两种办法
1.使用embed嵌入 好处:简单,代码量少,功能齐全 缺点:有固定样式,难以修改,不可定制 <embed class"embedPdf" :src"pdfurl" type"application/pdf">2.使用vue-pdf-e…...

中文编程开发语言工具系统化教程初级1上线
中文编程系统化教程初级1 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,…...

零售数据分析模板分享(通用型)
零售数据来源多,数据量大,导致数据的清洗整理工作量大,由于零售的特殊性,其指标计算组合更是多变,进一步导致了零售数据分析工作量激增,往往很难及时分析数据,发现问题。那怎么办?可…...

Spring Cloud之微服务
目录 微服务 微服务架构 微服务架构与单体架构 特点 框架 总结 SpringCloud 常用组件 与SpringBoot关系 版本 微服务 微服务:从字面上理解即:微小的服务; 微小:微服务体积小,复杂度低,一个微服…...
Linux命令(104)之date
linux命令之date 1.date介绍 linux命令date用来设置和显示系统日期和时间 2.date用法 date [参数] date参数 参数说明-s修改并设置时间-d可以显示以前和未来的时间%H小时%M分钟%S秒%X等价于%H %M %S%F显示当前所有时间属性%Y完整年份%m月%d日%A星期的全称 3.实例 3.1.当前…...

微信小程序投票管理系统:打造智能、便捷的投票体验
前言 随着社交网络的兴起和移动互联网的普及,人们对于参与和表达意见的需求越来越强烈。在这个背景下,微信小程序投票管理系统应运而生。它为用户提供了一个智能、便捷的投票平台,使用户可以轻松创建和参与各种类型的投票活动。本文将详细介…...

【算法训练-动态规划 五】【二维DP问题】编辑距离
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【动态规划】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...

Windows电脑如何录制电脑桌面?
如果你使用的电脑是Windows系统,那你是不是想知道如何在Windows电脑上录制电脑桌面? 本文以win10为例,好消息是,Windows 10电脑自带录屏工具,你可以直接使用此录屏工具轻松录制视频,而无需下载其他第三方软…...

ubuntu18.04双系统安装(2023最新最详细)以及解决重启后发现进不了Ubuntu问题
目录 一.简介 二.安装教程 1.首先确定了电脑的引导格式是UEFIGPT还是BIOSMBR 2. 使用Windows磁盘管理划分足够的磁盘空间 3. 开始安装 三.重启后发现自动进入WIN10系统了,进不了Ubuntu? 一.简介 Linux是一种自由和开放源代码的操作系统内核&#x…...
Springboot + screw 数据库快速开发文档
1、方式1 引入依赖 <dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.5</version></dependency> /*** 文档生成 Springboot2.X screw数据库快速开发文档(74&…...

2 第一个Go程序
概述 在上一节的内容中,我们介绍了Go的前世今生,包括:Go的诞生、发展历程、特性和应用领域。从本节开始,我们将正式学习Go语言。Go语言是一种编译型语言,也就是说,Go语言在运行之前需要先进行编译ÿ…...

Leetcode—2678.老人的数目【简单】
2023每日刷题(八) Leetcode—2678.老人的数目 int countSeniors(char ** details, int detailsSize){ int ans 0; int i; int tens 0; int ones 0; for(i 0; i < detailsSize; i) { tens ((details i) 11) - ‘0’; ones ((details i) 12)…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...