1、目录一、设计要求-二、设计方案-三、设计程序-四、管脚分配-五、硬件下载实现现象描述-六、体会与收获- 一、 设计要求1 具有第一抢答信号的鉴别和锁存功能。在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组指示灯亮,显示器显示出抢答者的组别。同时,电路处于自锁状态,使其他组的抢答器按钮不起作用。2 具有计时功能。在初始状态时,主持人可以设置答题时间的初始值。在主持人对抢答组别进行确认,并给出倒计时计数开始信号以后,抢答者开始回答问题。此时,显示器从初始值开始倒计时,计至0时停止计数,同时扬声器发出超时报警信号。若参赛者在规定的时间内回答完问题,主持人可以给出计时停止信号,以免扬声器鸣叫。二
2、、设计方案 从要实现的功能来看,层次化的设计会更加容易实现,将设计分为三个部分,第一部分用来实现第一抢答信号的鉴别和锁存功能,在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组指示灯亮,显示器显示出抢答者的组别。同时,电路处于自锁状态,使其他组的抢答器按钮不起作用,第二部分用来实现在初始状态时,主持人可以设置答题时间的初始值。在主持人对抢答组别进行确认,并给出倒计时计数开始信号以后,抢答者开始回答问题。此时,显示器从初始值开始倒计时,计至0时停止计数,同时扬声器发出超时报警信号。若参赛者在规定的时间内回答完问题,主持人可以给出计时停止信号,以免扬声器鸣叫。第三部分是译码部分将主持人的设置的
3、倒计时数值用数码显示出来。三、设计程序第一部分:抢答模块-库-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;-实体-entity jnb isport(clk,i:in std_logic; u,r,t,y:in std_logic; led3: out std_logic_vector(3 downto 0); k:out std_logic_vector(2 downto 0); o:out std_logic_vector(3 do
4、wnto 0);end;-结构体-architecture one of jnb issignal n:integer range 0 to 1;signal clk_1k,clk_100h:std_logic;signal data:std_logic_vector(3 downto 0);signal s:std_logic_vector(6 downto 0);signal h:std_logic_vector(2 downto 0);signal j:std_logic_vector(3 downto 0);begin process (clk) variable cnt1:integ
5、er range 0 to 250; variable cnt2:integer range 0 to 100; begin if clkevent and clk=1 then if cnt1=250 then cnt1:=0; if cnt2=100 then cnt2:=0; clk_1k=not clk_1k; else cnt2:=cnt2+1; end if; else cnt1:=cnt1+1; end if; end if; end process;process(clk_1k)begin if i=1 then if n=0 then if u=0then led3=0001
6、; j=0111; n=n+1; elsif r=0 then led3=0010; j=1011; n=n+1; elsif t=0 then led3=0011; j=1101; n=n+1; elsif y=0 then led3=0100; j=1110; n=n+1; end if; end if; else h=100; n=0; led3=0000; j=1111; end if;k=h;o=j;end process;end;第二部分:数值输入模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsign
7、ed.all;use ieee.std_logic_arith.all;entity WER isport(rst,clk,tsr,en:in std_logic; p:out std_logic; c,d:in std_logic_vector(3 downto 0); duon:out std_logic_vector(5 downto 0); led3:in std_logic_vector(3 downto 0); cout:out std_logic_vector(6 downto 0);end;architecture one of WER issignal t,r:integer
8、 range 0 to 1;signal w:integer range 0 to 6;signal clk_1k:std_logic;signal clk_100h:std_logic;signal cnt6:integer range 0 to 3;signal data:std_logic_vector(3 downto 0);signal dout:std_logic_vector(5 downto 0);signal s:std_logic_vector(6 downto 0);signal led1,led2:std_logic_vector(3 downto 0);begin p
9、rocess (clk) variable cnt1:integer range 0 to 250; variable cnt2:integer range 0 to 100; begin if clkevent and clk=1 then if cnt1=250 then cnt1:=0; if cnt2=100 then cnt2:=0; clk_1k=not clk_1k; else cnt2:=cnt2+1; end if; else cnt1:=cnt1+1; end if; end if; end process; process (clk) variable cnt1:inte
10、ger range 0 to 5000; variable cnt2:integer range 0 to 5000; begin if clkevent and clk=1 then if cnt1=5000 then cnt1:=0; if cnt2=5000 then cnt2:=0; clk_100h=not clk_100h; else cnt2:=cnt2+1; end if; else cnt1:=cnt1+1; end if; end if; end process; process(clk_1k) begin if clk_1kevent and clk_1k=1 then
11、if cnt6=33 then cnt6=0; else cnt6doutdoutdoutnull; end case;end process;process(dout)begin case dout is when111110=datadatadatanull; end case;end process; process(clk_100h)beginif tsr=0 then led1=0000; led2=0000; t=0;else if rst=0 then t=1; p=0; led2=c;led1=d; elsif clk_100hevent and clk_100h=1 and
12、t=1 then if en=1 then if (led1=0000) then led1=1001; led2=led2-1; if (led2=0000) then led1=0000; led2=0000; if w=5 then p=1; w=w+1; else p=0; end if; else p=0; end if; else led1=led1-1; end if; else tssssssssssnull; end case;end process;duon=dout;cout=s;end;第三部分:译码模块library ieee;use ieee.std_logic_1
13、164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity yima isport( h:in std_logic_vector(6 downto 0); a,b,c,d,e,f,g:out std_logic);end;architecture one of yima isbegin g=h(6); f=h(5); e=h(4); d=h(3); c=h(2); b=h(1); a=h(0);end one;总体框图:四、管脚分配五硬件下载实现现象描述 和预想的效果一样。当主持人按下复位开关时,四个按键开关生效。选手开始抢答。抢答完后,显示管显示选手的号数。这时主持人可以设置答题时间的初始值此时,显示器从初始值开始倒计时,计至0时停止计数,同时扬声器发出超时报警信号。若参赛者在规定的时间内回答完问题,主持人可以用开关给出计时停止信号,以免扬声器鸣叫。六、体会与收获 这次实验虽然要实现的功能比较多,看起来仿佛也比较复杂,但是我们用了层次化来设计程序以后,才发现其实也不是很复杂,把程序分成三个模块来设计,设计起来明显降低了难度。只是在连接总体框上需要我们熟悉数电的知识,不过在翻阅资料后,问题都一一解决了。 .