Vivado基本使用
本文介绍Xilinx Vivado的基本使用方法,包括如何创建工程、源文件、仿真文件、约束文件;如何进行仿真、综合、实现和生成Bitstream;如何使用VIO和ILA进行程序的调试。
1 创建工程
- 创建工程
- 打开Vivado→Quick Start→Create Project→Next→输入工程名称(cplr_intlk)和位置→选择RTL Project,勾选“Do not specify sources at this time”跳过添加和创建文件→选择芯片,Family选择Zynq-7000,Package选择clg400,Speed选择-2,器件选择xc7z020clg400-2,Next→Finish。
- 更改芯片:Flow Navigator→PROJECT MANAGER→Settings→General→Project device。
- 创建源文件
- 点击PROJECT MANAGER→Add Sources→Add or create design sources→Create File→输入源文件名称(intlk_single和intlk_top),OK→Finish→OK→Yes。
- 双击Sources→Design Sources→intlk_single/intlk_top,打开源文件开始编辑。
- 编辑完后保存,在Messages会给出源文件中的错误提示。
- 新建的源文件在/cplr_intlk/cplr_intlk.srcs/source_1文件夹下。
- 添加VIO
- 点击PROJECT MANAGER→IP Catalog→Search栏输入vio,双击选择VIO (Virtual Input/Output)弹出设置窗口。
- 设置Component Name,Input Probe Count设置输入信号数量,Output Probe Count设置输出信号数量。
- 点击PROBE_IN Ports标签,设置每个输入信号的位宽;点击PROBE_OUT Ports标签,设置每个输出信号的位宽和初始值。
- 在源文件中按如下方式例化VIO。
vio vio_i ( .clk(clk), .probe_in0(din0), ... .probe_out0(dout0), ... );
- 添加ILA
- 点击PROJECT MANAGER→IP Catalog→Search栏输入ila,双击选择ILA (Integrated Logic Analyzer)弹出设置窗口。
- 设置Component Name,Number of Probes设置采样的个数,Sample Data Depth设置采样的点数,勾选Trigger Out Port和Trigger In Port使能输出/输入触发。
- 点击Probe_Ports标签,设置每个采样信号的位数和触发方式。
- 在源文件中按如下方式例化ILA (展开ILA文件可以直接复制例化方式)。
ila ila_i ( .clk(clk), .trig_in(trig_in0), .trig_in_ack(trig_in0_ack), .trig_out(trig_out0), .trig_out_ack(trig_out0_ack), .probe0(din0), ... );
- 创建约束文件
- 点击Flow Navigator→PROJECT MANAGER→Add Sources→Add or create constraints→Create File→输入约束文件名称(intlk_top),OK→Finiah。
- 双击Sources→Constraints→constrs_1→intlk_top,打开约束文件开始编辑。或者点击Window→I/O Ports打开引脚分配窗口进行引脚分配,保存后也会产生约束文件。
- 新建的约束文件在/cplr_intlk/cplr_intlk.srcs/constrs_1文件夹下。
- 常用约束语句
create_clock -period <时钟周期> -name <时钟名称> [get ports <端口名>] #创建时钟 set property PACKAGE_PIN <引脚号> [get ports <端口名>] #约束端口引脚位置 set property IOSTANDARD <引脚标准> [get ports <端口名>] #约束端口引脚标准,支持通配符,如<端口名>[*] set clock groups -asynchronous -group [get clocks -include generated clocks <时钟名称>] \ -group [get clocks-include generated clocks <时钟名称>] #设置异步时钟 set_false_path -through [port <端口号>] #不检查通过<端口号>路径的时序 set_false_path -to [port <端口号>] #不检查到<端口号>路径的时序
- Flash固化相关约束
set property CONFIG_VOLTAGE 1.8 [current design] #设置电压 set property CONFIG_MODE_SPIX4 [current design] #设置SPI模式 set property BITSTREAM.GENERAL.COMPRESS TRUE [current design] #设置bit是否压缩 set property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current design] #设置SPI位宽 set property BITSTREAM.CONFIG.SPI_32BIT_ADDR Yes [current design] #SPI Flash大于256Mb才需要 set property BITSTREAM.CONFIG.CONFIGRATE 85.0 [current design] #设置SPI的加载时钟 set property BITSTREAM.CONFIG.EXTMASTERCCLK_EN disable [current design] #使用外部时钟驱动Flash # set property BITSTREAM.CONFIG.EXTMASTERCCLK_EN DIV-1 [current design] set property BITSTREAMCONFIG.SPI_FALL_EDGE YES [current design] #设置SPI的数据加载时钟边沿 set property BITSTREAM.CONFIG.UNUSEDPIN Pullup [current design] #设置未使用管脚的默认电平 set property BITSTREAM.CONFIG.CONFIGFALLBACK Enable [current design] #打开看门狗功能
- 综合
- 点击Flow Navigator→SYNTHESIS→Run Synthesis进行综合,状态信息在窗口右上角显示 。
- 点击PROJECT MANAGER→RTL ANALYSIS查看RTL原理图。
- 其它
- 修改字体:Tools→Settings→Tool Settings→Text Editor→Fonts and Colors。
- 修改Tab:Tools→Settings→Tool Settings→Text Editor→Tabs。
- 点击窗口右上角可将窗口设为浮动窗口。
2 功能仿真
- 创建仿真文件
- 点击Flow Navigator→PROJECT MANAGER→Add Sources→Add or create simulation sources→Create File→输入仿真文件名称(intlk_single_test),OK→Finiah→Yes。
- 双击Sources→Simulation Sources→sim_1→intlk_single_test,打开仿真文件开始编辑。
- 新建的仿真文件在/cplr_intlk/cplr_intlk.srcs/sim_1文件夹下。
- 下面给出一个基本的测试文件范例,点击Tools Language→Template可查看语言模版。
`timescale 1 ns / 1 ps module sensor_tb; reg clk; //输出信号使用wire reg rst; reg tready; initial fork #0 begin clk = l'bl; rst = l'bl; tready = 1'b0; end #10 rst = 1'b0; $display("\n## tb : @Time : %0t tready is asserted\n",$time); #20 tready = 1'b1; #1320 tready = 1'b0; #1330 tready = 1'b1; join always #5 clk = !clk; sensor_sim sensor_sim i ( .cmac_clk(clk), .rst_send(rst), .tx_tready(tready) ); endmodule
- 仿真设置
- Flow Navigator→鼠标右键SIMULATION→Simulation Setings,设置Simulation top module name和Simulation标签里的runtime。
- 点击SIMULATION→Run Simulation→Run Behevioral Simulation进行仿真。
- 仿真操作
- 点击仿真窗口上方的按钮进行保存、缩放、移动光标等操作。
- 在信号名处点击鼠标右键进行信号名称长短、格式、颜色、删除等操作。
- 点击Scopes→<模块>,在Objects中会显示所以变量的名称,右键点击需要添加的信号,选择Add to Wave Window将选择信号添加到窗口中。
- 点击①进行Restart,通过②设置仿真时间 ,点击③进行仿真。
- 如果修改了源文件和仿真文件,需要点击④重新进行仿真。
- 可以在源程序中点击左侧设置断点,点击⑤进行单步仿真。
- 点击⑥可对仿真波形进行设置。
- 打开保存的仿真文件:File→Simulation Waveform→Open Configuration。
3 下载测试
3.1 Bitstream
- 综合:Flow Navigator→SYNTHESIS→Run Synthesis,右上角显示状态。
- 实现:Flow Navigator→IMPLEMENTATION→Run Implementation,右上角显示状态。
- 生成Bitstream:Flow Navigator→PROGRAM AND DEBUG→Generate Bitstream,右上角显示状态。生成的Bitstream文件在/cplr_intlk/cplr_intlk.runs/impl_1文件夹下。
- 连接开发板的电源、JTAG,启动选择JTAG (黑金ZYNQ系列板卡),打开电源。
- 点击Open Hardware Manager→Open target→Auto Connect,左侧显示硬件。
- 右键选择xc7z020_1(1)→Program Device→Program,选择Bitstream文件。
- VIO设置
- hw_vio_1显示Outputs out-of-sync表示当前窗口中的VIO设置与实际的不符,右键hw_vio_1,选择Commit Output Values to VIO Core将VIO设置同步到FPGA中。
- 在窗口中右键信号,可对信号的格式、数值、属性等进行设置。
- ILA调试:
- 点击①触发一次,右键信号可以对信号进行相关设置。
- 选中②,再点击①会一直触发,点击③停止。
- 添加触发:在Trigger Setup中添加触发,并进行相关设置,再次运行,左侧显示状态 。
- 设置触发方式:在Settings的Trigger Mode Settings中可对触发的方式进行设置。
- 设置触发位置:Settings中设置Trigger position in window,再次运行。
- 关闭连接:右键localhost→Close Server→OK。
3.2 Flash固化
- 生成mcs文件
- 点击菜单栏的 Tools→Generate Memory Configuration File…。
- 在弹出的对话框中,Format选择 MCS,Custom Memory Size设置为128MB,Filename 设置生成的文件名字,Interface选择SPIx4,勾选Load bitstream files,Start address 设置为 0x00000000,Bitfile选择需要转化的bit文件。其他默认,点击OK。
- 固化程序
- 点击菜单栏的 Tools→Add Configuration Memory Device→xcvu23p_0。
- 在弹出的对话框中,根据Flash芯片选择mx66u2g45-spi-x1_x2_x4。
- 在弹出的对话框中, Configuration file 选择下载的mcs文件,其它默认,点击OK下载文件。
- 断电重启FPGA板卡。