zcu102_0_PL端LED闪烁

本文档及此文档系列中使用zcu102开发板的全部文档均使用以下开发环境:

  • zcu102开发板
  • Windows 10
  • Vivado 2018.2.1
  • Matlab 2017b

文章目录

  • 建立工程
  • 添加时钟
  • 添加设计文件
  • 添加约束文件
  • 综合
  • 添加管脚约束
  • 添加时钟约束
  • 实现
  • 生成并烧写
  • 仿真
  • 调试

本文首先说明了PL开发的完整流程,再对仿真和调试功能进行单独说明。
本文所用Vivado工程见 https://download.csdn.net/download/botao_li/10877016

建立工程

启动Vivado,选择Create Project
zcu102_0_PL端LED闪烁_第1张图片

进入新建工程向导

在Project Name页设置工程名称及路径
zcu102_0_PL端LED闪烁_第2张图片

在Project Type页选择RTL Project,并且选中Do not specify sources at this time
zcu102_0_PL端LED闪烁_第3张图片

在Default Part页选择zcu102开发板
zcu102_0_PL端LED闪烁_第4张图片

完成后点击Finish,建立工程完毕

添加时钟

根据ug1182 zcu102 evaluation board user guide,当前工程使用板上125MHz固定频率差分时钟。

由于管脚所在Bank为HIGH_DENSITY IO Bank,不能使用PLL或者MMCM等时钟模块,因此先由IBUFDS转化为单端时钟后直接使用。IBUFDS调用代码见添加设计文件部分的代码。

添加设计文件

在Sources窗口选择Add Sources
在这里插入图片描述

在弹出的Add Sources窗口,选择Add or create design sources
zcu102_0_PL端LED闪烁_第5张图片

在Add or Create Design Sources页选择Create File
zcu102_0_PL端LED闪烁_第6张图片

在弹出窗口中输入文件名称
zcu102_0_PL端LED闪烁_第7张图片

回到Add Sources窗口点击Finish
zcu102_0_PL端LED闪烁_第8张图片

弹出的Define Module窗口中设置模块的输入输出端口,并选择OK
zcu102_0_PL端LED闪烁_第9张图片

在Sources窗口双击新建的模块,编辑代码
zcu102_0_PL端LED闪烁_第10张图片

打开代码后可以看到前述流程中自动添加的端口定义

module pl_top(
    input clk_p,
    input clk_n,
    output [7:0] leds
    );
endmodule

完成代码如下:

module pl_top(
    input clk_p,
    input clk_n,
    output [7:0] leds
    );
    
    wire clk;//125MHz工作时钟
    
    //用原语实现差分时钟转单端
    IBUFDS
    #(
    .IOSTANDARD("DEFAULT")//DEFAULT默认所有情况
    )
    IBUFDS_inst
    (
    .O(clk),//输出
    .I(clk_p),//P端输入
    .IB(clk_n)//N端输入
    );
    
    //定义输出寄存器
    reg [7:0] leds = 8'b0000_0001;
    
    //计数器,计时1秒,计数范围0~27'd125_000_000-1
    reg [26:0] cnt = 27'd0;
    
    always @(posedge clk) begin
        case (cnt)
            27'd124_999_999: begin
                cnt <= 27'd0;//计数复位
                leds <= {leds[6:0], leds[7]};//循环移位
            end
            
            default: begin
                cnt <= cnt+27'd1;//计数
                leds <= leds;//保持
            end
        endcase
    end
    
endmodule

添加约束文件

使用与前述相同的方法打开Add Sources窗口,选择Add or create constraints
zcu102_0_PL端LED闪烁_第11张图片

选择Create File,建立xdc约束文件,点击Finish完成
zcu102_0_PL端LED闪烁_第12张图片

在Sources窗口可以看到新建立的约束文件
zcu102_0_PL端LED闪烁_第13张图片

综合

在SYNTHESIS选择Run Synthesis
zcu102_0_PL端LED闪烁_第14张图片

弹出窗口按默认设置选择OK开始综合

综合结束后在弹出窗口选择Open Synthesized Design(或者在Flow Navigator的SYHTHESIS项下选择)
zcu102_0_PL端LED闪烁_第15张图片

添加管脚约束

在Layout菜单选择I/O Planning
zcu102_0_PL端LED闪烁_第16张图片

在I/O Ports页设置所有顶层管脚的Package Pin和I/O Std(参考ug1182)
zcu102_0_PL端LED闪烁_第17张图片

选择保存弹出Out of Date Design,选择OK

接下来弹出的Save Constraints窗口中指定前述建立的xdc约束文件
zcu102_0_PL端LED闪烁_第18张图片

在Sources窗口双击打开pl_top.xdc文件可以看到保存的管脚约束代码

set_property PACKAGE_PIN AL12 [get_ports {leds[7]}]
set_property PACKAGE_PIN AH14 [get_ports {leds[6]}]
set_property PACKAGE_PIN AH13 [get_ports {leds[5]}]
set_property PACKAGE_PIN AJ15 [get_ports {leds[4]}]
set_property PACKAGE_PIN AJ14 [get_ports {leds[3]}]
set_property PACKAGE_PIN AE13 [get_ports {leds[2]}]
set_property PACKAGE_PIN AF13 [get_ports {leds[1]}]
set_property PACKAGE_PIN AG14 [get_ports {leds[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {leds[0]}]
set_property PACKAGE_PIN G21 [get_ports clk_p]
set_property IOSTANDARD LVDS_25 [get_ports clk_p]
set_property IOSTANDARD LVDS_25 [get_ports clk_n]

添加时钟约束

在SYNTHESIS选择Edit Timing Constraints
zcu102_0_PL端LED闪烁_第19张图片

打开Timing Constraints页
zcu102_0_PL端LED闪烁_第20张图片

双击Double click to create a Create Clock Constraint提示

在Create Clock窗口查找时钟并设置时钟周期
zcu102_0_PL端LED闪烁_第21张图片
zcu102_0_PL端LED闪烁_第22张图片

在Timing Constraints页面出现新建的时钟约束
zcu102_0_PL端LED闪烁_第23张图片

保存后在pl_top.xdc文件内出现时钟约束代码

create_clock -period 8.000 -name clk_125_input -waveform {0.000 4.000} [get_ports clk_p]

实现

在IMPLEMENTATION选择Run Implementation
zcu102_0_PL端LED闪烁_第24张图片

弹出窗口按默认设置选择OK开始实现

结束后的弹出窗口中选择Open Implemented Design(或者在Flow Navigator的IMPLEMENTATION项下选择)

在Timing页,可以看到时钟约束全部通过
zcu102_0_PL端LED闪烁_第25张图片

生成并烧写

在PROGRAM AND DEBUG下点击Generate Bitstream
zcu102_0_PL端LED闪烁_第26张图片

根据xtp435 zcu102 software install and board setup的说明,连接JTAG USB口,并且设置为JTAG加载之后,板卡上电

在PROGRAM AND DEBUG的Open Hardware Manager内选择Open Target
zcu102_0_PL端LED闪烁_第27张图片

弹出菜单内选择Auto Connect

进入HARDWARE MANAGER界面后,在Hardware窗口选择xczu9_0器件,右键单击选择Program Device
zcu102_0_PL端LED闪烁_第28张图片

在弹出的Program Device窗口选择生成的bit文件,并点击Program按钮
zcu102_0_PL端LED闪烁_第29张图片

完成烧写后,板上LED按照代码设计依次点亮
zcu102_0_PL端LED闪烁_第30张图片

仿真

在Sources窗口选择Add Sources
在这里插入图片描述

在Add Sources窗口选择Add or create simulation sources
zcu102_0_PL端LED闪烁_第31张图片

在下个步骤选择Create File
zcu102_0_PL端LED闪烁_第32张图片

在Create Source File窗口设置文件名
zcu102_0_PL端LED闪烁_第33张图片

完成后点击Finish按钮

之后弹出的Define Module窗口用于指定模块端口,由于是仿真激励,直接点击OK
zcu102_0_PL端LED闪烁_第34张图片

在Sources窗口找到新建的仿真模块,双击打开
zcu102_0_PL端LED闪烁_第35张图片

修改后的仿真代码如下:

module tb_pl_top(

    );
    
    //建立差分时钟
    reg clk_p = 1'b0;
    wire clk_n;
    assign clk_n = ~clk_p;
    
    //设置时钟周期为8ns
    always #4 clk_p = ~clk_p;
    
    //定义led输出
    wire [7:0] leds;
    
    //例化
    pl_top u
    (
    .clk_p(clk_p), 
    .clk_n(clk_n), 
    .leds(leds)
    );
    
endmodule

在Flow Navigator的SIMULATION中选择Run Simulation,在弹出菜单中选择Run Behavioral Simulation
zcu102_0_PL端LED闪烁_第36张图片

之后进入SIMULATION界面
zcu102_0_PL端LED闪烁_第37张图片

上方仿真波形是在修改设计代码中的计时长度后得到,否则仿真时间太长。

调试

此处的调试指上板调试,在FPGA运行中查看内部信号。

在SYNTHESIS下首先选择Open Synthesized Design,再选择Set Up Debug
zcu102_0_PL端LED闪烁_第38张图片

在弹出的Set Up Debug窗口中添加信号,简单的方法是从Netlist窗口直接拖入

若关注的信号没有在Netlist中出现,则可以在代码中信号定义之前添加 (* keep=“true” *)原语

(*keep="true"*) reg [26:0] cnt = 27'd0;

zcu102_0_PL端LED闪烁_第39张图片
zcu102_0_PL端LED闪烁_第40张图片

下一步骤中指定抓取信号的深度
zcu102_0_PL端LED闪烁_第41张图片

之后点击Finish完成设置

在Netlist窗口可以发现添加的调试信号左侧出现了调试标记
zcu102_0_PL端LED闪烁_第42张图片

根据前述的说明重新生成bit文件后,打开烧写界面,在Program Device窗口可以发现自动添加的Debug文件
zcu102_0_PL端LED闪烁_第43张图片

点击Program烧写完成后自动打开调试界面
zcu102_0_PL端LED闪烁_第44张图片

抓取结果:
zcu102_0_PL端LED闪烁_第45张图片

你可能感兴趣的:(FPGA)