FPGA_Vivado开发流程(PL端)3-8译码器为例

1,启动Vivado

2,创建工程

2.1启动 Vivado 集成开发环境,并进入到 Vivado 启动界面,如下图所示。

在 Vivado 的启动界面中分为 Quick Start、Tasks、Learning Center 三组快速入口。其 中:

1) Quick Start 组包含有Create Project(创建工程)、Open Project(打开工程)、Open Example Project(打开实例工程)。

2)Tasks 组包含有Manage IP(管理 IP)、Open Hardware Manager(打开硬件管理器)、 Xilinx Tcl Store(Tcl 脚本存储库)。

3) Learning Center 组包含有 Documentation and Tutorials(文档和教程)、Quick Take Videos(快速上手视频)、Release Notes Guide(发布注释向导)。

通过单击 Quick Start 组的 Create Project 来新建一个 Vivado 设计工程。

2.2、接着会打开创建新工程的向导,出现 Create a New Vivado Project 对话框,如下图所 示。单击 Next 按钮。

2.3、进入到 Project Name 对话框,如下图所示。填入工程名称以及工程路径,根据实际 情况确定是否勾选复选框 Create project subdirectory,如果勾选会在上面设置的工程路径中 以工程名称增加一级目录,可通过观察勾选与否,实际工程存放的路径进行理解该复选框的 具体作用。此处我们需要注意的是,工程路径与工程名一定不能包含空格以及中文字符,否 则在后续流程中会出现错误。然后单击 Next 按钮。

2.4.出现 Project Type 对话框,如图所示。Vivado 工具可以创建多种不同类型的工程,如 最常使用的 RTL 工程、综合后的网表工程、IO 规划工程以及导入其他设计工具的工程。 在这里我们选择 RTL 类型的工程,我们可以在创建工程的阶段进行设计文件的添加或创建, 也可以在工程创建完成后再进行设计文件的添加或创建。此处我们勾选下面的复选框 Do not specify sources at this time,不在设计创建阶段进行添加源文件。单击 Next 按钮。

5.出现 Select Device 对话框,如图所示。在这个我们需要选择设计所用的具体 FPGA 芯片的型号,根据板卡所用 FPGA 的器件系列、封装、速度等级以及温度级别来进行筛选, 如图所示。选择完成后单击 Next 按钮。

2.6.出现 New Project Summary 对话框,如图所示。单击 Finish 按钮,完成工程的创建。

3 ,添加源文件

3.1.在 Flow Navigator 下,找到 Project Manager 并展开,单击 Project Manager 下的 Add Sources 选项;或者在 Sources 面板下单击 按钮。Sources 面板如图所示。

3.2.出现 Add Sources 对话框,如下图所示。该对话框界面提供了如下几个选项:

1) Add or Create Constraints(添加或者创建约束);

2) Add or Create Design Sources(添加或者创建设计源文件);

3) Add or Create Simulation Sources(添加或者创建仿真文件);

在此。我们需要的是创建 Verilog HDL 源文件,因此选中第二项 Add or Create Design Source 前面的单选按钮。单击 Next 按钮。

3.3.出现 Add or Create Design Sources 对话框,如图所示。此时,我们可以通过点击 Add Files 来选择添加本地现有的源文件,或单击 Create File按钮来创建一个新的源文件。我们 选择 Create File 按钮。

3.4.出现 Create Source File 对话框,如图所示。在该对话框中选择文件的类型和输入文 件的名字。参数设置如图所示。单击 OK 按钮。

3.5.在图所示的对话框中,出现了我们新添加的 decoder_3_8.v 文件。单击界面中 Finish 按钮。

3.6.出现 Define Module 对话框,单击 OK 按钮。

3.7.返回到设计主界面中 Sources 面板下,出现了我们新添加了led_flash.v文件,如图所示。

3.8.双击 Sources 面板下的decoder_3_8.v 文件,可以在主窗口中打开decoder_3_8.v 文件。将3-8译码器代码填入:


module decoder_3_8(
    a,
    b,
    c,
    out
    );
    input         a;  //输入端口a 
    input         b;  //输入端口b 
    input         c;  //输入端口c  
    output [7:0]out;  //输出端口out
    
    reg [7:0]out;
    always@(*)
        case({a,b,c})
            3'b000:out = 8'b0000_0001; 
            3'b001:out = 8'b0000_0010; 
            3'b010:out = 8'b0000_0100; 
            3'b011:out = 8'b0000_1000; 
            3'b100:out = 8'b0001_0000; 
            3'b101:out = 8'b0010_0000; 
            3'b110:out = 8'b0100_0000; 
            3'b111:out = 8'b1000_0000; 
        endcase
endmodule

4, 激励创建与仿真测试

前面我们讲解了RTL描述与分析的过程,而在实战中,RTL描述与分析往 往只能保证代码的语法测试通过,而并不能保证代码符合我们设想的逻辑正确 性。 如果需要验证代码的逻辑正确性,可以通过编写激励文件,并进行仿真测 试的方法进行。在大型设计中,每一个子模块的逻辑仿真测试符合预期是整个 代码逻辑仿真测试符合预期的必要条件。 

将上面的设计内容进行分析和综合直至没有错误以及警告。新建3-8译码器 仿真文件。具体步骤如下。

1. 主窗口左侧边栏Project Manager下点击Add Sources

2. Add Source 弹窗选择Add or create simulation sources,点击 Next

3. Add or Create Design Source 弹窗点击 Create File

4. Create Source File 弹窗,File name设置为 decoder3_8_tb,其它默认,点击 OK

5. Add or Create Simulation Source 窗口点击 Finish

6. Define Module 弹窗点击OK,之后的弹窗点击Yes,仿真文件新建完成。 如下图所示,在 Source 窗口文件已经加入工程了。双击文件名打开进入编 辑窗口。

`timescale 1ns / 1ps
module decoder_3_8_tb(

    );
    reg a; 
    reg b; 
    reg c;     
    wire [7:0] out; 
    decoder_3_8 decoder3_8( 
        .a(a), 
        .b(b), 
        .c(c), 
        .out(out) 
    ); 
     initial begin 
        a = 0;b = 0;c = 0;  //在0时刻三个输入均为0 
        #200;                 //经过200ns的延时 
        a = 0;b = 0;c = 1; //在200ns时输入信号的值 
        #200;                 //又经过200ns的延时 
        a = 0;b = 1;c = 0; //在400ns时输入信号的值 
        #200;                 //又经过200ns的延时 
        a = 0;b = 1;c = 1; //在600ns时输入信号的值 
        #200;    
        a = 1;b = 0;c = 0; 
        #200; 
        a = 1;b = 0;c = 1; 
        #200;        
        a = 1;b = 1;c = 0; 
        #200; 
        a = 1;b = 1;c = 1; 
        #200;    
        $stop;                 //停止仿真 
end 
endmodule

设计完仿真文件后进行行为仿真。如下图所示,左侧边栏SIMULATION下 点击Run Simulation,选择Run Behavioral Simulation点击进入仿真。

可以看到如下图所示的波形。首先可以看出输入信号a、b、c每一时刻的状 态与仿真文件中的赋值情况一致。再观察输出信号out,发现当输入为000时输 出为0000_0001;当输入为001时输出为0000_0010。可自行分析其他状态,最终 得出逻辑代码符合既定的设计要求,至此功能仿真结束。

 5, RTL描述与分析

4.1.RTL 描述与分析功能简介

当我们用 Verilog 语言去描述一定电路的时候,可能存在语法或者逻辑上的错误。语法错误在编写的过程中(在保存文档的时候)会自动检测文件中的语法错误,并在 Messages 标记中显示其错误。而且 Sources 面板下会将出错的源文件放到对应错误文件夹的下面。然 而逻辑上的错误 Vivado 软件是无法检测出来的,比如说模块之间的连线错误等。RTL 描述 与分析功能可以对工程的 RTL 结构、语法进行查看,进而可以分析并修正逻辑上的错误。

4.2.RTL 描述和分析过程

1)如图所示,在 Flow Navigator 下,找到 RTL Analysis,并展开。单击 Open Elaborated Design,打开 Elaborated Design。可以看到 Open Elaborated Design 标题变为 Elaborated Design。

2)单击图中的 Schematic,打开 RTL 原理图,如图所示。该原理图是依据 HDL 描述 生成的,根据该原理图可以查看设计是否达到要求并加以修改。在 Vivado 的设计过程中, 用户可以在 RTL 分析、综合、实现阶段后打开设计原理图或设计网表来进行观察。在 RTL 描述与分析阶段后的原理图网表是由与 FPGA 底层部件无关的逻辑符号来体现的。读者可在后续过程中看到综合阶段后的原理图,在综合阶段后的原理图中的逻辑原件便是由 FPGA 中的底层部件来构建的了。

6,设计综合

6.1.如图所示,在 Flow Navigator 窗口下,找到 Synthesis 并展开。

6.2.在展开项中,单击 Run Synthesis 开始对设计进行综合。

6.3.当综合完成后,出现 Synthesis Completed 对话框,如图所示。可以选择 Open Synthesis Design 来打开综合后的设计进行观察,单击 OK 按钮。

6.4.如果之前打开了 Elaborated Design,会出现关闭 Elaborated Design 的提示对话框。单 击 Yes 按钮即可。

6.5.在设计综合完成后的 Synthesis 展开项中工具会列出诸多可以在当前设计下进行的 操作,如图所示。注意在流程向导窗口中 Synthesis 下的 Open Synthesized Design 在综合完 成并打开设计后变为 Synthesized Design。

6.6.在打开 Synthesis Design 后,默认打开 Schematic 视图,如图所示。如果没有打开, 在 Synthesis Design 下单击 Schematic 即可打开。

6.7、 单击 Synthesis Design 下的 Report Utilization 选项。出现 Report Utilization 对话框,如图所示。通过 Report Utilization 功能,我们可以 得到工具针对当前设计的资源利用率的详细报告。

6.8,单击 OK 按钮。Vivado 开始计算该设计的资源消耗量。

6.9、在 Vivado 下方打开了 Utilization-utilization_1 标签窗口。如图所示,给出了该设计的资源利用率:

经过综合后,RTL 设计转化为基于 FPGA 底层资源的电路网表。接下来就 是将设计进行布局布线。

7 ,添加设计约束

通常,一个设计中的 FPGA 不会是独立使用的,FPGA 一定会与其他外设、 接口相连接,并且 FPGA 通常需要有外部时钟的接入。因此,FPGA 设计需要在 工具中指定对应的 IO 引脚位置以及输入时钟的信息,即需要用户对 IO 进行约 束以及进行时钟周期等时序约束。在Vivado 中,用户可通过 I/O Planner 进行 IO 约束,使用 Timing Constraints Manager 指定期望设计性能即进行设计的时序约 束。本节将重点介绍如何为设计添加 IO 约束。为设计添加 IO 约束的方法非常 简单: 1、 首先在综合完成后的设计上点击 Open Synthesized Design 来打开综合后 的设计;

2、 在菜单栏视图处下拉 I/O Planning view 点击进入 IO 规划视图界面,如图所示;

选择之后会进入IO分配界面,按照里面分配引脚和电平标准。

这样管脚约束添加完成了。但是此时约束内容保存在内存中,还没有写入文件,点击工具栏保存按钮,或者直接 Ctrl+S,弹出如下图所示窗口,添加 XDC 文件名decoder3_8,点击OK。

这样就将 I/O 约束写入到 XDC 文件中,如下图所示,在 Source 窗口的 Constraints 下可找到刚保存的decoder3_8.xdc文件。双击可以打开约束文件。

8,设计实现

Vivado 下的 FPGA 设计实现是指由 FPGA 实现工具将 FPGA 综合后的电路网表针 某个具体指定的器件以及相关物理与性能约束进行优化、布局、布线并生成最终可以下载到 FPGA 芯片配置文件的过程。 实现过程分为几个子过程:

1) 优化设计 Opt Design : 针对所选器件,对逻辑设计进行优化,以便达到最优实现;

2) 功耗优化设计 Power Opt Design (可选):从降低功耗的角度,对逻辑设计进行优化;

3) 布局设计 Place Design(必选):将设计网表在所选器件上进行布局;

4) 布局后功耗优化 Post-Place Power Opt Design (可选):在布局之后的网表基础上优化 功耗;

5) 布局后物理优化 Post-Place Phys Opt Design (可选):在布局之后的网表基础上进行 物理优化,主要针对时序性能;

6) 布线设计 Route Design(必选): 在布局后的设计上,进行布线;

7) 布线后物理优化 Post-Route Phys Opt Design (可选):在布线后的设计上,参考布线 后 的设计延时,对逻辑、布局、布线等情况再次进行优化;

同样的,Vivado 设计实现部分也有一些相关的设置,我们打开工程设置中的实现设置 窗口,如图所示。可以看到,与设计综合类似,设计实现的每个子步骤都具有 Tcl 钩子脚本 功能,用户可以使用 Tcl 脚本灵活的制定设计实现流程。此外,对于设计实现的每个子步 骤,用户都可以去指定工具的 Directive,即让工具按照设计者预期的目标进行设计实现结 果的探索。

在 Vivado 下进行设计实现的具体步骤如下:

1.在 Flow Navigator 下找到并展开 Implementation,如图所示。单击 RunImplementation 选项,开始执行实现过程。

2.实现过程完成后会出现如图所示的 Implementation Completed 对话框。选择 Open Implemented Design,单击 OK 按钮。

3.在图中的 Open Implemented Design 变为 Implemented Design。Vivado 右上角出现器 件的结构图,如下图左边所示。调整结构图,可以清晰地看到该设计用到的器件和器件之间 的连线(即布线),如下图右边所示。

9,比特流文件的生成与下载

设计的最后一步是将 Vivado 实现产生的网表文件转化为比特流文件,并且将比特流文 件下载到 FPGA 芯片中。比特流文件用于完成对 FPGA 进行配置。

1.比特流文件的生成 如图所示,在 Flow Navigator 窗口下找到 Program and Debug 选项并展开。单击 Generate Bitstream 选项,开始生成比特流文件。

2.比特流文件的下载

1) 比特流文件生成后,会出现如图所示的 Bitstream Generation Completed 对话框, 选择 Open Hardware Manager 选项。单击 OK 按钮。

2) 在图中,Open Hardware Manager 变为 Hardware Manager;如果没有,则单 Open Hardware Manager 打开 Hardware Manager。Vivado 右上侧出现 Hardware Manager 界面,如图所示。

3) 在Hardware Manager 界面中,单击 Auto Connect 连接设备。如果Auto Connect无 法连接,则需要检查开发板是否上电或驱动是否安装成功

4) 在Hardware Manager 界面下出现选中的设备,如图所示。

5) 在 Hardware Manager 界面中找到并右键单击 xc7a35t_0(0),在浮动菜单中单击 Program Device…选项。

6) 如图所示,出现 Program Device 对话框。默认情况下比特流文件会自动选 中, 如果没有单击“…”按钮,找到并选中 led_flash.bit 文件。在 Program Device 对 话 框中单击 Program 按钮,开始下载。

7) 至此,我们便完成了 Vivado 工具的整个基本设计流程。

  • 28
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值