河北科技大学EDA课程设计
- 格式:doc
- 大小:125.00 KB
- 文档页数:13
科技大学
课程设计报告
学生:高志明
专业班级:电子信息工程L121班课程名称: EDA课程设计
学年学期:2014—2015学年第二学期指导教师:安国晨
负责部分: hit部分模块
2 01 5 年 7月
课程设计成绩评定表
目录
一、设计题目及要求 (3)
二、系统结构框图 (3)
三、状态流程图 (4)
四、程序清单 (6)
五、调试及仿真波形 (8)
六、设计分工 (10)
七、心得与体会 (10)
八、参考文献 (12)
一、设计题目及要求
1、功能:由8只LED代表虫洞,8个按键代表打虫棒,虫子随机在8虫洞随机出现(LED亮)1s,1s按相应的虫棒即算打中地虫,得一分,按错或1S按过其他键或未按键即丢1分。间隔2S出现下一只虫子。10只虫算一关,打对十只算本关通过,重新从0积分,否则游戏结束。
2、要求:上电时数码管显示“STAr--00”并闪烁,按“开始”键,进入第一局;打关时数码管显示关数和分数;过关时数码管显示“STAr--XX”并闪烁(XX为下一关数),按“开始”键,进入下一关;每过一关,虫子出现的时间为上一关的3/4,共设计8关。 8关全过时显示“--end --”
3、发挥:声效、过关音乐等。
二、系统结构框图
1.总系统框图
2. 各个模块的功能描述
1)分数判断模块
判断选手得分或失分主要是由一个比较器完成的,将系统传给LED灯的信号与选手输入的信号作比较,相同则加分,否则扣分,这两个信号分别传给计分模块,从而完成系统判定得分的工作。
2)系统时钟模块
将部2MHz的时钟分频为1Hz、及游戏时钟,供以后程序适使用。
3)键盘电路
主要通过产生行扫描,来识别用户的按键,其提供给控制器按键的编码。
4)等级判断模块
判断等级,若游戏未开始时,将等级设为初始值,游戏开始后则判断每一等级是否按对次数是否大于按错次数,是责加分,否则相应减分。并通过分数的正负进行等级的判断及变化。
5)随机数产生模块
为使得测试结果的公平性,需要L9-L16等灯亮灭具有随机性,因而需要随机数产生过程,在本课设中,采用伪随机数产生方法,即在ROM中存入随机表中的数据,游戏开始后采用一个计数器不断计数,并通过计数寻址,读出存储的随机数据,传送至灯进行显示。
6)显示模块
用来显示地虫的出现位置及各关、分数等
三、状态流程图
四、程序清单
library ieee; --蜂鸣器部分
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity bell is
port(
clk1:in std_logic;
--时钟信号输入
right,wrong:in std_logic; --正确、错误脉冲输入
bellout:out std_logic
--时钟驱动输出
);
end bell;
architecture func of bell is
signal countr:integer range 0 to 7; --RIGHT时用于声音频率分频的计数器
signal countw:integer range 0 to 3;
--WRONG时用于声音频率分频的计数器
signal counttime1,counttime2:integer range 0 to 399; --控制声音长短
signal outr,outw,rf,wf:std_logic:='0'; --正确输出、错误输出,时间标志
begin
process(right,clk1)
begin
if(right='0' and rf='0') then outr<='0';
--由right或rf启动驱动蜂鸣器
elsif(clk1'event and clk1='1') then
if(countr=countr'high) then
countr<=0;outr<='1';
else
countr<=countr+1;outr<='0';
end if;
if(counttime1=counttime1'high) then
counttime1<=0;rf<='0'; --
达到发声时长,时间标志清零
else
counttime1<=counttime1+1;rf<='1';
end if;
end if;
end process;
process(wrong,clk1)
begin
if(wrong='0'and wf='0') then outw<='0'; --由wrong或wf启动驱动蜂鸣器
elsif(clk1'event and clk1='1') then
if(countw=countw'high) then
countw<=0;outw<='1';
else
countw<=countw+1;outw<='0';
end if;
if(counttime2=counttime2'high) then
counttime2<=0;wf<='0';
--达到发声时长,时间标志清零
else counttime2<=counttime2+1;wf<='1';
end if;
end if;
end process;
bellout<=(outr or outw); --由于right和
wrong脉冲不会同时到来,可将outr和outw或后输
出
end func;
五、调试及仿真波形