Vivado 在线调试之 ILA 核
对于已经通过了功能仿真的 Verilog HDL 电路,Download 到板端后,可以通过 Vivado 的 ILA 核进行在线调试,观察波形。ILA 核相当于在线的逻辑分析仪,ISE 上叫做 Chipscope,Vivado 下叫 ILA;添加 ILA 核的方式比较简单,首先在 Vivado 集成环境中添加 ILA IP Core:1、点击 IP Catalog,搜索 ila 核,双击...
对于已经通过了功能仿真的 Verilog HDL 电路,Download 到板端后,可以通过 Vivado 的 ILA 核进行在线调试,观察波形。ILA 核相当于在线的逻辑分析仪,ISE 上叫做 Chipscope,Vivado 下叫 ILA;
添加 ILA 核的方式比较简单,首先在 Vivado 集成环境中添加 ILA IP Core:
1、点击 IP Catalog,搜索 ila 核,双击 ILA 的 IP
这里,Verilog 源文件用一个简单的 LED 灯作为例子,源文件如下:
module pl_led(
input sys_clk,
input rst_n,
output reg [3:0] led
);
parameter max_cnt = 32'd49999999;
reg [31:0] timer_cnt;
always @ (posedge sys_clk or negedge rst_n)
begin
if(!rst_n)
begin
timer_cnt <= 32'd0;
end
else
begin
if (timer_cnt < max_cnt) timer_cnt <= timer_cnt + 32'd1;
else timer_cnt <= 32'd0;
end
end
always @ (posedge sys_clk or negedge rst_n)
begin
if(!rst_n)
begin
led <= 4'b0000;
end
else
begin
if(timer_cnt == max_cnt) led <= ~led;
else led <= led;
end
end
endmodule
一个 32bit 的 counter 计数器,50MHz 的外部时钟,LED 一秒钟亮,灭;
比如我们需要观察两个信号,一个是 counter 信号,另一个是 led 信号(led[3:0]),所以在双击 ILA IP Core 后,做如下配置:
使用两个 probe (即,探针),一个 probe 0 为查看 counter 计数器的值,另一个 probe 1 为 4bit 位宽的 led 的值;
点击 OK 后,在点击生成:
此刻在资源地方就可以看到这个 IP 了:
然后打开这个 ila 里面的 template 例化的例子:
直接拷贝下来到 Verilog 源码下面去,并将信号对应上:
module pl_led(
input sys_clk,
input rst_n,
output reg [3:0] led
);
parameter max_cnt = 32'd49999999;
reg [31:0] timer_cnt;
always @ (posedge sys_clk or negedge rst_n)
begin
if(!rst_n)
begin
timer_cnt <= 32'd0;
end
else
begin
if (timer_cnt < max_cnt) timer_cnt <= timer_cnt + 32'd1;
else timer_cnt <= 32'd0;
end
end
always @ (posedge sys_clk or negedge rst_n)
begin
if(!rst_n)
begin
led <= 4'b0000;
end
else
begin
if(timer_cnt == max_cnt) led <= ~led;
else led <= led;
end
end
// Add ILA Here
// Instant ila in source code
ila ila_inst(
.clk(sys_clk),
.probe0(timer_cnt),
.probe1(led)
);
endmodule
OK,搞定,重新 Generate 生成 Bit Stream;
单板上电,打开 Open Hardware Manager 然后扫描 Target:
这里我用的是 ZYNQ-7000 的 7020 ;选择 xc7z020_1,右键 Program Device:
点击 Program 下载完毕后,出现在线调试的窗口:
点击左上的三角形,便开始采集波形,当然可以在右下角的窗口设置 Trigger ,这里我将 Trigger 设置成为 timer_cnt 等于 49999999 即,LED 翻转的时刻,设置好后,点击左上角的 RUN:
红色的 T,代表 Trigger ,即,timer_cnt 满足设置的条件
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)