DEA设计——四路抢答器
学 院:
专 业:
姓 名 : 小组成员:
指导老师:
二零一五年九月二十八日
1 实验任务及要求 .................................................................................................................... 1
2 程序流程图 ............................................................................................................................ 2
3 电路原理图 ............................................................................................................................ 3
4 电路模块 ................................................................................................................................ 3
4.1 KEY模块 ..................................................................................................................... 3
4.2 KEEP模块 ................................................................................................................... 4
4.3 TIME模块 ................................................................................................................... 4
4.4 STATE模块 ................................................................................................................ 5
4.5 BEEP模块 ................................................................................................................... 6 5 下载程序 .............................................................................................. 错误!未定义书签。
5.1 分配引脚 ..................................................................................................................... 7
5.2 下载到实验箱 ............................................................................................................. 7
6 实验心得 ................................................................................................................................ 7
1 实验任务及要求
1.设计用于竞赛抢答的四人抢答器
1)有多路抢答,抢答台数为4;
2)抢答开始后20秒倒计时,20秒后无人抢答显示超时并报警;
3)能显示抢答台号并显示犯规警报;
2.系统复位后进入抢答状态,当有一路抢答键按下,该路抢答信号将其他各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示该路抢答台号。
3.用VHDL语言设计符合上述功能要求的四人抢答器,并用层次化设计方法设计该电路。
4.完成电路设计后,通过系统试验箱下载验证设计的正确性。
程序流程图
图2.1 程序流程图
2
3 电路原理图
电路原理图如下:
图3.1 电路原理图
电路说明:
1)抢答状态由一个数码管显示,“F”代表超时,“E”代表犯规,“0”代表正常。
2)倒计时由两个数码管显示,从“20”记到“00”。
3)还有一个数码管用来显示当前抢答号“1”,“2”,“3”,“4”。
4 电路模块
在 这次实验当中,我在小组里负责编写STATE模块的编写,因此着重
介绍STATE模块的程序。
4.1 KEY模块
图4.1 Entity KEY
这一模块主要负责按键的输入部件,设计一个重置按钮,一个开始按钮,和4个抢答按钮。
代码:见附录
4.2 KEEP模块
图4.2 Entity KEEP
代码:见附录
4.3 TIME模块
图4.3Entity TIME20
这一模块主要负责时钟的产生,通过分频实现计时。
代码:见附录
模块仿真:
图4.4 TIME20仿真图(1)
图4.5 TIME20仿真图(2)
4.4 STATE模块
图4.6 Entity STATE
STATE这一模块由我负责,因此着重介绍。这一模块主要用来记录抢答器的状态,如果ifstart为0,ifsomeone为1,即说明计时没有开始,有人已经抢答。这时会输出1110,提示“E”表示有人抢答。如果ifstart为1,ifsomeone为1,这时输出0000,提示“0”,表示正常状态。如果ifover为1,这时输出1111,提示“F”,表示超时。具体程序如下。
代码:
Library ieee;
Use ieee.std_logic_1164.all;
Entity state is
port( ifsomeone,ifstart,ifover:in std_logic;
state:out std_logic_vector(3 downto 0) );
End state;
Architecture arch of state is
Begin
Process( ifstart,ifsomeone,ifover )
Begin
if( ifstart'event and ifstart='1' ) then
state
end if;
if( ifstart='0' and ifsomeone='1' ) then
state
elsif( ifover='1' ) then
state
else
state
end if;
End Process;
End arch;
模块仿真:
图4.9 STATE仿真图
4.5 BEEP模块
图4.10 Entity BEEP
这一模块负责,抢答器正常工作时,有人按下抢答按钮后的声音提示。 代码:见附录
5 下载程序
5.1 分配引脚
图5.1 分配引脚图
5.2 下载到实验箱
经下载调试,抢答器的各项功能基本都能实现。
6 实验心得
本次实验让我们基本学会了VHDL语言,让我们认识到EDA设计的强大之处。为我们以后的学习和工作打下了良好的基础。
附录:
其他模块程序:
Key模块程序:
Library ieee;
Use ieee.std_logic_1164.all;
Entity key is
port( k1,k2,k3,k4,feedback:in std_logic;
r1,r2,r3,r4,someone:out std_logic );
End key;
Architecture arch of key is
Begin
r1
r2
r3
r4
Process(k1,k2,k3,k4)
Begin
if( (k1 or k2 or k3 or k4)='1' ) then
someone
else
someone
end if;
end Process;
End arch;
Keep模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity keep is
port( p1,p2,p3,p4,start:in std_logic;
person:out std_logic_vector(3 downto 0); keepout:out std_logic );
End keep;
Architecture arch of keep is
Begin
Process( start,p1,p2,p3,p4 )
Begin
if( (p1 or p2 or p3 or p4)='1' ) then
person(3)
person(2)
person(1)
person(0)
keepout
elsif( start'event and start='1') then keepout
person
end if;
End Process;
End arch;
Time模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity time20 is
port(clk,start,stop:in std_logic;
dig2,dig1:out std_logic_vector(3 downto 0); over:buffer std_logic);
End time20;
Architecture arch of time20 is
signal ok:std_logic;
Begin
Process( clk,start,stop )
variable tmp1:integer range 0 to 10;
variable tmp2:integer range 0 to 2;
Begin
if( start='0' ) then
tmp2:=2;
tmp1:=0;
over
elsif( ( clk'event and clk='1')) then
if((stop='1' and over='0') )then
if( tmp1=0 and tmp2/=0) then tmp1:=9;
tmp2:=tmp2-1;
else
tmp1:=tmp1-1;
end if;
if( tmp2=0 and tmp1=0 ) then over
end if;
end if;
end if;
case tmp1 is
when 0 => dig1
when 1 => dig1
when 2 => dig1
when 3 => dig1
when 4 => dig1
when 5 => dig1
when 6 => dig1
when 7 => dig1
when 8 => dig1
when 9 => dig1
when others => null;
end case;
case tmp2 is
when 0 => dig2
when 1 => dig2
when 2 => dig2
when others => null;
end case;
End Process;
End arch;
Beep模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity beep is
port( someone,start,over:in std_logic;
beep,beeplong:out std_logic );
End beep;
Architecture arch of beep is
Begin
Process( start,someone,over )
Begin
if( start='0' and someone='1' ) then
beeplong
beep
elsif( start='1' and over='1' ) then
beeplong
beep
elsif( start='1' and someone='1' and over='0' ) then beeplong
beep
elsif( start='1' and someone='0' and over='0' ) then beeplong
beep
end if;
End Process;
End arch;
DEA设计——四路抢答器
学 院:
专 业:
姓 名 : 小组成员:
指导老师:
二零一五年九月二十八日
1 实验任务及要求 .................................................................................................................... 1
2 程序流程图 ............................................................................................................................ 2
3 电路原理图 ............................................................................................................................ 3
4 电路模块 ................................................................................................................................ 3
4.1 KEY模块 ..................................................................................................................... 3
4.2 KEEP模块 ................................................................................................................... 4
4.3 TIME模块 ................................................................................................................... 4
4.4 STATE模块 ................................................................................................................ 5
4.5 BEEP模块 ................................................................................................................... 6 5 下载程序 .............................................................................................. 错误!未定义书签。
5.1 分配引脚 ..................................................................................................................... 7
5.2 下载到实验箱 ............................................................................................................. 7
6 实验心得 ................................................................................................................................ 7
1 实验任务及要求
1.设计用于竞赛抢答的四人抢答器
1)有多路抢答,抢答台数为4;
2)抢答开始后20秒倒计时,20秒后无人抢答显示超时并报警;
3)能显示抢答台号并显示犯规警报;
2.系统复位后进入抢答状态,当有一路抢答键按下,该路抢答信号将其他各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示该路抢答台号。
3.用VHDL语言设计符合上述功能要求的四人抢答器,并用层次化设计方法设计该电路。
4.完成电路设计后,通过系统试验箱下载验证设计的正确性。
程序流程图
图2.1 程序流程图
2
3 电路原理图
电路原理图如下:
图3.1 电路原理图
电路说明:
1)抢答状态由一个数码管显示,“F”代表超时,“E”代表犯规,“0”代表正常。
2)倒计时由两个数码管显示,从“20”记到“00”。
3)还有一个数码管用来显示当前抢答号“1”,“2”,“3”,“4”。
4 电路模块
在 这次实验当中,我在小组里负责编写STATE模块的编写,因此着重
介绍STATE模块的程序。
4.1 KEY模块
图4.1 Entity KEY
这一模块主要负责按键的输入部件,设计一个重置按钮,一个开始按钮,和4个抢答按钮。
代码:见附录
4.2 KEEP模块
图4.2 Entity KEEP
代码:见附录
4.3 TIME模块
图4.3Entity TIME20
这一模块主要负责时钟的产生,通过分频实现计时。
代码:见附录
模块仿真:
图4.4 TIME20仿真图(1)
图4.5 TIME20仿真图(2)
4.4 STATE模块
图4.6 Entity STATE
STATE这一模块由我负责,因此着重介绍。这一模块主要用来记录抢答器的状态,如果ifstart为0,ifsomeone为1,即说明计时没有开始,有人已经抢答。这时会输出1110,提示“E”表示有人抢答。如果ifstart为1,ifsomeone为1,这时输出0000,提示“0”,表示正常状态。如果ifover为1,这时输出1111,提示“F”,表示超时。具体程序如下。
代码:
Library ieee;
Use ieee.std_logic_1164.all;
Entity state is
port( ifsomeone,ifstart,ifover:in std_logic;
state:out std_logic_vector(3 downto 0) );
End state;
Architecture arch of state is
Begin
Process( ifstart,ifsomeone,ifover )
Begin
if( ifstart'event and ifstart='1' ) then
state
end if;
if( ifstart='0' and ifsomeone='1' ) then
state
elsif( ifover='1' ) then
state
else
state
end if;
End Process;
End arch;
模块仿真:
图4.9 STATE仿真图
4.5 BEEP模块
图4.10 Entity BEEP
这一模块负责,抢答器正常工作时,有人按下抢答按钮后的声音提示。 代码:见附录
5 下载程序
5.1 分配引脚
图5.1 分配引脚图
5.2 下载到实验箱
经下载调试,抢答器的各项功能基本都能实现。
6 实验心得
本次实验让我们基本学会了VHDL语言,让我们认识到EDA设计的强大之处。为我们以后的学习和工作打下了良好的基础。
附录:
其他模块程序:
Key模块程序:
Library ieee;
Use ieee.std_logic_1164.all;
Entity key is
port( k1,k2,k3,k4,feedback:in std_logic;
r1,r2,r3,r4,someone:out std_logic );
End key;
Architecture arch of key is
Begin
r1
r2
r3
r4
Process(k1,k2,k3,k4)
Begin
if( (k1 or k2 or k3 or k4)='1' ) then
someone
else
someone
end if;
end Process;
End arch;
Keep模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity keep is
port( p1,p2,p3,p4,start:in std_logic;
person:out std_logic_vector(3 downto 0); keepout:out std_logic );
End keep;
Architecture arch of keep is
Begin
Process( start,p1,p2,p3,p4 )
Begin
if( (p1 or p2 or p3 or p4)='1' ) then
person(3)
person(2)
person(1)
person(0)
keepout
elsif( start'event and start='1') then keepout
person
end if;
End Process;
End arch;
Time模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity time20 is
port(clk,start,stop:in std_logic;
dig2,dig1:out std_logic_vector(3 downto 0); over:buffer std_logic);
End time20;
Architecture arch of time20 is
signal ok:std_logic;
Begin
Process( clk,start,stop )
variable tmp1:integer range 0 to 10;
variable tmp2:integer range 0 to 2;
Begin
if( start='0' ) then
tmp2:=2;
tmp1:=0;
over
elsif( ( clk'event and clk='1')) then
if((stop='1' and over='0') )then
if( tmp1=0 and tmp2/=0) then tmp1:=9;
tmp2:=tmp2-1;
else
tmp1:=tmp1-1;
end if;
if( tmp2=0 and tmp1=0 ) then over
end if;
end if;
end if;
case tmp1 is
when 0 => dig1
when 1 => dig1
when 2 => dig1
when 3 => dig1
when 4 => dig1
when 5 => dig1
when 6 => dig1
when 7 => dig1
when 8 => dig1
when 9 => dig1
when others => null;
end case;
case tmp2 is
when 0 => dig2
when 1 => dig2
when 2 => dig2
when others => null;
end case;
End Process;
End arch;
Beep模块:
Library ieee;
Use ieee.std_logic_1164.all;
Entity beep is
port( someone,start,over:in std_logic;
beep,beeplong:out std_logic );
End beep;
Architecture arch of beep is
Begin
Process( start,someone,over )
Begin
if( start='0' and someone='1' ) then
beeplong
beep
elsif( start='1' and over='1' ) then
beeplong
beep
elsif( start='1' and someone='1' and over='0' ) then beeplong
beep
elsif( start='1' and someone='0' and over='0' ) then beeplong
beep
end if;
End Process;
End arch;