Vivado使用:操作篇 两种工作模式(二)


                                     两种模式基本设计实现

      这里以Vivado自带的wavegen为例,通过用Tcl脚本的方式分别执行Non-Project模式和Project模式。这实现需要将RTL文件放在Src文件夹下,约束文件放在XDC文件夹下,而IP放置在IP文件夹下。

    该工程的GUI操作参见:https://blog.csdn.net/qq_26652069/article/details/90613366

                                    1.工程模式下的设计方式


该模式下的基本实现过程包括:创建新的工程、创建/添加设计文件、RTL描述与分析、设计的综合和分析过程、设计的行为仿真、创建实现约束、设计实现和分析、设计时序仿真、生成编程文件、下载比特流到FPGA开发板上。

1.1创建工程

(1)RTL Project:该选项表示通过Vivado集成开发工具管理从RTL创建到生成比特流的整个设计过程。在这个过程中设计人员可以添加:

  • RTL源文件;
  • Xilinx IPCatalog内的IP;
  • 用于层次化模块的EDIF网表;
  • Vivado IP集成器内创建的BlockDesgin;
  • 数字信号处理(DSP)源文件。 

  其中IP可以包含以下类型:

  •          Vivado自己生成的XCI文件;
  •         由Core Generator工具生成的已经过时的XCO文件;
  •         预编译的EDIF或者GNC格式的IP网表。

    设计人员利用集成开发环境可以进行RTL分析、启动和管理综合与实现的运行过程、分析设计的运行结果、尝试不同的约束和实现策略,达到时序收敛。

(2)Post-synthesis Project: 该选项允许设计人员使用综合后的网表来创建工程。设计人员可通过Vivado中集成的综合工具、XSt或第三方的综合工具综合得到的网表。例如在Vivado中可以导入EDIF、NGC结构的system Verilog 或结构化的Verilog格式的网表,以及Vivado设计检查点文件(DCP文件)。

     设计者可以通过集成开发环境进行 逻辑网表的分析和仿真、启动管理不同的实现运行过程(没有综合了)、分析布局布线的结果、尝试不同的约束和实现策略。

(3)I/O Planning Project :该选项通过创建一个空的I/O规划工程,在设计的早期阶段就可以执行时钟资源和I/O的规划。开发人员可以在Vivado中定义I/O端口,也可以通过逗号分隔的值(CSV)或者XDC导入。

       分配完IO后,Vivado工具可以创建CSV、XDC和RTL输出文件。当有可用的RTL源文件或者网表文件时,这些文件可用于设计的后期。

(4)Imported Project:该选项允许开发人员导入 原本由synplify、xst或者ISE设计套件所创建的RTL工程数据。通过该选项、将设计过渡到Vivado工具中。在导入这些文件时,同时也会导入工程的源文件和编译顺序,但是不导入实现的结果和工程的设置。详见:https://blog.csdn.net/qq_26652069/article/details/91902765

(5)Configure an Example Embedded Evaluation Board Design:从预定义的IP集成器模版设计创建 一个新的Vivado工程。

Tcl命令:

1.创建工程命令模板:(根据需要修改,默认是RTL工程)

create_project project_name/exampleDesigns/project_8 -part xc7vx485tffg1157-1

2.若想要.创建网表工程,按照下面模板输入命令

set_property design_mode GateLv1[current_fileset]

3.可以输入下面的Tcl命令,在工程中添加设计源文件

add_files -norecurse -scan_for_includes ./designs/oneFlop.v

4.通过一下命令将些文件放到当前工程的路径下

import_filles -norecurse ./oneFlop.v

1.2创建并添加一个新的设计文件

1.3RTL详细描述

可以打开原理图查看RTL级原理图,这是对HDL详细描述的网表结构。但是要注意的是,在此阶段中是不能推断出IO缓冲区的。

1.4设计综合和分析

综合就是将RTL级设计转换成门级描述,这个过程会进行逻辑上的优化,并且映射到Xilinx器件原语。

综合过程中,需要了解:

                 首先必须综合设计,但没有用于约束编辑器的书序约束; 

                 当综合后,可以使用约束向导初步定义时序约束。

  • 综合工具使用XDC文件约束驱动综合的优化,因此必须存在XDC文件;
  • 时许约束上的考虑:

1.5行为级仿真

            创建或添加仿真文件,进行仿真。

1.6 创建实现约束

     实现约束的原理:综合后会生成综合网表,此时综合网表就可以与约束文件XDC或者Tcl脚本一起加载到存储器中,用于后续的实现过程。

  1.6.1 IO规划器(I/O Planning)功能

    可以通过I/O规划器实现约束引脚位置。器件的封装图提供了封装引脚、晶圆焊盘和I/O组,这样方便理解I/O组合逻辑之间的关系。

器件视图中,引脚之间的不同颜色区域标识了I/O组;同时显示 了差分对。

器件视图

封装 引脚视图的功能表现在:

  • 显示了I/O封装规范和分配的状态,允许设计这查看Trace延迟和引脚类型、典雅标准和差分对。;
  •  在一个I/O组内,可以以一个组或列表的形式显示引脚。
  • 拖拽时,图表显示引脚和I/O组布局状态。
器件的封装

    可以在上面两幅中的任一个中分配I/O端口。

1.6.2 实现约束 

(1)I/O Planning GUI操作实现

     通过I/O planning图像界面进行端口配置。先创建约束文件**.xdc,综合完成后需要打开综合后设计后在下图中才会有“I/O Planning”选项,选择“I/O Planning”。

在I/O Ports窗口中,进行端口分配:在site标题下为信号分配FPGA上的引脚,并且在I/O Std标题下,为每个逻辑端口定义其I/O电气标准。

     窗口中显示了工程中定义的所有端口,将总线分组到可扩展的文件夹,将端口显示为一组总线或列表形式以及图标标识I/O端口的方向和状态。

分配完FPGA引脚后,右击选择“Export I/O  Ports”,在唐初的对话框中选中XDC,并将导出路径指向当前工程中之前建立好的**.xdc。点击OK完成,如此当打开这个xdc文件后,原本空白文档就会有对应的约束代码了。

(2) 通过文本输入设置实现约束

      除了通过前面的图形化操作进行约束外,还可以直接在XDC文件中按照语法规则输入约束代码来对引脚进行约束。

I/O约束的语法有:

    1)I/O引脚分配设置命令

set_property PACKAGE_PIN <pin_name>[get_ports <信号名>]

   2)I/O引脚的驱动能力设置命令

set_property DRIVE<2 4 6 8 12 16 24>[get_ports<信号名>]

3)I/O引脚电气标准设置命令

set_property IOSTANDARD<IO电压标准>[get_ports<信号名>]

4)I/O引脚抖动设置命令

set_property SLEW<SLOW|FAST>【get_ports<信号名>】

5)I/O引脚上拉设置命令

set_property PULLUP true [get_ports <信号名>]

6)I/O引脚下拉设置命令

set_property PLLDOWN true [get_ports<信号名>]

其他I/O约束命令参考Xilinx官方手册。

1.7实现和分析

1.8时序仿真

1.9生成比特文件

1.10下载比特流文件到FPGA

                             


                            2.  非工程模式基本设计实现


2.1基本命令和功能

    (1)首先掌握非工程模式下的基本命令列表

命令 功能
read_edif 将EDIF或NGC网表导入当前工程的设计源文件集合中
read_verilog 读入用于非工程模式会话Verilog(.v)和System Verilog (.sv)源文件
read_vhdl 读入用于非工程模式会话的VHDL(.vhd或vhdl)源文件
read_ip 读入用于非工程模式会话的已经存在的IP(.xco或.xci)工程文件。使用来自.xco IP工程的.ngc网表。对于.xci IP,使用RTL用于编译;或者如果存在网表,则使用网表。
read_xdc 读入用于非工程模式会话的.sdc或者.xdc文件

set_param

set_property

用于多个目的。例如,它可以定义设计配置、工具设置等
link_design 如果会话中使用网表文件,则对设计进行编译,用于综合目的
synth_desgin 启动Vivado综合,包含有设计顶层模块名字目标器件参数
opt_desgin 执行高层次设计优化
power_opt_design 执行智能时钟门控,用于降低系统的整体功耗(可选)
place_desgin 对设计进行布局
phys_opt_design 执行物理逻辑优化,以改善时序和布线能力(可选)
route_design 对设计进行布线
report_* 运行多个标准的报告,可以在设计过程中的任何一个阶段运行它
write_bitstream 生成一个比特流文件,并且运行DRC

write_checkpoint

read_checkpoint

在设计流程的任何点保存设计。一个设计检查点由网表和约束构成,它们在设计流程的该点进行了优化,以包含实现的结果

start_gui

stop_gui

用于调用在存储器中当前设计的Vivado集成开发环境
   
   

 (2)典型的Tcl脚本的使用

#将工作目录切换到指定目录下,设计的相关文件(属于输入文件)存放在该目录下
cd {F:\Vivado\file} 

#define the output Directory area设置输出文件存放路径,比如生成的一些报告,日志,网表等文件
set outputDir ./wavegen_output
file mkdir $outputDir

#Set basic information
set top wave_gen
set part xc7k70tfbg676-1

#read IP files into in-memory
read_ip [glob -nocomplain ./ip/*.xcix]

#Read design files into in-memory
read_verilog [glob -nocomplain ./src/*.v*]
set_property FILE_TYPE "Verilog Header" [get_files clogb2.vh]
puts "Degin files reading successfully!"

#Read design constraints files into in-memory
read_xdc [glob -nocomplain ./xdc/*.xdc]
puts "Design files reading successfully!"

#Synthesis
synth_design -part $part -top $top
write_checkpoint -force $outputDir/${top}_synth.dcp
report_timing_summary -file $outputDir/post_synth_timing_summary.rpt
report_utilization -file $outputDir/post_synth_util.rpt



#opt 优化
opt_design -directive Explore
write_checkpoint -force  $outputDir/${top}_opt.dcp


#place布局
place_design -directive Explore
write_checkpoint -force $outputDir/${top}_placed.dcp
report_utilization -file $outputDir/post_place_util_rpt
report_timing_summary -file $outputDir/post_place_timing_summary.rpt



if{[get_property SLACK [get_timing_paths -max_paths 1 -nworst 1 -setup]] < 0} {
    puts "Found setup timing violations => running physical optimization"
}


#Route 布线
route_design -directive Explore
write_checkpoint -force $outputDir/${top}_routed.dcp
report_route_status -file $outputDir/post_route_status.rpt
report_timing_summary -file $outputDir/post_route_timing_summary.rpt
report_utilization -file $outputDir/post_route_util_rpt
report_drc  -file $outputDir/pose_route_drc.rpt

#Bitgen 生成比特流
write_bitstream -force $outputDir/${top}.bit

2.2 

参考资料:

Xilinx 官方手册(Tcl或XDC相关的:ug894,ug895,ug903),《Vivado从此开始》、《Xilinx FPGA权威设计指南》(看中文版的话就买后面两本,看官方手册也可以)。

猜你喜欢

转载自blog.csdn.net/qq_26652069/article/details/91562652