宝塔山 发表于 2025-1-21 17:21:18

VIVADO ILA IP进阶利用之恣意设置ILA的采样频率

VIVADO ILA IP进阶利用之恣意设置ILA的采样频率
VIVADO ILA IP和VIO IP结合利用恣意设置ILA的采样频率

目录
媒介
一、VIO IP的设置
二、ILA IP的设置
三、测试代码
四、测试结果
总结

媒介

        VIVADO中编写完程序上板测试时经常会用到viavdo自带的ILA逻辑分析仪IP核,在ILA IP核的产品手册中,明确阐明采样时钟必须为永不停息的时钟,也就是只能是体系时钟或PLL、MMCM分频倍频出来的时钟,用户通过时序逻辑分频的时钟是无法利用的,这就造成了在采样深度有限情况下无法完整收罗频率较低的数据,利用起来不方便,本文章介绍ILA的进阶利用,结合VIO IP可以恣意改变ILA的采样频率且不会增长任何额外的资源。
提示:以下是本篇文章正文内容,下面案例可供参考
一、VIO IP的设置

        只需要设置一个输出端口,控制采样频率,如下面两张图所示。第一张图设置输出端口,第二张图设置分频系数的位宽。
https://i-blog.csdnimg.cn/direct/01963935a7de4c9d9f02f6da842cb66f.png
        要有默认分频系数,大于0的整数。
https://i-blog.csdnimg.cn/direct/29368212595e4c4e9434291cd8e3e2ae.png
二、ILA IP的设置

        设置ILA的探针数量,牢记要勾选capture control,抓取数据时会用到该功能。
https://i-blog.csdnimg.cn/direct/b8885b71efb74817b3d3494770be6504.png
        设置各个探针的位宽,根据信号位宽进行设置。
https://i-blog.csdnimg.cn/direct/51c3662c33f24b7a85cd26c7a96a9758.png
三、测试代码

        以下是测试代码,50MHz的体系时钟,控制Led的亮灭,代码天生了1kHz的时钟信号。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2025/01/19 20:29:13
// Design Name:
// Module Name: pl_led
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//

module pl_led(
    input clk,
    input rst_n,
    output reg led
    );

reg clk_1k=0;
reg clk_cnt=0;
always @(posedge clk)
begin
    if(clk_cnt>=49_999)
      begin
            clk_cnt<=0;
            clk_1k<=~clk_1k;
      end
    else
      begin
            clk_cnt<=clk_cnt+1;
      end
end

reg cnt;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
      begin
            cnt<=0;
            led<=0;
      end
    else if(cnt>=1500)
      begin
            cnt<=0;
            led<=~led;
      end
    else if(clk_1k==1&&clk_cnt==9_999)
      begin
            cnt<=cnt+1;
      end
    else
      begin
            cnt<=cnt;
            led<=led;
      end
end

wire vio_freq_div;
vio_frequency u_vio_frequency (
.clk(clk),               // input wire clk
.probe_out0(vio_freq_div)// output wire probe_out0
);

reg trigger_cnt;
wire trigger;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
      begin;
            trigger_cnt <= 0;
      end
    else if(trigger_cnt >= vio_freq_div-1)
      begin
            trigger_cnt <= 0;
      end
    else
      begin
            trigger_cnt <= trigger_cnt + 1;
      end
end
   
assign trigger = (trigger_cnt==vio_freq_div-1);

ila_led u_ila_led (
        .clk(clk),          // input wire clk
        .probe0(rst_n),   // input wire    probe0
        .probe1(led),       // input wire    probe1
        .probe2(clk_1k),    // input wire    probe2
        .probe3(clk_cnt),   // input wire probe3
        .probe4(cnt),       // input wire probe4
    .probe5(trigger)    // input wire    probe5
);


endmodule
四、测试结果

        第一次测试,设置分频系数就为默认的10。
https://i-blog.csdnimg.cn/direct/fa3c7acc41674d84aba1c1cf20611145.png
        按照下图设置ILA的捕获条件。
https://i-blog.csdnimg.cn/direct/6598612f923f471785b7dc408b1dcb5e.png
       点击三角形符号进行采样。
https://i-blog.csdnimg.cn/direct/33ee1cafcf044346be924f6249b9e0c4.png
        以上设置采样时钟为体系时钟的10分频,点击红色框的运行按钮即可观察到clk_cnt收罗出来的数据是以10递增的,程序里面设置的是每次在体系时钟的上升沿加1,可见采样频率缩小了10倍。
        第二次测试,设置分频系数为50000。
https://i-blog.csdnimg.cn/direct/05832eddaf544e7d860427182c320991.png
https://i-blog.csdnimg.cn/direct/7ab35a15349f4e7881682a2bf388e45f.png
        以上设置采样时钟为体系时钟50MHz的50000分频,点击红色框的运行按钮即可观察到程序里面1kHz的时钟被采到了,同时cnt的数值也被采到了,可见采样频率缩小了50000倍。
        另外,如果想以体系时钟的采样频率抓数据,点击>>即可实现,如下图所示。
https://i-blog.csdnimg.cn/direct/b35097dddd5c4f448022dd6573236c0e.png
总结

        从以上测试结果可以看出,ILA+VIO结合的方式可以实现恣意采样频率抓取数据,想抓那个数据都能抓到,只需通过vio就能控制采样频率,不会增长任何额外的资源,可以加速完成程序调试。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: VIVADO ILA IP进阶利用之恣意设置ILA的采样频率