EDA课程设计按键游戏机.docx
- 文档编号:10180687
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:17
- 大小:626.70KB
EDA课程设计按键游戏机.docx
《EDA课程设计按键游戏机.docx》由会员分享,可在线阅读,更多相关《EDA课程设计按键游戏机.docx(17页珍藏版)》请在冰豆网上搜索。
EDA课程设计按键游戏机
GDOU-B-11-302
广东海洋大学2010——2011学年第一学期
《EDA》课程考试设计答卷纸
课程号:
1610003-1
□
考试
√
A卷
□
闭卷
√
考查
□
B卷
√
开卷
题号
一
二
三
四
五
六
七
八
九
十
总分
阅卷教师
各题分数
0
5
5
40
40
5
5
100
实得分数
注意:
1、须在限定的日期、时间之前交卷;2、设计程序、仿真图打印稿附在卷后上交;3、其他答案可以打印在本答卷纸上;4、原理图可以粘贴在本答卷纸上;
一、请写出自己设计项目(控制器)名称;
答:
我的设计项目是:
按键游戏机(按键控制)。
二、请描述本设计项目(控制器)的功能和性能(5分);
答:
假设点阵做为基本显示屏,一个发光点表示一个图形,完成按键游戏机的基本功能:
下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束。
设计包括2个大的元件,一个是FUNCTIONS,完成存储状态,分频,左右下移动以及计分等功能;另一个是SHOW,主要完成点阵扫描和数码管译码。
仿真使用
三、
画出本设计项目(控制器)的电原理图(5分);
四、打印的VHDL设计程序及注释(40分);(附在卷后上交)
五、打印的仿真波形(如:
Max+PLUSII)(40分);(附在卷后上交)
六、列出参考文献(5分);
【1】潘松.EDA技术与VHDL.北京:
清华大学出版社
【2】延明.数字逻辑设计实验与EDA技术.北京:
北京邮电大学出版社
七、总结自己的设计(5分);
答:
这是本学期的EDA设计,使用VHDL进行设计。
开始两个星期,几乎没有写代码,首先我要搞清自己的设计思路,开始想了几个思路,后来发现不是很好,所以后来都改了,重新编写,重新编译。
编译通过了,最后是仿真,所用的时间也不比设计少。
因为一个设计的测试验证是非常重要的。
有效的测试可以助我们快速的完成或改善设计。
所以之后又写了一个Testbenches测试代码来通过Modelsim软件实现可靠的验证。
我的代码比较简单,自己觉得很满意,但是仍然有许多需要改进和扩展的地方。
这次设计使自己更加了解VHDL了,也学会了QuartusⅡ设计和modelsim仿真。
无论做什么实验,都要有个好习惯,例如建立好工程放在指定地方,别总是摆在桌面。
有时候好的习惯决定了实验的成败,好习惯也能提高办事效率,事半功倍。
所以今后的很多实验都要态度端正,养成良好的习惯。
顶层文件KEYGAME:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYKEYGAMEIS
PORT(CLK:
INSTD_LOGIC;-----------低频时钟
RESET:
INSTD_LOGIC;-----------开始复位键
LEFT:
INSTD_LOGIC;-----------左移
RIGHT:
INSTD_LOGIC;-----------右移
COL:
OUTSTD_LOGIC_VECTOR(0TO3);----------列
ROW:
OUTSTD_LOGIC_VECTOR(0TO3);----------行
DISP:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--------数码管显示分数
CAT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)------数码管选择
);
ENDKEYGAME;
ARCHITECTUREARCHOFKEYGAMEIS
SIGNALFENSHU:
INTEGERRANGE0TO15;
SIGNALSTA0,STA1,STA2,STA3:
STD_LOGIC_VECTOR(0TO3);
COMPONENT-----------元件例化说明
FUNCTIONSPORT(CLK:
INSTD_LOGIC;
RESET:
INSTD_LOGIC;
LEFT:
INSTD_LOGIC;
RIGHT:
INSTD_LOGIC;
SCORES:
OUTINTEGERRANGE0TO15;
STA0:
OUTSTD_LOGIC_VECTOR(0TO3);
STA1:
OUTSTD_LOGIC_VECTOR(0TO3);
STA2:
OUTSTD_LOGIC_VECTOR(0TO3);
STA3:
OUTSTD_LOGIC_VECTOR(0TO3)
);
ENDCOMPONENT;
COMPONENT-----------元件例化申明
SHOWPORT(CLK:
INSTD_LOGIC;------时钟信号
STA0:
INSTD_LOGIC_VECTOR(0TO3);--第一行状态
STA1:
INSTD_LOGIC_VECTOR(0TO3);--第二行状态
STA2:
INSTD_LOGIC_VECTOR(0TO3);--第三行状态
STA3:
INSTD_LOGIC_VECTOR(0TO3);--第四行状态
SCORE:
ININTEGERRANGE0TO15;--计分
COL:
OUTSTD_LOGIC_VECTOR(0TO3);----------列
ROW:
OUTSTD_LOGIC_VECTOR(0TO3);----------行
DISP:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);-------数码管显示分数
CAT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)------数码管选择
);
ENDCOMPONENT;
BEGIN--------------元件例化
C1:
FUNCTIONSPORTMAP(CLK,RESET,LEFT,RIGHT,FENSHU,STA0,STA1,STA2,STA3);
C2:
SHOWPORTMAP(CLK,STA0,STA1,STA2,STA3,FENSHU,COL,ROW,DISP,CAT);
END;
FUNCTIONS的代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_SIGNED.ALL;
ENTITYFUNCTIONSIS
PORT(CLK:
INSTD_LOGIC;-------时钟频率,选用低频
RESET:
INSTD_LOGIC;-------复位键,1复位;0不改变
LEFT:
INSTD_LOGIC;-------左移键,1移动,0不改变
RIGHT:
INSTD_LOGIC;-------右移键,1移动,0不改变,左右同时0为下移
SCORES:
OUTINTEGERRANGE0TO15;-------分数,这里定最高15分
STA0:
OUTSTD_LOGIC_VECTOR(0TO3);-------以下为四行状态寄存
STA1:
OUTSTD_LOGIC_VECTOR(0TO3);
STA2:
OUTSTD_LOGIC_VECTOR(0TO3);
STA3:
OUTSTD_LOGIC_VECTOR(0TO3));
ENDFUNCTIONS;
ARCHITECTUREMOVINGOFFUNCTIONSIS
SIGNALSTATU0:
STD_LOGIC_VECTOR(0TO3);
SIGNALSTATU1:
STD_LOGIC_VECTOR(0TO3);
SIGNALSTATU2:
STD_LOGIC_VECTOR(0TO3);
SIGNALSTATU3:
STD_LOGIC_VECTOR(0TO3);
SIGNALOVER:
STD_LOGIC;-------gameover标志
SIGNALFP:
INTEGERRANGE0TO499;-------1000分频
SIGNALCLK1:
STD_LOGIC;
SIGNALSCOR_TEMP:
INTEGERRANGE0TO15;
SIGNALROW4:
STD_LOGIC;-------消行标志
SIGNALROW,COL:
INTEGERRANGE0TO3;-------点的坐标控制
BEGIN
P1:
PROCESS(CLK,RESET)
BEGIN
IFRESET='1'THEN
FP<=0;
CLK1<='0';
ELSIF(CLK'EVENTANDCLK='1')THEN
IFFP=2THEN
FP<=0;
CLK1<=NOTCLK1;
ELSE
FP<=FP+1;
ENDIF;
ENDIF;
ENDPROCESS;--------p1用来分频
P2:
PROCESS(CLK1,RESET)
BEGIN
IFRESET='1'THEN--------系统初始化
STATU0<="0100";---------出点位置,1代表方块所在
STATU1<="0000";
STATU2<="0000";
STATU3<="0000";
OVER<='0';
SCOR_TEMP<=0;
ROW4<='0';
ROW<=0;
COL<=1;
ELSIF(CLK1'EVENTANDCLK1='1')THEN
IFOVER='1'THEN--------gameover进入空循环
NULL;
ELSIFROW4='1'THEN--------消行
STATU3<=STATU2;----------消行后状态转移
STATU2<=STATU1;
STATU1<=STATU0;
ROW4<='0';
SCOR_TEMP<=SCOR_TEMP+1;--------加分
ELSIF(STATU0(0)='1'ANDSTATU1(0)='1'ANDSTATU2(0)='1'ANDSTATU3(0)='1')
OR(STATU0
(1)='1'ANDSTATU1
(1)='1'ANDSTATU2
(1)='1'ANDSTATU3
(1)='1')
OR(STATU0
(2)='1'ANDSTATU1
(2)='1'ANDSTATU2
(2)='1'ANDSTATU3
(2)='1')
OR(STATU0(3)='1'ANDSTATU1(3)='1'ANDSTATU2(3)='1'ANDSTATU3(3)='1')THEN
OVER<='1';--------判断四列中是否有一列全为1,是则gameover
ELSIFSTATU3="1111"THEN
ROW4<='1';--------可以消行了
ELSIFRIGHT='1'ANDCOL<3THEN--------右移判断
CASEROWIS
WHEN0=>IFSTATU0(COL+1)='0'THENCOL<=COL+1;STATU0(COL+1)<='1';STATU0(COL)<='0';ENDIF;
WHEN1=>IFSTATU1(COL+1)='0'THENCOL<=COL+1;STATU1(COL+1)<='1';STATU1(COL)<='0';ENDIF;
WHEN2=>IFSTATU2(COL+1)='0'THENCOL<=COL+1;STATU2(COL+1)<='1';STATU2(COL)<='0';ENDIF;
WHENOTHERS=>IFSTATU3(COL+1)='0'THENCOL<=COL+1;STATU3(COL+1)<='1';STATU3(COL)<='0';ENDIF;
ENDCASE;
ELSIFLEFT='1'ANDCOL>0THEN---------左移判断
CASEROWIS
WHEN0=>IFSTATU0(COL-1)='0'THENCOL<=COL-1;STATU0(COL-1)<='1';STATU0(COL)<='0';ENDIF;
WHEN1=>IFSTATU1(COL-1)='0'THENCOL<=COL-1;STATU1(COL-1)<='1';STATU1(COL)<='0';ENDIF;
WHEN2=>IFSTATU2(COL-1)='0'THENCOL<=COL-1;STATU2(COL-1)<='1';STATU2(COL)<='0';ENDIF;
WHENOTHERS=>IFSTATU3(COL-1)='0'THENCOL<=COL-1;STATU3(COL-1)<='1';STATU3(COL)<='0';ENDIF;
ENDCASE;--------以下elsif语句为点的下移处理
ELSIFROW=0ANDSTATU1(COL)='0'THENROW<=ROW+1;STATU1(COL)<='1';STATU0(COL)<='0';
ELSIFROW=1ANDSTATU2(COL)='0'THENROW<=ROW+1;STATU2(COL)<='1';STATU1(COL)<='0';
ELSIFROW=2ANDSTATU3(COL)='0'THENROW<=ROW+1;STATU3(COL)<='1';STATU2(COL)<='0';
ELSEROW<=0;COL<=1;STATU0
(1)<='1';---不能下移则产生一个新的点
ENDIF;
ENDIF;
ENDPROCESS;
SCORES<=SCOR_TEMP;
STA0<=STATU0;
STA1<=STATU1;
STA2<=STATU2;
STA3<=STATU3;
END;
SHOW的代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSHOWIS
PORT(CLK:
INSTD_LOGIC;
RESET:
INSTD_LOGIC;
STA0:
INSTD_LOGIC_VECTOR(0TO3);-------以下为4行的状态
STA1:
INSTD_LOGIC_VECTOR(0TO3);
STA2:
INSTD_LOGIC_VECTOR(0TO3);
STA3:
INSTD_LOGIC_VECTOR(0TO3);----------最底行状态
SCORE:
ININTEGERRANGE0TO15;-------分数
COL:
OUTSTD_LOGIC_VECTOR(0TO3);-------点阵显示的列控制
ROW:
OUTSTD_LOGIC_VECTOR(0TO3);----------点阵显示的行控制
DISP:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);------数码管译码
CAT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)------数码管选择
);
ENDSHOW;
ARCHITECTUREBEHAVEOFSHOWIS
SIGNALCP:
INTEGERRANGE0TO3;
SIGNALROWT,COLT:
STD_LOGIC_VECTOR(0TO3);
SIGNALDISPT:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
PROCESS(CLK,SCORE,RESET)
BEGIN
IFRESET='1'THEN-----------复位信号,初始化信号
DISPT<="0000000";
ROWT<="0000";
COLT<="1111";
CP<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFCP=3THEN
CP<=0;
ELSE
CP<=CP+1;
ENDIF;
CASECPIS--------对时钟4分频,用于点阵扫描
WHEN0=>ROWT<="1000";COLT<=NOTSTA0;-------采用行扫描法
WHEN1=>ROWT<="0100";COLT<=NOTSTA1;
WHEN2=>ROWT<="0010";COLT<=NOTSTA2;
WHENOTHERS=>ROWT<="0001";COLT<=NOTSTA3;
ENDCASE;
CASESCOREIS--------分数译码
WHEN0=>DISPT<="1111110";--------0
WHEN1=>DISPT<="0110000";--------1
WHEN2=>DISPT<="1101101";--------2
WHEN3=>DISPT<="1111001";--------3
WHEN4=>DISPT<="0110011";--------4
WHEN5=>DISPT<="1011011";--------5
WHEN6=>DISPT<="1011111";--------6
WHEN7=>DISPT<="1110000";--------7
WHEN8=>DISPT<="1111111";--------8
WHEN9=>DISPT<="1111011";--------9
WHEN10=>DISPT<="1110111";-------10
WHEN11=>DISPT<="0011111";-------11
WHEN12=>DISPT<="1001110";-------12
WHEN13=>DISPT<="0111101";-------13
WHEN14=>DISPT<="1001111";-------14
WHEN15=>DISPT<="1000111";-------15
WHENOTHERS=>DISPT<="0000000";
ENDCASE;
ENDIF;
ENDPROCESS;
ROW<=ROWT;
COL<=COLT;
DISP<=DISPT;
CAT<="011111";-------选择第一个数码管
END;
Testbench仿真代码:
libraryieee;
USEieee.std_logic_1164.ALL;
USEieee.numeric_std.ALL;
ENTITYtbIS
ENDtb;
ARCHITECTUREbehaviorOFtbIS
componentshow
PORT(CLK:
INSTD_LOGIC;
RESET:
INSTD_LOGIC;
SCORE:
ININTEGERRANGE0TO15;
STA0:
INSTD_LOGIC_VECTOR(0TO3);
STA1:
INSTD_LOGIC_VECTOR(0TO3);
STA2:
INSTD_LOGIC_VECTOR(0TO3);
STA3:
INSTD_LOGIC_VECTOR(0TO3);
COL:
OUTSTD_LOGIC_VECTOR(0TO3);
ROW:
OUTSTD_LOGIC_VECTOR(0TO3);
DISP:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
CAT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
endcomponent;
componentfunctions
PORT(CLK:
INSTD_LOGIC;
RESET:
INSTD_LOGIC;
LEFT:
INSTD_LOGIC;
RIGHT:
INSTD_LOGIC;
SCORES:
OUTINTEGERRANGE0TO15;
STA0:
OUTSTD_LOGIC_VECTOR(0TO3);
STA1:
OUTSTD_LOGIC_VECTOR(0TO3);
STA2:
OUTSTD_LOGIC_VECTOR(0TO3);
STA3:
OUTSTD_LOGIC_VECTOR(0TO3));
endcomponent;
signalclk:
std_logic;
signalreset:
std_logic;
signalleft:
std_logic;
signalright:
std_logic;
signalscores:
integerrange0to15;
signalsta0:
std_logic_vector(0to3);
signalsta1:
std_logic_vector(0to3);
signalsta2:
std_logic_vector(0to3);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 按键 游戏机