EDA课程设计-拔河游戏A设计

题目说明:
1)设计拔河游戏电路,用按键与LED表示输入与输出。
2)初始时,24个LED中间的两个点亮(引脚编号是100和99),然后游戏双方不停按动按键(K7和K0),点亮的两个LED向按动按键慢的一方移动;
3)每按动一下按键,LED向对方移动一格;
4)只要LED移动到头,游戏结束;
5)游戏结束时让胜利一方的LED灯(K7方:118-110,K0方:86-98)循环点亮。

题目比较简单,但是这个题目关键的地方在于按键的消抖(由于按键在按下的时候,看上去是按了一次,其实按键刚按下时抖动了很多次,这是机械特性,无法避免),有多少按键就要写多少消抖程序

  • 在消抖程序中,k0输出后为k00,k7输出后为k77。
  • 性能方面实现比较简单,功能比较单一,没有比较复杂的版块或功能,有很多可以改进的地方,比如增加数码管的计数功能,每当任意一方胜利的时候,上方的数码管计数器相应的加一等其他功能,但是由于时间问题没有去实现。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;


entity bahe is
	port(CLR,CLK,K7,K0: in std_logic;
		 LED: out std_logic_vector(23 downto 0)
		 );
end bahe;

ARCHITECTURE behavior of bahe is
	signal buff  :bit_vector(23 downto 0):="000000000001100000000000";
	signal buff2 :bit_vector(7 downto 0):="10000000";
	signal buff3 :bit_vector(10 downto 0):="00000000001";
	shared variable flag :std_logic:='0';
	signal k77:std_logic;
	signal count_k7:integer range 0 to 9;
	signal k00:std_logic;
	signal count_k0:integer range 0 to 9;
begin
	process(K00,K77,CLK,CLR)
	begin
	if buff = "000000000000000000000011" or  buff = "110000000000000000000000" then
		flag := '1';
	end if;
	if CLR='1' then
		if CLK'event and CLK='1' then
			if flag='0' then
				if K77 = '0' 
					then buff <= buff SRL 1;右移
				elsif K00= '0' 
					then buff <= buff SLL 1;左移
				end if;
			elsif flag='1' then
				if buff(1 downto 0) = "11" then
					buff2<=buff2 ror 1 ;//循环右移
					buff(23 downto 16)<=buff2;
				ELSIF buff(23 downto 22) = "11" then
					buff3<=buff3 rol 1 ;//循环左移
					buff(10 downto 0)<=buff3;
				end if;
			end if;
		end if;
	elsif CLR='0' then
		buff<="000000000001100000000000";
		flag := '0';
	end if;
		led <= to_stdlogicvector(buff);
	end process;

p1:process(clk)
begin
	if k7='0' then
		count_k7<=0;
	elsif (clk'event and clk='1' )then
		if count_k7=2 then
		count_k7<=count_k7; 
		else
		count_k7<=count_k7+1;
		end if;
	end if; 
	if count_k7=1 then
		k77<='0';
	else
		k77<='1';
	end if;
end process p1;

p2:process(clk)
begin
		if k0='0' then
		count_k0<=0;
	elsif (clk'event and clk='1' )then
		if count_k0=2 then
		count_k0<=count_k0; 
		else
		count_k0<=count_k0+1;
		end if;
	end if; 
	if count_k0=1 then
		k00<='0';
	else
		k00<='1';
	end if;
end process p2;

end ARCHITECTURE;
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
红绿灯控制程序是一种重要的交通信号控制系统,它为行人和车辆提供安全和有序的通行环境。在EDA(电子设计自动化)课程中,我们可以使用VerilogHDL语言编写一个红绿灯控制程序。 首先,我们需要定义模块的输入和输出。输入可以包括信号灯的控制信号、定时器计数信号以及其他传感器信号。而输出是交通信号灯的显示状态。 然后,我们可以使用状态机的概念来设计红绿灯控制程序。状态机通常包含多个状态和状态之间的转换条件。在这个例子中,我们可以定义两个状态:红灯和绿灯。初始状态可以是红灯。我们还可以定义一个定时器,用于确定每个状态的持续时间。 在状态机中,我们可以根据不同的条件进行状态转换。例如,当红灯状态持续一定的时间后,我们可以通过切换控制信号来使绿灯亮起。同样地,当绿灯状态持续一定的时间后,我们可以切换回红灯状态。 为了实现这一切,我们可以在状态机中使用计数器,递增计数器的值,当计数器到达阈值时,进行状态切换。同时,我们也需要适当地处理输入信号,例如行人过马路的信号,来处理红灯状态的延长或绿灯状态的缩短。 最后,我们需要将设计好的VerilogHDL代码进行编译和合成,并通过仿真或实际硬件进行验证和测试。通过仿真和测试,我们可以确保红绿灯控制程序的正确性和性能。 红绿灯控制程序是交通基础设施中不可或缺的一部分,通过EDA课程的学习,我们可以使用VerilogHDL语言编写出高效可靠的红绿灯控制程序,为我们的城市交通安全提供保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值