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

CANopen 在机器人控制器开发中的深度应用解析

CANopen 作为基于 CAN 总线的标准化高层协议(EN 50325-4),凭借 实时性强、可靠性高、拓扑灵活、成本可控 的核心优势,成为机器人控制器与外设(伺服、传感器、执行器)交互的主流工业总线方案。其在机器人控制器开发中的应用贯穿 运动控制、IO 交互、故障诊断、参数配置 全流程,尤其适配协作机器人、工业机械臂、移动机器人等场景的模块化架构需求。以下从核心应用场景、技术实现细节、优势与挑战三方面展开详细解析: 一、核心应用场景(机器人控制器视角) 机器人控制器作为 CANopen 网络的 主站(Master),需连接伺服驱动器、IO 模块、力传感器、夹爪、编码器等 从站(Slave) 设备,核心应用聚焦以下6个维度: 1. 运动控制:

Java 大视界 -- Java 大数据在智能家居环境监测与智能调节中的应用拓展(423)

Java 大视界 -- Java 大数据在智能家居环境监测与智能调节中的应用拓展(423)

Java 大视界 -- Java 大数据在智能家居环境监测与智能调节中的应用拓展(423) * 引言: * 快速上手指南:3 步跑通智能家居 Demo(新手友好) * Step 1:环境准备(必装软件清单) * Step 2:代码运行(按顺序执行) * Step 3:效果验证(用 Postman 模拟数据) * 正文: * 一、智能家居环境监测与调节的核心痛点 * 1.1 设备数据的 “异构化” 困境 * 1.1.1 多源数据的 “协议壁垒” * 1.1.2 数据规模的 “爆发式增长” * 1.2 实时调节的 “滞后性” 痛点 * 1.

喂饭级教程:OpenClaw 对接 QQ 机器人,本地/腾讯云都能用

喂饭级教程:OpenClaw 对接 QQ 机器人,本地/腾讯云都能用

文章目录 * 前言 * 一、选对路子:官方 Bot 还是个人号? * 方案 A:QQ 开放平台官方机器人 * 方案 B:个人 QQ 号变身机器人 * 二、环境准备:5 分钟搞定基础设施 * 1. 服务器/电脑要求 * 2. 安装 OpenClaw * 3. 配置大模型 API * 三、方案 A:对接 QQ 开放平台官方机器人 * Step 1:注册开发者并创建机器人 * Step 2:获取三件套凭证 * Step 3:配置 IP 白名单和沙箱 * Step 4:OpenClaw 端配置

华为人工智能HCIP-AI Solution Architect H13-323题库(26年最新,带解析知识点)

华为人工智能HCIP-AI Solution Architect H13-323题库(26年最新,带解析知识点)

刚考完HCIP-AI Solution Architect H13-323,整理的题库给大家参考学习。完整版题库已经发在题主小程序上了,需要的同学可以去绿泡泡上找“题主”小程序。 以下哪个不是MindSpore核心架构的特点? A、自动微分 B、自动调优 C、自动编码 D、自动并行 答案:C 解析:MindSpore核心架构以自动微分、自动并行和自动调优为主要特点,支持端边云全场景的AI开发。“自动编码”并非其核心架构的特点。 标签:MindSpore,自动微分,自动并行,自动调优 如果你想使用 Hugging Face Transformers 库中的预训练模型进行 DeepSpeed 训练,请对以下步骤进行排序,正确的是哪一项? 步骤: 1. 创建一个TrainingArguments对象,并在其中指定包括DeepSpeed配置在内的训练参数。 2. 创建Trainer对象。 3. 加载预训练模型。 4. 传递模型和训练参数,