EDA课程设计-拔河游戏机?

一、总体设计思路

电子拔河游戏机是一种可以容纳双方的游戏电路。拔河的电子绳是用一排发光二极管来表示的。按下按钮开关,甲乙双方使LED延伸到一边的末端。当LED延伸到一方的最后一个LED时,另一方获胜,通过连续打几局来决定胜负。

1.基本原则

这个电路需要使用九个发光二极管,启动后只有一个发光,这是拔河的中心点。游戏双方各持一个按钮,快速连续按下,产生脉冲。谁按的快,高亮就往谁的方向移动。每按一次,高亮就会移动一次。当亮点移动到任一侧的终端二极管时,该侧获胜。此时两个按钮都没有作用,输出维持。只有复位后,亮点才能恢复到中心。最后用数码管显示中奖盘数。

根据设计内容,我们需要一个十进制计数器来统计两边按钮的数量,并通过解码器显示在数码管上。设计要求频率为50MHz,而设计使用的频率为1K Hz,所以要设计一个程序来分频。其次,显示控制部分的设计要求在LED上显示游戏状态。双方每按十次,亮点先移动十次,脉冲数每十次移动一位。复位时需要连接一个clear端子。再次,利用VHDL编程语言对各个模块进行编程,控制电路的正常工作。最后,将以上程序进行组装,即可得到所需的拔河游戏机。

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体bahe是

port (a,b,rst,clk:在std_logic中;

sg,led:out STD _ logic _ vector(8 down to 0);

Bt:out STD _ logic _ vector(7 down to 0));

end bahe

-

巴赫的建筑之一是

组件cnt10

port (clk,rst,en:STD _ logic;

cout:out STD _ logic;

CQ:out STD _ logic _ vector(3 down to 0));

末端组件;

组件扫描

port(clk:in STD _ logic;

a1,a2,a3,b1,b2,B3:in STD _ logic _ vector(3 down to 0);

SG:out STD _ logic _ vector(8 down to 0);

Bt:out STD _ logic _ vector(7 down to 0));

末端组件;

组件lmov

port (kl,kr:in STD _ logic _ vector(3 down to 0);

led:out STD _ logic _ vector(8 down to 0);

en:out STD _ logic;

rst:在std_logic中);

末端组件;

信号e,f,ca1,ca2,cb1,cb2:STD _ logic;

信号cqa1,cqa2,cqa3,cqb1,cqb2,cqb 3:STD _ logic _ vector(3 down to 0);

开始

u1: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gta,cout = & gtca1,cq= >cqa 1);

u2: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gtca1,cout= >ca2,cq = & gtcqa 2);

u3: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gtca2,cq = & gtCQ a3);

u4: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gtb,cout = & gtcb1,cq = & gtcqb 1);

u5: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gtcb1,cout = & gtcb2,cq = & gtcqb 2);

u6: cnt10端口映射(en = & gte,rst = & gtrst,clk = & gtcb2,cq = & gtCQ B3);

u7:扫描端口映射(a 1 = & gt;cqa1,a2= >cqa2,a3 = & gtcqa3,b1= >cqb1,

b2 = & gtcqb2,b3 = & gtcqb3,clk = & gtclk,sg = & gtsg,bt = & gtBt);

u8:lmov端口映射(en = & gte,kl = & gtcqa2,kr = & gtcqb2,rst = & gtrst,led = & gtled);

端架构一;

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体cnt10是

port(clk,rst,en:STD _ logic;

cout:out STD _ logic;

CQ:out STD _ logic _ vector(3 down to 0));

结束;

cnt10的架构之一是

开始

过程(时钟、rst、en)

变量cqi:STD _ logic _ vector(3 down to 0);

开始

如果rst='1 ',则

cqi:=(其他= & gt'0');

elsif clk ' event and clk = ' 1 ' then

如果en='1 ',则

如果cqi & lt9那么cqi:= cqi+1;

else cqi:=(others = & gt;'0');

结束if;

结束if;

结束if;

如果c qi=9,那么cout & lt='0' ;

else cout & lt='1';

结束if;

cq & lt= cqi

结束进程;

结束;

电路的VHDL程序如下:

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体扫描是

port(clk:in STD _ logic;

a1,a2,a3,b1,b2,B3:in STD _ logic _ vector(3 down to 0);

SG:out STD _ logic _ vector(8 down to 0);

Bt:out STD _ logic _ vector(7 down to 0));

结束;

建筑扫描之一是

信号CNT 4:STD _ logic _ vector(2 down to 0);

信号a:std_logic_vector(3降0);

信号clk 1:STD _ logic;

开始

p1:进程(cnt4)

开始

案例cnt4是

当“000”= >bt & lt="10000000";a & lt= a 1;

当" 001"= >时;bt & lt="01000000";a & lt= a2

当" 010"= >时;bt & lt="00100000";a & lt= a3

当" 011"= >bt & lt="00000100";a & lt= b 1;

当" 100"= >bt & lt="00000010";a & lt= b2

当" 101"= >bt & lt="00000001";a & lt= b3

当别人= & gtbt & lt="00000000";

结束案例;

结束进程p 1;

-

p2:进程(时钟)

可变ct:整数范围0到50000;

开始

如果clk事件和clk='1 ',那么- 1000HZ

如果ct & lt那就49999

CT:= CT+1;

clk 1 & lt;='0';

其他

CT:= 0;

clk 1 & lt;='1';

结束if;

结束if;

结束过程p2;

流程(clk1)

开始

如果clk1 '事件和d clk1='1 '则

如果cnt4 & lt那就5

cnt4 & lt= CNT 4+1;

其他

cnt4 & lt="000";

结束if;

结束if;

结束进程;

-

流程(a)

开始

案例a是

当" 0000"= >时;sg & lt="100000000";

当" 0001"= >时;sg & lt="111110001";

当" 0010"= >时;sg & lt="001001000";

当" 0011"= >时;sg & lt="001100000";

当" 0100"= >sg & lt="000110010";

当" 0101"= >sg & lt="000100100";

当" 0110"= >sg & lt="000000100";

当" 0111"= >时;sg & lt="111110000";

当" 1000"= >sg & lt="000000000";

当" 1001"= >sg & lt="100011111";

当" 1010"= >sg & lt="000100100";

当" 1011"= >时;sg & lt="000011000";

当" 1100"= >sg & lt="010001100";

当" 1101"= >时;sg & lt="001001000";

当" 1110"= >sg & lt="001000000";

当" 1111"= >sg & lt="000011111";

当别人= & gtnull

结束案例;

结束进程;

结束;

⑸胜利和失败的展示

将非门后两端二极管的正端输出连接到两个CC4518计数器的EN端,将CC4518的两组4位BCD码连接到实验装置的两组解码显示器的A、B、C、D插座上。当一方获胜时,另一方的终端二极管点亮,产生上升沿,使相应的计数器计数1,即可显示双方获胜的次数。如果一位数不够,就级联两位数。

[6]重置

它的VHDL程序如下:

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体lmov是

port (kl,kr:in STD _ logic _ vector(3 down to 0);

led:out STD _ logic _ vector(8 down to 0);

en:out STD _ logic;

rst:在std_logic中);

结束;

lmov的架构一是

开始

流程(rst,kl,kr)

开始

如果rst='1 '那么led & lt="111101111";en & lt='1';

elsif kl-kr=1然后led & lt="111011111";en & lt='1';

elsif kl-kr=2然后led & lt="110111111";en & lt='1';

elsif kl-kr=3然后led & lt="101111111";en & lt='1';

elsif kl-kr=4然后led & lt="011111111";en & lt='0';

elsif kr-kl=1然后led & lt="111110111";en & lt='1';

elsif kr-kl=2然后led & lt="111111011";en & lt='1' ;

elsif kr-kl=3然后led & lt="111111101";en & lt='1';

elsif kl-kr=4然后led & lt="111111110";en & lt='0';

elsif kr-kl=0然后led & lt="111101111";en & lt='1';

else null

结束if;

结束进程;

结束;