资源描述
《FPGA系统设计与开发》
课
程
设
计
报
告
题 目: 七人表决器
专 业: 电子信息工程专业
学 号: 1340820410
姓 名: 杨彪
指导老师: 聂小燕
一、实验目的
1、 熟悉 VHDL 的编程。
2、 熟悉七人表决器的工作原理。
3、 进一步了解实验系统的硬件结构。
二、实验原理
所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。
七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。实验中用7个拨动开关来表示七个人,分别用7个LED等来反应每个人的决定,当对应的拨动开关输入为‘1’时,表示此人同意,LED灯点亮;否则若拨动开关输入为‘0’,则表示此人反对,LED灯不亮。表决的结果也用一个LED表示,若表决的结果为同意,则 LED 被点亮;否则,如果表决的结果为反对,则 LED 不会被点亮。同时,数码管上显示通过的票数。
三、实验内容
本实验就是利用实验系统中的拨动开关模块和LED模块以及数码管模块来 实现一个简单的七人表决器的功能。拨动开关模块中的K1~K7表示七个人,当拨动开关输入为‘1’时,表示对应的人投同意票,对应的LED灯亮;否则当拨动开关输入为‘0’ 时,表示对应的人投反对票,对应的LED灯不亮;LED 模块中 LED1 表示七人表决的结果,当 LED1 点亮时,表示此行为通过表决;否则当 LED1 熄灭时,表示此行为未通过表决。同时通过的票数在数码管上显示出来。
四、实验步骤
1、 打开 QUARTUSII 软件,新建一个工程。
2、 建完工程之后,再新建一个 VHDL File,打开 VHDL 编辑器对话框。
3、 按照实验原理和自己的想法,在 VHDL 编辑窗口编写 VHDL 程序。
4、 编写完 VHDL 程序后,保存起来,并建立工程。
5、 对自己编写的 VHDL 程序进行编译并仿真,对程序的错误进行修改。
6、 编译仿真无误后,依照拨动开关、LED、数码管与 FPGA的管脚连接表或参照附录进行管脚分配。表 1是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
7、下载程序到试验箱验证实验的正确性,观察现象,对错误的地方进行改正。
表 1程序的管脚分配表
端口名
使用模块信号
对应 FPGA 管脚
说 明
CLK
时钟
C13
CLR
复位
P25
低电平有效
K1
拨动开关 K1
H8
七位投票人的表决器
K2
拨动开关 K2
J8
K3
拨动开关 K3
J9
K4
拨动开关 K4
A4
K5
拨动开关 K5
B4
K6
拨动开关 K6
A5
K7
拨动开关 K7
B5
Result
LED 模块 LED1
G13
表决结果亮为通过
LED0
LED 模块 LED2
G15
每个人投票的结果
LED1
LED 模块 LED3
G14
LED2
LED 模块 LED4
H12
LED3
LED 模块 LED5
H11
LED4
LED 模块 LED6
J10
LED5
LED 模块 LED7
L9
LED6
LED 模块 LED8
H10
LEDAG0
数码管模块 A 段
F13
表决通过的票数
LEDAG1
数码管模块 B 段
F14
LEDAG2
数码管模块 C 段
F15
LEDAG3
数码管模块 D 段
E15
LEDAG4
数码管模块 E 段
F16
LEDAG5
数码管模块 F 段
F17
LEDAG6
数码管模块 G 段
E18
五、七人表决器VHDL程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY BJQ IS
PORT(CLK,CLR:IN STD_LOGIC; ----CLK为系统时钟,CLR为复位按
K:IN STD_LOGIC_VECTOR(6 DOWNTO 0); ----拨动开关输入表决
Result:OUT STD_LOGIC; ----显示表决是否通过
LEDAG,LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); ----LEDAG为七段数码管, 用来显示同意的人数;LED为七个指示灯,用来指示投票人的个人投票结果。
END ENTITY BJQ;
ARCHITECTURE one OF BJQ IS
BEGIN
PROCESS(K)
VARIABLE shu:INTEGER; ----定义变量shu来统计同意的个数
BEGIN
IF (CLR='1') THEN ----不复位,即正常工作
LED<=K; ----将指示灯和投票人对应,即记名投票
shu:=0;
IF CLK'EVENT AND CLK='1' THEN
IF K(0)='1' THEN
shu:=shu+1;
END IF;
IF K(1)='1' THEN
shu:=shu+1;
END IF;
IF K(2)='1' THEN
shu:=shu+1;
END IF;
IF K(3)='1' THEN
shu:=shu+1;
END IF;
IF K(4)='1' THEN
shu:=shu+1;
END IF;
IF K(5)='1' THEN
shu:=shu+1;
END IF;
IF K(6)='1' THEN
shu:=shu+1;
END IF;
CASE shu iS ----指示灯显示投票结果,数码管显示同意人数
WHEN 0 =>Result<='0';
LEDAG<="0111111";
LED<=K;
WHEN 1 =>Result<='0';
LEDAG<="0000110";
LED<=K;
WHEN 2 =>Result<='0';
LEDAG<="1011011";
LED<=K;
WHEN 3 =>Result<='0';
LEDAG<="1001111";
LED<=K;
WHEN 4 =>Result<='1';
LEDAG<="1100110";
LED<=K;
WHEN 5 =>Result<='1';
LEDAG<="1101101";
LED<=K;
WHEN 6 =>Result<='1';
LEDAG<="1111101";
LED<=K;
WHEN 7 =>Result<='1';
LEDAG<="0100111";
LED<=K;
WHEN others =>Result<='0';
LEDAG<="0000000";
LED<=K;
END CASE;
END IF;
ELSE -----启动复位功能,同时复位指示灯和数码管
Result<='0';
LEDAG<="0111111";
LED<="0000000";
END IF;
END PROCESS;
END ARCHITECTURE one;
六、对VHDL 程序进行编译仿真的图形
七、管脚分配表
八、实验结果与现象
当设计文件加载到试验箱后,拨动实验系统中的拨动开关模块的 K0-K7 七位拨动开关,如果拨动开关的值为“1”即拨动开关的开关置于上端,表示此人通过表决,对应的LED(LED2到LED8显示每个人投票的结果)等被点亮,反之不然。当LED被点亮的个数大于或等于四时 LED 模块的 LED1 被点亮,否则 LED1不被点亮。同时数码管上显示通过表决的人数。
展开阅读全文