END ENTITY jfq; ARCHITECTURE art OF jfq IS
SIGNAL aa2,aa1,aa0,bb2,bb1,bb0: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL cc2,cc1,cc0,dd2,dd1,dd0: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
PROCESS(RST,ADD,CHOS) IS
VARIABLE points_a2,points_a1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE points_b2,points_b1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE points_c2,points_c1: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE points_d2,points_d1: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
IF(ADD'EVENT AND ADD='1') THEN IF RST='1'THEN
POINTS_A2:=\POINTS_B2:=\POINTS_C2:=\POINTS_D2:=\ELSIF CHOS=\IF POINTS_A1=\POINTS_A1:=\IF POINTS_A2=\POINTS_A2:=\ELSE
POINTS_A2:=POINTS_A2+'1'; END IF; ELSE
POINTS_A1:=POINTS_A1+'1';
AA2<=points_A2;AA1<= points_A1;AA0<=\PP2<=AA2;PP1<=AA1;PP0<=AA0; END IF;
ELSIF CHOS=\IF POINTS_B1=\POINTS_B1:=\IF POINTS_B2=\POINTS_B2:=\ELSE
POINTS_B2:=POINTS_B2+'1'; END IF; ELSE
POINTS_B1:=POINTS_B1+'1';
BB2<= points_B2;BB1<= points_B1;BB0<=\PP2<=BB2;PP1<=BB1;PP0<=BB0;
10
END IF;
ELSIF CHOS=\IF POINTS_C1=\POINTS_C1:=\IF POINTS_C2=\POINTS_C2:=\ELSE
POINTS_C2:=POINTS_C2+'1';
CC2<= points_C2;CC1<= points_C1;CC0<=\PP2<=CC2;PP1<=CC1;PP0<=CC0; END IF; ELSE
POINTS_C1:=POINTS_C1+'1'; END IF;
ELSIF CHOS=\IF points_D1=\Points_D1:=\ IF points_D2=\Points_D2:=\ELSE
Points_D2:=points_D2+'1'; END IF; ELSE
Points_D1:=points_D1+'1';
DD2<= points_D2;DD1<= points_D1;DD0<=\ PP2<=DD2;PP1<=DD1;PP0<=DD0; END IF; END IF; END IF; END PROCESS;
END ARCHITECTURE art;
图3.1 记分模块(jfq)仿真波形
11
2、 记分功能 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY jsq IS
PORT(clr,ldn,en,CLK: IN STD_LOGIC; TA,Tb: IN STD_LOGIC;
Qa: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); Qb: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END ENTITY jsq;
ARCHITECTURE art OF jsq IS
Signal da: STD_LOGIC_VECTOR (3 DOWNTO 0); Signal db: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
PROCESS (ta,tb,clr) IS BEGIN
IF clr='1' THEN Da<=\db<=\ ELSE
IF ta='1' THEN
da<=da+'1'; END IF; IF tb='1' THEN
db<=db+'1'; END IF; END IF;
END PROCESS; PROCESS (CLK) IS
variable tmpa: STD_LOGIC_VECTOR (3 DOWNTO 0); variable tmpb: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
IF clr='1' THEN tmpa:=\ ELSIF CLK'event and CLK='1' THEN IF ldn='1' THEN tmpa:=da;tmpb:=db; ELSIF en='1' THEN IF tmpa=\THEN tmpa:=\
IF tmpb=\THEN tmpb:=\ELSE tmpb:=tmpb-1; END IF;
12
ELSE tmpa:=tmpa-1; END IF; END IF; END IF;
qa<=tmpa; qb<=tmpb; END PROCESS;
END ARCHITECTURE art;
图3.2 计时模块(jsq)仿真波形
将程序下载到芯片
FLEX—EPF10LC84-4
上,引脚图如下
13
七、器件编程与下载
将编译好的模块程序下载到CPLD中(注:device选取要与硬件对应,否则会导致实验失败),连线做硬件实验。 五、性能测试与分析
按下RST键清零,按下s键,观察数码管是否开始倒计时,扬声器是否发出报警声,按下s0,观察数码管是否显示1和抢答的时间,再按s1,s2.s3均不改变显示,按下RST键,观察是否清零,再按s键,不按别的,直到计时时间到,观察是否显示00,扬声器是否发出报警。
14
心得体会
通过这次对抢答器的设计与实践,让我了解了设计的程序,也让我了解了关于抢答器的基本原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。本实验通过EDA软件muxlus2的实现,让我对VHDL语言有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
特别是当每一个子模块编写调试成功时,心里特别的高兴。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
【参考文献】
[1]、黄仁欣:《EDA技术实用教程》,清华大学出版社
[2] 、李国洪,沈明山:《可编程逻辑器件EDA技术与实践》,机械工业出版社 [3]、江国强:《EDA技术习题与实验》,电子工业出版社
15