本文為大家?guī)砣N四人搶答器的VHDL語(yǔ)言設(shè)計(jì)方案介紹。
VHDL語(yǔ)言設(shè)計(jì)四人搶答器方案一
設(shè)計(jì)要求
l、設(shè)計(jì)用于競(jìng)賽的四人搶答器,功能如下:
(1)有多路搶答器,臺(tái)數(shù)為四,能顯示搶答臺(tái)號(hào);
(2)具有搶答開始后20秒倒計(jì)時(shí),20秒倒計(jì)時(shí)后無(wú)人搶答顯示超時(shí),并報(bào)警;
(3)能顯示超前搶答臺(tái)號(hào)并顯示犯規(guī)警報(bào);
2、系統(tǒng)復(fù)位后進(jìn)入搶答狀態(tài),當(dāng)有一路搶答鍵按下時(shí),該路搶答信號(hào)將其余各路搶答封鎖,同時(shí)鈴聲響,直至該路按鍵松開,顯示牌顯示該路搶答臺(tái)號(hào)。
3、用VHDL語(yǔ)言設(shè)計(jì)符合上述功能要求的四人搶答器,并用層次設(shè)計(jì)方法設(shè)計(jì)該電路。
電路工作原理
簡(jiǎn)易邏輯數(shù)字搶答器由主體電路與擴(kuò)展電路組成。優(yōu)先編碼電路、鎖存器、譯碼電路將參賽隊(duì)的輸入信號(hào)在顯示器上輸出;用控制電路和主持人開關(guān)啟動(dòng)報(bào)警電路,以上兩部分組成主體電路。通過定時(shí)電路和譯碼電路將秒脈沖產(chǎn)生的信號(hào)在顯示器上輸出實(shí)現(xiàn)計(jì)時(shí)功能,構(gòu)成擴(kuò)展電路。
電路主要由脈沖產(chǎn)生電路、鎖存電路、編碼及譯碼顯示電路、倒計(jì)時(shí)電路和音響產(chǎn)生電路組成。當(dāng)有選手搶答時(shí),首先鎖存,阻止其他選手搶答,然后編碼,再經(jīng)譯碼器將數(shù)字顯示在顯示器上同時(shí)產(chǎn)生音響。主持人宣布開始搶答時(shí),倒計(jì)時(shí)電路啟動(dòng)由20計(jì)到0,如有選手搶答,倒計(jì)時(shí)停止,如20秒后無(wú)人搶答,則會(huì)顯示報(bào)警。
源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdqis
port(clr,clk,clk0,en,a,b,c,d:instd_logic;
dps:outstd_logic_vector(3downto0);
count:outstd_logic_vector(7downto0);
speaker:outstd_logic);
end;
architectureoneofqdqis
signaldps1:std_logic_vector(3downto0);
signalcount1:std_logic_vector(7downto0);
signaltmp1,tmp2,tmp3:std_logic;
begin
p1:process(clr,en,tmp1,tmp2)
begin
ifclr=‘1’then
tmp1<=‘0’;tmp2<=‘0’;
dps1<=“0000”;
elsifen=‘1’then
iftmp1=‘0’then
ifa=‘1’then
tmp1<=‘1’;
dps1<=“0001”;
endif;
ifb=‘1’thentmp1<=‘1’;
dps1<=“0010”;
endif;
ifc=‘1’thentmp1<=‘1’;
dps1<=“0011”;
endif;
ifd=‘1’thentmp1<=‘1’;
dps1<=“0100”;
endif;
endif;
elsifen=‘0’then
iftmp2=‘0’then
ifa=‘1’then
tmp2<=‘1’;
dps1<=“0001”;
endif;
ifb=‘1’then
tmp2<=‘1’;
dps1<=“0010”;
endif;
ifc=‘1’then
tmp2<=‘1’;
dps1<=“0011”;
endif;
ifd=‘1’then
tmp2<=‘1’;
dps1<=“0100”;
endif;
endif;
endif;
endprocess;
p2:process(clr,clk,tmp1,tmp3)
begin
ifclk‘eventandclk=’1‘then
ifclr=’1‘thencount1<=“00100000”;
tmp3<=’0‘;
elsifen=’1‘a(chǎn)ndtmp1=’0‘a(chǎn)ndtmp3=’0‘then
ifcount1=“00000000”then
tmp3<=’1‘;
elsifcount1(3downto0)=“0000”then
count1(3downto0)<=“1001”;
count1(7downto4)<=count1(7downto4)-’1‘;
elsecount1(3downto0)<=count1(3downto0)-’1‘;
endif;
endif;
endif;
endprocess;
count<=count1;
dps<=dps1;
speaker<=((tmp3oraorborcord)andclk0);
end;
仿真波形
(一)無(wú)人搶答的仿真波形
由上圖可知,當(dāng)en=0時(shí)此時(shí)主持人并沒有提出開始搶答的信號(hào).en=1,開始搶答的時(shí)候20秒倒計(jì)時(shí),時(shí)間到而無(wú)人搶答。(count=“00000000”),則speaker報(bào)警,按下清零開關(guān)(clr=1),重新開始20秒倒計(jì)時(shí)進(jìn)行下一輪
(二)有人搶答的仿真波形
由上圖可知,clr=1,系統(tǒng)進(jìn)入初始狀態(tài),即count=“00100000”,dps=“0000”;en=0時(shí),此時(shí)主持人并沒有提出開始搶答的信號(hào)是不允許搶答的,若有人搶答(b=1),則speaker報(bào)警,且數(shù)碼管顯示組別(dps=“0010”)顯示出犯規(guī)的組別;en=1時(shí),開始正常搶答而且count開始20秒倒計(jì)時(shí),在15秒時(shí)(count=“00010101”)有人搶答(a=1),倒計(jì)時(shí)暫停同時(shí)鎖存器工作將其他組別的信號(hào)鎖存后面的信號(hào)將視為無(wú)效,數(shù)碼管顯示組別(dps=“0001”),且speaker報(bào)警。
評(píng)論
查看更多