数电课程设计实验报告 课题:竞赛抢答器
学院:电气与信息工程学院
姓名:
班级:电子信息工程1001班
目录
一、课程设计的要求及目的 ...................................................................................................... - 1 -
二、设计的功能要求 .................................................................................................................. - 2 -
三、设计思路框图 ...................................................................................................................... - 3 -
四、VHDL程序 ......................................................................................................................... - 4 -
1、键盘转按键模块 ............................................................................................................ - 4 -
2、显示模块 ........................................................................................................................ - 6 -
3、主模块 ............................................................................................................................ - 9 -
五、电路连接图 ........................................................................................................................ - 14 -
六、心得体会 ............................................................................................................................ - 14 -
一、课程设计的要求及目的
1.了解电子设计的具体流程和方法。
2. 掌握电子设计的基本要求,能够运用所学的知识解决生活中的一些问题。
3. 初步掌握VHDL语言编程,并设计出一个有意义的小型系统。
4. 掌握Altium Designer 6.9软件的应用,并且了解相关硬件的组成和功能。
5. 用EDA(Electronic Design Automation)或者原理图完成一个课题的设计,并达到相应的功能要求。
二、设计的功能要求
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等各种手段批示出第一抢答者。同时,还可以设置计分、犯规及奖惩记录等各种功能。本设计利用EDA技术,可容纳8组参赛,每组设置一个按钮供参赛者抢答使用。主持人按下开始按键后,10s倒计时开始,当一组抢答器按下后,1602LCD显示抢答的组别。由于抢答器具有第一信号鉴别和锁存功能使其余的组就抢答无效,抢答的组回答问题后由主持人进行加减分,然后主持人按复位键后继续进行抢答。
1、在1602LCD屏幕上显示所需组别及分数;
2、考虑到有选手犯规,在主持人未按下开始键但是已经有组别按下抢答键时会在屏幕显示该组别犯规(FG),并由主持人手动减分;
3、按下开始键后,有10s的时间供选手们抢答,如果30s后仍无人抢答,则蜂鸣器报警,并在屏幕上显示超时(CS);
4、每个组别设置的初始分数为0分,加分上限为9分;
5、能实现系统手动复位,复位后回到初始状态,并等待主持人按下开始键。
三、设计思路框图
四、VHDL程序
1、键盘转按键模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
entity PADTOKEY is
port (
CPIN,R,VALIDKEY :IN STD_LOGIC;
KEY :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
KEYOUT: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
CLK_1MHZ,RST: OUT STD_LOGIC
);
end entity ;
architecture JGT of PADTOKEY is
SIGNAL CTCP: INTEGER RANGE 0 TO 5;
SIGNAL CPO :STD_LOGIC:='0';
SIGNAL CTCPO :INTEGER RANGE 0 TO 4999;
TYPE STATES IS (S0,S1,S2);
SIGNAL S: STATES;
begin
PROCESS(CPIN)
BEGIN
IF CPIN='1' AND CPIN 'EVENT THEN
IF CTCP=5 THEN
CPO
ELSE
CTCP
END IF;
END IF;
END PROCESS;
PROCESS(CPO,R)
BEGIN
CLK_1MHZ
IF R='1' THEN
RST
ELSIF CPO='1' AND CPO 'EVENT THEN
IF CTCPO /= 4999 THEN
CTCPO
ELSE
CTCPO
CASE S IS
WHEN S0 =>RST
IF VALIDKEY='1' THEN
S
CASE KEY IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
ELSE
S
END IF;
WHEN S1=>RST
WHEN S2=>RST
WHEN OTHERS=> NULL;
END CASE;
END IF;
END IF;
END PROCESS;
end architecture JGT;
此模块使用状态机将键盘的16个按键转换为16个按键信号。
2、显示模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity QDQLCD is
port (CPIN,R,BUSY :IN STD_LOGIC;
FS1,FS2,FS3,FS4,FS5,FS6,FS7,FS8,TM :IN STD_LOGIC_VECTOR(7 DOWNTO 0); ZB : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TESHU : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC;
DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
end entity ;
architecture JGT of QDQLCD is
TYPE STATES IS (S0,S1,S2,S3,S4);
SIGNAL S: STATES;
SIGNAL LCDPT : INTEGER RANGE 0 TO 27;
SIGNAL CPCT : INTEGER RANGE 0 TO 65535;
SIGNAL CP: STD_LOGIC;
--SIGNAL ASCEW,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0);
begin
PROCESS(CPIN,R)
BEGIN
CLK
IF R='1' THEN
CPCT
ELSIF CPIN='1' AND CPIN 'EVENT THEN
IF CPCT=0 THEN
CPCT
ELSE
CPCT
END IF;
END IF;
END PROCESS; --·ÖƵΪ500USÖÜÆÚ
--Ö÷½ø³Ì£ºÄâ²ÉÓÃ500usʱÖÓ£¬¼´ÔÚ500usºóÍê³É״̬ת»»£¬ÐÞ¸ÄLCDPTÖ¸Õë --S0:³õʼ״̬,ÔÚR=1ʱ£¬´¦ÓÚS0״̬,LCDPT=0
-- Á÷³Ì£º Êä³örst=1, תS1
--S1:Êä³öRST=0;ÅжÏBUSY=0? :Y: LCDPT+1;LCDPTµ½¹Ì¶¨×îºó£¿::N: ->S2 -- ::Y: תS3
-- ;N; NULL
--S2:¸ø³öSTROBEÐźš£×ªS1
--S1,S2Íê³É³õʼ»¯¹Ì¶¨ÏÔʾµÄ¹¦ÄÜ
PROCESS(CP,R)
BEGIN
IF R='1' THEN
S
ELSIF CP='1' AND CP 'EVENT THEN
CASE S IS
WHEN S0=> S
WHEN S1=> RST
IF BUSY='0' THEN
LCDPT
IF LCDPT=7 THEN
S
ELSE
S
END IF;
END IF;
WHEN S2=> S
--S3~S4Íê³ÉɨÃèÏÔʾ¹¦ÄÜ
--S3:BUSY=0? :Y: LCDPTÑ-»·+1 £¬×ªS4
--S4:¸ø³öSTROBEÐźţ¬×ªS3
WHEN S3=> STROBE
IF BUSY='0' THEN
IF LCDPT=27 THEN
LCDPT
ELSE
LCDPT
END IF;
S
END IF;
WHEN S4=> STROBE
WHEN OTHERS=> NULL;
END CASE;
END IF;
END PROCESS;
--Ñ¡ÔñÊä³ö½ø³Ì(LCDPT)
--LCDPT=0,NULL
-- =1~6 ÏÔʾ ZB: TM: E 45H,5 W57H,6 S53H,9 N4EH,10
PROCESS(LCDPT)
BEGIN
CASE LCDPT IS
WHEN 0 => NULL;
WHEN 1=> DATA
--LCDPT=7~22 ÏÔʾFS1~FS8
--LCDPT=23~25 ÏÔʾZB/TM
WHEN 7=>DATA
WHEN 23=>DATA
WHEN
END CASE;
WHEN 27=>CASE TESHU IS
WHEN
END CASE;
WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
end architecture JGT;
此模块采用状态机的方法在LCD上按格式显示抢答器的8个2位BCD码分数、抢答的组别、时间。
3、主模块
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity qdmain1 is
Port ( TESHU : out STD_LOGIC_VECTOR (1 downto 0);
CPIN : in STD_LOGIC;
KEYOUT : in STD_LOGIC_VECTOR (15 downto 0);
R : in STD_LOGIC;
FS1 : out STD_LOGIC_VECTOR (7 downto 0);
FS2 : out STD_LOGIC_VECTOR (7 downto 0);
FS3 : out STD_LOGIC_VECTOR (7 downto 0);
FS4 : out STD_LOGIC_VECTOR (7 downto 0);
FS5 : out STD_LOGIC_VECTOR (7 downto 0);
FS6 : out STD_LOGIC_VECTOR (7 downto 0);
FS7 : out STD_LOGIC_VECTOR (7 downto 0);
FS8 : out STD_LOGIC_VECTOR (7 downto 0);
TM : out STD_LOGIC_VECTOR (7 downto 0);
ZB : out STD_LOGIC_VECTOR (3 downto 0));
end qdmain1;
architecture Behavioral of qdmain1 is
SIGNAL KSKEY:STD_LOGIC:='0';
SIGNAL YIDA:STD_LOGIC:='0';
SIGNAL JIAFLAG,JIANFLAG:STD_LOGIC;
SIGNAL CPCT : INTEGER RANGE 0 TO 4999;
SIGNAL CP: STD_LOGIC;
SIGNAL CP1S : INTEGER RANGE 0 TO 999;
SIGNAL CPCNT: STD_LOGIC;
SIGNAL TM1 : STD_LOGIC_VECTOR (7 downto 0);
SIGNAL ZB1 : STD_LOGIC_VECTOR (3 downto 0);
-- SIGNAL F1,F2,F3,F4,F5,F6,F7,F8 : STD_LOGIC_VECTOR (7 downto 0);
SIGNAL Fk1,Fk2,Fk3,Fk4,Fk5,Fk6,Fk7,Fk8 : STD_LOGIC_VECTOR (7 downto 0); begin
TM
ZB
FS1
BEGIN
IF R='1' THEN
CPCT
ELSIF CPIN='1' AND CPIN 'EVENT THEN --20MHZ
IF CPCT=0 THEN --cp shi 500us;
CPCT
ELSE
CPCT
END IF;
END IF;
END PROCESS;
process(R,CP)
begin
IF R='1' THEN
CP1S
ELSIF CP='1' AND CP 'EVENT THEN
IF CP1S=999 THEN
CP1S
CPCNT
ELSE
CP1S
END IF;
END IF;
end process;
process(CPIN,CPCNT)
begin
IF CPIN='1' AND CPIN 'EVENT THEN
IF KEYOUT=
Fk1
YIDA
KSKEY
TM1
ZB1
TESHU
JIAFLAG
JIANFLAG
ELSE IF YIDA='0' THEN
CASE KEYOUT IS
WHEN
WHEN
--WHEN
END CASE;
IF KSKEY='1' THEN
IF CPCNT='1' AND CPCNT 'EVENT THEN
IF TM1/=
TM1
END IF;
END IF;
IF TM1=
TESHU
END IF;
END IF;
ELSE IF KSKEY='0' THEN
TESHU
IF KEYOUT=
IF JIANFLAG='1' THEN
CASE ZB1 IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
END IF;
END IF;
ELSE IF KEYOUT=
IF JIAFLAG='1' THEN
CASE ZB1 IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
end process;
end Behavioral;
ELSE
CPCT
END IF;
END IF;
END PROCESS;--对20MHZ脉冲分频为500US
PROCESS(CP,R)
BEGIN
IF R='1' THEN
CP1S
ELSIF CP='1' AND CP 'EVENT THEN
IF CP1S=0 THEN
CP1S
ELSE
CP1S
END IF;
END IF;
END PROCESS;--对20MHZ脉冲分频为1s
PROCESS(CPD,R)
BEGIN
IF (R='1') THEN
YH
ELSIF(CPD='1' AND CPD 'EVENT) THEN
IF STOP='0' THEN
IF (YL=
YL
IF (YH=
YH
ELSE
YH
END IF;
ELSE
YL
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(KSKEY,R)
BEGIN
IF R='1' THEN
TESHU
ELSIF KSKEY='1' AND YH&YL=
TESHU
ELSIF KSKEY='0'AND YIDA='1' THEN
TESHU
END IF;
END PROCESS;
TM
END ARCHITECTURE A;
此模块用于抢答的主体设计,即决定抢答器的功能。
五、电路连接图
六、心得体会
通过这次课程设计,我熟练掌握的用VHDL语言设计一个课题的完整步骤,从一开始什么都不会,到现在已经对这门语言有了一个比较好的掌握,感觉很有成就感,觉得学习计算机语言类的课程还是应该将它融入到实践当中去,这样才能掌握的更全面,也更牢固。
数电课程设计实验报告 课题:竞赛抢答器
学院:电气与信息工程学院
姓名:
班级:电子信息工程1001班
目录
一、课程设计的要求及目的 ...................................................................................................... - 1 -
二、设计的功能要求 .................................................................................................................. - 2 -
三、设计思路框图 ...................................................................................................................... - 3 -
四、VHDL程序 ......................................................................................................................... - 4 -
1、键盘转按键模块 ............................................................................................................ - 4 -
2、显示模块 ........................................................................................................................ - 6 -
3、主模块 ............................................................................................................................ - 9 -
五、电路连接图 ........................................................................................................................ - 14 -
六、心得体会 ............................................................................................................................ - 14 -
一、课程设计的要求及目的
1.了解电子设计的具体流程和方法。
2. 掌握电子设计的基本要求,能够运用所学的知识解决生活中的一些问题。
3. 初步掌握VHDL语言编程,并设计出一个有意义的小型系统。
4. 掌握Altium Designer 6.9软件的应用,并且了解相关硬件的组成和功能。
5. 用EDA(Electronic Design Automation)或者原理图完成一个课题的设计,并达到相应的功能要求。
二、设计的功能要求
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等各种手段批示出第一抢答者。同时,还可以设置计分、犯规及奖惩记录等各种功能。本设计利用EDA技术,可容纳8组参赛,每组设置一个按钮供参赛者抢答使用。主持人按下开始按键后,10s倒计时开始,当一组抢答器按下后,1602LCD显示抢答的组别。由于抢答器具有第一信号鉴别和锁存功能使其余的组就抢答无效,抢答的组回答问题后由主持人进行加减分,然后主持人按复位键后继续进行抢答。
1、在1602LCD屏幕上显示所需组别及分数;
2、考虑到有选手犯规,在主持人未按下开始键但是已经有组别按下抢答键时会在屏幕显示该组别犯规(FG),并由主持人手动减分;
3、按下开始键后,有10s的时间供选手们抢答,如果30s后仍无人抢答,则蜂鸣器报警,并在屏幕上显示超时(CS);
4、每个组别设置的初始分数为0分,加分上限为9分;
5、能实现系统手动复位,复位后回到初始状态,并等待主持人按下开始键。
三、设计思路框图
四、VHDL程序
1、键盘转按键模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
entity PADTOKEY is
port (
CPIN,R,VALIDKEY :IN STD_LOGIC;
KEY :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
KEYOUT: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
CLK_1MHZ,RST: OUT STD_LOGIC
);
end entity ;
architecture JGT of PADTOKEY is
SIGNAL CTCP: INTEGER RANGE 0 TO 5;
SIGNAL CPO :STD_LOGIC:='0';
SIGNAL CTCPO :INTEGER RANGE 0 TO 4999;
TYPE STATES IS (S0,S1,S2);
SIGNAL S: STATES;
begin
PROCESS(CPIN)
BEGIN
IF CPIN='1' AND CPIN 'EVENT THEN
IF CTCP=5 THEN
CPO
ELSE
CTCP
END IF;
END IF;
END PROCESS;
PROCESS(CPO,R)
BEGIN
CLK_1MHZ
IF R='1' THEN
RST
ELSIF CPO='1' AND CPO 'EVENT THEN
IF CTCPO /= 4999 THEN
CTCPO
ELSE
CTCPO
CASE S IS
WHEN S0 =>RST
IF VALIDKEY='1' THEN
S
CASE KEY IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
ELSE
S
END IF;
WHEN S1=>RST
WHEN S2=>RST
WHEN OTHERS=> NULL;
END CASE;
END IF;
END IF;
END PROCESS;
end architecture JGT;
此模块使用状态机将键盘的16个按键转换为16个按键信号。
2、显示模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity QDQLCD is
port (CPIN,R,BUSY :IN STD_LOGIC;
FS1,FS2,FS3,FS4,FS5,FS6,FS7,FS8,TM :IN STD_LOGIC_VECTOR(7 DOWNTO 0); ZB : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TESHU : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC;
DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
end entity ;
architecture JGT of QDQLCD is
TYPE STATES IS (S0,S1,S2,S3,S4);
SIGNAL S: STATES;
SIGNAL LCDPT : INTEGER RANGE 0 TO 27;
SIGNAL CPCT : INTEGER RANGE 0 TO 65535;
SIGNAL CP: STD_LOGIC;
--SIGNAL ASCEW,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0);
begin
PROCESS(CPIN,R)
BEGIN
CLK
IF R='1' THEN
CPCT
ELSIF CPIN='1' AND CPIN 'EVENT THEN
IF CPCT=0 THEN
CPCT
ELSE
CPCT
END IF;
END IF;
END PROCESS; --·ÖƵΪ500USÖÜÆÚ
--Ö÷½ø³Ì£ºÄâ²ÉÓÃ500usʱÖÓ£¬¼´ÔÚ500usºóÍê³É״̬ת»»£¬ÐÞ¸ÄLCDPTÖ¸Õë --S0:³õʼ״̬,ÔÚR=1ʱ£¬´¦ÓÚS0״̬,LCDPT=0
-- Á÷³Ì£º Êä³örst=1, תS1
--S1:Êä³öRST=0;ÅжÏBUSY=0? :Y: LCDPT+1;LCDPTµ½¹Ì¶¨×îºó£¿::N: ->S2 -- ::Y: תS3
-- ;N; NULL
--S2:¸ø³öSTROBEÐźš£×ªS1
--S1,S2Íê³É³õʼ»¯¹Ì¶¨ÏÔʾµÄ¹¦ÄÜ
PROCESS(CP,R)
BEGIN
IF R='1' THEN
S
ELSIF CP='1' AND CP 'EVENT THEN
CASE S IS
WHEN S0=> S
WHEN S1=> RST
IF BUSY='0' THEN
LCDPT
IF LCDPT=7 THEN
S
ELSE
S
END IF;
END IF;
WHEN S2=> S
--S3~S4Íê³ÉɨÃèÏÔʾ¹¦ÄÜ
--S3:BUSY=0? :Y: LCDPTÑ-»·+1 £¬×ªS4
--S4:¸ø³öSTROBEÐźţ¬×ªS3
WHEN S3=> STROBE
IF BUSY='0' THEN
IF LCDPT=27 THEN
LCDPT
ELSE
LCDPT
END IF;
S
END IF;
WHEN S4=> STROBE
WHEN OTHERS=> NULL;
END CASE;
END IF;
END PROCESS;
--Ñ¡ÔñÊä³ö½ø³Ì(LCDPT)
--LCDPT=0,NULL
-- =1~6 ÏÔʾ ZB: TM: E 45H,5 W57H,6 S53H,9 N4EH,10
PROCESS(LCDPT)
BEGIN
CASE LCDPT IS
WHEN 0 => NULL;
WHEN 1=> DATA
--LCDPT=7~22 ÏÔʾFS1~FS8
--LCDPT=23~25 ÏÔʾZB/TM
WHEN 7=>DATA
WHEN 23=>DATA
WHEN
END CASE;
WHEN 27=>CASE TESHU IS
WHEN
END CASE;
WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
end architecture JGT;
此模块采用状态机的方法在LCD上按格式显示抢答器的8个2位BCD码分数、抢答的组别、时间。
3、主模块
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity qdmain1 is
Port ( TESHU : out STD_LOGIC_VECTOR (1 downto 0);
CPIN : in STD_LOGIC;
KEYOUT : in STD_LOGIC_VECTOR (15 downto 0);
R : in STD_LOGIC;
FS1 : out STD_LOGIC_VECTOR (7 downto 0);
FS2 : out STD_LOGIC_VECTOR (7 downto 0);
FS3 : out STD_LOGIC_VECTOR (7 downto 0);
FS4 : out STD_LOGIC_VECTOR (7 downto 0);
FS5 : out STD_LOGIC_VECTOR (7 downto 0);
FS6 : out STD_LOGIC_VECTOR (7 downto 0);
FS7 : out STD_LOGIC_VECTOR (7 downto 0);
FS8 : out STD_LOGIC_VECTOR (7 downto 0);
TM : out STD_LOGIC_VECTOR (7 downto 0);
ZB : out STD_LOGIC_VECTOR (3 downto 0));
end qdmain1;
architecture Behavioral of qdmain1 is
SIGNAL KSKEY:STD_LOGIC:='0';
SIGNAL YIDA:STD_LOGIC:='0';
SIGNAL JIAFLAG,JIANFLAG:STD_LOGIC;
SIGNAL CPCT : INTEGER RANGE 0 TO 4999;
SIGNAL CP: STD_LOGIC;
SIGNAL CP1S : INTEGER RANGE 0 TO 999;
SIGNAL CPCNT: STD_LOGIC;
SIGNAL TM1 : STD_LOGIC_VECTOR (7 downto 0);
SIGNAL ZB1 : STD_LOGIC_VECTOR (3 downto 0);
-- SIGNAL F1,F2,F3,F4,F5,F6,F7,F8 : STD_LOGIC_VECTOR (7 downto 0);
SIGNAL Fk1,Fk2,Fk3,Fk4,Fk5,Fk6,Fk7,Fk8 : STD_LOGIC_VECTOR (7 downto 0); begin
TM
ZB
FS1
BEGIN
IF R='1' THEN
CPCT
ELSIF CPIN='1' AND CPIN 'EVENT THEN --20MHZ
IF CPCT=0 THEN --cp shi 500us;
CPCT
ELSE
CPCT
END IF;
END IF;
END PROCESS;
process(R,CP)
begin
IF R='1' THEN
CP1S
ELSIF CP='1' AND CP 'EVENT THEN
IF CP1S=999 THEN
CP1S
CPCNT
ELSE
CP1S
END IF;
END IF;
end process;
process(CPIN,CPCNT)
begin
IF CPIN='1' AND CPIN 'EVENT THEN
IF KEYOUT=
Fk1
YIDA
KSKEY
TM1
ZB1
TESHU
JIAFLAG
JIANFLAG
ELSE IF YIDA='0' THEN
CASE KEYOUT IS
WHEN
WHEN
--WHEN
END CASE;
IF KSKEY='1' THEN
IF CPCNT='1' AND CPCNT 'EVENT THEN
IF TM1/=
TM1
END IF;
END IF;
IF TM1=
TESHU
END IF;
END IF;
ELSE IF KSKEY='0' THEN
TESHU
IF KEYOUT=
IF JIANFLAG='1' THEN
CASE ZB1 IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
END IF;
END IF;
ELSE IF KEYOUT=
IF JIAFLAG='1' THEN
CASE ZB1 IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>NULL;
END CASE;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
end process;
end Behavioral;
ELSE
CPCT
END IF;
END IF;
END PROCESS;--对20MHZ脉冲分频为500US
PROCESS(CP,R)
BEGIN
IF R='1' THEN
CP1S
ELSIF CP='1' AND CP 'EVENT THEN
IF CP1S=0 THEN
CP1S
ELSE
CP1S
END IF;
END IF;
END PROCESS;--对20MHZ脉冲分频为1s
PROCESS(CPD,R)
BEGIN
IF (R='1') THEN
YH
ELSIF(CPD='1' AND CPD 'EVENT) THEN
IF STOP='0' THEN
IF (YL=
YL
IF (YH=
YH
ELSE
YH
END IF;
ELSE
YL
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(KSKEY,R)
BEGIN
IF R='1' THEN
TESHU
ELSIF KSKEY='1' AND YH&YL=
TESHU
ELSIF KSKEY='0'AND YIDA='1' THEN
TESHU
END IF;
END PROCESS;
TM
END ARCHITECTURE A;
此模块用于抢答的主体设计,即决定抢答器的功能。
五、电路连接图
六、心得体会
通过这次课程设计,我熟练掌握的用VHDL语言设计一个课题的完整步骤,从一开始什么都不会,到现在已经对这门语言有了一个比较好的掌握,感觉很有成就感,觉得学习计算机语言类的课程还是应该将它融入到实践当中去,这样才能掌握的更全面,也更牢固。