EDA课程设计

时间:2024.3.24

乒乓球游戏电路设计

一、  乒乓球设计方案

(1)我们设计的乒乓球游戏是以一排发光二极管交替发光指示乒乓球的行进路径,其行进的速度可由输入的时钟信号控制。乒乓球比赛是甲乙双方的比赛,所以用两个按键模拟左右两个球拍;我们还要设计一个乒乓球控制模块,即当发光二极管到最后一个的瞬间,若检测到对应的表示球拍的键的信号,立即使“球”反向运行,如果此瞬间没有接到按键信号,将给出失败鸣叫,同时为对方记1分,并将记分显示出来,然后由对方重新发球以此类推;还要设计失球计数器的高低位计数模块;乒乓球行进方向控制模块,主要由发球键控制;还要有一个失球提示发生模块。

(2)要知道乒乓球的游戏规则,以多少分为一局,谁先得到一定的分数谁就赢一局,以此来判断输赢。

(3)用数码管显示双方的得分,还要设计一个十进制计数器,来显示分数。

(4)在乒乓球设计方案时还要考虑球速的问题。

二、乒乓球游戏电路的设计程序

1、

LIBRARY IEEE;--乒乓球游戏顶层文件

use ieee.std_logic_1164.all;

entity TENNIS is

port(bain,bbin,clr,clk,souclk:in std_logic;

ballout:out std_logic_vector(7 downto 0);

countah,countal,countbh,countbl:out std_logic_vector(3 downto 0);

lamp,speaker:out std_logic);

end entity TENNIS;

architecture ful of TENNIS is

component sound

port(clk,sig,en:in std_logic;

sout:out std_logic);

end component;

component ballctrl

port(clr,bain,bbin,serclka,serclkb,clk:in std_logic;

bdout,serve,serclk,ballclr,ballen:out std_logic);

end component;

component ball

port(clk,clr,way,en:in std_logic;

ballout:out std_logic_vector(7 downto 0));

end component;

component board

port(ball,net,bclk,serve:in std_logic;

couclk,serclk:out std_logic);

end component;

component cou10

port(clk,clr:in std_logic;

cout:out std_logic;

qout:out std_logic_vector(3 downto 0));

end component;

component cou4

port(clk,clr:in std_logic;

cout:out std_logic;

qout:out std_logic_vector(3 downto 0));

end component;

component mway

port(servea,serveb:in std_logic;

way:out std_logic);

end component;

signal net,couclkah,couclkal,couclkbh,couclkbl,cah,cbh:std_logic;

signal serve,serclka,serclkb,serclk,ballclr,bdout,way,ballen:std_logic;

signal bbll:std_logic_vector(7 downto 0);

begin

net<=bbll(4);ballout<=bbll;lamp<=clk;

uah:cou4 port map(couclkah,clr,cah,countah);

ual:cou10 port map(couclkal,clr,couclkah,countal);

ubh:cou4 port map(couclkbh,clr,cbh,countbh);

ubl:cou10 port map(couclkbl,clr,couclkbh,countbl);

ubda:board port map(bbll(0),net,bain,serve,couclkal,serclka);

ubdb:board port map(bbll(7),net,bbin,serve,couclkbl,serclkb);

ucpu:ballctrlport map(clr,bain,bbin,serclka,serclkb,clk,bdout,serve,serclk,

ballclr,ballen);

uway:mway port map(serclka,serclkb,way);

uball:ball port map(clk,ballclr,way,ballen,bbll);

usound:sound port map(souclk,ballen,bdout,speaker);

end ful;

2、

library ieee;

use ieee.std_logic_1164.all;

entity sound is

port(clk:in std_logic; --发声时钟

sig:in std_logic;         --正确接球信号

en:in std_logic;          --球拍接球脉冲

sout:out std_logic);         --提示声输出,接小喇叭

end entity sound;

architecture ful of sound is

begin

sout<=clk and (not sig) and en;--球拍接球,没接到时,发提示声

end ful;

3、

library ieee;                     --总控制模块

use ieee.std_logic_1164.all;

entity ballctrlis

port(clr:in std_logic;       --系统复位

bain:in std_logic;            --左球拍

bbin:in std_logic;            --右球拍

seclka:in std_logic;               --左拍准确接球或发球

serclkb:in std_logic;        --右拍准确接球或发球

clk:in std_logic;              --乒乓球灯移动时钟

bdout:out std_logic;        --球拍接球脉冲

serve:out std_logic;              --发球状态信号

serclk:out std_logic;        --球拍正确接球信号

ballclr:out std_logic;       --乒乓球灯清零信号

ballen:out std_logic);      --乒乓球灯使能

end entity ballctrl;

architecture ful of ballctrl is

signal bd:std_logic;

signal ser:std_logic;

begin

bd<=bain or bbin;

ser<=serclka or serclkb;serclk<=ser;--球拍正确接球信号

bdout<=bd;                     --球拍接球脉冲

process(clr,clk,bd)

begin

if(clr='1')then                  --系统复位

serve<='1';                      --系统处在职发球状态

ballclr<='1';                    --乒乓球灯清零

else

if(bd='1')then                  --系统正常

--球拍发球或接球时

ballclr<='1';    --乒乓球灯清零

if(ser='1')then --球拍发球或准确接球

ballen<='1';    --乒乓球灯使能允许

serve<='0';     --系统处在接球状态

else ballen<='0';

serve<='1';     --系统处在发球状态

end if;

else ballclr<='0';--没发球或接球时乒乓球灯不清零

end if;

end if;

end process;

end ful;

4、--乒乓球灯模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity ball is

port(clk:in std_logic;            --乒乓球灯前进时钟

clr:in std_logic;                     --乒乓球灯清零

way:in std_logic;                  --乒乓球灯前进方向

en:in std_logic;                     --乒乓球灯使能

ballout:out std_logic_vector(7 downto 0));--乒乓球灯

end entity ball;

architecture ful of ball is

signal lamp:std_logic_vector(9 downto 0);

begin

process(clk,clr,en)

begin

if(clr='1') then lamp<="1000000001";--清零

elsif en='0' then

elsif (clk'event and clk='1')then--使能允许,乒乓球灯前进时钟上升沿

if(way='1') then lamp(9 downto 1)<=lamp(8 downto 0);lamp(0)<='0';

--乒乓球灯右移

else lamp(8 downto 0)<=lamp(9 downto 1); lamp(9)<='0';--乒乓球灯左移

end if;

end if;

ballout<=lamp(8 downto 1);

end process;

end ful;

5、--乒乓拍模块

library ieee;

use ieee.std_logic_1164.all;

entity board is

port(ball:in std_logic;     --接球点,也就是乒乓球灯的末端

net:in std_logic;         --乒乓球灯的中点,乒乓球过中点时,counclk、serclk复位

bclk:in std_logic;       --球拍接球信号

serve:in std_logic;           --发球信号

couclk:out std_logic;

serclk:out std_logic);

end entity board;

architecture ful of board is

begin

process(bclk,net)

begin

if(net='1')then serclk<='0';couclk<='0';--乒乓球过中点时,counclk、serclk复位

elsif(bclk'event and bclk='1')then—球拍接球时

if(serve='1')then serclk<='1';--系统处于发球状态时—发球成功

else—系统处于接球状态

if(ball='1')then serclk<='1';--乒乓球刚落在接球点上,接球成功

else serclk<='0';couclk<='1';

end if;

end if;

end if;

end process;

end ful;

6、--十进制计数器用来做失球低位计数

library ieee;

use ieee.std_logic_1164.all;

entity mway is

port(servea:in std_logic;

serveb:in std_logic;

way:out std_logic);

end entity mway;

architecture ful of mway is

begin

process(servea,serveb)

begin

if(servea='1')then way<='1';

elsif(serveb='1')then way<='0';

end if;

end process;

end ful;

7、--四进制计数器用来做失球高位计数

library ieee;

use ieee.std_logic_1164.all;

entity mway is

port(servea:in std_logic;

serveb:in std_logic;

way:out std_logic);

end entity mway;

architecture ful of mway is

begin

process(servea,serveb)

begin

if(servea='1')then way<='1';

elsif(serveb='1')then way<='0';

end if;

end process;

end ful;

8、--乒乓球前进方向产生模块

library ieee;

use ieee.std_logic_1164.all;

entity mway is

port(servea:in std_logic;--左选手发球信号

serveb:in std_logic;--右选手发球信号

way:out std_logic);--乒乓球灯前进方向信号

end entity mway;

architecture ful of mway is

begin

process(servea,serveb)

begin

if(servea='1')then way<='1';--左选手发球方向向右

elsif(serveb='1')then way<='0';--右选手发球方向向左

end if;

end process;

end ful;


三、   乒乓球游戏程序的仿真波形

仿真波形图

四、硬件测试方法

    然后我们就要测试硬件,下载文件。硬件测试选择电路模式3.其中bain和bbin分别为选手甲、乙球拍,选手甲的模拟球拍是键8,选手乙的模拟球拍是键1,可由任何一方先发球(按键);双方失球分数分别显示与数码管3/2和数码管7/6.控制信号可分别由键8和键1控制,clr是清0控制,可由键7输入控制信号;clk是乒乓球的进行速度时钟(即发光管的亮灯传递速度),可接clock2(选择4hz);sound失球提示发生时钟,可接clock5(选择1024HZ);ballout[7..0] 指示球路行进情况,用8个发光管担任countbh[3..0]和countbl[3..0]接数码管7和6,分别指示左边球手得分的高位和低位;countah[3..0]和countal[3..0]接数码管3和2,分别指示右边球手得分的高位和低位;lamp接数码管7的一段,指示clock2速度;speaker接蜂鸣器,失球提示指示信号。

五、课程设计心得

通过这次EDA课程设计能更加融汇了Quartus II 6.0和硬件方面的结和,以前没连结硬件时单一的仿真出现的问题在这次课设过程中发现了许多的解决方法。

本次EDA课设我选择的题目是乒乓球游戏电路设计。选好题目后开始分析、录入VHDL程序、编译、仿真、硬件下载。在编译过程中出现过很多问题,也正是这些问题让我一步步分析源程序,一点点找出问题的所在,解决问题。

正是这样一点点的找出问题解决问题才能更好的了解EDA,使用软件的时候也能更好的和硬件联系起来。

    通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够得,只有把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考能力。理论与实际相结合,不仅让我们学到了知识,还锻炼了我们的能力,使自己对以后的路有了更加清楚的认识。

更多相关推荐:
工程预算课程设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着工程技术发展的日新日异,工程造价已经成为当今建筑工程领域最为重要的管理环…

c++课程设计总结

课程设计总结经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期近两周的C++课程设计中,我体会颇多…

化工原理课程设计总结

《化工原理课程设计》总结本学期顺利完成了化学工程与工艺专业共100名同学的化工原理课程设计,总体来看学生的工艺计算、过程设计及绘图等专业能力得到了真正有效的提高,可以较好地把理论学习中的分散知识点和实际生产操作…

PLC自动门课程设计心得体会

PLC自动门课程设计心得体会:通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没怎么看过当要开始设计的时候还真不知从哪下手!结果第一次的上机我傻坐着不知道该做什么后来就写了几…

课程设计心得体会

课程设计心得体会在初学C语言的一个学期后,学校组织我们进行了C语言实训,尝试编写一些有难度的程序。在为期两周的时间中,同组同学共同的感受是:C语言实训和平时上课所接触的程序是完全不同的,所经受的考验是平时所无法…

综合实践活动课程设计练习题(判断题、填空题、名词解释、简答题)

单选题第1题(3.0)分下列以研究性为主的探究活动的实施程序哪个是正确的√A、产生问题-确定主题-组建小组-制定计划-开展活动-总结成果-展示交流-评价反思B、产生问题--组建小组-确定主题-制定计划-开展活动…

20xx年《管理信息系统》课程设计论文选题

20xx年《管理信息系统》课程设计论文选题一、管理信息系统设计与开发1、IT行业市场情报管理信息系统设计与开发2、某工业企业生产业务处理信息系统设计与开发3、某产品质量管理信息系统设计与开发4、某工业企业设备管…

消防课程设计范文.doc

课程设计课题名称所在班级同组姓名指导教师目录1前言12简介13火灾危险性分析231学生公寓的火灾特点232学生公寓的火灾危险性等级233学生公寓的耐火等级2331建筑物耐火等级的划分2332建筑物耐火等级的选定...

化工原理课程设计范文

化工原理课程设计3题目吸收量为2400mh水吸收丙酮过程填料塔设计教学院专业班级学生姓名学生学号指导教师20xx年12月24日I目录任务书1摘要2第一章绪论311吸收技术概况312吸收设备的发展313吸收过程在...

毕业论文及课程设计参考模版

摘要摘要电信营业厅顾客排队是一个常见的现象为了提高顾客满意度并为实现电信企业转型提供保障必须解决好这个问题而解决该问题的基本目标是平稳波动的顾客需求与电信营业厅有限的服务能力之间的矛盾本文基于排队论和需求管理的...

课程设计排版范本

课程设计课题名称我校顺枫公寓A6栋的消防现状分析与改进专业名称安全工程所在班级安本0803班设计者解燕同组人姜琼学号0860124031008601240212指导教师胡鸿湖南工学院课程设计任务书安全与环境工程...

创新课程设计范例

机械创新设计课程设计院系班级成员指导老师设计题目1年月日多功能平口钳设计方案一设计任务简述多功能平口钳为了实现平口钳的多功能化解决平口钳功能单一的问题设计出一种多功能平口钳其我们将钳口作成燕尾槽结构并配合以不同...

课程设计(518篇)