Vivado:使用 ILA 进行在线调试

Vivado:使用 ILA 进行在线调试

目录

一、ILA介绍

二、ILA使用步骤

(1)设计部分

(2)调用ILA IP核

(3)例化ILA IP核

(4)编译综合

三、ILA在线调试

(1)手动运行

(2)运行触发条件

(3)连续触发

一、ILA介绍

        Vivado中的ILA(Integrated Logic Analyzer)即集成逻辑分析仪,是一种在线调试工具。ILA允许用户在FPGA上执行系统内的调试,通过实时抓取FPGA内部数字信号的波形,帮助我们分析逻辑错误的原因,从而更有效地进行debug。类似于Quartus中的SignalTap II,也类似于片上的逻辑分析仪。

        相较于编写testbench仿真文件仿真debug的方式,使用ILA调试的方法不写tb仿真文件从而节省时间,可直接上板调试并查看波形。

二、ILA使用步骤

        ILA常以IP核的方式调用,可以在IP Catalog中搜索ILA,找到该IP核后进行配置。 配置选项包括:样本数据深度、探针数量、探针位宽等等。配置完成后,在顶层模块RTL代码中例化ILA IP核,接着正常烧录程序上板调试。 

(1)设计部分

        假设已有一个编译成功的工程需要debug调试,我这里直接给一个案例。

        工程实现的功能为:通过状态机来实现4个led灯循环点亮,时间间隔0.5秒。

`timescale 1ns /1ps module LED_ILA( //状态机实现4个led灯循环点亮,时间间隔0.5秒 input wire clk, //100MHz,10ns input wire rst_n, output reg [3:0]led ); reg [25:0]count = 26'd1; reg [2:0]state = 3'b000; reg [2:0]next_state = 3'b000; parameter count_max = 26'd5000_0000; parameter IDLE = 3'b000; parameter s1 = 3'b001; parameter s2 = 3'b010; parameter s3 = 3'b011; parameter s4 = 3'b100; always@(posedge clk or negedge rst_n)begin//计数器 if(!rst_n) count <= 26'd1; else if(count == count_max) count <= 26'd1; else count <= count + 26'd1; end always@(posedge clk or negedge rst_n)begin//state状态转换 if(!rst_n) state <= 3'b000; else if(count == count_max) state <= next_state; end always@(*)begin//next_state状态转换 if(!rst_n) next_state <= 3'b000; else begin case(state) IDLE: next_state <= s1; s1: next_state <= s2; s2: next_state <= s3; s3: next_state <= s4; s4: next_state <= s1; default: next_state <= IDLE; endcase end end always@(*)begin//led输出信号 if(!rst_n) led <= 4'b0000; else begin case(state) IDLE: led <= 4'b0000; s1: led <= 4'b0001; s2: led <= 4'b0010; s3: led <= 4'b0100; s4: led <= 4'b1000; default: led <= 4'b0000; endcase end end endmodule

        接着TOP.v顶层模块文件,把上面这个模块例化进去即可。不过之后还要例化IP核,所以代码在后半部分写完后再给出。

(2)调用ILA IP核

        1.按照如下步骤搜索ILA调用IP核,双击" ILA(Integrated Logic Analyzer)"

        2.进入ILA配置界面,完成基本设置:设置名称、探针数、样本数据深度。其他参数一般用不到保持默认。

(我要看波形的信号有:rst_n、led、count、state所以有4个探针,样本数据深度够用默认1024,即每个有效clk采样一次,采样1024个clk时的数据)

        3.接着再当前界面继续设置探针宽度:

(根据rst_n、led、count、state4个信号宽度,依次设置好位宽即可)

        4.再点击OK之后,会弹出该界面,选项保存默认点击“generate”生成IP核,

        5.这个时候要等一段时间等ip核生成完毕(转圈即正在生成),完毕之后可以看到文件多了一个IP核即ila_o模块。

(3)例化ILA IP核

接着在TOP.v顶层模块文件内例化ILA IP核。并完成连接端口信号:

`timescale 1ns / 1ps module TOP( input wire clk, input wire rst_n, output wire [3:0]led ); LED_ILA u_LED_ILA( //例化设计的模块 .clk (clk), .rst_n (rst_n), .led (led) ); ila_0 u_ila_0( //例化ILA IP核 .clk (clk), .probe0 (rst_n), .probe1 (led), .probe2 (u_LED_ILA.count), .probe3 (u_LED_ILA.state) ); endmodule 

        途中会发现count和state是设计模块内定义的寄存器,无法直接连接,此时只需要以“u_LED_ILA.count”的方式连接,因为ILA可以读取模块寄存器内容。

        此外不同探针位宽可能不同,注意匹配待检测信号位宽,可以双击IP核查看探针位宽情况

(4)编译综合

        接着按照常规流程走:编译、综合、配置管脚、生成比特流文件、烧录开发板。准备进行ILA在线调试。

三、ILA在线调试

        程序烧录到开发板后,Vivado界面会自动弹出ILA的波形窗口如图所示:不过此时这个窗口是空的,是因为还没有触发采样。

         因为ILA是数据采样,不可能一直不停采,只能采有限个数据,即有信号触发或手动时开始对探测的信号进行数据采样。下面将介绍如何使用ILA在线调试:

(1)手动运行

        如图所示:点击运行按钮波形会立刻更新,此时红色光标的位置就是你点击运行按钮时的时刻(默认中点),它会在触发点周围进行1024次采样(对应前面设置的采样深度)。

        当然你也可以在左下角设置触发点的位置:比如我设置触发点为第100个,再运行一次,在波形里可以看到触发点位置改变了。(此外还可以设置波形显示的数据个数等等)

     

(2)运行触发条件

        如果我想看特定时刻附近的信号变化情况,手动触发就不适用了,我需要将该特定时刻作为触发点位置,因此需要添加触发条件实现自动触发:

        假如我想查看复位时刻其他信号的情况,就需要将复位时刻设置为触发条件,右下角位置添加触发信号并设置条件,我的模块中 rst_n 是低电平有效,因此触发条件为“1到0转变”。

        设置完成后再运行一次,会发现界面提示“等待触发”:

        这个时候只要你按下开发板的复位按钮(让rst_n产生一个1到0的转换的触发条件),波形界面就会刷新数据,如图所示:

       将黄色光标设置移动到触发点附近的位置将波形放大,就可以清楚看到其他信号变化情况了,可以看出复位时所有信号都成功复位:

        此外触发条件设置多种多样可以根据你的需求进行设置,这样debug起来更加方便快捷,比如要设置某信号到特定值时触发,我可以设置count计数到666的时候触发,运行效果如图所示:

(3)连续触发

        这个按钮就是连续触发,当选中这个按钮后不需要手动运行,只要满足触发条件他就会自动触发(每次触发都会刷新一次采集到的数据,显示的是最近一次的数据情况),比如当你设置count计数到666时触发,并选中“连续触发”,count计数每次到666时,波形界面就会刷新一次波形。

Read more

丝滑灵活,春节你只管“放手去嚯嚯”!一台“黑豹”机器人帮你清洁就够了

丝滑灵活,春节你只管“放手去嚯嚯”!一台“黑豹”机器人帮你清洁就够了

2025年下半年始,人形机器人行业正在经历一场从“概念追捧”到“交付验证”的深刻认知升级。 没过多久,就有平台爆料多家机器人被工厂赶了出来。据说Demo阶段都非常亮眼,也成功说服了客户在产线上测试,但实际的表现却很拉胯。对于流水化的工厂来说,需要机器人在几十秒内完成动作,实际操作往往需要几分钟,完全无法胜任产线上的工作。 尴尬之余,这个状况也是共像,是整个行业真实“进厂打工”的现状。 只能做做demo,没办法满足客户的期望,技术上未有实质性突破,场景上必然表现的很差,这也可能导致损失很多客户。不少团队感觉到,具身正在开始收敛。这也表示,新的一年行业对各家公司要求都会很高,找准商业化落地场景,将是主线。 开年不到两个月,行业已经产生超过三十起的融资事件。但量产和落地的“达摩克利斯之剑”仍悬在头上:“有多少机器人实际在真实场景下工作?”“能给公司降本增效么?”“是否稳定运转?” 整个具身领域,正在逐渐褪去华丽的外衣,回归技术和产业的本质。 原文链接:丝滑灵活,春节你只管“放手去嚯嚯”!一台“黑豹”机器人帮你清洁就够了 (一)

开箱即用的AI绘画工具:Z-Image-Turbo UI界面实测

开箱即用的AI绘画工具:Z-Image-Turbo UI界面实测 你是否试过下载一堆依赖、配置环境变量、反复调试端口,只为让一个AI绘图工具跑起来?又或者,刚点开网页就弹出“登录”“注册”“开通会员”,结果生成一张图要等三分钟,还带水印?今天要聊的这个工具,没有这些烦恼——它不联网、不传图、不注册,双击启动后,浏览器里输入一个地址,三秒进界面,五秒写提示词,十秒出高清图。它就是Z-Image-Turbo_UI界面镜像,一个真正意义上“开箱即用”的本地AI绘画方案。 这不是概念演示,也不是简化版Demo,而是完整可用的生产级UI:支持中文提示词理解、实时预览、多尺寸输出、历史图库管理,所有操作都在浏览器里完成,模型全程运行在你自己的设备上。接下来,我会带你从零开始,不跳步骤、不绕弯子,真实还原一次完整的使用过程——包括怎么启动、怎么调参、怎么保存、怎么清理,甚至怎么避开新手最容易踩的三个小坑。 1. 启动服务:

一键部署Z-Image-Turbo:云端AI绘画不求人

一键部署Z-Image-Turbo:云端AI绘画不求人 你是不是也遇到过这样的场景:脑子里有个绝妙的画面,想把它画出来,但要么不会画画,要么打开专业绘图软件折腾半天,最后出来的效果还不如想象力的十分之一? 或者,作为内容创作者、电商运营,每天需要大量配图、海报,找图库要花钱,自己设计又太费时间,效率低得让人抓狂。 今天,我要给你介绍一个“神器”——Z-Image-Turbo 极速云端创作室。它不是一个复杂的软件,而是一个打包好的云端AI绘画应用。你不需要懂代码,不需要配置环境,甚至不需要高性能电脑,只需要点几下鼠标,就能拥有一个属于你自己的、能秒级生成高清大图的AI画室。 这听起来是不是有点不可思议?别急,跟着我,10分钟你就能亲手把它搭建起来,并画出第一张作品。 1. 为什么你需要这个“云端画室”? 在深入动手之前,我们先搞清楚,这个工具到底能帮你解决什么问题。 1.1 传统AI绘画的三大痛点 如果你之前尝试过一些AI绘画工具,可能会对这几个问题深有体会: 1. 部署复杂:想用开源的Stable Diffusion?光是安装Python、

Formality:原语(primitive)的概念

Formality:原语(primitive)的概念

相关阅读 Formalityhttps://blog.ZEEKLOG.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482         原语(primitive)一般指的是语言内置的基本构件,它们代表了基本的逻辑门和构件,通常用于建模电路的基本功能,例如Verilog中的门级建模会使用and、or等关键词表示单元门。Formality也存在原语的概念,这一般出现在对门级网表进行建模时,本文将对此进行详细解释。         假设以例1所示的RTL代码作为参考设计(可以看出添加了// synopsys sync_set_reset综合指令让Design Compiler将其实现为带同步复位端的D触发器),例2所示的综合后网表作为实现设计,其中data_out_reg原语是一个带同步复位端的D触发器(FDS2)。 // 例1 module ref( input clk, input reset, input data_in, output reg data_