当前位置: 首页 > news >正文

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的配置

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

        要有默认分频系数,大于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)
beginif(clk_cnt>=49_999)beginclk_cnt<=0;clk_1k<=~clk_1k;endelsebeginclk_cnt<=clk_cnt+1;end
endreg [15:0] cnt;
always @(posedge clk or negedge rst_n)
beginif(!rst_n)begincnt<=0;led<=0;endelse if(cnt>=1500)begincnt<=0;led<=~led;endelse if(clk_1k==1&&clk_cnt==9_999)begincnt<=cnt+1;endelsebegincnt<=cnt;led<=led;end
endwire [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)
beginif(!rst_n) begin;trigger_cnt <= 0;endelse if(trigger_cnt >= vio_freq_div-1) begintrigger_cnt <= 0;endelse begintrigger_cnt <= trigger_cnt + 1;end
endassign 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就能控制采样频率,不会增加任何额外的资源,可以加速完成程序调试。

http://www.lryc.cn/news/524033.html

相关文章:

  • 网络编程-网络原理HTTP初识
  • 基于若依框架的动态分页逻辑的实现分析
  • 51c~ONNX~合集1
  • 【数据结构篇】顺序表 超详细
  • kubernetes 集群搭建(二进制方式)
  • linux平台RTMP|RTSP播放器如何回调SEI数据?
  • Vue uni-app免手动import
  • 7. 计算机视觉
  • 在服务器进行docker部署频繁提示permission denied
  • c/c++ static
  • C#中System.Text.Json:从入门到精通的实用指南
  • 内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)
  • [操作系统] 进程状态详解
  • [论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
  • 【Maui】下拉框的实现,绑定键值对
  • Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)
  • C语言:位段
  • MPLS VPN 原理与配置
  • 稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应
  • Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences
  • 第2章:Python TDD构建Dollar类基础
  • 【算法学习笔记】34:扩展欧几里得算法
  • 云原生周刊:K8s 生产环境架构设计及成本分析
  • WGAN - 瓦萨斯坦生成对抗网络
  • 海量数据的处理
  • 区块链的数学基础:核心原理与应用解析
  • 1.5 GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新
  • 自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving
  • Spring Boot 配置(官网文档解读)
  • SparkSQL数据源与数据存储