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

打印 上一主题 下一主题

主题 1020|帖子 1020|积分 3060

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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的设置

        只需要设置一个输出端口,控制采样频率,如下面两张图所示。第一张图设置输出端口,第二张图设置分频系数的位宽。

        要有默认分频系数,大于0的整数。

二、ILA IP的设置

        设置ILA的探针数量,牢记要勾选capture control,抓取数据时会用到该功能。

        设置各个探针的位宽,根据信号位宽进行设置。

三、测试代码

        以下是测试代码,50MHz的体系时钟,控制Led的亮灭,代码天生了1kHz的时钟信号。
  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 2025/01/19 20:29:13
  7. // Design Name:
  8. // Module Name: pl_led
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. module pl_led(
  22.     input clk,
  23.     input rst_n,
  24.     output reg led
  25.     );
  26. reg clk_1k=0;
  27. reg [15:0] clk_cnt=0;
  28. always @(posedge clk)
  29. begin
  30.     if(clk_cnt>=49_999)
  31.         begin
  32.             clk_cnt<=0;
  33.             clk_1k<=~clk_1k;
  34.         end
  35.     else
  36.         begin
  37.             clk_cnt<=clk_cnt+1;
  38.         end
  39. end
  40. reg [15:0] cnt;
  41. always @(posedge clk or negedge rst_n)
  42. begin
  43.     if(!rst_n)
  44.         begin
  45.             cnt<=0;
  46.             led<=0;
  47.         end
  48.     else if(cnt>=1500)
  49.         begin
  50.             cnt<=0;
  51.             led<=~led;
  52.         end
  53.     else if(clk_1k==1&&clk_cnt==9_999)
  54.         begin
  55.             cnt<=cnt+1;
  56.         end
  57.     else
  58.         begin
  59.             cnt<=cnt;
  60.             led<=led;
  61.         end
  62. end
  63. wire [15:0] vio_freq_div;
  64. vio_frequency u_vio_frequency (
  65.   .clk(clk),                 // input wire clk
  66.   .probe_out0(vio_freq_div)  // output wire [15 : 0] probe_out0
  67. );
  68. reg [15:0] trigger_cnt;
  69. wire trigger;
  70. always@(posedge clk or negedge rst_n)
  71. begin
  72.     if(!rst_n)
  73.         begin;
  74.             trigger_cnt <= 0;
  75.         end
  76.     else if(trigger_cnt >= vio_freq_div-1)
  77.         begin
  78.             trigger_cnt <= 0;
  79.         end
  80.     else
  81.         begin
  82.             trigger_cnt <= trigger_cnt + 1;
  83.         end
  84. end
  85.    
  86. assign trigger = (trigger_cnt==vio_freq_div-1);
  87. ila_led u_ila_led (
  88.         .clk(clk),          // input wire clk
  89.         .probe0(rst_n),     // input wire [0:0]   probe0  
  90.         .probe1(led),       // input wire [0:0]   probe1
  91.         .probe2(clk_1k),    // input wire [0:0]   probe2
  92.         .probe3(clk_cnt),   // input wire [15:0]  probe3
  93.         .probe4(cnt),       // input wire [15:0]  probe4
  94.     .probe5(trigger)    // input wire [0:0]   probe5
  95. );
  96. endmodule
复制代码
四、测试结果

        第一次测试,设置分频系数就为默认的10。

        按照下图设置ILA的捕获条件。

       点击三角形符号进行采样。

        以上设置采样时钟为体系时钟的10分频,点击红色框的运行按钮即可观察到clk_cnt收罗出来的数据是以10递增的,程序里面设置的是每次在体系时钟的上升沿加1,可见采样频率缩小了10倍。
        第二次测试,设置分频系数为50000。


        以上设置采样时钟为体系时钟50MHz的50000分频,点击红色框的运行按钮即可观察到程序里面1kHz的时钟被采到了,同时cnt的数值也被采到了,可见采样频率缩小了50000倍。
        另外,如果想以体系时钟的采样频率抓数据,点击>>即可实现,如下图所示。


总结

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表