当前位置: >>
EDA课程设计:拔河游戏机
XXXXXX 学院课 程 设 计题 目:EDA拔河游戏机课程设计作 专 班 学者: 业: 级: 号:XXX 自动化 XXX XXXXX XXX指导老师:2012 年 12 月 15 日主要内容、基本要求、主要参考资料等主要内容:电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲 乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时, 则该方 获胜,连续比赛多局以定胜负。基本要求:1、设计一个能进行拔河游戏的电路。 2、电路使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。 3、游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动, 每按一次,亮点移动一次。 4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后 才使亮点恢复到中心。 5、用数码管显示获胜者的盘数。主要参考资料:[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006. [3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.一、总体设计思想1.基本原理 由设计内容可知,需要一个十进制的计数器,用于对双方按钮的次数计数, 并通过译码器显示在数码管上。显视控制部分设计要求在发光二极管上显示游 戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次 移一位。需接入一个清零端,用于复位。将以上程序组装起来。 2.设计框图编码 电路控制电路整形 电路选择 开关可逆 计数器译码器图 1. 拔河机游戏机框图二、设计步骤和调试过程 1、总体设计电路总体电路图和仿真图如图(25)所示,由仿真图可知,此电路设计无误,可 以实现按动 A、B 两个按键时,分别产生两个脉冲信号,经整形后分别加到可逆 计数器上,可逆计数器输出的代码经译码器译码后驱动电平指示灯点亮并产生 位移,当亮点移到任何一方终端后,由于控制电路的作用,使这一状态被锁定, 双方按键产生的输入脉冲不起作用。如按动复位键 C,亮点又回到中点位置,再 次按 C 键则比赛又可重新开始。division:divclk_1 clkmusic:mu cmp:comclk_1 music_begin resetclk_inclk_inclk_100 clk_5 clk_100clk_5 mus music_beginmusdaojishi:daoclk_1 clk_in start row[7..0] col[7..0]sw reset record1[1..0] start record2[1..0] sum1[4..0] lights[2..0] sum2[4..0] clk_in led[7..0] record1[1..0] q[5..0] record2[1..0] cats[6..0] lights[2..0]decode:dec led[7..0] q[5..0] cats[6..0]resetresetcount:cntclk_1player1 player2player1 player2 swsum1[4..0] sum2[4..0]col[7..0] row[7..0]2图 2. 电路图2、模块设计和相应模块程序1.顶层文件library IEEE; use IEEE.std_logic_1164. use IEEE.std_logic_unsigned. entity bahe is port( player1,player2:in std_ --玩家 1,2 输入 clk_in:in std_ --clk_in(1MHZ) reset:in std_ --重置键 row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0); led:out std_logic_vector(7 downto 0); --绳子 cats:out std_logic_vector(6 downto 0); --比分 q:out std_logic_vector(5 downto 0); --数码管控制 mus:out std_logic); --蜂鸣输出 architecture body_bahe of bahe is --计数模块 component count port( clk_1:in std_ --1HZ 输入 sw:in std_ --状态开关 player1,player2:in std_ --选手输入 sum1,sum2:out std_logic_vector(4 downto 0)); --计数结果输出 --比较模块 component cmp port( clk_100:in std_ --100hz clk_1:in std_ --1hz sw:out std_ --状态开关输出 reset:in std_ --重置 start:in std_ --开始 sum1,sum2:in std_logic_vector(4 downto 0);--计数结果输入 music_begin:out std_ --音乐3record1,record2:out std_logic_vector(1 downto 0);--比分输出 lights:out std_logic_vector(2 downto 0)); --拔河绳子显示 --音乐模块 component music port( reset:in std_ --重置 clk:in std_ --1MHz clk_5:in std_ --5hz music_begin:in std_ --音乐开始 mus:out std_logic); --译码模块 component decode port( clk_in:in std_ --1mHZ record1,record2:in std_logic_vector(1 downto 0); --比分输入 lights:in std_logic_vector(2 downto 0); --拔河绳子输入 led:out std_logic_vector(7 downto 0); --输出到 LED q:buffer std_logic_vector(5 downto 0); --数码管控制 cats:out std_logic_vector(6 downto 0) --数码管显示比分 ); --倒计时模块 component daojishi port( clk_in,clk_1,reset:in std_ row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0); start: out std_logic ); --分频器输出 signal clk_100,clk_5,clk_1:std_ --时钟信号 --计数器输出 signal sum1,sum2:std_logic_vector(4 downto 0); --计数结果 --比较器输出 signal sw:std_ --状态开关 signal record1,record2:std_logic_vector(1 downto 0); --比分 signal lights:std_logic_vector(2 downto 0); --绳子 signal music_begin:std_ --解码器输出4signal tmp_led:std_logic_vector(7 downto 0); --LED 显示 signal tmp_q:std_logic_vector(5 downto 0); --数码管控制 signal tmp_cat:std_logic_vector(6 downto 0); --数码管显示比分 --倒计时器输出 signal tmp_start:std_ begin cats&=tmp_ q&=tmp_q; led&=tmp_ div: division port map(clk_in=&clk_in,clk_100=&clk_100,clk_5=&clk_5,clk_1=&clk_1); cnt: count port map( clk_1=&clk_1,sw=&sw,player1=&player1,player2=&player2, sum1=&sum1,sum2=&sum2); com: cmp port map( clk_100=&clk_100,clk_1=&clk_1,sw=&sw,reset=&reset, start=&tmp_start,sum1=&sum1,sum2=&sum2,music_begin=&music_begin, record1=&record1,record2=&record2,lights=&lights); dec: decode port map( clk_in=&clk_in,record1=&record1,record2=&record2, lights=&lights,led=&tmp_led,q=&tmp_q,cats=&tmp_cat); mu: music port map( reset=&reset,clk=&clk_in,clk_5=&clk_5, music_begin=&music_begin,mus=&mus); dao: daojishi port map( clk_in=&clk_in,clk_1=&clk_1,reset=&reset, start=&tmp_start,col=&col,row=&row); end body_ 2.CMP 模块library IEEE; use IEEE.std_logic_1164. use IEEE.std_logic_unsigned.5entity cmp is port(clk_100:in std_ --100HZ 输入 clk_1:in std_ --1HZ 输入 reset:in std_ --重置 start:in std_ --开始 sum1,sum2:in std_logic_vector(4 downto 0); --计数输入 record1,record2:out std_logic_vector(1 downto 0); --比分输出 music_begin:out std_ --音乐开始 sw:out std_ --状态输出 lights:out std_logic_vector(2 downto 0)); --绳子状态 architecture body_cmp of cmp is signal signal signal signal signal tmp_record1:std_logic_vector(1 downto 0); tmp_record2:std_logic_vector(1 downto 0); tmp:std_logic_vector(2 downto 0); tmp_sta:std_ s1,s2:std_logic_vector(4 downto 0); --比分 --绳子状态 --状态 --计数begin record1&=tmp_record1; record2&=tmp_record2; lights&= sw&=tmp_ process(clk_100) --判断比赛状态 begin if(start='1') then if(clk_100'event and clk_100='1') then tmp_sta&='1'; if(clk_100'event and clk_100='1') then --任意比分到 3,比赛结束, 开始播放音乐 if(tmp_record1=&11& or tmp_record2=&11&) then tmp_sta&='0'; music_begin&='1'; if(tmp=&001& or tmp=&111&) then --绳子到头,进入等待状态 tmp_sta&='0'; if(reset='1') then --复位,状态归零6tmp_sta&='0'; music_begin&='0'; s1&=sum1; s2&=sum2; process(clk_1,reset) begin if(reset='1') then tmp&=&100&; tmp_record1&=&00&; tmp_record2&=&00&; else if(clk_1'event and clk_1='1') then if(tmp_sta='1') then if(s1&s2) then tmp&=tmp-'1'; elsif(s1=s2) then tmp&= else tmp&=tmp+'1'; else if(tmp=&001&) then 加1 tmp_record1&=tmp_record1+'1'; tmp&=&100&; elsif(tmp=&111&) then 加 1, tmp_record2&=tmp_record2+'1'; tmp&=&100&; end body_ 3.COUT 模块 --控制绳子移位--绳子初始状态为 100--绳子左移 --绳子保持原状 --绳子右移--绳子到左尽头,左计分器--绳子到右尽头,右记分器use IEEE.std_logic_1164.7use IEEE.std_logic_unsigned. entity count is library IEEE; port(clk_1:in std_ --1HZ 输入 sw:in std_ --状态判断输入 player1,player2:in std_ --选手输入 sum1,sum2:out std_logic_vector(4 downto 0)); --计数输出 architecture body_count of count is signal p1,p2:std_logic_vector(4 downto 0); --计数输出 begin sum1&=p1; sum2&=p2; process(player1,player2,sw,clk_1) begin if(sw='1') then --处于比赛状态 if(clk_1='0') then if(player1'event and player1='1') then p1&=p1+'1'; if(player2'event and player2='1') then p2&=p2+'1'; else p1&=&00000&; p2&=&00000&; --比赛状态结束 else p1&=&00000&; p2&=&00000&; end body_ 4.daojishi 模块library IEEE; use IEEE.std_logic_1164. use IEEE.std_logic_unsigned.8entity daojishi is port(clk_1,clk_in,reset: in std_ row : out std_logic_vector(7 downto 0); col : out std_logic_vector(7 downto 0); start : out std_logic); architecture body_daojishi of daojishi is type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10); signal present_state:state:=s10; signal num:std_logic_vector(2 downto 0):=&000&; beginp3:process(clk_in) begin if clk_in'event and clk_in='1' then if num=&101& then num&=&000&; else num&=num+1; case present_state is when s9=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s8=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;9when s7=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s6=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s5=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s4=& case when when when when when whennum is &000&=& col&=&&; row&=&&; &001&=& col&=&&; row&=&&; &010&=& col&=&&; row&=&&; &011&=& col&=&&; row&=&&; &100&=& col&=&&; row&=&&; others=& col&=&&; row&=&&;10when s3=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s2=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s1=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&;when s0=& case when when when when whennum is &000&=& &001&=& &010&=& &011&=& &100&=&col&=&&; col&=&&; col&=&&; col&=&&; col&=&&;11row&=&&; row&=&&; row&=&&; row&=&&; row&=&&;when others=& col&=&&; row&=&&;when others=& case num is when &000&=& col&=&&; row&=&&; when &001&=& col&=&&; row&=&&; when &010&=& col&=&&; row&=&&; when &011&=& col&=&&; row&=&&; when &100&=& col&=&&; row&=&&; when others=& col&=&&; row&=&&; end process p3; p4:process(clk_1) begin if reset='1' then present_state&=s10;start&='0'; else if clk_1'event and clk_1='1' then case present_state is when s10=& present_state&=s9;start&='0'; when s9=& present_state&=s8;start&='0'; when s8=& present_state&=s7;start&='0'; when s7=& present_state&=s6;start&='0'; when s6=& present_state&=s5;start&='0'; when s5=& present_state&=s4;start&='0'; when s4=& present_state&=s3;start&='0'; when s3=& present_state&=s2;start&='0'; when s2=& present_state&=s1;start&='0'; when s1=& present_state&=s0;start&='1'; when s0=& present_state&=present_ when others=&start&='1'; end process p4; end body_12library IEEE; use IEEE.std_logic_1164. use IEEE.std_logic_unsigned. entity decode is port(clk_in:in std_ --1MHz record1,record2:in std_logic_vector(1 downto 0); --比分状态输入 lights:in std_logic_vector(2 downto 0); --绳子状态输入 led:out std_logic_vector(7 downto 0); --绳子解码后输出 q:buffer std_logic_vector(5 downto 0); --数码管控制 cats:out std_logic_vector(6 downto 0)); --数码管显示 architecture body_decode of decode is signal tmp_led:std_logic_vector(7 downto 0); --绳子输出 signal tmp_da1:std_logic_vector(6 downto 0); --比分 1 signal tmp_da2:std_logic_vector(6 downto 0); --比分 2 signal tmp:std_logic_vector(6 downto 0); --比分显示 begin led&=tmp_ cats&= process(clk_in,lights,record1,record2,q,tmp_da2,tmp_da1,tmp) begin case lights is --绳子状态 when &100&=& tmp_led&=&&; when &011&=& tmp_led&=&&; when &010&=& tmp_led&=&&; when &001&=& tmp_led&=&&; when &101&=& tmp_led&=&&; when &110&=& tmp_led&=&&; when &111&=& tmp_led&=&&; when others =&tmp_led&=&&; case record1 is --比分状态 when &00&=& tmp_da1&=&1111110&; when &01&=& tmp_da1&=&0110000&; when &10&=& tmp_da1&=&1101101&; when &11&=& tmp_da1&=&1111001&; case record2 is --比分状态 when &00&=& tmp_da2&=&1111110&;13when &01&=& tmp_da2&=&0110000&; when &10&=& tmp_da2&=&1101101&; when &11&=& tmp_da2&=&1111001&; if(clk_in='1') then q&=&111110&; if(clk_in='0') then q&=&011111&; case q is when &011111&=& tmp&=tmp_da2; when &111110&=& tmp&=tmp_da1; when others=& tmp&=&0000000&; end body_--数码管显示控制3、仿真及仿真结果分析创建一个仿真波形文件,输入引脚,并对所有 input 引脚付出值,保存仿 真波形文件。开始仿真,若仿真没有出错,则可观察仿真得到的波形图。仿真 波形图如下: (1)当 a 输入的频率大于 b 时,可观察到 led:低电平有规则的向左移动。 即向 a 方向移动,符合设计要求。见仿真图 1。 (2)改变输入 a b 的大小,b 的输入频率大于 a,得到的波形如下,由波 形图可知低电平向右边移动,即向 b 方向移动,符合设计要求。见仿真图 2。14仿真图 1仿真图 24、实验调试结果编 程 下 载 及 配 置 , 选 择 Assignments — Assignments Editor , 在Assignments Edito 窗口中选择 pin 标签页,按下图分配引脚。重编译,并进行 编程下载到 SOPC 开发板进行功能验证。验证,按 key 1 和 key10,观察 led 灯 和数码管的显示变化是否符合设计要求,如果和设计不符合对程序进行更改, 知道符合设计要求。三、结论及心得体会15EDA 课程设计要求做一个拔河游戏机,电路使用 9 个发光二极管,开后 只有中间一个发亮,此即拔河的中心点。游戏双方各持一个按钮,迅速地、 不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按十次,亮 点移动一次。亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮 均无作用,输出保持,只有复位后才使亮点恢复到中心。用数码管显示双方 按键的次数。 通过这次课程设计,我更加感到理论和实际之间的差异很大。我也越来 越强烈地感到要掌握一门技术,唯一的办法也是最好的办法就是实践。只有 通过实践才能将书本上的知识应用,也只有实践才能发现很多问题,真正掌 握知识,学以致用。虽然遇到的问题很多,但是同时得到很多有用的经验。 这些对于以后的学习和工作都是很有用的。四、参考资料[1] 潘 松,EDA 技术实用教程(第二版). 北京:科学出版社,2005. [2] 谭京生,EDA 技术及应用[M],西安:西安电子科技大学出版社,2001 [3] 徐志军,CPLD/FPGA 的开发与应用[M],北京:电子工业出版社,2001 [4] 朱正伟,EDA 技术与应用[M],北京:清华大学出版社,2005 [5] 潘 松,VHDL 实用教程[M],成都:电子科技大学出版社,200116
拔河游戏机EDA课程设计拔河游戏机EDA课程设计隐藏&& 课程设计任务书(
第一学 )年 设计题目:学院名称:专业 班级 :()姓名 学号 :() EDA与 字统程...eda拔河游戏机 17页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 EDA课程设计:拔河游戏机 隐藏&& XXXXXX 学...EDA课程设计拔河游戏机_工学_高等教育_教育专区。实验要求拔河游戏机 (1) 、设计要求 ? 设计一个能进行拔河游戏的电路。 ? 电路使用 15 个(或 9 个)发光...13页 8财富值 EDA课程设计拔河游戏机 20页 5财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...1.课程设计的任务和基本要求设计目的通过设计一个简易拔河比赛游戏机 (1) 熟练掌握 EDA 软件 QUARTUS II 的使用方法; (2) 能利用 EDA 软件 QUARTUS II 进行一...- 1 - / 20 西北工业大学 课程设计报告题目: 简易拔河游戏机 学班 院: 电子信息学院 级: 0301793 学生(学号): 学生(姓名): 张凡 学生(学号):...XXXXXXX 学院 课课 题院程目系 程 设 计 EDA 技术课程设计 拔河游戏机 电气工程系 XXXXX XXXXX XXXXXXXXXXX XXXX 专业班级 学生姓名 学生学号 指导教师 2012 ...EDA_拔河游戏机设计报告_工学_高等教育_教育专区。目 录 拔河游戏机设计 ... - 1 1.摘要 ...目 录 拔河游戏机设计 ... ...拔河游戏机课程设计报告 20页 1下载券 课程设计拔河游戏控制电... 22页 1下载...\EDA-DXP\Sheet_1.Sch Sheet of Drawn By: 6 Number Revision 图 1 CC...eda拔河游戏机课程设计报告_工学_高等教育_教育专区。仅供参考! 报告书写要求 1、 报告的撰写要求条理清晰、语言准确、表述简明。报告中段首空两个字符,中文字体为...
All rights reserved Powered by
www.tceic.com
copyright ©right 。文档资料库内容来自网络,如有侵犯请联系***。当前位置:&&
课程设计任务书
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
课程设计任务书
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://jz.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口