FPGA作业

发布 2022-09-03 11:43:28 阅读 4608

院系:机电工程学院专业:自动化班级:三班姓名:学号:日期:

期末作业设计。

fpga作业智力抢答器的设计。

比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。同时,还可以设置计分、犯规及奖惩计录等多种功能。

本设计的具体要求是:

1)设计一个三组参赛者的数字智力抢答器,每组设置一个抢答按。

供抢答者使用。

2)电路具有第一抢答信号的鉴别和锁存功能。(3)设置计分电路。(4)设置犯规电路。

程序编写与调试:

抢答鉴别模块的源程序。

抢答队伍共分为三组a,b,c。当主持人按下start键后,三组队伍才可以按抢答键抢答。抢答成功后表示该组的指示灯见亮起,但在主持人未按下start键之前,所有的抢答键按下均是无效的。

当任意一个组抢答成功后,其余的组按抢答键无效。抢答键为a,b,c四个键。

library ieee;

use jb is

port(sta:in std_logic;rst:in std_logic;a,b,c:in std_logic;a1,b1,c1:out std_logic;

states: out std_logic_vector(3 downto 0);start: out std_logic);end entity jb;

architecture art of jb is

constant w1: std_logic_vector:="0001";constant w2:

std_logic_vector:="0010";constant w3: std_logic_vector:

="0100";signal sinor: std_logic;signal nsinor: std_logic;

signal s_start: std_logic;begin

sinor<=a or b or c ;nsinor<=not(a or b or c );start<=s_start;process(sta,nsinor) isbegin

if (sta='1') thens_start<='1';

elsif(nsinor'event and nsinor='1')thens_start<='0';end if;end process;

process(rst,sta,sinor,nsinor) isbegin

if(rst='1' or sta='1' or nsinor='1')thena1<='0';b1<='0';c1<='0';

elsif(sinor'event and sinor='1')thenif(s_start='1')thenif(a='1')thena1<='1';b1<='0';c1<='0';elsif(b='1')thena1<='0';b1<='1';c1<='0';elsif(c='1')thena1<='0';b1<='0';c1<='1';elsif(d='1')thena1<='0';b1<='0';c1<='0';end if;end if;end if;end process;process(sinor) isbegin

if(rst='1')then

states<="0000";

elsif(sinor'event and sinor='1')thenif(s_start='1')thenif(a='1')thenstates<=w1;elsif(b='1')thenstates<=w2;elsif(c='1')thenstates<=w3;end if;end if;end process;

end architecture art;

抢答计时模块的源程序。

主持人宣布抢答成功后,按下en键,选手开始回答,系统开始计时。library ieee;

use js is

port(clr,ldn,en,clk:in std_logic;ta,tbin std_logic;

qaout std_logic_vector(3 downto 0);qbout std_logic_vector(3 downto 0));end entity js;

architecture art of js is

signal da: std_logic_vector(3 downto 0);signal db: std_logic_vector(3 downto 0);begin

process(ta,clr) isbegin

if(clr='1')thenda<="1001";

elsif(ta'event and ta='1')thenif(ldn='1')then

if(da="0000")thenda<="1001";else

da<=da-1;end if;end if;end if;end process;process(tb,clr) isbegin

if(clr='1')thendb<="0101";

elsif(tb'event and tb='1')thenif(ldn='1')thenif db="0000"thendb<="1001";else

db<=db-1;end if;end if;end if;end process;process(clk) is

variable tmpa: std_logic_vector(3 downto 0);variable tmpb: std_logic_vector(3 downto 0);begin

if(clr='1')thentmpa:="0000";tmpb:="0000";

elsif clk'event and clk='1' thenif en='1'thentmpa:=da;tmpb:=db;elsif tmpa="0000"then

if tmpb="0000"thentmpa:="0000";else

tmpa:="1001";end if;

if tmpb="0000"thentmpb:="0000";else

tmpb:=tmpb-1;end if;else

tmpa:=tmpa-1;end if;end if;qa<=tmpa;qb<=tmpb;end process;

end architecture art;

下图为该模块的时序**图:

抢答计分模块的源程序。

主持人确认选手回答正确后,按下add键为选手加分。library ieee;

use jf is

port(rst: in std_logic;add: in std_logic;

chose: in std_logic_vector(3 downto 0);

aa2,aa1,aa0,bb2,bb1,bb0: out std_logic_vector(3 downto 0);cc2,cc1,cc0: out std_logic_vector(3 downto 0));end entity jf;architecture art of jf isbegin

process(rst,add,chose) is

variable a2,a1:std_logic_vector(3 downto 0);variable b2,b1:std_logic_vector(3 downto 0);variable c2,c1:

std_logic_vector(3 downto 0);variable d2,d1:std_logic_vector(3 downto 0);beginif(rst='1')then

a2:="0001";a1:="0000";b2:="0001";b1:="0000";c2:="0001";c1:="0000";

elsif(add'event and add='1')thenif chose="0001"thenif a1="1001"thena1:="0000";if a2="1001"thena2:="0000";else

a2:=a2+'1';end if;else

a1:=a1+'1';end if;

elsif chose="0010"thenif b1="1001"thenb1:="0000";if b2="1001"thenb2:="0000";else

b2:=b2+'1';end if;else

b1:=b1+'1';end if;

elsif chose="0100"thenif c1="1001"thenc1:="0000";if c2="1001"thenc2:="0000";else

c2:=c2+'1';end if;else

c1:=c1+'1';end if;

elsif chose="1000"thenend if;end if;

aa2<=a2;aa1<=a1;aa0<="0000";bb2<=b2;bb1<=b1;bb0<="0000";cc2<=c2;cc1<=c1;cc0<="0000";end process;end architecture art;

译码显示模块的源程序。

译码显示模块用于显示每组选手的分数,计时器的时间等信息。

library ieee;

use ym is

port(in4: in std_logic_vector(3 downto 0);out7:out std_logic_vector(6 downto 0));end ym;

architecture art of ym isbeginprocess(in4)begincase in4 is

when"0000"=>out7<="0111111";when"0001"=>out7<="0000110";when"0010"=>out7<="1011011";when"0011"=>out7<="1001111";when"0100"=>out7<="1100110";when"0101"=>out7<="1101101";when"0110"=>out7<="1111101";when"0111"=>out7<="0000111";when"1000"=>out7<="1111111";when"1001"=>out7<="1101111";when others=>out7<="0000000";end case;end process;end architecture;

下图为该模块的时序**图:

报错模块的源程序。

主持人未按下start键时,若有选手按抢答键,系统报警。library ieee;

use fg is

port(a,b,c,start:in std_logic;y:out std_logic);end fg;

architecture bhv of fg isbegin

process(a,b,c,start)begin

if start='0' thenif (a or b or c )=1' theny<='1';end if;elsey<='0';end if;end process;end architecture;

FPGA作业

可编程逻辑器件有哪些类型?fpga与cpld有什么区别?目前生产和使用的可编程逻辑器件 programmable logic device,pld 产品主要有可编程只读存储器 prom 现场可编程逻辑阵列 field programmable logic array,fpga 可编程阵列逻辑 pro...

FPGA作业

fpga入门应用。姓名。学院。班级。学号。年月日。一 文本输入法 subdesign t3 3 a,b,c input a out,b out,c out output beginif a then a out vcc b out gnd c out gnd elsif b then a out g...

FPGA作业答案

1 简述eda的发展历程及各阶段的特点1 手工设计阶段。2 计算机辅助设计 cad 20世纪70年代,属eda技术发展初期。该阶段的特点是一些单独的工具软件,主要有pcb布线设计 电路模拟 逻辑模拟及版图的绘制通过计算机的使用,从而将设计人员从大量繁琐重复的计算和绘图工作中解脱出来。3 计算机辅助工...