vivado如何实现在线调试功能(ILA)逻辑分析仪

ILA 简介

ILA的是一种在线的逻辑分析仪,其主要的作用是可以在线调试一些,系统的寄存器的变量,其仅需要通过连接好jtag 就能正常运行了。

项目建立

项目说明

我建立的就是一个流水灯的文件,最简单的方案,我要监测我的tiemr的变化,和灯的变化的情况

.v 文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2020/07/25 00:03:39
// Design Name: 
// Module Name: les_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module les_test(
    sys_clk_p,
    sys_clk_n,
    rst_n, // reset ,low active
    led // LED,use for control the LED signal on board
    );
    input sys_clk_p;
    input sys_clk_n;
    input rst_n;
    output [3:0] led;

//define the timer counter

reg[31:0] timer;
(* mark_debug = "true"*)reg[3:0] led;
wire sys_clk;



IBUFDS sys_clk_ibufgds
(
.O (sys_clk ),
.I (sys_clk_p ),
.IB (sys_clk_n )
);
always @(posedge sys_clk or negedge rst_n)
begin
    if (~rst_n)
        timer <= 32'd0; // when the reset signal valid,time counter clearing
    else if (timer == 32'd199_999_999) //1 seconds count(200M-1=199999999)
        timer <= 32'd0; //count done,clearing the time counter
    else
        timer <= timer + 1'b1; //timer counter = timer counter + 1
end
//===========================================================================
// LED control
//===========================================================================
always @(posedge sys_clk or negedge rst_n)
begin
    if (~rst_n)
        led <= 4'b0000; //when the reset signal active
    else if (timer == 32'd49_999_999) //time counter count to 0.25 sec,LED1 lighten
        led <= 4'b0001;
    else if (timer == 32'd99_999_999) //time counter count to 0.5 sec,LED2 lighten
        begin
            led <= 4'b0010;
        end
    else if (timer == 32'd149_999_999) //time counter count to 0.75 sec,LED3 lighten
        led <= 4'b0100;
    else if (timer == 32'd199_999_999) //time counter count to 1 sec,LED4 lighten
        led <= 4'b1000;
end


    
endmodule

使用debug core ila

step 1加入debug 测试点

如果我要监测led这个reg ,我应该怎么办呢?
有两种方案:

方案一

直接手动在标记一下
(* mark_debug = “true”*)reg[3:0] led;
vivado如何实现在线调试功能(ILA)逻辑分析仪_第1张图片

方案二

综合后通过界面上,进行标记,如step2中,我们可以 “右键” 然后选择 mark debug
vivado如何实现在线调试功能(ILA)逻辑分析仪_第2张图片

step2 打开debug layout 实现debug 配置

打开的界面如下所示,其可以通过左面的nets 栏目中看到我们的线
vivado如何实现在线调试功能(ILA)逻辑分析仪_第3张图片

step3 set up debug

vivado如何实现在线调试功能(ILA)逻辑分析仪_第4张图片

step4 配置set up debug

vivado如何实现在线调试功能(ILA)逻辑分析仪_第5张图片
选择上,红框中的两个
vivado如何实现在线调试功能(ILA)逻辑分析仪_第6张图片
finish
vivado如何实现在线调试功能(ILA)逻辑分析仪_第7张图片

完成fnish 之后,软件会自动帮我们更新一下,当前的界面

vivado如何实现在线调试功能(ILA)逻辑分析仪_第8张图片

step5 run impletement

完成上面的测试的变量标记之后,我们就可以通过保存我们当前的配置,然后 run impletement

保存当前的配置有两种方法:
(1)在schmatic 界面, ctrl+s
vivado如何实现在线调试功能(ILA)逻辑分析仪_第9张图片

(2) 直接点击 run impleteement ,他会提示你保存

vivado如何实现在线调试功能(ILA)逻辑分析仪_第10张图片

这个时候,我们看我们得xdc得文件,上面会增加很多其他得东西,这个时候表示,我们弄成功了哦
vivado如何实现在线调试功能(ILA)逻辑分析仪_第11张图片

step6 生成bit流

耐心等待,这个过程比较漫长,

vivado如何实现在线调试功能(ILA)逻辑分析仪_第12张图片

程序下载与测试

连接设备

不说了,常规

下载程序

下载部分有两个
vivado如何实现在线调试功能(ILA)逻辑分析仪_第13张图片
点击下载后,会自动跳出下面的界面
vivado如何实现在线调试功能(ILA)逻辑分析仪_第14张图片

点击上面的运行,我们可以得到如下的波形,但是请看到,由于我们的信号的变化速度十分的缓慢,所以依据时钟的变化速度进行采样1024个点的话,我们这个时候也仍然看不结果的,但是实际上,我么已经证明ila 的可用性了/
vivado如何实现在线调试功能(ILA)逻辑分析仪_第15张图片

vivado如何实现在线调试功能(ILA)逻辑分析仪_第16张图片

总结

(1) 介绍了ila
(2) 如何添加要监测的界面
(3) 通过采样的深度可以控制我们要采样多少个点,如果变化特别慢的变量,此时,我们的采样深度要变深或者我们通过其他触发的方式进行(我想应该会有这种方法,我将在下一篇blog 中进行)

参考

(1)https://blog.csdn.net/leon_zeng0/article/details/78465682?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
(2) https://blog.csdn.net/u013564276/article/details/49663599

你可能感兴趣的:(vivado,fpga,硬件开发)