0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA初学者系列——模块书写&电路综合

电子设计 来源:FPGA技术联盟 作者:FPGA技术联盟 2020-11-13 16:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

第一章:模块书写

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

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

图 1 电路示意图

如图1所示为电路示意图, 首先分析一下该电路:

①两个输入端口即 a 和 b,为了更好地让读者理解该变量为一个输入端口,输入端口可加上方向pi(port input)表示输入。面对大量的代码,一个比较好的命名风格,更方便我们后续的验证, 希望前期就可以养成比较好的命名风格。

②一个输出端口即 c,同理 po 即为 port output。

功能:该电路实现 a 和 b 相与,结果为 c。

在用 Verilog HDL 描述一个电路时,必须要对该电路命名,此处我们对该电路命名为 a_and_b。在用 Verilog HDL 描述一个电路时, 模块的开始都是以 module 开始,endmodule 结束, module 后面写该模块的模块名,模块名的后面有一个小括号,所有该模块的端口都需要在此小括号内声明,小括号以分号结束(半角分号,同c 语言一样, Verilog HDL 中每一条语句也是以分号结束)。

在 module 与 endmodule 之间,可以定义必要的内部变量,以及我们所有描述的逻辑功能。具体如图2所示:

图2 模块代码编辑示意

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

图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 电路。

第二章:电路综合

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

图 1 ISE 主界面

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

图 2 创建工程

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

图 3 工程设置

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

图4 添加 V 文件

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

图 5 添加 V 文件后的工程

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

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

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

图 7 展开后的 Synthesize 选项

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

图 8 RTL 显示选项页面

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

图 9 模块模型

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

图 10 RTL 电路

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

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

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22502

    浏览量

    639149
  • Xilinx
    +关注

    关注

    73

    文章

    2206

    浏览量

    131878
  • C语言
    +关注

    关注

    183

    文章

    7646

    浏览量

    146139
  • 硬件电路
    +关注

    关注

    39

    文章

    268

    浏览量

    30368
  • VerilogHDL
    +关注

    关注

    2

    文章

    39

    浏览量

    19947
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    面向测量初学者的入门专栏:为什么要测量声音和振动?

    面向测量初学者的入门专栏:为什么要测量声音和振动?您有没有想过,其实我们每天都生活在各种“声音”和“振动”之中?这些复杂交织的声音和振动,如果按照频率(也就是声音的高低)进行分解,并分析其大小、甚至
    的头像 发表于 04-17 09:51 405次阅读
    面向测量<b class='flag-5'>初学者</b>的入门专栏:为什么要测量声音和振动?

    关于TNC同轴线缆结构:这是一篇被很多射频初学者忽视的干货文

    很多射频初学者常将TNC接口视作BNC的“螺纹加强版”,却忽略了其内部严丝合缝的物理结构对信号传输的决定性影响。本文深度拆解TNC同轴线缆的四大核心层:从利用集肤效应的中心导体,到决定特征阻抗
    的头像 发表于 04-16 16:19 86次阅读
    关于TNC同轴线缆结构:这是一篇被很多射频<b class='flag-5'>初学者</b>忽视的干货文

    ATX电源电路分析详解开关电源的原理

    ATX电源电路分析详解开关电源的原理,WORD版,图文并茂,详细说明各个元件在电路中的作用。适合初学者
    发表于 03-29 16:47 1次下载

    国产DSP/FPGA选型、环境搭建与初学者调研全指南

    作为全国产解决方案的标杆,其核心选型(长城银河FT-M6678N DSP、复旦微JFM7VX690T36 FPGA)、开发环境搭建,以及适配初学者的调研路径,都值得细细拆解。更关键的是,芯片与板卡在实际使用中的各类问题、易忽略的技术细节,直接决定实操成功率,也是发烧友
    的头像 发表于 03-10 18:52 755次阅读
    国产DSP/<b class='flag-5'>FPGA</b>选型、环境搭建与<b class='flag-5'>初学者</b>调研全指南

    学习电子电路中常见的问题

    电子电路作为现代科技的基础,其学习过程中常会遇到各种理论和实践问题。无论是初学者还是有一定经验的工程师,都可能面临电路设计、元器件选型、信号处理等方面的困惑。本文将系统梳理电子电路学习
    的头像 发表于 01-20 07:38 460次阅读

    AI端侧部署案例(SC171开发套件V3)2026版

    AI端侧部署案例(SC171开发套件V3)2026版 序列 课程名称 视频课程时长 视频课程链接 课件链接 工程源码 1 初学者入门手写数字识别案例 25分29秒 https
    发表于 01-15 10:40

    FPGA初学者求助

    Vivado2025.1配置MIG时出现报错 大家好,我是一名研一的学生,同时也是一名FPGA初学者,最近在使用vivado2025.1配置MIG的时候遇到了问题,具体问题如下: 我这个mig的配置
    发表于 12-07 11:43

    如何对FX3进行编程以便通过USB 3.0从FPGA -&amp;gt; FX3 -&amp;gt; PC传输RGB888视频?

    我想为我的应用程序编程 FX3,其中 FX3 将从 FPGA 接受 RGB888 视频并通过 USB 3.0 将其传输到 PC。 任何支持文章、博客或相关应用说明。 由于我是 FX3 环境的初学者,因此需要这方面的指导。
    发表于 08-11 08:15

    简易稳定的调频无线话筒电路资料

    话筒信号经过C8耦合到Q1Q2组成的振荡电路进行调制,然后再经C2送到Q3缓冲放大后由C3到天线发送出去。本电路的特点是元器件少而且比较稳定,适合初学者制作
    发表于 08-04 14:56 3次下载

    初学者指南:树莓派上搭建虚拟环境!

    在这篇简明扼要的指南中,我们将探讨如何在树莓派上设置和使用虚拟环境(或称为Venv)——包括在终端和Thonny集成开发环境中。使用Bookworm操作系统或更高版本时,或在尝试安装Python软件包时,你可能会遇到以下错误:error:externally-managed-environment×Thisenvironmentisexternallyman
    的头像 发表于 07-27 13:24 1174次阅读
    <b class='flag-5'>初学者</b>指南:树莓派上搭建虚拟环境!

    避雷!树莓派初学者常犯的5个错误!

    如果你刚刚入手树莓派,你就会知道它潜力无穷,几乎能实现你想到的任何功能。然而,这种自由也让你可能在不知不觉中做出对系统有害的操作。在本文中,我将介绍要避免犯哪些错误。初学者最常犯的错误包括:损坏SD
    的头像 发表于 07-22 17:16 1565次阅读
    避雷!树莓派<b class='flag-5'>初学者</b>常犯的5个错误!

    机智云配网教程第一期:GAgent固件烧录与调试指南

    前言本文主要总结了我在使用机智云的过程中积累的经验,特别是针对初学者,旨在帮助大家少走弯路。
    的头像 发表于 06-27 19:06 1219次阅读
    机智云配网教程第一期:GAgent固件烧录与调试指南

    【经验分享】玩转FPGA串口通信:从“幻觉调试”到代码解析

    FPGA开发,思路先行!玩FPGA板子,读代码是基本功!尤其对从C语言转战FPGA的“宝贝们”来说,适应流水线(pipeline)编程可能需要点时间。上篇点灯代码解读了基础,而如果能亲手写出串口通讯代码,恭喜你,
    的头像 发表于 06-05 08:05 1228次阅读
    【经验分享】玩转<b class='flag-5'>FPGA</b>串口通信:从“幻觉调试”到代码解析

    电路基础学习资料

    不可多得的电路基础知识学习资料,作者郝铭先生具有深厚的电路功底,且讲解的非常通俗易懂,非常适合初学者。 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 05-17 15:01

    教你快速看懂电源各部分单元

    资料介绍: 一张电路图通常有几十乃至几百个元器件,它们的连线纵横交叉,形式变化多端,初学者往往不知道该从什么地方开始, 怎样才能读懂它。其实电子电路本身有很强的规律性,不管多复杂的电路
    发表于 05-12 15:09