如何灵活改版ILA的采样率,以及VIO的使用 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki
背景
对于uart这种低速通信接口,如果用ILA去抓,因为ILA用的是系统时钟50MHz,导致完全抓不到全貌,因此需要寻找新的方法。
解决思路
添加一个分频器模块,这个分频器的分频比可以由外部控制。具体来说,用VIO来配置这个分频比。这样在上位机上就可以灵活改变分频比。这个分频器的输出给ILA提供时钟。
模块设计及VIO配置
VIO配置为只有1个输出端口,位宽为8bits,初始值为0xff(初始值无所谓)
分频器模块(手写了一个,非常简单)
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的值
设置ILA的触发窗口的offset,以及触发条件。
串口调试助手发送"hello",然后也会收到“hello”。这个时候ILA自动捕捉到结果。
右键波形po_data,改变显示radix为ascii,这样可以显示"hello"
改变VIO分频值
如果将分频比值改为4,这个时候ILA频率是12.5MHz,还是太高了,只能抓到"hello"的一部分。
补充说明
用vivado自带的ip: binary counter用作分频器也是可以的,而且更方便哦