如何灵活改版ILA的采样率,以及VIO的使用 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

背景

对于uart这种低速通信接口,如果用ILA去抓,因为ILA用的是系统时钟50MHz,导致完全抓不到全貌,因此需要寻找新的方法。

解决思路

添加一个分频器模块,这个分频器的分频比可以由外部控制。具体来说,用VIO来配置这个分频比。这样在上位机上就可以灵活改变分频比。这个分频器的输出给ILA提供时钟。

模块设计及VIO配置

VIO配置为只有1个输出端口,位宽为8bits,初始值为0xff(初始值无所谓) image image image

分频器模块(手写了一个,非常简单)

module divider(
    input clk,
    input rst_n,
    input [7:0] div_ratio,
    output pulse_out
    );

reg [7:0] counter;

always @(posedge clk or negedge rst_n)
if(rst_n==0)
    counter<=0;
else if(counter==div_ratio-1)
    counter<=0;
else
    counter<=counter+1;
    
assign pulse_out=(counter==div_ratio-1)? 1:0;       
        
endmodule

按照流程综合、产生bitstream、烧入FPGA。自动打开VIO和ILA界面。

配置VIO的值

image

设置ILA的触发窗口的offset,以及触发条件。

串口调试助手发送"hello",然后也会收到“hello”。这个时候ILA自动捕捉到结果。 image

右键波形po_data,改变显示radix为ascii,这样可以显示"hello"

image

改变VIO分频值

如果将分频比值改为4,这个时候ILA频率是12.5MHz,还是太高了,只能抓到"hello"的一部分。 image

补充说明

用vivado自带的ip: binary counter用作分频器也是可以的,而且更方便哦

image