Vivado下的集成逻辑分析仪ILA 入门

刚刚开始学习Zynq 7000的时候,看到别人问ILA的问题时,说是集成逻辑分析仪,我觉得这是一个好东西,我一定要学会它。

我是买了黑金的AX7010, 后来换成AC7010,开始学习Zynq 7000的,当然他的平台是Vivado 2015.4 。我一步步按照黑金的教程学习,基本掌握了Zynq 7000的开发过程,但教程只是简单提到了仿真和逻辑分析仪。所以我不断寻找Vivado 下如何仿真以及逻辑分析仪的使用。一直不得要领,出不来。我好希望有一个教人走一遍的入门教程。经过十多天的苦苦思考和资料寻找,测试,前几天,测试出来了Vivado 下的仿真,我就积极地和大家分享了,见我的仿真入门一文。今天我又把集成逻辑分析仪的波形调出来了,我又把他分享给大家。新鲜出炉,有些理解不一定都好,但还是足以带你走一遍。

本文主要参考了xilinx 的ug908-vivado-programming-debugging.pdf,还有http://blog.chinaaet.com/kevinc/p/5100050249 (Vivado中使用逻辑分析仪ILA)。

此文还有2个续集,针对不同的情况:

Vivado下集成逻辑分析仪ILA入门续

Vivado的集成逻辑分析仪ILA 在有sdk 下的应用入门


源代码和工程下载地址: 链接:http://pan.baidu.com/s/1pL4yCR5 密码:ki9s


1:  建立工程并准备文件


打开Vivado, 并新建一个工程,取名dividerIla ,类型(type),选择RTL Projecct,Default Part 根据你的硬件平台选择。这个一定要选择正确,因为需要下载并运行的。我的平台是AC7010, 选择的是xc7z010clg400-1。

接下来是添加下载的源程序文件:Divider_Multiple.v 到Design Sources 下, Divider.xdc 到 Constarnts下。最后的效果如下图,其操作过程不详述,如果操作不来,请去查看我写的 Vivado 下的仿真入门一文,那有详细图示。

Vivado下的集成逻辑分析仪ILA 入门_第1张图片

这里特别注意,如果你的硬件平台不一样,你需要修改Divider.xdc文件。这里分配硬件的管脚,需要与你的硬件一致,特别是clk_i, div1hz_o。 clk_i 是时钟输入脚,我的硬件是U18, div1hz_o 是led 闪灯控制,我的是R19, rst_n_i 是复位脚,我的是L15(其实没有使用)。

在这一步的时候,如果你综合(Synthesis), 执行(Implementation),产生比特流(Genrate Bitstream), 并下载 运行,应该看到你的一个LED 在一闪一闪的。这就是说,如果硬件平台不一致,你就要保证程序是正确无误的,否则,你要修改好。

如果你不想下载,这里提供copy 程序,就是这2个程序的代码。

Divider_Multiple.v 代码:

`timescale 1ns / 1ps
module Divider_Multiple(
    input clk_i,
    input rst_n_i,
    output div2_o,
    output div3_o,
    output div4_o,
    output div8_o,
    output div1hz_o
    );

reg div2_o_r=1'b0;
always@(posedge clk_i)
    div2_o_r=~div2_o_r;
    
  reg [1:0]div_cnt1=2'b00;
  always@(posedge clk_i)
    div_cnt1<=div_cnt1+2'b1;
    
  reg div4_o_r=1'b0;
  reg div8_o_r=1'b0;
 
  always@(posedge clk_i)
  begin
       if(div_cnt1==2'b00 || div_cnt1==2'b10)
            div4_o_r=~div4_o_r;
        else
            div4_o_r=div4_o_r;
end

always @ (posedge clk_i)
begin
       if((~div_cnt1[0]) && (~div_cnt1[1]))
            div8_o_r=~div8_o_r;
        else
            div8_o_r=div8_o_r;
end
            
   reg[1:0] pos_cnt=2'b00;
   reg[1:0] neg_cnt=2'b00;
   
 always@(posedge div2_o_r)
 begin
      if(pos_cnt==2'd2)
          pos_cnt<=2'b00;
      else
          pos_cnt<=pos_cnt+2'b01;
 end
 
  always@(negedge div2_o_r)
 begin
      if(neg_cnt==2'd2)
          neg_cnt<=2'b00;
      else
          neg_cnt<=neg_cnt+2'b01;
 end
 
 reg div3_o_r0;
 reg div3_o_r1;
 
 always@(posedge div2_o_r)
 if(pos_cnt<2'd1)
    div3_o_r0<=1'b1;
 else
    div3_o_r0<=1'b0;
    
 always@(posedge div2_o_r)
    if(neg_cnt<2'd1)
       div3_o_r1<=1'b1;
    else
       div3_o_r1<=1'b0;
       
reg div1hz_o_r=0;
reg [25:0] div1hz_cnt=0;
always @(posedge clk_i)
if(div1hz_cnt<26'd50_000_000)
    div1hz_cnt<=div1hz_cnt+1'b1;
 else
    div1hz_cnt<=0;
    
always@(posedge clk_i)
    if(div1hz_cnt==26'd49_999_999)
        div1hz_o_r<=~div1hz_o_r;
    else
        div1hz_o_r<=div1hz_o_r;

assign  div2_o=div2_o_r;
assign  div3_o=div3_o_r1;
assign  div4_o=div4_o_r;
assign  div8_o=div8_o_r;
assign  div1hz_o=div1hz_o_r;

endmodule

 

Divider.XDC代码:

create_clock -period 10.000 -name clk100MHZ [get_ports clk_i]
set_property IOSTANDARD LVCMOS33 [get_ports clk_i]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n_i]
set_property IOSTANDARD LVCMOS33 [get_ports div2_o]
set_property IOSTANDARD LVCMOS33 [get_ports div3_o]
set_property IOSTANDARD LVCMOS33 [get_ports div4_o]
set_property IOSTANDARD LVCMOS33 [get_ports div8_o]
set_property IOSTANDARD LVCMOS33 [get_ports div1hz_o]
set_property PACKAGE_PIN U18 [get_ports clk_i]
set_property PACKAGE_PIN L15 [get_ports rst_n_i]
set_property PACKAGE_PIN M14 [get_ports div2_o]
set_property PACKAGE_PIN M15 [get_ports div3_o]
set_property PACKAGE_PIN K16 [get_ports div4_o]
set_property PACKAGE_PIN J16 [get_ports div8_o]
set_property PACKAGE_PIN R19 [get_ports div1hz_o]

 

2 :设置调试参数

如果你还没有综合,那就先执行综合(Run Synthesis),需要一点时间, 然后按下图打开Synthesis -> Set up Debug

Vivado下的集成逻辑分析仪ILA 入门_第2张图片

 

下面就是Set Up Debug 的开始对话框,一个网点也没有。我们需要添加要监控或触发条件的Net。

点击Netlist View:

Vivado下的集成逻辑分析仪ILA 入门_第3张图片

 

这个时候出现了Netlist View, 点开Nets, 可以看到很多Nets ,右键加入或者直接拖拉

Vivado下的集成逻辑分析仪ILA 入门_第4张图片

 

Vivado下的集成逻辑分析仪ILA 入门_第5张图片

 

Vivado下的集成逻辑分析仪ILA 入门_第6张图片

Vivado下的集成逻辑分析仪ILA 入门_第7张图片

Vivado下的集成逻辑分析仪ILA 入门_第8张图片

 

Vivado下的集成逻辑分析仪ILA 入门_第9张图片

 

Vivado下的集成逻辑分析仪ILA 入门_第10张图片

 

点击Finish,设置完成,出现如下视图,可以看到Debug 窗口。

Vivado下的集成逻辑分析仪ILA 入门_第11张图片

 

3:后续操作

设置完成后,运行执行 (Run Implementation), 这个时候弹出一个对话框,我选择Save

Vivado下的集成逻辑分析仪ILA 入门_第12张图片

 

原来我们做的这些设置,就是修改Divider.XDC 文件的内容,如下图点击Reload:

Vivado下的集成逻辑分析仪ILA 入门_第13张图片

 

我们看到约束文件Divider.XDC 增加了好些内容。你能看懂吗,ug908都有介绍,

Vivado下的集成逻辑分析仪ILA 入门_第14张图片

 

漫长的等待后,Implementation 终于结束了,这里我选择了红箭头选择,产生比特流。

Vivado下的集成逻辑分析仪ILA 入门_第15张图片

 

比特流也产生完了,我选择打开硬件管理

Vivado下的集成逻辑分析仪ILA 入门_第16张图片

 

硬件管理的界面是这样的, 硬件目标还没打开。这时要打开你的硬件,其实我是一开始就准备好了,包括JTAG。

这是选择红箭 Open target

Vivado下的集成逻辑分析仪ILA 入门_第17张图片

 

连接好目标是这样的,下面还有错误提示。什么意思,原来还没有下载。

Vivado下的集成逻辑分析仪ILA 入门_第18张图片

 

那我就下载,看上去要送2个文件下去,我还勾上直接启动。

Vivado下的集成逻辑分析仪ILA 入门_第19张图片

 

是的吧,下载后错误消失了。现在我们就要采样,看波形了。

Vivado下的集成逻辑分析仪ILA 入门_第20张图片

 

4:波形采样和显示控制

通过上面一连串的操作,终于到了显示界面。左上方有3个红箭标注的就是采样控制操作,分别是:

Triger:触发控制,这个要设置触发条件,
Auto 直接触发

Stop 停止触发

这个就和示波器类似。

Vivado下的集成逻辑分析仪ILA 入门_第21张图片

一定要触发采样,右边才有密密麻麻的波形出现。

 

点击Wavefore 最大化,再最大化。容易看清楚一点。看看左边3个红箭的按钮

Vivado下的集成逻辑分析仪ILA 入门_第22张图片

 

点击波形窗口左边的按钮,显示全部,放大,缩小,调整到波形比较清楚一点。这就是实测的波形,我第一次看到的时候很激动。

Vivado下的集成逻辑分析仪ILA 入门_第23张图片

 

 

右键选择模拟方式看数据,看到模拟变化,而不是数据。

Vivado下的集成逻辑分析仪ILA 入门_第24张图片

 

不要只是看看,动手自己做一次。右键一下,还有好些功能。就和大家分享到这里,希望对你有用。

 

在完成本文后,又实验了直接添加集成逻辑分析仪ILA IP核的方法,也就是入门续里面。
 



 

你可能感兴趣的:(fpga)