笔记:FPGA与VHDL语言学习4

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。

1.1.png

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

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

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

%B}E8Y21_[01FGRTR~37FTW.png

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

111.png

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

OWZDP1V2WYKK]K2{)]W)C$J.png

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

1.2.png

时序仿真:

1.3.png

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.4.png

1.5.png

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

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

实验八、信号发生器设计
`A933570KKXS%%R6M7YTJ5U.png

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

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

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

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

2.1.png

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

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

2.2.png

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

2.3.png

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

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

2.4.jpg

2.5.png

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

2.1.1.png

  1. 方法二:直接实现

2.6.png

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

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

2.7.png

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

2.8.png

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

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

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

F45~)H@GX0}W51E0TA7}4}W.png

下图是根据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]

I$RKJM3XRH6BQ456UG{H05X.png

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

(XD2Q49@V3}A]U991)W3X1T.png

再次仿真,符合公式:在这里插入图片描述
,且数据是MIF文件预存的,验证正确。

~KH]3`@5NXU)WE[%SDNV)%V.png

Netlist Viewers下DDS的RTL结构

4DR7H1MNJ$J0LNA)[F%VD48.png

BB3XPQ6XISZW0%V9[Y7S(IU.png-
-----频率控制公式

由于软件中无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
BEGIN
    U1 : lpm_ff
            GENERIC MAP(lpm_width => 32)
                PORT MAP(data => inputs,
                clock => clk,q => outputs);
END;

TESTDFF的模块如下图所示:

1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sr_shirui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值