VIVADO ILA IP进阶使用之任意设置ILA的采样频率

VIVADO ILA IP进阶使用之任意设置ILA的采样频率

VIVADO ILA IP和VIO IP结合使用任意设置ILA的采样频率

目录

前言

[一、VIO IP的配置](#一、VIO IP的配置)

[二、ILA 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的时钟信号。

复制代码
`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 [15:0] 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 [15:0] 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 [15:0] vio_freq_div;
vio_frequency u_vio_frequency (
  .clk(clk),                 // input wire clk
  .probe_out0(vio_freq_div)  // output wire [15 : 0] probe_out0
);

reg [15:0] 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 [0:0]   probe0  
	.probe1(led),       // input wire [0:0]   probe1 
	.probe2(clk_1k),    // input wire [0:0]   probe2 
	.probe3(clk_cnt),   // input wire [15:0]  probe3 
	.probe4(cnt),       // input wire [15:0]  probe4
    .probe5(trigger)    // input wire [0:0]   probe5
);


endmodule

四、测试结果

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

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

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

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

第二次测试,设置分频系数为50000。

以上设置采样时钟为系统时钟50MHz的50000分频,点击红色框的运行按钮即可观察到程序里面1kHz的时钟被采到了,同时cnt的数值也被采到了,可见采样频率缩小了50000倍。

另外,如果想以系统时钟的采样频率抓数据,点击>>即可实现,如下图所示。


总结

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

相关推荐
UestcXiye3 天前
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型
c++·计算机网络·网络编程·ip·tcp
微光zc5 天前
IP 地址查询网站
运维·网络·ip
UestcXiye6 天前
《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型
c++·计算机网络·ip·tcp
CharlesG010 天前
NAT 实验:多私网环境下 NAPT、Easy IP 配置及 FTP 服务公网映射
运维·服务器·网络·网络协议·tcp/ip·安全·ip
SNN_Ryan24 天前
Facebook营销自动化—— Python脚本 + 代理IP实现内容高效分发
python·自动化·新媒体运营·ip·facebook
rqtz1 个月前
【HTTP】解码网络通信的奥秘:HTTP,IP 地址,端口,DNS及NAT地址转换的协同之舞
服务器·网络协议·tcp/ip·http·ip
东锋1.31 个月前
IP、网关、子网掩码、DNS 之间的关系详解
网关·智能路由器·ip·dns·子网掩码
Zfox_1 个月前
网络层(Internet Layer)
linux·网络·计算机网络·ip
FPGA狂飙1 个月前
快速傅里叶变换(FFT):从数学公式到5G信号,揭开数字世界的“频率密码”
fpga开发·信号处理·verilog·fpga·vivado
{⌐■_■}1 个月前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd