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

永久在线CRM网站背后的AI力量:集成Linly-Talker实现智能客服数字人

永久在线CRM网站背后的AI力量:集成Linly-Talker实现智能客服数字人 在客户体验决定成败的今天,企业越来越难以容忍“请在工作日9:00-18:00联系我们”这样的服务边界。用户期望的是——无论凌晨三点还是节假日,只要打开官网,就能立刻得到回应。这种“永远在线”的承诺,正从一种竞争优势演变为基本门槛。 而真正让这一愿景落地的,并非更多的坐席人员或更复杂的排班系统,而是一个能说、会听、有表情的AI数字人。它不眠不休,语气亲切,还能记住上一次对话的内容。这背后,是像 Linly-Talker 这样的全栈式实时数字人系统的崛起。 想象这样一个场景:一位海外客户在深夜访问某品牌的CRM门户,点击“智能客服”,屏幕上立即出现一位面带微笑的虚拟代表。他不仅用流利的英语回答了产品参数问题,还在用户提到“预算有限”时,主动推荐了更适合的入门型号——整个过程自然得如同与真人销售交谈。而这名“员工”是由一张照片、一段语音样本和一套AI模型驱动的。 这正是 Linly-Talker 的核心能力所在。它不是一个简单的语音助手加动画贴图,而是一个融合了大语言模型(LLM)、语音识别(

By Ne0inhk
人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在教育领域的应用场景和重要性 💡 掌握教育领域NLP应用的核心技术(如智能问答、作业批改、个性化学习) 💡 学会使用前沿模型(如BERT、GPT-3)进行教育文本分析 💡 理解教育领域的特殊挑战(如多学科知识、学生认知差异、数据隐私) 💡 通过实战项目,开发一个智能问答系统应用 重点内容 * 教育领域NLP应用的主要场景 * 核心技术(智能问答、作业批改、个性化学习) * 前沿模型(BERT、GPT-3)在教育领域的使用 * 教育领域的特殊挑战 * 实战项目:智能问答系统应用开发 一、教育领域NLP应用的主要场景 1.1 智能问答 1.1.1 智能问答的基本概念 智能问答是通过自然语言与用户进行交互,回答用户问题的程序。在教育领域,智能问答的主要应用场景包括: * 课程问答:回答课程相关的问题(如“什么是机器学习”

By Ne0inhk
AI 编程工具 Claude Code 实战

AI 编程工具 Claude Code 实战

随着本人应用 AI 编程进行深度应用后,发现 Cursor 处理复杂问题时候还是很欠缺,同时由于 Cursor 更改了 Pro 用户的使用规则,导致每个月中开始就无法使用 Cursor 中的一些高级模型。 今天就来介绍一下最近特别火而且本人也在应用的 AI 编程工具 Claude Code。 Claude Code Claude Code 是由 Anthropic 开发的可在本地运行的自动化 AI 编程命令行工具,他基于 Claude 4 系列模型获得强大的能力. 能理解您的代码库,执行命令,自动化管理Git仓库,调用您的 Model Context Protocol (MCP)。 能按照您的想法创造、修改项目,出色地完成撰写文档,转写语言等您平时十分繁重的工作。 它通过命令行界面(CLI)运行,允许开发者通过自然语言命令处理编码任务、Git 工作流和调试。

By Ne0inhk