vivado顶层模块怎么建_FPGA入门系列1模块书写&电路综合

本文针对FPGA初学者,介绍了如何在Vivado中创建顶层模块以及进行电路综合。通过实例讲解Verilog HDL的基础语法,包括输入输出端口声明、逻辑功能描述,并展示了在ISE中检查语法错误和生成RTL电路的过程。

文章

简介

本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码书写以及代码的讲解,可作为读者参考。

c24e20346f1cd11e372e47be57924959.gif

一章:模块书写

Verilog HDL 语言的基本语法与 C语言相似,因此与 VHDL 相比较更容易上手。本章将会在实际小项目的基础上,以 Verilog HDL 语言为主, 教读者怎么更方便、更高效的学习 FPGA。

Verilog HDL 中的 HDL 指的是硬件描述语言(Hardware Description Language), 顾名思义,Verilog HDL 可以描述对应的硬件电路,下面以一个小例子说明。

42eebe4358e01ae8bc9ac58730525e7e.png

图 1 电路示意图

如图1所示为电路示意图, 首先分析一下该电路:
       ①两个输入端口即 a 和 b,为了更好地让读者理解该变量为一个输入端口,输入端口可加上方向pi(port input)表示输入。面对大量的代码,一个比较好的命名风格,更方便我们后续的验证, 希望前期就可以养成比较好的命名风格。
      ②一个输出端口即 c,同理 po 即为 port output。 功能:该电路实现 a 和 b 相与,结果为 c。

c24e20346f1cd11e372e47be57924959.gif

在用 Verilog HDL 描述一个电路时,必须要对该电路命名,此处我们对该电路命名为 a_and_b。在用 Verilog HDL 描述一个电路时, 模块的开始都是以 module 开始,endmodule 结束, module 后面写该模块的模块名,模块名的后面有一个小括号,所有该模块的端口都需要在此小括号内声明,小括号以分号结束(半角分号,同c 语言一样, Verilog HDL 中每一条语句也是以分号结束)。在 module 与 endmodule 之间,可以定义必要的内部变量,以及我们所有描述的逻辑功能。具体如图2所示:

e5882f9526dc6574c3a49622746c3f4a.png

图2 模块代码编辑示意

建议安装专门编辑程序的一些软件,例如Notepad++软件界面及功能都比较齐全。用 Notepad++打开我们新建的 V 文件, 按照模板书写模块a_and_b的 Verilog HDL 代码, 如下所示:

26d086c05d5379bffa9d3028bd70bb0e.png

图3 模块代码

代码解析:

        ①模块以 module 作为开头, endmodule 作为结尾, 需要注意模块名与 V 文件名要一致;
        ②小括号内描述端口, Verilog HDL 中输入端口的关键字为 input,输出端口的关键字为 output。wire(线) 为端口的变量类型, input 端口的变量均为 wire型, Verilog HDL 中另一种常用的变量类型为 reg(寄存器),将在后面的章节详细介绍;
        ③代码第 8 行, 描述了具体的逻辑功能, assign 为 Verilog HDL 中的关键字,assign 可以描述组合逻辑,每一个 assign 后面只能跟一条语句。Verilog HDL 中另一个常用的关键字为 always, 后续会详细讲解。该语句表达的意思为 a&b赋值给 c, 其中=为赋值号, 将右边的结果赋值为左边的变量, &为按位与,即变量的对应位相与, 将在基础语法部分详细讲解。
        这样我们就已经将图中电路描述清楚了,代码只需要按照给出的模板填写对应的内容即可。

        第二章节我们将会讲解在ISE中如何验证代码是否有语法错误,以及将对应的代码转变成 RTL 电路。

c24e20346f1cd11e372e47be57924959.gif

第二章:电路综合

第一章中已经将 a & b = c 对应的 Verilog HDL 程序写出, 但是我们无法得知我们所写的代码是否有语法错误,也不知道代码是否能够按照我们的意思生成对应的电路。本章中我们将会使用 xilinx 公司的 ISE 软件对所写的程序进行综合,从中可以得知代码是否有语法错误,以及生成对应的 RTL 电路。为了方便管理,我们在与 design 文件夹同路径下新建一个文件夹,取名为ise_prj(基于 ISE 的 project)。打开 ISE,会看到如图 1 所示的界面。点击右上角的 File,选择 New Project…新建一个工程。

c8055efff874d488df22cb19f9dd5a31.png

图 1 ISE 主界面

        弹出如图 2 所示的界面,在 Name 处填写工程名字(尽量保证与顶层文件名一致即a_and_b), Location 处选择工程存放的路径, Working Direction 默认路径与 Location一致, Top-level source type 处按照所需选择,此处我们选择 HDL。

1bcba9a2335b4e1e20050aea6e788ae0.png

图 2 创建工程

        点击 Next,弹出如下图 3的界面,按照板卡芯片选择对应的选项,若是只想看看生成的 RTL 电路(不下板调试),则不需要选择,或者随便选择一个芯片即可。

a35128b56578837d02de6d306c98a81e.png

图 3 工程设置

        点击 Next,再点击 Finish 完成工程的创建。按照图4所示,右键点击芯片型号,选择 Add Source…添加已经存在的文件(a_and_b.v)。找到 design 文件夹中a_and_b.v 文件所在的路径,选中该文件,点击 OK。

6b7aa6970fbc6236da8d95da34593ac7.png

图4 添加 V 文件

        添加文件后的工程界面如图 5 所示。

58e6566a79c7553774e755d6383c5a6a.png

图 5 添加 V 文件后的工程

        选中 a_and_b,双击 Synthesize 选项进行对我们的程序进行综合。若是没有语法错误则会出现图6左所示的界面,如果有语法错误则会出现图6右所示的界面,则需要查看错误报告将错误的地方改正并重新综合,直至编译通过为止。

c98689201342b76b815a2c7f0bedffbd.png

    图6 左(正确)                       图6 右(错误)

在综合正确的情况下,点击 Synthesize 选项前面的加号,如图 7 所示。

4e6557109122ab8592eac7557d91cc3f.png

图 7 展开后的 Synthesize 选项

双击 View RTL Schematic 选项,出现如图8所示的界面。

4e2168e5b8b32e949d6ffb38e66965c9.png

图 8 RTL 显示选项页面

选择 Start with a schematic of the top-level block,点击 OK 选项,生成如下图 9 所示界面。

b5f8bfad200bb8ca42a985f58e2c0628.png

图 9 模块模型

        可以双击图 9 所示的模块的模型,则可以看到模块内部的 RTL 电路,如图 10 所示。

57a573f4a4022d8efe48b02e4f02697e.png

图 10 RTL 电路

        从图 10 中我们可以看到生成的电路是我们用 Verilog HDL 语言描述的电路结构。代码的语法及电路验证都是正确的,但是具体的功能是否满足我们的要求呢, 这就需要我们通过仿真来验证了。

        在第三章中,我们会针对该代码书写对应的测试文件,并且通过 Modelsim 软件来验证我们的a_and_b 模块功能是否正确。

未完待续7c856c44aee246fd91a141adbadac6fc.gif

c24e20346f1cd11e372e47be57924959.gif

4a7a3c00a1f36c78e355175678275c3a.gif 关注我们了解更多资讯

ModelSim仿真软件介绍(一)

FPGA数字信号处理(二)数字混频

【FPGA信号处理一】5分钟学会FIR 滤波器设计

在Vivado中,您使用过TCL吗?

编写可综合的FPGA代码经验总结(二)

【干货分享】编写可综合的FPGA代码经验总结(一)

【干货分享】异步电路中的时钟同步处理方法

【干货分享】同步电路分析---异步和同步电路的区别(二)

【干货分享】Verilog中阻塞和非阻塞赋值金规

【干货分享】同步电路的时序模型分析(一)

【干货分享】同步复位和异步复位,您真搞明白了吗?

【干货分享】Get到这些小技巧,FPGA设计将提高一个台阶

Vivado中几种仿真模式比较

FPGA中的上拉下拉电阻以及开漏推挽输出电路

Timequest Timing Analyzer时序分析

Testbench编写是如此的简单

e1ad7eb5acaf04bd019e74de855d592c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值