资源描述
数字逻辑
实验指导书
目 录
前 言 1
实验一 通过3-8译码器实例学习Quartus Prime 3
实验二 4选1多路选择器设计 19
实验三 异步清零和同步使能加法计数器设计 21
实验四 八位七段数码管显示电路的设计 23
实验五 整数分频器的设计 26
实验六 加减法运算器设计 29
实验七 状态机设计 32
实验八 设计七人表决器 38
实验九 设计四人抢答器 40
实验十 可控脉冲发生器的设计 43
实验一 通过3-8译码器实例学习Quartus
一、 实验目的
1、 通过简朴的3-8译码器的设计,掌握组合逻辑电路的设计方法。
2、 初步掌握Quartus软件使用方法和设计流程。
3、 掌握组合逻辑电路的静态测试方法。
4、 掌握远程云端硬件实验平台的使用。
二、 实验原理
3-8译码器顾名思义三输入,八输出。当输入信号按二进制方式的表达值为N时,标号为N的输出端输出高电平表达有信号产生,而其它则为低电平表达无信号产生。由于三个输入端能产生的组合状态有八种,即二进制0~7,所以输出端在每种组合中仅有一位为高电平。其真值表下表所示
输入
输出
a[2]
a[1]
a[0]
y7
y6
y5
y4
y3
y2
y1
y0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
译码器不需要像编码器那样用一个输出端指示输出是否有效。但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表达无任何信号。本例设计中没有考虑使能输入端,读者自己设计时可以考虑加入使能输入端时,程序如何设计。
三、 实验内容
本实验通过VHDL实现一个3—8译码器功能模块,通过改变输入a[2..0]的值,从而改变输出y0—y7的数值。
实验中信号与管脚连接见下表
信号名称
FPGA I/O名称
功能说明
a[0]
Pin_P9
3位输入
a[1]
Pin_R9
a[2]
Pin_T9
y0
Pin_A3
8位输出
y1
Pin_B4
y2
Pin_A4
y3
Pin_B5
y4
Pin_A5
y5
Pin_C6
y6
Pin_B6
y7
Pin_A6
四、 实验环节
下面将通过这个实验,向读者介绍在Quartus软件下项目文献的生成、编译、管脚分派以及时序仿真等的操作过程。(本实验指导书使用Quartus Prime 17.1 Lite 版本)
1. 建立工程
1)选择开始菜单下或者桌面上的Quartus图标, 运营Quartus软件,进入下图所示界面。
选择软件中的菜单File>New或者界面中的New 图标,选择新建New Quartus Prime Project,进入新建工程对话框。
3) 点击NEXT进入工程设定对话框如下图所示。第一个输入框为工程工作文献夹地址输入框,设定好后所有工程相关文献将统一存放在该文献夹下;第二个输入框为工程名输入框;第三个输入框为该工程的顶层文献名输入框。
本例中工程文献夹名、工程名、顶层文献名都为decoder38。
4) 点击NEXT,进入工程类型对话框,选择Empty project。
5) 点击NEXT,进入工程文献对话框。在该界面下我们可以添加工程所需的文献,这里由于是新建工程故不添加任何文献。
6) 点击NEXT,进入器件选择对话框,这里我们选择Family>CycloneⅣ E;Packege>FBGA;Pin count>256然后选择下方芯片EP4CE10F17C8即FPGA平台主芯片。
7) 点击NEXT进入EDA工具设立对话框,如下图所示,在这里我们将仿真工具设立为ModelSim-Altera,即选择Simulation>ModelSim-Altera>VHDL。
8) 点击NEXT进入工程信息汇总对话框。该对话框汇总了本工程中所有的设立信息,确认无误后点击NEXT进入工程编辑界面。
2、 Quartus Prime开发环境简介
建立工程后就可以进入Quartus Prime集成开发环境(如下图所示)
从图中可以看出Quartus Prime集成开发环境大体可以分为4个窗口,最左上角为工程管理窗口,涉及原代码文献、约束文献和仿真测试文献的管理;左中窗口为工程流程向导,涵盖FPGA开发过程中分析、综合、管脚分派、布局布线及静态时序分析的整个流程;右边主窗口为各种文献和报表的打开窗口;最下方窗口为工程信息框,显示综合过程信息等内容。有了以上基本结识,下面我们就来实现本实验指导书的第一个实验3-8译码器。
3、工程实现
1)如下图所示,点击菜单 File>New,在新建菜单下选择VHDL File。
2)在新建的文献内输入相应的设计代码,代码如下:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY decoder38 IS
PORT (a : IN std_logic_vector(2 DOWNTO 0);
y : OUT std_logic_vector(7 DOWNTO 0));
END decoder38;
ARCHITECTURE rtl OF decoder38 IS
BEGIN
PROCESS (a)
BEGIN
CASE a IS
WHEN "000" => y <= "00000001";
WHEN "001" => y <= "00000010";
WHEN "010" => y <= "00000100";
WHEN "011" => y <= "00001000";
WHEN "100" => y <= "00010000";
WHEN "101" => y <= "00100000";
WHEN "110" => y <= "01000000";
WHEN "111" => y <= "10000000";
WHEN OTHERS => y <= "00000000";
END CASE;
END PROCESS;
END rtl;
3) 代码输入完毕确认无误后,选择菜单Processing/Analyze Current File或点击编辑窗口中工具栏图标,进行HDL代码语法分析。
4) 语法分析无误后,选择Processing/Start/Start Analysis & Synthesis,或者按下快捷键Ctrl+K,或者点击工具栏图标,进行HDL文献的分析和综合。
5) 分析和综合完毕后就可以对工程进行管脚分派。可以运用 Quartus Prime 中Pin Planner进行可视化的管脚分派。点击上方工具条中的Pin Planner图标,或者选择菜单栏中的Assignments>Pin Planner。
此时应看到如下界面
在界面下方的窗口中的输入输出信号后,输入相应的 FPGA 管脚标号(或将信号拖拽到上方的 Package 图中相应的管脚上),并指定 I/O输入输出标准。(远程云端硬件实验平台I/O电压电流均为3.3V 2mA)。
管脚设立完毕后如图,
关闭Pin Planner即完毕管脚分派
6) 管脚约束完毕后,就可以指定下载所需文献的类型。远程云端硬件实验平台下载需要.rbf类型的下载文献,该文献的生成需要在工程中设定后才可由Quartus Prime软件自动产生。具体方法如下,一方面点击菜单栏中的Assignments>Device,选择Device and Pin Options。
然后选择Programming Files,在右侧对话框中勾选Raw Binary File(.rbf),点击OK确认。此时工程全编译后Quartus软件即会自动生成远程云端实验平台所需的.rbf下载文献。
7) 点击菜单栏中的Processing>Start Compilation或者图标栏中的完毕整个工程的编译。
8) 假如将文献下载到本地开发板,则点击菜单栏中Tools>Programmer或者图标栏的Programmer,进入硬件编程管理界面。将Altera USB Blaster的USB端连接电脑,JTAG端连接开发板JTAG口,打开开发板电源。将Hardware Setup选择成USB-Blaster,Mode选择成JTAG,同时选择工程文献夹下的.sof文献作为写入文献。点击 Start,将.sof文献下载到开发板上的 FPGA 中,本工程完毕。
五、实验报告
1、进一步熟悉和理解Quartus Prime软件的使用方法和工程实现的流程。
2、仿照3-8译码器实现数字电路中最基本的与门、或门、非门及比较器、多路选择器等基本逻辑电路的VHDL代码。
实验二 4选1多路选择器设计
一、 实验目的
1、 了解多路选择器设计的原理。
2、 进一步熟悉Quartus Prime软件的使用方法和VHDL输入的全过程。
3、 进一步掌握实验系统的使用。
二、 实验原理
多路选择器是数字系统设计中经常使用的模块,其特点是在选择信号控制下,输出端与拟定的数据通道联通,并随数据通道的信号变化而变化。在本实验中,我们将实现一个4选1多路选择器,因此将有一个2位的选择信号,4个数据输入信号和1个数据输出信号。
三、 实验内容
本实验规定通过VHDL实现一个4选1多路选择器。通过选择信号sel[1..0]实现数据输出通路dataout在不同的数据输入通路datain0—datain3之间切换,并观测输出信号随输入信号的变化而变化。
实验中信号与管脚连接如下表
信号名称
FPGA I/O名称
功能说明
sel[0]
Pin_P9
通路选择信号
sel[1]
Pin_R9
datain0
Pin_T9
数据输入通路
datain1
Pin_N8
datain2
Pin_P8
datain3
Pin_R8
dataout
Pin_A3
数据输出通路
四、 实验环节
1、 打开Quartus Prime软件,新建一个工程。
2、 建竣工程之后,再新建一个VHDL空白源文献。
3、 按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,读者可参照光盘中提供的示例程序。
4、 编写完VHDL程序后,保存。
5、 对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
6、 编译仿真无误后,依照拨动开关、LED与FPGA的管脚连接表进行管脚分派,然后进行综合和实现。
7、 用下载电缆通过JTAG口将相应的sof文献加载到FPGA中。观测实验结果是否与自己的编程思想一致。
五、 实验报告
1、 绘出仿真波形,并作说明。
2、 进一步熟悉Quartus Prime软件
3、 尝试编写VHDL程序,实现多路分派器功能。
4、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
实验三 异步清零和同步使能加法计数器设计
一、 实验目的
1、 了解二进制计数器的工作原理。
2、 进一步熟悉Quartus Prime软件的使用方法和VHDL输入。
3、 理解时钟在时序逻辑电路中的作用。
二、 实验原理
二进制计数器是应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:
在时钟上升沿的情况下,检测使能端是否允许计数,假如允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。在计数过程中检测异步复位信号是否有效(低电平有效),当复位信号起作用时,计数值立即清零,继续进行检测和计数。其工作时序如图所示:
三、 实验内容
本实验规定完毕的任务是在时钟信号的作用下,通过使能信号和异步复位信号来完毕加法计数器的计数。当使能信号有效时,计数器从0开始计数,最大计数到9后返回到0重新开始计数;当异步复位信号有效时,计数器立即清零,直到复位信号撤除后计数器开始正常工作。
实验中信号与管脚连接如下表
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
异步复位
en
Pin_P9
同步使能
cnt[0]
Pin_A3
计数器输出
cnt[1]
Pin_B4
cnt[2]
Pin_A4
cnt[3]
Pin_B5
四、 实验报告
1、 绘出仿真波形,并作说明。
2、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
3、 说明异步复位和同步复位的区别以及各自的优缺陷。
实验四 八位七段数码管显示电路的设计
一、 实验目的
1、 了解数码管的工作原理。
2、 学习七段数码管显示译码器的设计。
3、 学习数码管扫描显示的原理。
二、 实验原理
七段数码管是电子开发过程中常用的输出显示设备。本实验中中使用的是一个八位一体、共阴极型七段数码管。其单个静态数码管如下图所示。
由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。八位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,当位选信号为低电平时该位数码管被选中。同一时刻只有一位数码管被选中并点亮,下一时刻则切换到相邻位数码管,但由于切换速度不久,在视觉暂留效应的帮助下,我们看到的就是8位数码管被整体点亮。
三、 实验内容
本实验规定完毕的任务是在时钟信号的作用下,将输入的二进制数值在八位数码管上显示。实验中选择1KHZ作为扫描时钟,输入一个4位二进制数值,译码为相应的段码后,在位选扫描信号的帮助下,在八位数码管上显示其十六进制的值。
实验中信号与FPGA的管脚连接见下表。
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
系统复位
seg_a
Pin_A3
段选信号
seg_b
Pin_B4
seg_c
Pin_A4
seg_d
Pin_B5
seg_e
Pin_A5
seg_f
Pin_C6
seg_g
Pin_B6
seg_dp
Pin_A6
del[0]
Pin_B7
位选信号
del[1]
Pin_A7
del[2]
Pin_C8
del[3]
Pin_B8
del[4]
Pin_A8
del[5]
Pin_C9
del[6]
Pin_B9
del[7]
Pin_A9
data[0]
Pin_P9
四位二进制数值
data[1]
Pin_R9
data[2]
Pin_T9
data[3]
Pin_N8
四、 实验报告
1、 绘出仿真波形,并作说明。
2、 阐明扫描时钟是如何工作的,改变扫描时钟会有什么变化。
3、 实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
4、 设计实验让八位数码管不同位显示不同的数字
实验五 整数分频器的设计
一、 实验目的
1、 学习整数分频器中偶数分频和奇数分频的电路的设计和实现方法。
2、 了解和掌握分频电路实现的方法。
3、 将实现的模块打包作为后续实验的IP核使用
二、 实验原理
整数分频器是数字电路中最常用的电路模块,其作用是对时钟信号进行降频使用。整数分频中又分为偶数分频和奇数分频,顾名思义分频常数为偶数和奇数(分频常数=系统输入频率/系统输出频率)。其中偶分频相对简朴,奇数分频相对复杂,实现的原理都是运用计数器对输入时钟进行计数,当计到指定数值时将输出时钟信号取反,同时将计数器清零从新开始计数,从而实现系统时钟的降频使用。
三、 实验内容
本实验规定完毕的任务是对时钟信号完毕偶数分频和奇数分频,并通过设立不同的分频参数,输出不同频率的时钟信号,同时仿真查看实验效果。然后将分频后的时钟分派到观测测试引脚用示波器观测输出结果。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
系统复位
clkout
Pin_A3
分频时钟
四、 实验设计思想
偶分频:以4分频为例,当分频常数N=4时,参数FULL=1,即分频计数器从0开始每计到1时,分频输出时钟翻转一次,其时序如下图,从而达成了4分频的效果
奇分频:以5分频为例,当分频常数N=5时,参数FULL0=1、FULL1=2,时钟信号clk0以系统时钟上升沿为触发点,先计数到1翻转一次,在计数到2翻转一次,实现一个占空比非50%的5分频时钟;时钟信号clk1则以系统时钟下降沿为触发点,先计数到1翻转一次,在计数到2翻转一次,实现一个占空比非50%的5分频时钟。因clk0和clk1相位相差半个系统时钟,将两者相与可以得到占空比为50%的5分频时钟信号。
再用一个块生成语句将两种情况结合,则可以得到一个任意整数分频模块。模块可以自动判断奇偶分频并生成相应电路。
实验报告
1、 输入不同的分频值绘出仿真波形和观测结果,并作说明。
2、 将实验原理、设计过程、编译仿真波形和观测结果记录下来。
实验六 加减法运算器设计
一、 实验目的
1. 加深对二进制加减法的结识。
2. 了解用VHDL语言实现运算器器的过程。
3. 理解二进制转BCD码算法。
二、 实验原理
实验中为两个4位二进制数相加减,同时有一个加减法选择信号,当信号为1时,输出相加结果,否则输出相减结果。同时对结果的5位二进制数转换为相应BCD码以适应人们十进制计数的习惯。
这里重点要理解二进制数转换BCD码的算法,即大四加三算法。其转换方法如下:
1. 一方面将5位二进制数高位加上8位0,组成一个13位运算数;
2. 将运算数左移3位,同时低位补零。
3. 判断移位后的运算数的8~5位是否大于4,假如大于4则将该四位数加上3,否则不变。
4. 将解决后的运算数再左移1位,同时低位补零。
5. 再判断移位后的运算数的8~5位是否大于4,假如大于4则将该四位数加上3,否则不变。
6. 然后将解决后的运算数再左移1位,同时低位补零。此时运算数的高8位即是该数所相应的BCD码。
以转换二进制数5’b11101为例,其所相应的十进制数为’d29,那么它所相应的BCD码为0010_1001。转换过程如下表:
说明
11101
运算数扩展
0000
0000
11101
左移三位
0000
0111
01000
大四加三
0000
1010
01000
左移一位
0001
0100
10000
大四加三
0001
0100
10000
左移一位
0010
1001
00000
三、 实验内容
本实验的任务是实现一个简朴的4位运算器,包含加法和减法运算,通过选择信号选择是将两数值相加还是相减,同时输出结果的BCD码。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
sel
Pin_P9
运算选择
dataA[0]
Pin_T9
运算数A
dataA[1]
Pin_N8
dataA[2]
Pin_P8
dataA[3]
Pin_R8
dataB[0]
Pin_T8
运算数B
dataB[1]
Pin_R7
dataB[2]
Pin_T7
dataB[3]
Pin_N6
dataout[0]
Pin_A3
运算结果
dataout[1]
Pin_B4
dataout[2]
Pin_A4
dataout[3]
Pin_B5
dataout[4]
Pin_A5
dataoutBCD[0]
Pin_C6
BCD码结果
dataoutBCD[1]
Pin_B6
dataoutBCD[2]
Pin_A6
dataoutBCD[3]
Pin_B7
dataoutBCD[4]
Pin_A7
dataoutBCD[5]
Pin_C8
dataoutBCD[6]
Pin_B8
dataoutBCD[7]
Pin_A8
四、 实验报告
1、 绘仿真波形,并作说明。
2、 设计实验用数码管来显示运算器的结果。
3、 设计实验实现BCD码转换为二进制数。
4、 实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
实验七 状态机设计
一、 实验目的
1. 理解什么是状态机。
2. 纯熟运用一段式、二段式、三段式实现状态机。
二、 实验原理
本实验要实现的状态机的状态转移图如下所示:
其中状态为S0到S3,根据输入信号in0到in3不同的值在各个状态之间切换,同时输出相应的数值。
下面我们来看一下什么是状态机。
状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。状态机有三个基本要素即:
l 状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。如上图中的S0到S3即为状态转移图的4个状态。
l 输出:输出指在某一个状态时特定发生的事件。如上图中的outdata,outdata的输出总是随着着状态的变化而变化。
l 输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的
状态转移较为简朴,有的状态机有输入条件,当某个输入条件存在时才干转移
到相应的状态。上图中in0到in3即为状态机的输入,状态机根据输入的不同,跳转到不同的状态。
根据状态机的输出是否与输入条件相关,又可将状态机分为两大类:摩尔( Moore)型和米勒( Mealy)型。摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关;米勒型状态机的输出不仅依赖于当前状态,并且取决于该状态的输入条件。他们的区别可以见下图:
本实验的状态机的输出仅取决于当前状态,那么这显然是一个摩尔型状态机。
用VHDL实现一个状态机,有三种描述方式,即一段式、二段式和三段式。
l 一段式状态机:将整个状态机写到 1 个 always 模块里面,在该模块中即描述状态转移,又描述状态的输入和输出。其电路结构可以由下图表达:
l 二段式状态机:一个 always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及当前状态输出。其电路结构可以由下图表达:
l 三段式状态机:一个 always模块采用同步时序描述状态转移;第二个采用组合逻辑判断状态转移条件,描述状态转移规律;第三个 always 模块使用同步时序电路描述每个状态的输出。其电路结构可以由下图表达:
一般而言,推荐的 FSM 描述方法是后两种,即两段式和三段式 FSM 描述方法。其因素为: FSM 和其他设计同样,最佳使用同步时序方式设计,以提高设计的稳定性,消除毛刺。状态机实现后,一般来说,状态转移部分是同步时序电路而状态的转移条件的判断是组合逻辑。两段式之所以比一段式编码合理,就在于两段式编码将同步时序和组合逻辑分别放到不同的 always 程序块中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。而一段式 FSM 描述不利于时序约束、功能更改、调试等,并且不能很好的表达米勒 FSM 的输出,容易写出 Latches,导致逻辑功能错误。
在一般两段式描述中,为了便于描述当前状态的输出,很多设计者习惯将当前状态的输出用组合逻辑实现。但是这种组合逻辑仍然有产生毛刺的也许性,并且不利于约束,不利于综合器和布局布线器实现高性能的设计。因此假如设计运营额外的一个时钟节拍的插入( latency),则规定尽量对状态机的输出用寄存器寄存一拍。但是很多实际情况不允许插入一个寄存节拍,此时则可以通过三段式描述方法进行解决。三段式与两段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。
三、 实验内容
本实验的任务是实现一个简朴的4状态状态机,根据输入信号in0—in3的不同值在各个状态之间切换,同时输出相应的数值。
规定分别由一段式、二段式和三段式状态机实现同一个状态转移图。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
系统复位
in0
Pin_P9
输入信号
in1
Pin_R9
in2
Pin_T9
in3
Pin_N8
outdata[0]
Pin_A3
状态输出
outdata[1]
Pin_B4
outdata[2]
Pin_A4
outdata[3]
Pin_B5
四、 实验报告
1. 绘仿真波形,并作说明。
2. 说明不同形式状态机的差异和优劣性。
3. 实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
实验八 设计七人表决器
一、 实验目的
1、 熟悉七人表决器的工作原理。
2、 进一步了解实验系统的硬件结构。
二、 实验原理
所谓表决器就是对于一个决议,由多个人投票,假如批准的票数过半,就认为此决议可行;否则假如否决的票数过半,则认为此决议无效。
七人表决器顾名思义就是由七个人来投票,当批准的票数大于或者等于4时,则认为批准;反之,当否决的票数大于或者等于4时,则认为不批准。实验中用7个输入来表达七个人,当相应输入为‘1’时,表达此人批准,否则表达此人反对。若表决的结果为通过,则pass信号为1;否则,pass信号为0。同时,显示通过的票数。
三、 实验内容
本实验实现一个简朴的七人表决器的功能。用7位输入代表7个人,结果显示通过与否,并显示批准的人数。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
vote[0]
Pin_P9
7人投票信号
vote[1]
Pin_R9
vote[2]
Pin_T9
vote[3]
Pin_N8
vote[4]
Pin_P8
vote[5]
Pin_R8
vote[6]
Pin_T8
pass
Pin_A3
通过信号
sum[0]
Pin_B4
批准人数
sum[1]
Pin_A4
sum[2]
Pin_B5
四、 实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
3、试在此实验的基础上增长一个表决的时间,只的在这一时间内的表决结果有效。
4、用数码管显示通过的票数。
实验九 设计四人抢答器
一、 实验目的
1、熟悉四人抢答器的工作原理。
2、加深对VHDL语言的理解。
3、掌握EDA开发的基本流程。
二、 实验原理
抢答器在各类竞赛性质的场合得到了广泛的应用,它的出现,消除了本来由于人眼的误差而未能对的判断最先抢答的人的情况。
抢答器的原理比较简朴,一方面必须设立一个抢答允许标志位,目的就是为了允许或者严禁抢答者按按钮;假如抢答允许位有效,那么第一个抢答者按下的按钮就将其清除,同时记录按钮的序号,也就是相应的按按钮的人,这样做的目的是为了严禁后面再有人按下按钮的情况。总的说来,抢答器的实现就是在抢答允许位有效后,第一个按下按钮的人将其清除以严禁再有按钮按下,同时记录清楚抢答允许位的按钮的序号并显示出来,这就是抢答器的实现原理。
三、 实验内容
本实验的任务是设计一个四人抢答器,具体规定为:按下开始按键一次,允许一次抢答,这时4个抢答信号中第一个按下的按键将抢答允许信号清除,同时点亮相应指示灯,用来表达相应的按键抢答成功,此时其他按键再按下均无效。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
系统复位
start
Pin_P9
抢答开始信号
answer[0]
Pin_R9
抢答信号
answer[1]
Pin_T9
answer[2]
Pin_N8
answer[3]
Pin_P8
start_flag
Pin_A3
抢答开始指示信号
answer_num[0]
Pin_B4
抢中选手指示
answer_num[1]
Pin_A4
answer_num[2]
Pin_B5
answer_num[3]
Pin_A5
四、 实验报告
1、 绘出仿真波形,并作说明。
2、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
实验十 可控脉冲发生器的设计
一、 实验目的
1、 了解可控脉冲发生器的实现机理。
2、 学会用示波器观测FPGA产生的信号。
3、 学习用VHDL编写复杂功能的代码。
二、 实验原理
脉冲发生器就是要产生一个脉冲波形,而可控脉冲发生器则是要产生一个周期和占空比可变的脉冲波形。可控脉冲发生器的实现原理比较简朴,可以简朴的理解为一个计数器对输入的时钟信号进行分频的过程。通过改变计数器的上限值来达成改变周期的目的,通过改变电平翻转的阈值来达成改变占空比的目的。下面举个简朴的例子来说明其工作原理。
假如有一个计数器T对时钟分频,其计数的范围是从0~N,另取一个
M(0≤M≤N),若输出为Q,那么Q只要满足条件
时,通过改变N值,即可改变输出的脉冲波的周期;改变M值,即可改变脉冲波的占空比。这样输出的脉冲波的周期和占空比分别为:
三、 实验内容
本实验的任务就是要设计一个可控的脉冲发生器,规定输出的脉冲波的周期和占空比都可变。具体的实验过程中,时钟信号选用时钟模块产生的1kHz时钟,然后再用add和sub信号来控制脉冲波的周期与占空比。
实验中信号与fpga连接如下:
信号名称
FPGA I/O名称
功能说明
clk
Pin_E1
系统时钟
rst_n
Pin_C2
系统复位
add_n
Pin_P9
N值控制信号
sub_n
Pin_R9
add_m
Pin_T9
M值控制信号
sub_m
Pin_N8
pulse
Pin_B11
脉冲信号
cnt_n[0]
Pin_A3
N值
cnt_n[1]
Pin_B4
cnt_n[2]
Pin_A4
cnt_n[3]
Pin_B5
cnt_m[0]
Pin_A5
M值
cnt_m[1]
Pin_C6
cnt_m[2]
Pin_B6
cnt_m[3]
Pin_A6
四、 实验报告
1、 绘出仿真波形,并作说明。
2、 在实验的基础上重新设计,使程序改变频率的时候不会影响占空比的改变。
3、 将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
展开阅读全文