资讯详情

FPGA工具篇--ILA

📅 2026/10/15 3:54:39 | 华诺云谱 👁 阅读
FPGA工具篇--ILA
一、基本介绍1.1前言ILA是vivado中独特的IP核在调试过程中能加速我们debug本次我们来学习ILA以助于后续我们开发复杂大型项目基本发现和解决问题的能力。本次项目会用led闪烁的代码进行讲解如何使用ILA先附上我的源代码timescale 1ns / 1ps module flash_led( input sclk, input s_rst_n, output reg [3:0] led); reg [25:0] cnt; always(posedge sclk or negedge s_rst_n) begin if(s_rst_n1b0) cntd0; else if (cntd49_999_999) cntd0; else cntcnt1; end always(posedge sclk or negedge s_rst_n) begin if(s_rst_n1b0) led4b0000; else if (cntd49_999_999) led~led; else ledled; end endmodule1.2介绍我们所熟知的ILA其实他需要两个IP核,ILA和VIOILA监控逻辑内部信号和端口信号VIO实时监控和驱动逻辑内部信号和端口信号本次先介绍ILA1.3ILA的添加方式ILA有三种添加方法1、HDL方式生成一个ILA的ip核然后在verilog代码中对ip核进行例化将探针和内部信号进行连接我们就能观测信号了。优点想观察什么信号直接连接直接在代码中例化和修改缺点需要修改设计2、Hierarchy/schematic法前者是通过添加信号列表做调试后者是原理图方式这两种方式都需要对代码进行综合之后去添加优点不用修改源设计直接在列表添加待测信号缺点综合会对程序进行优化可能导致我们无法在列表中找到需要调试的信号可以通过添加属性去解决3、IP Integrator在IP寄存器中添加需要调试的信号二、具体调用1、调用ILA的ip核按照箭头数量对应第几步照着操作即可system ILA我们不用管他这不是调试用的2、配置ILA我们可以双击ILA此时会弹出一个IP核的配置页面首先我们需要明确我们要观测的信号数量本次实验需要观测s_rst_n,led,cnt也就是3个信号然后我们也需要明确一下他们的位数然后开始配置。3、综合选项这里有弹出一个综合选项一个是global一个是ooc模式我们选取默认的ooc模式提一下ooc和global模式的区别ooc模式创建ILA的ip核会被综合一次后续综合整个工程的这个ILA不会被再次综合会节约一些时间global模式每次编译综合的时候ILA这个ip核就会被综合一次会很消耗时间选取完之后跑一次编译跑到implehension大概这个地方不用在意单词是否正确4、例化ILA按照图示步骤双击ila_0.veo得到例化模板例化模板ila_0 your_instance_name ( .clk(clk), // input wire clk .probe0(probe0), // input wire [0:0] probe0 .probe1(probe1), // input wire [3:0] probe1 .probe2(probe2) // input wire [25:0] probe2 );将这个代码粘贴到我们的源文件中对应我们之前配置ILA的部分了解每个信号应该连到那里例化模块名字想好稍微修改一下timescale 1ns / 1ps module flash_led( input sclk, input s_rst_n, output reg [3:0] led); reg [25:0] cnt; always(posedge sclk or negedge s_rst_n) begin if(s_rst_n1b0) cntd0; else if (cntd49_999_999) cntd0; else cntcnt1; end always(posedge sclk or negedge s_rst_n) begin if(s_rst_n1b0) led4b0000; else if (cntd49_999_999) led~led; else ledled; end ila_0 ila_0_inst ( .clk(sclk), // input wire clk .probe0(s_rst_n), // input wire [0:0] probe0 .probe1(led), // input wire [3:0] probe1 .probe2(cnt) // input wire [25:0] probe2 ); endmodule三、遇到问题首先我手上的板子是没焊接PL端晶振的我一开始认为这个是我板子没PL端晶振导致的后面换用PS端晶振也没成功我以为这个文章就可能写不出来了。按照步骤走我编译的时候没找到探针一个探针都没有。然后我去查信息看到似乎这个ILA对于采样有要求于是折腾了JTAG采样速率后面也是失败然后就再查查出来时钟有要求我猜需要PL端晶振才行后续是我买了个新板子然后后面编译完我看了下他结合约束完成的情况然后发现有个警告询问了下deep老师然后我才发现我的约束文件写错了。大家需要仔细检查一下自己的约束文件时钟的配置不是一般引脚那样就行create_clock -period 20.000 -name sclk [get_ports sclk]如果你发现你的约束文件没有加上这个那么系统大概率是分辨不出来你这个引脚是时钟引脚的他只会认为你这个引脚是普通引脚导致后续观察不到波形四、ILA的使用1、界面介绍加号代表添加观测信号减号代表删除选中的信号然后是连续触发播放键就是再往后提取一些信号满足要求后上传然后是立即触发直接上传当前FPGA的信号这个是修改为无符号十进制数的方法2、设置触发条件我们这次实验需要找到对应cnt计数跳转到0的位置我们可以看到trigger setup设置触发条件这里点击add probes将cnt触发时的值设置为0即可然后点击播放键进行触发一次可以发现我们触发的位置是在中间如果我们不喜欢这样可以通过点击settings然后往下滑动找到trigger position这里自行修改没啥用感觉doge3、如何删除ILAip在使用完我们的IP核确认好我们已经完成了任务要求之后我们可以通过删除ip核来节省我们的FPGA资源过河拆桥中鼠标右键我们的ip核然后选择remove然后记得勾选also delete the project local file
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑