vhdl五人表决器实验.docx
《vhdl五人表决器实验.docx》由会员分享,可在线阅读,更多相关《vhdl五人表决器实验.docx(10页珍藏版)》请在冰豆网上搜索。
vhdl五人表决器实验
学生实验报告
实验课名称:
VHDL硬件描述语言
实验项目名称:
五人表决器
专业名称:
电子科学与技术
班级:
***
学号:
***
学生姓名:
***
教师姓名:
***
__2020__年_11_月_06_日
组别_____________________同组同学_______________________
实验日期_____年___月___日实验室名称______________成绩_____
一、实验名称:
五人表决器
二、实验目的与要求:
实验目的:
设计一个五人表决器,掌握异步清零以及锁存器的工作机制,掌握QuartusII软件的使用方法以及GW48型SOPC开发平台中的输入输出模式配置方法。
实验要求:
通过VHDL编程,实现一个五人表决器,要求有5个表决输入端、1个清零端、1个锁存端、表决结果显示端,具体接口说明如下图所示:
v_in:
表决信号输入端,高电平为赞成,低电平为反对;
lock:
判决锁存信号,上升沿表决结束,锁存表决输入信号,并计算输出表决信息;
clr:
清零信号,高电平有效,进入新的一次表决过程;
v_over:
表决结束信号,高电平有效,清零信号有效后,此信号为低电平。
num_agr:
BCD码输出显示表决结果中赞成的人数;
num_opp:
BCD码输出显示表决结果中反对的人数;
v_out:
对应显示每个表决信号的状态;
led_agr:
判决结果为赞成时有效;
led_opp:
判决结果为反对时有效;
首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。
在硬件实现中,要求:
1.用实验平台的拨动开关实现5人表决的输入信号(v_in):
注:
要求使用最右面5个开关。
2.用实验平台的按键实现清零(clr)和锁存(lock)信号:
注:
采用模式4的输入方式,要求使用键7实现清零(clr)、键6实现锁存。
3.用实验平台的数码管实现赞成和反对人数的显示:
注:
要求使用数码管6显示赞成票数、数码管5显示反对票数。
4.用实验平台的LED发光阵列实现表决结果和每人的表决信号:
注:
要求LED1显示判决赞成(led_agr)信号,LED8显示判决反对(led_opp)信号。
LED3、LED4、LED5同时显示判决结束信号。
LED10、LED11、LED12、LED13、LED14显示5人的表决信号。
功能具体要求:
启动后,数码管5、6分别显示“FF”字样,所有用到的数码管熄灭,5人的表决意见通过LED10~LED14分别显示,当按下lock按键后,LED10~14的状态被锁存,LED3、4、5同时点亮,此时无论如何输入表决意见LED10~14的状态都不变,同时计算出来赞成的和反对的人数,并分别用数码管5、6显示出来,通过LED1和LED8显示出来最终判决的表决结果(判决赞成:
LED1亮;判决反对:
LED8亮)。
此时用户按下清除键clr(按键7)后,系统又恢复成为刚启动状态。
三、实验内容:
◆新建工程:
1、打开Quartus,新建工程,选择好路径,工程顶层名为vote5;
2、新建工程,如果包含已编好的文件则可以添加,如果无则可以略过;
3、选择我们的器件信息:
4、单击Next>,指定第三方工具,这里我们不指定第三方EDA工具,单击Next>后结束工程建立。
◆建立编译VHDL文件:
1单击File\New菜单项,选择弹出窗口中的VHDLFile项,单击OK按钮以建立打开空的VHDL文件,并以工程顶层文件名保存。
型号为:
EP2C36F484C8
2、输入源代码完后单击Processing\StartCompilation开始编译,并修改其中的错误直到没有为止。
◆建立矢量波形文件
1、单击File\New命令,选择其中的VectorWaveformFile项,点击OK建立空的波形文件,打开矢量波形文件编辑窗口;
2、双击窗口左边空白区域,打开InsertNodeorBus对话框;
3、单击NodeFinder…按钮,打开以下对话框,选择Filter下拉列表中的Pins:
all,并点击List按酒以列出所有的端口,通过>>按钮把这些端口加入到右面的窗口中,单击OK完成端口的添加;
4、回到波形编辑窗口,对所有输入端口设置输入波形,具体可以通过左边的工具栏,或通过对信号单击鼠标右键的弹出式菜单中完成操作,最后保存次波形文件。
◆进行仿真:
1、单击Assignments\Settings,Simulationmode设置为Functional,即功能仿真。
指定仿真波形文件后单击OK完成设置;
2、单击Processing\GenerateFunctionalSimulationNetlist以获得功能仿真网络表;
3、单击Processing\StartSimulation完成功能仿真。
4、如果功能仿真无误后进行时序仿真:
单击Assignments\Settings,在弹出对话框中Simulationmode设置为Timing,即时序仿真。
指定仿真波形文件后单击OK完成设置。
5、单击Processing\StartSimulation,完成时序仿真。
6、如果时序仿真也没错即可下载工作了。
四、实验条件:
1.WindowsXP操作系统
2.QuartusIIEDA开发系统
3.杭州康芯SOPC硬件开发平台
五、实验原理:
开始
对各个变量进行初始化
Clr=‘1’
?
对各个变量初始化,进行归为
Lock锁定?
不进行计算等
对输出进行锁定,并且计算各个输出的值
结束
Y
Y
N
N
本实验重点是锁存的概念。
六、源代码:
libraryieee;
usevote5is
port(clr,lock:
instd_logic;
v_in:
instd_logic_vector(4downto0);
led_opp,led_agr:
outstd_logic;
v_over:
outstd_logic_vector(2downto0);
num_agr,num_opp:
outstd_logic_vector(3downto0);
v_out:
outstd_logic_vector(4downto0));
endentity;
architecturewenofvote5is
signalcount_temp:
std_logic_vector(4downto0);
begin
process(clr,lock,v_in)is
variablec1,c2:
integer:
=0;
begin
count_temp<=v_in;
if(clr='1')then
-----------------------初始化------------------------
v_over<="000";
led_opp<='0';
led_agr<='0';
num_agr<="1111";
num_opp<="1111";
v_over<="000";
v_out<="00000";
c1:
=0;
c2:
=0;
else
if(lock'eventandlock='1')then
-----------------------锁存模块------------------------
v_over<="111";
v_out<=count_temp;
foriin0to4loop
if(v_in(i)='1')then
c1:
=c1+1;
endif;
endloop;
foriin0to4loop
if(v_in(i)='0')then
c2:
=c2+1;
endif;
endloop;
if(c1>c2)then
led_agr<='1';
led_opp<='0';
else
led_agr<='0';
led_opp<='1';
endif;
num_agr<=conv_std_logic_vector(c1,4);
num_opp<=conv_std_logic_vector(c2,4);
endif;
endif;
endprocess;
endarchitecturewen;
七、实验结果与分析:
1、功能仿真:
2、时序仿真:
总结分析:
经功能仿真,波形符合要求,然后经过时序仿真,虽有些噪声,但结果还是符合要求的,所以可以下载到芯片里进行实物仿真验证了。
3、下载后实物操作:
实验1现象
实验2现象:
八、讨论和回答问题及体会:
1、这个程序的编写有点难度,所以写的时候错误百出,但我们是要有耐心的;
2、关于锁存的概念比较模糊,在书写表达时出了些问题,老是达不到效果;
3、后来求助于老师,经老师指点,引入一状态变量,用来控制数据的传输与锁存;
4、这次代码的书写是即使的,显然之前高估了自己的能力,只是看了一下,大概规整了一下思路而已;
5、通过这次的实验,我了解到有的事并不像你想象的那样简单,但我们也不应该就因此而否定自己,而是要找出不足,并努力弥补;
6、通过做实验,发现了自己好多的错误的语法知识,确实应该通过实验好好练习纠正一番。