EDA课设_eda课设
EDA课设由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“eda课设”。
EDA课程设计报告
课题名称:智力竞赛抢答器
班级:11电科2班
姓名:代维宽
学号:201114580207
同组人:闻仔逊
指导老师:贾默伊
任务书
一、用VHDL运用层次化设计方法设计一个小型数字系统
题目:智力竞赛抢答器
二、说明书内容:
1.系统设计要求(功能)2.系统设计方案(包括顶层电路图)3.VHDL源程序及仿真波形图 4.课程设计注释 5.设计解释、说明 6.独特之处
三、成绩评定
1.设计内容及掌握情况
2.说明书。包括电子档(各类文件的可执行性及说明书)和纸质
3.答辩情况
目录
第一章:系统设计
1系统设计要求„„„„„„„„„„„„„„„„„„„1 2系统设计方案„„„„„„„„„„„„„„„„„„„2 第二章:VHDL原程序及仿真波形图
1、抢答启动模块„„„„„„„„„„„„„„„„„„3(1)按键识别子模块„„„„„„„„„„„„„„„„„3(2)倒计时子模块„„„„„„„„„„„„„„„„„„5
2、选手抢答模块„„„„„„„„„„„„„„„„„„7(1)单个选手按键子模块„„„„„„„„„„„„„„„7(2)判断抢答选手子模块„„„„„„„„„„„„„„„9
3、加减分模块„„„„„„„„„„„„„„„„„„„11(1)组别判断子模块„„„„„„„„„„„„„„„„„11(2)加减及寄存器子模块„„„„„„„„„„„„„„„12(3)分数选择输出模块„„„„„„„„„„„„„„„„15
4、显示模块„„„„„„„„„„„„„„„„„„„„16
5、蜂鸣器模块„„„„„„„„„„„„„„„„„„„18
第三章设计心得及总结
智力竞赛抢答器
1系统设计要求
1.设计一智力竞赛抢答器,可同时供8名选手参加比赛。2.给节目主持人设置一个控制开关,控制系统清零和抢答开始。
3.抢答器具有锁存功能和显示功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示选手编号,同时扬声器响,禁止其他选手抢答。
4.抢答器具有抢答定时功能,时间由主持人确定。5.参赛选手在设定的时间内抢答有效,定时器停止工作。
6.如果定时时间到,无人抢答,本次抢答无效,系统报警,并封锁输入电路,禁止超时抢答,定时器显示00。
7.为每组设计一个计分电路,0~999分,可加分,也可减分。
对于一个抢答器系统,可将其分为五个模块:选手抢答模块、抢答启动模块、加减分模块、显示模块、蜂鸣器控制模块。整体框图如下:
图一 总体框图
其中抢答启动模块具有启动抢答及启动定时功能,输出使能信号给选手识别模块,以及抢答剩余时间给显示模块;选手识别模块完成锁存抢答信号的功能,并输出选手号给显示模块;蜂鸣器对抢答成功以及超时鸣声报警;显示模块对输入的数据进行显示。
2系统设计方案
智力竞赛抢答器拟由单片CPLDFPGA来实现,经分析设计要求,拟定整个系统由五个单元组成,原理图如下所示:
主要VHDL源程序
1、抢答启动模块
启动模块除了有启动的功能外,还有启动定时的功能。定时时间分为5秒和20秒两种,使用两个按键对应两种限时抢答。
将本模块再划分为2个子模:一个模块完成按键识别的功能,另一模块完成倒计时功能。
1)按键识别子模块
按键的识别即对输入信号进行电平变化检测,电平发生跳变就认为是键被按下。但VHDL程序中一个结构体内不能同时对两个信号进行电平跳变的检测,所以对本模块的程序设计采用状态机来实现,并使用统一的时钟信号来扫描按键的电平状态。模块图如下:
图2 按键识别子模块
对START5和START20两个按键定义三种状态,START5按下为ST1状态,此时两个按键“START5&START20”输入电平为“01”;START20按下为ST2状态,此时电平为“10”;两个都没按下为ST0状态,此时电平为“11”。
本模块程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY START_5_20 IS PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出定时初值
S_FLAG:OUT STD_LOGIC);
--置数信号
END ENTITY;ARCHITECTURE ONE OF START_5_20 IS SIGNAL DATAIN:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);
--定义状态
SIGNAL C_ST:ST_TYPE;BEGIN
DATAIN
--两个输入信号放在一起判断 BEGIN
IF RST='0' THEN
--复位 B IF DATAIN=“01” THEN
C_ST
--输入信号为01,转ST1状态 S_FLAG
--置数信号有效 B
--定时初值“05” ELSIF DATAIN=“10” THEN
C_ST
--输入信号为10,转ST1状态
S_FLAG
--置数信号有效 B
--定时初值“20”
ELSE C_ST
END IF;
C_ST
--置数信号无效
ELSE C_ST
--按键没弹起,继续等待
END IF;
ELSE C_STIF DATAIN=“11” THEN WHEN ST2=>IF DATAIN=“11” THEN C_STC_ST
图3 按键识别模块仿真波形
2)倒计时子模块
倒计时需要1Hz的脉冲输入,每来一个上升沿,进行一次减一运算,将结果输出到TIMEB、TIMEA;置数信号LOAD输入有效,读入B、A端口的数据;输入L_CR信号与选手识别模块连接,当选手抢答成功后,L_CR信号为0,将倒计时清0.;若倒计时到,没有选手抢答,则在SR1输出1使扬声器发声。同时输出信号给选手抢答模块,禁止选手抢答。
图4倒计时模块
本模块程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DE_COUNT IS PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE TWO OF DE_COUNT IS BEGIN
PROCESS(LOAD,L_CR,RST,CLK2)VARIABLE P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF LOAD='1' THEN P1:=B;P0:=A;
--指数信号有效,将B、A值读入P1、P0 ELSIF L_CR='0' THEN
--有选手抢答成功,L_CR输入为0,定时时间清0 P1:=“0000”;P0:=“0000”;TIMEOUT
ELSIF(CLK2'EVENT AND CLK2='1')THEN
IF P0=“0000” THEN
IF P1>0 THEN P1:=P1-1;P0:=“1001”;
--若个位为0,十位减1,个位赋为9 END IF;ELSE P0:=P0-1;
--若个位不为0,个位直接减一
IF P0=“0000” AND P1=“0000” THEN TIMEOUT
--若时间到,输出锁存信号 END IF;END IF;
END IF;TIMEB
程序中,因为每次减一后的时间值需要保存,用于下次继续减一,所以程序中使用了不完整的IF语句引入寄存器,用于保存每次减一后的时间值。P1、P0定义为变量而不是信号的原因是,变量的赋值是即时的,减一后可以马上进行判断;若定义为信号,不能即时进行判断,并且减一操作后的赋值要经过一个δ延时,程序不好控制。
本模块仿真波形如图所示:
图5 倒计时模块仿真波形
用元件例化语句将以上两个子模块组合,得到整个抢答启动模块。如下图所示:
图6 由两个子模块组成抢答启动模块
两个子模块组合的程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY STARTER IS PORT(CLK1,CLK2,L_CR,RST,START5,START20:IN STD_LOGIC;
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE THREE OF STARTER IS
COMPONENT START_5_20 IS
--调用元件START_5_20声明
PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
S_FLAG:OUT STD_LOGIC);END COMPONENT;COMPONENT DE_COUNT IS
--调用元件DE_COUNT声明
PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL m,n:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL p:STD_LOGIC;
--对应图7中的中间信号 BEGIN
--按照图7将两个元件连接起来
U1:START_5_20 PORT MAP(CLK1=>CLK1,START5=>START5,START20=>START20,RST=>RST,B=>m,A=>n,S_FLAG=>p);U2:DE_COUNT PORT MAP(CLK2=>CLK2,B=>m,A=>n,LOAD=>p,RST=>RST,L_CR=>L_CR,TIMEB=>TIMEB,TIMEA=>TIMEA, TIMEOUT=>TIMEOUT,SR1=>SR1);END ARCHITECTURE;
2、选手抢答模块
在一个结构体中用8个进程同时对8个选手按键电平变化的监测是不可实现的,所以将本模块划分为两个子模块:单个选手按键模块和判断抢答选手模块。最后将8个选手按键模块和1个判断抢答选手模块连接起来,得到整个选手抢答模块。
1)单个选手按键子模块
按键输入相当于该实体的时钟信号,键被按下,等于来一个脉冲,输出信号给判断模块进行选手号的判断。只要有选手抢答成功,相关模块会输出信号使8个按键模块的LOCK信号有效,禁止其他选手抢答。如图所示。
图7 单个选手按键模
本模块程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON1 IS PORT(LOCK , BUTTON , RST :IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END ENTITY;ARCHITECTURE B1 OF BUTTON1 IS BEGIN
PROCESS(RST , BUTTON)
--使用进程时刻监测RST、BUTTON信号 BEGIN
IF RST='0' THEN
PRESSED
--复位
IF LOCK='1' THEN
--键被按下并且LOCK信号无效 PRESSED
--则输出信号给判断模块 END IF;ELSIF BUTTON'EVENT AND BUTTON='0' THEN END IF;END PROCESS;END ARCHITECTURE;
图8 倒计时模块仿真波形
2)判断抢答选手子模块
本子模块接收8个按键子模块的输出信号,如收到1号子模块输出的高电平,则输出选手号“0001”;并发出信号使扬声器发声并控制8个按键子模块使它们的LOCK信号有效,禁止其他选手抢答。本子模块端口设置如图所示。
图9判断选手模块
本子模块程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY IDENTIFIER IS
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF IDENTIFIER IS
SIGNAL P:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN
P
--8个输入放在一起判断 BEGIN
CASE P IS
WHEN “00000001”=>P_NUMP_NUMP_NUMP_NUMP_NUMP_NUMP_NUMP_NUMP_NUM
--输入若发生变化,马上启动进程进行判断
END CASE;END PROCESS;END ARCHITECTURE;9
图10 判断抢答选手模块仿真波形
所以将以上两个子模块用元件例化语句连接起来,组成整个选手抢答模块,如下图所示
图11 选手抢答模块
实现程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON IS
PORT(P1,P2,P3,P4,P5,P6,P7,P8,RST,LOCK:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK_S,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE BB1 OF BUTTON IS COMPONENT BUTTON1 IS
--调用元件BUTTON1声明
PORT(LOCK,B,RST:IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END COMPONENT;COMPONENT IDENTIFIER IS
--调用元件IDENTIFIER声明
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);10 LOCK,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL a1,a2,a3,a4,a5,a6,a7,a8:STD_LOGIC;
--定义图12中的中间信号 BEGIN
--按照图12将两个元件连接起来
U1:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P1,RST=>RST,PRESSED=>a1);U2:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P2,RST=>RST,PRESSED=>a2);U3:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P3,RST=>RST,PRESSED=>a3);U4:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P4,RST=>RST,PRESSED=>a4);U5:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P5,RST=>RST,PRESSED=>a5);U6:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P6,RST=>RST,PRESSED=>a6);U7:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P7,RST=>RST,PRESSED=>a7);U8:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P8,RST=>RST,PRESSED=>a8);U9:IDENTIFIER PORT MAP(PP1=>a1,PP2=>a2,PP3=>a3,PP4=>a4,PP5=>a5,PP6=>a6,PP7=>a7,PP8=>a8,P_NUM=>P_NUM,LOCK=>LOCK_S,SR1=>SR1);END ARCHITECTURE;
3、加减分模块
加减分模块要识别按下的按键:加5分按键及减5分按键。所以采用状态机的方法来识别。将本模块划分为三个子模块:组别判断子模块,加减及寄存器子模块,分数选择输出子模块。
1)组别判断子模块
该模块要实现的功能是根据抢答成功的选手编号,判断出该选手属于哪组,并输出使能信号允许该组的分数寄存器进行加减操作。如图所示。
图12 组别判断模块
实现程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECODE IS PORT(CLK:IN STD_LOGIC;P_NUM:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
EN1,EN2,EN3,EN4:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF DECODE IS
SIGNAL E:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
PROCESS(CLK)
--引入时钟信号,协调各部分电路的工作
BEGIN IF CLK'EVENT AND CLK='1' THEN
CASE P_NUM IS WHEN “0001”=>EE
1、2号选手属第一组
WHEN “0011”=>EE
3、4号选手属第二组 WHEN “0101”=>EE
5、6号选手属第三组 WHEN “0111”=>EE
7、8号选手属第四组 WHEN OTHERS=>E
--其他情况则四个分数锁存器都不工作
END CASE;END IF;
END PROCESS;
EN4
图13 组别判断模块仿真波形
2)加减及寄存器子模块
本模块的状态机转换过程为:将ADD和SUB信号并置,并检测其电平变化。当ADD按下时,“ADD&SUB”的电平为“01”,弹起时恢复为“11”。当SUB按下时,“ADD&SUB”的电平为“10”,弹起时恢复为“11”。本模块另外还需实现的功能是寄存功能。如下图所示:
图14 加减及寄存器模块
实现程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER1 IS PORT(CLK,EN:IN STD_LOGIC;
ADD,SUB:IN STD_LOGIC;
AA2,AA1,AA0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF COUNTER1 IS SIGNAL A:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);SIGNAL C_ST:ST_TYPE;BEGIN A
--将ADD信号和SUB信号并置在一起判断
PROCESS(CLK)VARIABLE P2,P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF EN='1' THEN
--使能端有效,才对该分数寄存器进行操作
IF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0=>IF A=“01” THEN--A为“01”,说明ADD按下
C_ST
--下一状态转ST1,以等待按键弹起
IF P0=“1001” THEN--个位为9,进1为0,再向十位进1
P0:=“0000”;
IF P1=“1001” THEN
--十位为9,进一为0
P1:=“0000”;
IF P2=“1001” THEN
--百位为9,进一为0
P2:=“0000”;
ELSE P2:=P2+1;
--百位不为9,百位加1
END IF;
ELSE P1:=P1+1;
--十位不为9,加一
END IF;
ELSE P0:=P0+1;
--个位不为9,加一
END IF;
ELSIF A=“10” THEN
--A为“10”,说明SUB按下
C_ST
IF(P2/=0 OR P1/=0 OR P0/=0)THEN
IF P0=“0000” THEN P0:=“1001”;
P1:=P1-1;--个位向十位借1 P2:=P2-1;--十位向百位借1
IF P1=“0000” THEN
ELSE P1:=P1-1;--十位不为0,直接减1
END IF;
P1:=“1001”;
ELSE P0:=P0-1;--个位不为0,直接减1
END IF;
END IF;
ELSE C_ST
END IF;WHEN ST1=>IF A=“11” THEN
--A为“11”,说明按键弹起
C_ST
--回到ST0继续监视按键
ELSE C_ST
END IF;
C_STIF A=“11” THEN
ELSE C_ST
END IF;WHEN OTHERS=>C_ST
AA2
--操作后的分数输出 END PROCESS;END ARCHITECTURE;
加减及寄存器模块仿真波形图如下:
图15 加减及寄存器模块仿真波形
图中,加分按键ADD按下,输出“010”;减分按键SUB按下,输出回到“000”;又来两个加分按键,输出“020”。当EN信号无效时,有按键按下输出不变。
3)分数选择输出模块
四组分数要显示出来,需要12个7段数码管。若只显示当前抢答成功选手的分数,则只需3个数码管。所以设置一个分数选择器,根据抢答成功的选手编号,选择其分数输出给显示模块显示。
程序为:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUXX IS PORT(P_NUM,AA2,AA1,AA0,BB2,BB1,BB0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CC2,CC1,CC0,DD2,DD1,DD0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF MUXX IS BEGIN
PROCESS(P_NUM)
--P_NUM为选手编号
BEGIN
CASE P_NUM IS
WHEN “0001”=>D2D2D2D2D2D2D2D2D2
END CASE;
END PROCESS;END ARCHITECTURE;仿真波形如图所示。
图16分数选择输出模块仿真波形
4、显示模块
本模块根据送来的数据:抢答成功选手号,选手分数、倒计时时间,将相应的字形码送数码管显示。端口设置如图所示。
图17显示模块
图18数码管分配
显示0,“00111111”;3F;显示1,“00000110”;06;显示2,“01011011”;5B;显示3,“01001111”;4F;显示4,“01100110”;66;显示5,“01101101”;6D;显示6,“01111101”;7D;显示7,“00000111”;07;显示8,“01111111”;7F;显示9,“01101111”;6F;显示10,“00000000”;00;
17图中,BT为数码管的位选信号,SG为数码管的段选信号。另外图18为数码管的分配。左起第一位为选手编号,第3、4位为该选手的分数,最后两位为倒计时。程序如下:
LIBRARY IEEE;16
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY IS
PORT(CLK:IN STD_LOGIC;SCORE2,SCORE1,SCORE0,P_NUMBER,TIMEB,TIMEA:IN BT,SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF DISPLAY IS SIGNAL CNT8:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P1:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
--时钟信号一来,显示下一位 CNT8
CASE CNT8 IS
WHEN “000”=>BT
WHEN “001”=>BT
--第二位不用,灭
WHEN “010”=>BT
--第三位显示分数百位
WHEN “011”=>BT
--第四位显示分数十位
WHEN “100”=>BT
--第五位显示分数个位
WHEN “101”=>BT
--第六位不用,灭
WHEN “110”=>BT
--第七位显示倒计时十位
WHEN “111”=>BT
--第八位显示倒计时个位 END CASE;P2:PROCESS(CNT8)
END PROCESS;BEGIN
CASE A IS
--根据数据选择相应的字形码送数码管显示
WHEN “0000”=>SGSG
WHEN “0010”=>SGSG
WHEN “0100”=>SGSG
WHEN “0110”=>SGSG
WHEN “1000”=>SGSG
WHEN “1010”=>SGNULL;END CASE;P3:PROCESS(A)END PROCESS;END ARCHITECTURE;本模块仿真波形如图所示。
图19显示模块仿真波形
5、蜂鸣器模块
当SR1鸣声信号来时,输出CLK2(2KHz)驱动蜂鸣器发声。CLK1用于扫描SR1的电平变化,SR1上升沿来到,允许CLK2输出,并持续一段时间。模块图如下:
图20蜂鸣器模块
本模块程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEAKER IS PORT(CLK1,SR1,CLK2:IN STD_LOGIC;
S:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF SPEAKER IS TYPE ST_TYPE IS(ST0,ST1);SIGNAL C_ST:ST_TYPE;SIGNAL A:STD_LOGIC;BEGIN PROCESS(CLK1)
VARIABLE P:STD_LOGIC_VECTOR(7 DOWNTO 0);--P用于定时,使蜂鸣器发声持续
BEGIN
IF CLK1'EVENT AND CLK1='1' THEN
CASE C_ST IS WHEN ST0=>IF SR1='1' THEN
--SR1信号有上升沿
P:=“00111111”;18
C_ST
ELSE C_ST
END IF;
P:=P-1;C_ST
A
C_STIF P/=0 THEN
--定时还没到,等待
ELSE
ELSE C_ST
END IF;WHEN OTHERS=>C_ST
--只有A为1时,蜂鸣器才发声 END PROCESS;END ARCHITECTURE;本模块的仿真波形如图所示。
图21 蜂鸣器模块仿真波形
3设计心得及总结
刚开始确定这个课题时,我首先确定了要用到哪些知识,主要是VHDL程序的设计,软件的仿真。首先我查阅课本质料,找了不少关于这方面的程序,尽量的把它们都弄懂了。然后我确定了总体方案,把整体方案划分成了几个模块,形成了一个整体的框架,然后各个击破。有了总体的思路做指导我很快我就仿真调试好了抢答启动模块选手抢答模块,这样一来就增加了我的信心,一鼓作气拿下了以后的模块。当然任何事情都不会一帆风顺,也遇到许多难题,不懂的地方我就请叫老师和同学,最后所有的模块都被我一个一个的做出来了,我很高兴,觉得我这两天来的努力没有白费。
此次课程设计不仅加强了我对专业知识的学习与了解,更有许多的感慨,主要有以下几点:
(1)加强了我们动手、思考和解决问题的能力。我们很少能有这种机会来锻炼自己,通过这次课程设计,起到了很好的锻炼效果。
(2)我在做课程设计同时也是对课本知识的巩固和加强,课本的知识太多,平时课间的学习并不能很好的理解程序的功能,所以在这次课程设计过程中,我们了解了很多程序的功能,并且对于其在实际中的使用有了更多的认识。
(3)我们两人一组相互合作,共同解决问题也认识到了团队精神的重要性
最后,我要感谢老师和同学们给我的帮助,没有你们的帮助,我是不能完成此次课程设计的,真的很感谢你们!