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

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

3天内不再提示

FPGA的入门基础知识详细说明

Wildesbeast 来源:电子工程专辑 作者:电子工程专辑 2020-12-20 10:13 次阅读

Verilog基础语法

570b6f2767ee480ba99da7064705679d.png

1.1 可综合模块

以module为单元,具体实现如下:

5a2b6b6a5c0049f29e6650a371b09554.png

1.1.1 时序逻辑

以异步触发的D触发器为例,时序逻辑在always块里实现。

4ba021f11ced47e890499cbacd49b4a6.png

主要注意点:

1. 声明模块时,输入变量一定是wire类型。

2. 声明模块时,输出变量可以是wire,也可以是reg, reg变量只能在always块中赋值。

3. 敏感列表既可以是边沿触发,也可以是电平触发。

4. 沿触发的逻辑里,一定采用的是非阻塞触发《=。

1.1.2 组合逻辑

以数据选择器为例,组合逻辑通常使用assign语句赋值。

851ed320caf14bddbc9ae648105002b8.png

5af1c633bf5e420fa7a43fc86556c925.png

主要注意点:

1. sel = 0时,c = a;sel = 1时,c =b,即二选一数据选择器。四选一则有两个选择端,四个输入端,八选一则是三个选择端,八个输入端。

2. wire 变量一定要用连续赋值语句赋值,而且必须用阻塞赋值。

1.2 仿真模块

仿真模块和可综合模块的区别:

可综合模块最终生成的bit文件会烧录进芯片运行,而仿真模块编译过后是在仿真软件(例如modelsim)上运行的。仿真模块是基于可综合模块进行例化,并通过仿真软件的模拟,可以初步验证我们写的可综合模块的实现现象。

以计数器为例,可综合模块如下:

727552d2c30f4d4aa5f00a02f6cddacc.png

基于以上可综合模块的仿真模块如下:

10855adad73440a18e7f2e16b18c0795.png

1. 仿真的模块声明不需要输入列表。

2. initial块只能对【寄存器】量进行赋值。

3. 例化模块时,如果原始模块是输出变量,则括号内必须【wire变量】。

HDL常见例子

2.1 译码器

2.1.1 可综合模块(case语句)

此模块用case实现了一个数据选择的功能,先产生了一个8位计数器,通过判断计数器的值来输出不同的取值,当计数器计数到1时,o_data和o_dv分别输出5和1,当计数器为2时,输出7和1,其余均输出0。(Note:Case语句常常运用于状态机中状态的判断)

c52af06c0c1640d3b63532306559980c.png

f692d8d2437047228cf92c882b0ba577.png

Case语句注意点:

必须有default语句,否则会形成锁存器。

2.1.2 仿真模块

7f7bcce94b9a43b99038bd859e292818.png

2.2 状态机

由于FPGA内部语句块都是并行运行的,当我们希望FPGA按照顺序执行我们的语句时,就会用到状态机。

下面例子是使用状态机模拟的一个简单的自动售货机,该售货机中的商品 2.5 元一件,每次投币既能投入 1 元,也能投入 0.5 元,当投入 3 元时,需要设定找零。

2.2.1 状态图

0f55ce9b507043da8da118adbcdbdbe8.png

2.2.2 可综合模块(2段式状态机)

19f0b246e53945c4862b45b507dc817d.png

0b43c666631d461c928c8b50f9aed591.png

407386d637f149f7bbe990fc416b5187.png

2.2.3 仿真模块

3a6eb27c0c9f404d85badc90d0cde82f.png

2.2.4 仿真脚本

仿真脚本可以省去人工操作modelsim软件图形页面的步骤,运行脚本,modelsim可以根据脚本命令自动运行包括创建工作目录,编译文件,启动仿真等步骤,以下是本例中的仿真脚本。

142847a09b044555a02bc5306f3d0589.png

仿真脚本编写好后,只需要进入仿真软件(本例使用的是modelsim),改变当前路径到脚本保存的路径,然后在modelsim命令行输入 do [脚本文件名] 即可。

dada5945294640e3844a9a8998aeb71c.png

仿真结果:

2.2.5 上板测试

上板测试对原来的条件做了一定改动更方便观测结果,输入和输出分别使用的按键和LED灯,测试版使用的是Anlogic的EF3L40CG332B_DEV,实现的功能如下:

① 在开发板上完成自动售货机的实验,投币的动作通过按键实现, 当按一次按键(按下到抬起算一次),算作投币一次。

③ 当投入总金额为 5 毛时, led 灯亮一个,投入总金额为 1 元时, led 灯亮两个, 投入总金额为 1.5 元时, led 灯亮三个, 投入总金额为 2 元时, led 亮四个, 用单向流水灯效果充当出可乐并且不找零的情况,用双向流水灯效果充当既出可乐又找零的情况。流水灯持续十秒后熄灭,状态回到初始状态。

重新设计状态图如下:

598f72ee4dc1426da5af9c1053870c24.png

代码详见工程fsm_key,笔记不再赘述,此次笔记主要记录关于顶层模块和例化的相关知识点:

工程目录如下所示:

9c0dbc26980642479dc3af9e51506645.png

各模块之间的关系是:

顶层文件是fsm.v,在fsm.v中调用了模块led_water_single,led_Water_double和key_debounce,这三个模块的功能分别是单向流水灯,双向流水灯和按键消抖。想在顶层文件中调用对应的模块需要在顶层文件中对相应的模块进行例化,以单向流水灯为例。

单向流水灯的声明如下:

02887743b5ed4341a6169c25b1947dcd.png

(具体功能实现代码略,如有需要,请登录www.fortune-co.com留言)

那么在fsm.v中例化方法如下:

括号外的信号是对应的声明信号;括号内的信号是从fsm模块中传入的信号,该信号名称可以自定义。

整个工程的框架如下:(由于本实验没有另外写一个总的TOP文件,而是将例化和状态机信号处理都放在了fsm模块中,因此top层和状态机模块都标注的是fsm)

其中key05,key10,就是从外界接入的信号,led[7:0]即输出信号。接入信号我们要引到对应的按键,可以参考EF3L40CG332B_DEV的原理图:

a81a462aed3740ecac2eee8683c1e980.png

7113f3138e0a4a3d9ec87bd94800808f.png

SW2和SW3对应的FPGA的管脚分别是R19和R20,同理可查,八个led的对应脚,并写出相应的管脚约束文件:

管脚约束文件写完后,在可综合模块顶层文件中的输入输出信号就会对应到相应的物理输入输出,也可以使用图形页面设置。

完成后编译下载到板子上观测现象。

在本次实验的过程中也发生了一个编程错误问题,刚编写完上板测试时发现结果和预想的有差异,具体错处在输入3元进入双向流水灯的状态时,双向流水灯正向流水正常,当反向流水时,在倒数第二个灯会卡住,然后反复亮灭倒数一二个灯,没法完成反向流水。

由于第一次正向流水是正常的,因此推测是在反向流水时有条件判断错误使得反向流水无法正常运行,进入到led_water_double模块关于反向流水灯的操作模块,经查验发现是设置翻转标志的时候判断条件写错了。

判断条件应该是led == 8’b1111_1110,更改后,实验现象符合预期要求。

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

    关注

    1601

    文章

    21288

    浏览量

    592943
  • Verilog
    +关注

    关注

    28

    文章

    1325

    浏览量

    109292
  • 触发器
    +关注

    关注

    14

    文章

    1675

    浏览量

    60388
收藏 人收藏

    评论

    相关推荐

    FPGA教程之CPLD与FPGA基础知识说明

    本文档详细介绍的是FPGA教程之CPLD与FPGA基础知识说明主要内容包括了:一、复杂可编程逻辑器件简介二、CPLD的组成与特点三、
    发表于 02-27 17:09 32次下载
    <b class='flag-5'>FPGA</b>教程之CPLD与<b class='flag-5'>FPGA</b>的<b class='flag-5'>基础知识</b><b class='flag-5'>说明</b>

    FPGA视频教程之FPGA和CPLD与VHDL基础知识详细资料说明

    本文档的主要内容详细介绍的是FPGA视频教程之FPGA和CPLD与VHDL基础知识详细资料说明
    发表于 03-20 14:35 9次下载
    <b class='flag-5'>FPGA</b>视频教程之<b class='flag-5'>FPGA</b>和CPLD与VHDL<b class='flag-5'>基础知识</b>的<b class='flag-5'>详细</b>资料<b class='flag-5'>说明</b>

    FPGA视频教程之SOPC builder的详细基础知识说明

    本文档的主要内容详细介绍的是FPGA视频教程之SOPC builder的详细基础知识说明。主要目的是:1.在嵌入式系统中使用PLD,2.SO
    发表于 03-21 16:54 8次下载
    <b class='flag-5'>FPGA</b>视频教程之SOPC builder的<b class='flag-5'>详细</b><b class='flag-5'>基础知识</b><b class='flag-5'>说明</b>

    FPGA教程之FPGA入门闪烁灯实验的详细资料说明

    本文档的主要内容详细介绍的是FPGA教程之FPGA入门闪烁灯实验的详细资料说明
    发表于 03-29 17:17 25次下载
    <b class='flag-5'>FPGA</b>教程之<b class='flag-5'>FPGA</b><b class='flag-5'>入门</b>闪烁灯实验的<b class='flag-5'>详细</b>资料<b class='flag-5'>说明</b>

    51单片机场效应管的基础知识详细说明

    本文档的主要内容详细介绍的是51单片机场效应管的基础知识详细说明
    发表于 08-23 17:30 8次下载
    51单片机场效应管的<b class='flag-5'>基础知识</b><b class='flag-5'>详细说明</b>

    手机维修的基础知识详细说明

    本文档的主要内容详细介绍的是手机维修的基础知识详细说明包括了:一、发展历史,二 、手机的条码,三、手机的维修常用工具
    发表于 12-27 08:00 22次下载
    手机维修的<b class='flag-5'>基础知识</b><b class='flag-5'>详细说明</b>

    射频的基础知识培训教程详细说明

    本文档的做作业内容详细介绍的是华为射频的基础知识培训教程详细说明包括了:第一章无线通信的基本概念第二章 射频常用计算单位简介第三章 射频常用概念辨析第四章 天线传播基础知识简介
    发表于 03-14 08:00 18次下载
    射频的<b class='flag-5'>基础知识</b>培训教程<b class='flag-5'>详细说明</b>

    机器学习的基础知识详细说明

    本文档的主要内容详细介绍的是机器学习的基础知识详细说明
    发表于 03-24 08:00 0次下载
    机器学习的<b class='flag-5'>基础知识</b><b class='flag-5'>详细说明</b>

    被动电子元器件的基础知识详细说明

    本文档的主要内容详细介绍的是被动电子元器件的基础知识详细说明包括了:常用电阻电容等无源器件的结构、分类、参数、使用等基础知识
    发表于 08-03 08:00 11次下载
    被动电子元器件的<b class='flag-5'>基础知识</b><b class='flag-5'>详细说明</b>

    使用FPGA设计的2个实例详细说明

    本文档的主要内容详细介绍的是使用FPGA设计的2个实例详细说明包括了:Verilog HDL 设计练习一. 简单的组合逻辑设计,练习二. 简单时序逻辑电路的设计
    发表于 09-23 16:48 11次下载
    使用<b class='flag-5'>FPGA</b>设计的2个实例<b class='flag-5'>详细说明</b>

    Python的知识点总结详细说明

    本文档的主要内容详细介绍的是Python的知识点总结详细说明
    发表于 09-29 17:13 14次下载
    Python的<b class='flag-5'>知识</b>点总结<b class='flag-5'>详细说明</b>

    控阵天线辐射的基础知识详细说明

    电子发烧友网站提供《控阵天线辐射的基础知识详细说明.pdf》资料免费下载
    发表于 11-26 05:30 30次下载
    控阵天线辐射的<b class='flag-5'>基础知识</b><b class='flag-5'>详细说明</b>

    Xilinx FPGA IO的GTLP和HSTL电平标准的详细说明

    本文档的主要内容详细介绍的是Xilinx FPGA IO的GTLP和HSTL电平标准的详细说明
    发表于 01-06 17:13 23次下载
    Xilinx <b class='flag-5'>FPGA</b> IO的GTLP和HSTL电平标准的<b class='flag-5'>详细说明</b>

    时序分析的优化策略详细说明

    本文档的主要内容详细介绍的是FPGA的时序分析的优化策略详细说明
    发表于 01-14 16:03 19次下载
    时序分析的优化策略<b class='flag-5'>详细说明</b>

    PIC系列单片机程序设计基础知识详细说明

    本文档的主要内容详细介绍的是PIC系列单片机程序设计基础知识详细说明
    的头像 发表于 04-05 18:09 3883次阅读