FPGA与VHDL语言学习4

目录

1.《自动售货机控制器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译
2.《信号发生器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译
3.DDS正弦信号发生器(可以通过网络查找相关DDS的技术信息),参照图7-49,用图形方式连接电路

1.参考FPGA与VHDL语言实验指导书中 的实验五《自动售货机控制器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译。这里因为没有硬件电路板支持,只是学习如何进行引脚锁定及软件与硬件的关系。对项目进行波形图仿真,把程序与引脚锁定图及仿真结果图通过作业系统上交,说明仿真结果正确的理由。

实验五、自动售货机控制器设计

0.原理:

对仿真图进行分析: rst为复位信号,clk为时钟输入信号,nickel_ in、 dime_ _in、

quarter_ in分别为5美分、10美分与25美分输入信号; candy_ ou为糖果发放输出信号,nickel. out与dime out分别为5美分与10美分找零信号,都为输出信号; p state代表当前投入的总金额。当rs输入为1时,所有的输出都为0,p_ state为st0状态;当rst与nickel in、quarter_ in信号都为时,dime_ in为1时,所有的输出都为0,但在下一-个脉冲上升沿作用下,当前状态由st0跳到st10;再在上述的基础上,投入25美分的硬币,即quarter _in信号为1,在下一-个脉冲上升沿作用下,当前状态由st10变为st35, 此时输出信号candy. out与dime _out都为1, 即自动售货机发放糖果并实现10美分找零。以此类推,即可实现自动售货控制器的全部功能。

1.在 QuartusⅡ中创建项目,并完成相关设备配置。

2.确定所有状态,并完成状态转移图。

3.新建 VHDL 文档,输入代码并编译通过。

该设计为单一种类25美分糖果自动售货控制器,它只能识别5美分、10美分与25美分硬币,不能识别其他种类的硬币。它具有金额积累功能,当累积金额达到或超过25美分,系统将实现自动发放糖果与找零功能,但不能处理当投入硬币的累积金额达到25美分后继续投入硬币的情况。

输入信号是nickel_ in (投入5美分),dime_ in (投入10美分)和quarter_ in (投入25美分)。另外两个必要的输入是clk(时钟)和rst (复位)。自动售货机相应的3个输出: cand_ out用于控制发放糖果,nickel out用于控制找回5美分的零钱, dime _out用于 控制找回10美分零钱。

给出了有限状态机的转移图。圆圈里的数代表顾客投进来的总钱数(接受5美分、10美分或25美分的硬币)。状态为空闲状态。从它开始,如果投入5美分硬币,将跳转到状态5;如果投入10美分硬币,则跳转到状态10;如果投入25美分硬币,则跳转到状态25。随着投币数量的增加,状态不断跳转,如果投入的币值达到25美分,就可以进入状态25,然后售货机会发放糖果,并跳转回状态0。如果投入的总币值超过了25美分,那么售货机要进入与找零相关的状态。例如,当投入的市值达到40美分时,需要先退出5美分硬币(进入状态35)然后再退出10美分,发放糖果并进入状态0。

4.新建波形文件,分别进行功能仿真与时序仿真。

功能仿真:为了实验准确性进行了多次仿真

下图,100ns-200ns投入5美分,200ns-300ns投入10美分,300ns-400ns投入5美分,400ns-500ns投入25美分,共投入45美分,糖果25美分,应找零20美分并输出糖果,即两个dime_out,验证成功。

下图,100ns-200ns投入5美分,200ns-300ns投入10美分,300ns-400ns投入25美分,共投入40美分,糖果25美分,应找零15美分并输出糖果,即1个dime_out和一个nickel_out,验证成功。

下图,100ns-200ns投入5美分,200ns-300ns投入5美分,300ns-400ns投入10美分,450ns-550ns投入10美分,共投入30美分,糖果25美分,应找零5美分并输出糖果,即一个nickel_out,验证成功。

下图,100ns-200ns投入5美分,200ns-300ns投入5美分,450ns-550ns投入5美分,600ns-700ns投入25美分,共投入40美分,糖果25美分,应找零15美分并输出糖果,即1个dime_out和一个nickel_out,验证成功。

时序仿真:

5.手动完成引脚分配,重新编译项目。

引脚分配:clk -> SW[17]; rst -> SW[16]; quarter_in -> SW[2]; dime_in -> SW[1]; nickel_in -> SW[0]; candy_out -> LEDR[5];

dime_out -> LEDR[1]; nickel_out -> LEDR[0]

  1. Netlist Viewers下无符号数比较器a的RTL结构


2.参考FPGA与VHDL语言实验指导书中 的实验八《信号发生器设计》,输入程序代码,对代码进行编译,试用Assignments→Assignment Editor进行I/O引脚锁定,重新编译。这里因为没有硬件电路板支持,只是学习如何进行引脚锁定及软件与硬件的关系。对项目进行波形图仿真,把程序与引脚锁定图及仿真结果图通过作业系统上交,说明仿真结果正确的理由。

实验八、信号发生器设计

转化为数字形式为“0101 1100”

1.在 QuartusⅡ中创建项目,并完成相关设备配置。

2.新建 VHDL 文档,输入代码并编译通过。

  1. 方法一:使用状态机实现

3.新建波形文件,分别进行功能仿真与时序仿真。

功能仿真:波形仿真与要求相同,都是“0101 1100”

时序仿真:波形仿真与要求相同,都是“0101 1100”

4.完成引脚分配,并重新编译通过。

引脚分配:clk 接内部 28MHz 时钟; 输出信号连到扩展 IO 头中的某一针,如 IO_A[0]。

Netlist Viewers下无符号数比较器a的RTL结构

  1. 方法二:直接实现

3.新建波形文件,分别进行功能仿真与时序仿真。

功能仿真:波形仿真与要求相同,都是“0101 1100”

时序仿真:波形仿真与要求相同,都是“0101 1100”

  1. Netlist Viewers下无符号数比较器a的RTL结构


3.参考PPT第七章第十节的DDS信号发生器原理,设计一个DDS正弦信号发生器(可以通过网络查找相关DDS的技术信息),参照图7-49,用图形方式连接电路。参照图7-50,对DDS正弦信号发生器进行仿真测试,把DDS正弦信号发生器设计图及仿真测试图通过作业系统上交,并说明仿真测试结果正确的理由。
DDS正弦信号发生器实验

直接数字频率合成器(Direct Digital Synthesizer) 是从相位概念出发直接合成所需波形的一种频率合成技术。DDS以较高的频率通过相位累加来产生给定频率的数字化波形。根据抽样理论,产生的最高频率不能超过1/2时钟频率(Nyquist速率)。

下图是根据DDS原理图做出的电路原理图的顶层设计,其中相位累加器的位宽为32。下图共有三个主要元件。

1)32为加法器ADD32.由LPM_ADD_SUB宏模块构成。设置了2阶流水线结构,使其在控制下由更高的运算速度和输入数据的稳定性。

2)32为寄存器DFF32。由LPM_FF宏模块担任。ADD32与DFF32构成一个32为累加器。其高10位A[31…32]作为波形数据ROM的地址。

3)正弦波形数据ROM。正弦波形数据ROM模块sin_rom的地址线和数据线尾款输出都是10位。

4)频率控制字输入B[17…10]

5)DAC驱动数据口DAC[9…0]

仿真波形:DAC的数据是MIF文件里预先储存好的。且频率符合
。这是频率控制字B[31…0]与由DAC[9…0]驱动的DAC的正弦信号频率的关系。BB是由B[17…10]构成,当BB增加时,也应变大,输出频率变大。因此BB越大,输出数据越快。BB=21时DAC的速度小于 BB=DE时DAC的速度。验证正确。

再次仿真,符合公式:
,且数据是MIF文件预存的,验证正确。

Netlist Viewers下DDS的RTL结构


-----频率控制公式

由于软件中无LPM_FF的模块,可以像上图直接键入器件再更改,也可以由VHDL语言生成。

程序如下:

 testdff.vhd-------------DFF32
LIBRARY ieee, lpm;
USE ieee.std_logic_1164.ALL;
USE lpm.lpm_components.ALL;
ENTITY testdff IS PORT (inputs : IN STD_LOGIC_VECTOR(31 DOWNTO 0);clk  : IN STD_LOGIC;outputs : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END testdff;
ARCHITECTURE dff8 OF testdff IS
BEGINU1 : lpm_ffGENERIC MAP(lpm_width => 32)PORT MAP(data => inputs,clock => clk,q => outputs);
END;

TESTDFF的模块如下图所示:

笔记:FPGA与VHDL语言学习4相关推荐

  1. 笔记:FPGA与VHDL语言学习2

    FPGA与VHDL语言学习2 目录 1. 7位2进制计数器程序,要求计算器从0开始计数,计数到59(十进制的59,看到的是二进制数)后归零,重新循环计数 2. 2位十进制计数器程序,要求计数器从00开 ...

  2. 笔记:FPGA与VHDL语言学习1

    FPGA与VHDL语言学习1 目录 1.EDA,fpga,asic 2.CPLD与FPGA 3.设计一个三选一FPGA程序 4.使用由半加器与全加器程序生成一个f_adder全加器图形模块.试用4个f ...

  3. 笔记:FPGA与VHDL语言学习3

    FPGA与VHDL语言学习3 目录 1. LPM_RAM的设置和调用方法,设计一个LPM_RAM 2. 简易正弦信号发生器(这里要使用的 data7X8 .mif 文件),要求用LPM设计一个七位计数 ...

  4. VHDL 语言学习笔记(1)

    一,VHDL语言的基本语法 1.VHDL语言的标识符规则:1).由大小写字母,数字和下划线组成: 2).任何标识符必须以英文字母开头: 3).不以_为末字符: 4)不能出现连续的_; 5)不区分大小写 ...

  5. 【VHDL语言学习笔记(二)】 4位向量加法器

    目的:使用VHDL文本输入法设计并实现一个4位向量加法器. 程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsig ...

  6. VHDL语法学习笔记:一文掌握VHDL语法

    今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货. VHDL语法学习笔记 一.VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed ...

  7. R语言学习笔记 07 Probit、Logistic回归

    R语言学习笔记 文章目录 R语言学习笔记 probit回归 factor()和as.factor() relevel() 案例11.4复刻 glm函数 整理变量 回归:Logistic和Probit- ...

  8. C语言如何加缓冲,C语言学习笔记之输出缓冲

    在c语言中经常用到输出函数printf,当我们像往常一样在输出函数中输入我们的想要的输出的东西后加\n换行 验证结果如我们输出的一样 如果我们在后面加入死循环会不会出现这些语句呢 结果卡死了,可还是输 ...

  9. R语言学习笔记 06 岭回归、lasso回归

    R语言学习笔记 文章目录 R语言学习笔记 比较lm.ridge和glmnet函数 画岭迹图 图6-4 <统计学习导论 基于R语言的应用>P182 图6-6<统计学习导论 基于R语言的 ...

最新文章

  1. html编写的过程中,为什么font设置属性的时候,第二个属性不起作用
  2. Spring(三)AOP面向切面编程
  3. 面试中让你头疼的问题都在这儿
  4. 从源码分析DEARGUI之add_selectable
  5. 每日一皮:鼓励师招到了,原来是这样的...
  6. 高德推出查岗功能_新型「查岗」工具?高德推出「家人地图」新功能
  7. 全景图像拼接——图像融合
  8. 236 Lowest Common Ancestor of a Binary Tree
  9. 4、Firefox 中安装Fiddler插件
  10. 自动驾驶1-4 驾驶分类Taxonomy of Driving
  11. 从sql2016导出数据库到sql2014
  12. 一级造价工程师(安装)- 案例笔记
  13. 如何开发微信公众号后台
  14. MYSQL Error:You must SET PASSWORD before execut...
  15. iOS获取UDID的方法及步骤
  16. 莫明其妙的死机现象,莫明其妙的重启
  17. 通达信标记符号_通达信各种符号
  18. java五子棋小游戏含免费源码
  19. Java实现矩阵运算——矩阵乘法、矩阵转置、自动填充矩阵行
  20. 微信公众平台生成二维码海报是如何做到的?

热门文章

  1. 常见问题解决[0002] 忘记管理密码找回密码
  2. 《前端框架Vue.js的解读利器》
  3. 软件源(Software Sources)
  4. 大批量图片打包zip下载
  5. C语言学习Day27 fopen fclose fputc
  6. 十六进制字符串转换成十进制非负整数
  7. abaqus 打开错误:FLEXNET LICENSING error:-97,121 or -96,491 解决办法
  8. 【转】Director 初学教程
  9. json特殊字符串处理
  10. 轻量化前端框架与小程序移动开发