数字电路与逻辑设计实验报告_第1页
数字电路与逻辑设计实验报告_第2页
数字电路与逻辑设计实验报告_第3页
数字电路与逻辑设计实验报告_第4页
数字电路与逻辑设计实验报告_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数字电路与逻辑设计实验报告数字电路与逻辑设计实验报告题目:简易钢琴游戏学 院: 班 级:姓 名: 学 号:班内序号: 【实验任务及要求】一基本要求:1.、用 8×8 点阵进行游戏显示。2、BTN1BTN7 七个按键模拟钢琴演奏时的“1 2 3 4 5 6 7”七个音符。 点阵的第一列对应音符“1”,第二列对应音符“2”,依此类推,低中高音自定。3、光点在点阵第一行随机出现,逐点下落,下落速度为 0.2 秒 /行,如图1 所示。4、在光点下落到点阵最后一行之前的过程中,如果按下与该列点阵相应的音符键,该 光点消失,蜂鸣器演奏相应的音符声音,计分器加1。如果在光点下落到最后一行 依然没

2、有进行相应的按键操作,该光点消失,计分器不加分。计分器由数码管显示。5、 每隔 1 秒在点阵的不同列的第一行出现一个光点,如图2 所示。 二、提高要求:1、光点在点阵某行随机出现,然后逐点下落。2、下落速度随机变化。3、光点按照存储的乐曲顺序和速度的出现。4、自拟其它功能。三、创新功能:1.将游戏规则改为只有当光电下落到最后一行,并及时按键后,才能加分并发出对应音 符,增加了游戏难度,使得游戏更好玩。2. 游戏有两种模式,通过一个拨码开关控制,游戏中的光电是随机出现,或者是按照歌 曲小星星出现。【功能说明】本实验利用开发板模拟钢琴游戏,总体上实现了30秒倒计时,随机出点下落,按乐曲出点下落,按

3、键及时按下后用数码管显示计分,并使蜂鸣器发声等功能。30秒倒计时:利用开发板的数码管模块进行输出,当接通电源后,游戏的30秒开始倒计时,当计时到达0时,停止出点,游戏结束;可以拨动SW0(reset)从新开始游戏。随机出点下落:利用开发板的点阵输出模块,每隔一秒随机在第一行的任意一列随机出现一个光点,每隔0.2秒光点下落。按乐曲音符出点下落:利用开发板的点阵输出模块,按照乐曲的音符在点阵的第一行的对应位置出现光点,每隔0.2秒光点下落。与随机出点的功能以一个拨码开关SW1,进行切换。按键检测:利用开发板的按键部分,分别表示17中音音符,当光点下落到对应列的最后一行时,按下对应音符的按键,可加分

4、,蜂鸣器发出响应音符的响声。加分:利用开发板的数码管输出模块,当按键及时按下后,数码管显示的分数对应加一。发声:利用开发板的蜂鸣器输出模块,当按键及时按下后,蜂鸣器发出该按键对应的音符的响声。【系统设计】一设计思路通过对功能的分析,可将本系统分为五个模块:点阵模块:这个部分是本系统比较重要的部分,主要控制点阵输出模块,每隔一秒在点阵的第一行输出一个光点,并每隔0.2秒控制整个点阵的光点下落;同时在该模块中还应判断按键是否及时按下,输出加分信号。30秒计时以及计分模块:这个部分主要是对数码管显示的控制,进行30秒的倒计时并显示,同时根据输入的分数,显示当前的分数。分数和时间分别使用2个数码管,本

5、模块肩负着对数码管资源合理分配的责任。出点模块:这个部分主要是实现随机产生即将出点的列号(即相应的音符),或者按照小星星这首歌曲的音符产生音符,将该音符值传给点阵模块,控制下一秒的出点。发声模块:这个模块主要实现,按照点阵模块传入的分频基准值,对时钟分频,并输出给蜂鸣器,从而发出对应音符的声响。顶层模块:这个模块是以上几个模块的顶层控制,实现将系统的输入输出,以及分模块之间的输入输出联系起来的功能,利用compnoent集合以上几个模块。整体思路是分模块实现不同的子功能,在不同的模块对开发板的不同资源进行控制,最后以顶层模块集合不同模块,以实现总体的功能。二系统总体框图1、系统硬件结构框图 M

6、ode Reset 计分 计时 1 2 3 4 5 6 7 2、模块划分图 顶层模块点阵控制,按键检测模块蜂鸣器发声模块随机、按乐曲出点模块计分、计时模块3、模块之间信息传递关系 顶层模块 点阵模块计分计时模块发声模块 出点模块Input:button,reset,mode,clkOutput:Figure,cat,col,row,out_clk,Clk,reset,scoreFigure,Cat,stopClk,reset,button,yinfu,Col,row,score,freq,callClk,freq,callOut_clkClk,mode,reset,stopYinfu 4、 A

7、SM图YES 启动判断是否倒计时到0NO每隔一秒出点,每隔0.2秒点下落判断光点是否到最后一行YES判断按键是否及时按下加一分,蜂鸣器发声,光点消失NONO 结束YES5. MDS图SW1=1SW0=0SW1=1SW0=0等待出点随机出点,游戏开始按乐曲出点,游戏开始游戏结束30秒计时结束或SW0=130秒计时结束或SW0=1SW0=1then SW0=0三分模块设计(具体代码见“源程序”)1.文件名:piano_game.vhd 功能:顶层模块在顶层模块中,我将分模块以component的形式进行声明,并利用port map地址映射将相关联的接口参数映射在一起。2.文件名:dianzhen.

8、vhd 功能:点阵模块该模块主要完成点阵中每隔一秒出点,以及每隔0.2秒下落的功能;同时检测按键最后一行状态对比,判断是否加分和发声;最后输出点阵的行列信号,分数,以及发声的分频基准值。 点阵的row分量用来扫描显示,因此存入8个表示选中某一行的向量rowtemp0-rowtemp7用来扫描显示;点阵的col分量用来表示每一行的状态,因此存入8个保存每行状态的向量coltemp0-coltemp7。出点:该模块有一个输入信号yinfu(0-7的整数),表示即将出现的点在哪一列上,用coltmp向量来表示下一个第一行的状态,每当1S的时钟沿到来后,将其赋给coltemp0;下落:每当0.2秒的时

9、钟沿到来后,将coltemp6赋给coltemp7,coltemp5赋给coltemp6.以此类推,实现点的下落。键盘检测、加分、发声:将输入的按键的向量与coltemp7相与,如果不为0则说明按键及时按下,分数加一,同时按照相与结果输出对应音符的分频基准值。此处,应注意进行按键防抖,否则计分将出现问题。3.文件名:scoretime.vhd 功能:计时计分模块该模块主要完成30秒倒计时和分数显示的功能;最后输出数码管的字符显示向量和接地信号,以及计时到0的游戏结束信号。计时:进行1S分频,计数变量初始为30,每当1S时钟到来后,计数变量减一;显示:根据计时变量,以及输入的分数值,分别用两个数

10、码管显示计时和计分。首先,在分频进程中分出一个address信号,address取03的整数,用来进行数码管的扫描显示。当address=0和1时,对计时的两个数码管进行扫描,当address=2和3,对计分的两个数码管进行扫描,最终达到同时显示计时和计分的目的。4.文件名:tone.vhd 功能:出点模块 该模块主要完成输出下一个点将出现在哪一个音符对应的列上的功能,包含两种方式:随机出点和按小星星歌曲出点;最后输出yinfu(0-7的整数)。 随机出点:产生长度为15的M序列,每隔一秒产生一个符号,以该符号位首位的四位二进制数对应一个音符,这样近似17随机出现; 按小星星乐曲音符顺序出点,

11、将一秒规定为乐曲的一拍,按照小星星乐曲,每一秒输出一个音符,使得输出的yinfu变量按照歌曲变化。 两种出点方式以mode输入区。5.文件名:speaker.vhd 功能:发声模块该模块主要根据输入的分频基准值进行分频,并将分频后的时钟输出给蜂鸣器,从而发出对应音符的响声。 此处给出分频基准值得确定方式:由于分频后对于每个音调的频率都需满足上值,而分频器是由计数原理进行实现的,因此要将频率与计数之间的关系进行推导,得到如下公式,可求出各个音调的分频基准值:(其中为分频基准值)首先我先统一对所有音调进行12分频,即将50MHz的频率化归到4MHz左右,然后再除以每个音调传入的分频基准值freq,

12、便可得到相应的音调频率。本实验仅涉及到中音的七个音,分频基准值如下:音符 1 2 3 4 5 6 7分频基准值7967709863235969531547354217【仿真波形及波形分析】1.文件名:scoretime.vhd 功能:计时计分模块如图,计时计分模块的仿真波形:从图中可以看出,数码管扫描显示,当cat=111101和111110时扫描显示计时,figure输出对应计时数值;当cat=111011和110111时扫描显示计分,figure输出仿真设定的计分值4.从该图中可以看出,计时从30到1,而后输出stop的游戏结束信号。2.文件名:tone.vhd 功能:出点模块如图,出点模

13、块的仿真波形:从图中可以看出,当mode=0时是随机出点的模式,随机输出yinfu,可以看出yinfu基本是随机的。从图中可以看出,当mode=1时是按照小星星歌曲出点,yinfu输出按照歌曲的音符顺序输出。3.文件名:speaker.vhd 功能:发声模块如图,发声模块的仿真波形:从图中可以看出,只有当call=1,即按键后才会发声,否则不会发声;且会按照输入的分频基准值,进行对应的分频。4.文件名:dianzhen.vhd 功能:点阵模块如图,点阵模块的仿真波形:从图中可以看出,在row向量进行扫描的过程中,col在逐渐下落(仿真设置的输入yinfu为2)从图中可以看出,在按下按键后,sc

14、ore会加一分;5.文件名:piano_game.vhd 功能:顶层模块由上图可以看出,顶层仿真中光点随机出现并下落,落到最后一行消失;其他功能也基本仿真成功。【源程序】1.文件名:piano_game.vhd 功能:顶层模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity piano_game isport( clk_top:in std_logic; button_top: in std_logic_vector(7 dow

15、nto 0); -按键输入信号 reset_top : in std_logic; mode_top:in std_logic; row_top : out std_logic_vector(7 downto 0); -点阵行输出信号 col_top : out std_logic_vector(7 downto 0); -点阵列输出信号 figure_top: out std_logic_vector(6 downto 0); -数码管数值显示信号 cats_top : out std_logic_vector(5 downto 0); -数码管接地信号 out_top : out std_

16、logic);end piano_game;architecture behavier of piano_game iscomponent dianzhen is -点阵模块Port (clk_dianzhen : in std_logic; button_dianzhen: in std_logic_vector(7 downto 0); row_dianzhen : out std_logic_vector(7 downto 0); col_dianzhen : out std_logic_vector(7 downto 0); call_dianzhen : out std_logic;

17、 freq_dianzhen : out integer range 0 to 50000000; score_dianzhen : out integer range 0 to 30; stop_dianzhen : in std_logic;reset_dianzhen : in std_logic;yinfu_dianzhen: in integer range 0 to 8);end component;component scoretime is -计时计分模块Port (clk_scoretime :in std_logic; -system clockreset_scoretim

18、e :in std_logic;add_score:in integer range 0 to 30;stop_time:out std_logic;figure_scoretime: out std_logic_vector(6 downto 0); -count timecats_scoretime : out std_logic_vector(5 downto 0); end component; component speaker is -发声模块Port (clk_speaker : in std_logic; freq_speaker : in integer range 0 to

19、 50000000; call_speaker : in std_logic; out_speaker : out std_logic); end component; component tone is -出点模块Port (clk_tone : in std_logic; reset_tone :in std_logic; stop_tone:in std_logic;mode_tone:in std_logic;yinfu:out integer range 0 to 7);end component;signal stop_top:std_logic;signal call_top:s

20、td_logic;signal freq_top : integer range 0 to 50000000; signal score_top:integer range 0 to 30;signal yinfu_top:integer range 0 to 8;-参量对应表beginu1:dianzhen portmap(clk_dianzhen=>clk_top,button_dianzhen=>button_top,row_dianzhen=>row_top, col_dianzhen=>col_top,call_dianzhen=>call_top,fr

21、eq_dianzhen=>freq_top,score_dianzhen=>score_top,stop_dianzhen=>stop_top,reset_dianzhen=>reset_top,yinfu_dianzhen=>yinfu_top);u2:scoretime portmap(clk_scoretime=>clk_top,reset_scoretime=>reset_top,add_score=>score_top,stop_time=>stop_top,figure_scoretime=>figure_top,cats

22、_scoretime=>cats_top);u4:speaker portmap(clk_speaker=>clk_top,freq_speaker=>freq_top,call_speaker=>call_top,out_speaker=>out_top);u5:tone portmap(clk_tone=>clk_top,reset_tone=>reset_top,stop_tone=>stop_top,yinfu=>yinfu_top,mode_tone=>mode_top);end behavier;2.文件名:scoreti

23、me.vhd 功能:计时计分模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity scoretime isPort (clk_scoretime :in std_logic; -系统时钟reset_scoretime :in std_logic; -复位信号add_score:in integer range 0 to 30; -分数输入stop_time:out std_logic; -游戏结束信号figure_scoreti

24、me: out std_logic_vector(6 downto 0); -数码管数值输出cats_scoretime : out std_logic_vector(5 downto 0); -数码管接地输出end scoretime;architecture behavier of scoretime is signal num_jishi:integer range 0 to 31:=30; signal tmp:integer range 0 to 49999999;signal tmp1:integer range 0 to 2500;signal address: integer

25、range 0 to 3; signal clk_tmp:std_logic;signal stop:std_logic:='0' -stop game signalbegin fenpin:process(clk_scoretime,reset_scoretime)beginif reset_scoretime='1' thentmp<=0;tmp1<=0;elsif (clk_scoretime'event and clk_scoretime='1') thenif tmp=49999999then -1s分频 tmp&l

26、t;=0;else tmp<=tmp+1;end if;if tmp<25000000 then clk_tmp<='0' else clk_tmp<='1' end if; tmp1<=tmp1+1; -扫描数码管选择信号addressif tmp1=1250 then if(address=3) then address<=0; end if; tmp1<=0; address<=address+1; end if; end if; end process; jishi:process(clk_tmp,rese

27、t_scoretime,stop) -计时 beginif reset_scoretime='1' thennum_jishi<=31;elsif (clk_tmp'event and clk_tmp='1') then if(num_jishi>0) thennum_jishi<=num_jishi-1;if num_jishi=1 then stop<='1'end if;end if;end if; end process; stop_time<=stop; -扫描显示计时和计分 show:proces

28、s(num_jishi,add_score,address) begin case address iswhen 0=> case num_jishi is when 0=> figure_scoretime<="1111110"cats_scoretime<="111101" when 1=> figure_scoretime<="1111110"cats_scoretime<="111101" when 2=> figure_scoretime<="

29、;1111110"cats_scoretime<="111101" when 3=> figure_scoretime<="1111110"cats_scoretime<="111101" when 4=> figure_scoretime<="1111110"cats_scoretime<="111101" when 5=> figure_scoretime<="1111110"cats_scoretime&l

30、t;="111101" when 6=> figure_scoretime<="1111110"cats_scoretime<="111101" when 7=> figure_scoretime<="1111110"cats_scoretime<="111101" when 8=> figure_scoretime<="1111110"cats_scoretime<="111101" when 9=&

31、gt; figure_scoretime<="1111110"cats_scoretime<="111101" when 10=> figure_scoretime<="0110000"cats_scoretime<="111101" when 11=> figure_scoretime<="0110000"cats_scoretime<="111101" when 12=> figure_scoretime<=&q

32、uot;0110000"cats_scoretime<="111101" when 13=> figure_scoretime<="0110000"cats_scoretime<="111101" when 14=> figure_scoretime<="0110000"cats_scoretime<="111101" when 15=> figure_scoretime<="0110000"cats_score

33、time<="111101" when 16=> figure_scoretime<="0110000"cats_scoretime<="111101" when 17=> figure_scoretime<="0110000"cats_scoretime<="111101" when 18=> figure_scoretime<="0110000"cats_scoretime<="111101"

34、 when 19=> figure_scoretime<="0110000"cats_scoretime<="111101" when 20=> figure_scoretime<="1101101"cats_scoretime<="111101" when 21=> figure_scoretime<="1101101"cats_scoretime<="111101" when 22=> figure_scoret

35、ime<="1101101"cats_scoretime<="111101" when 23=>figure_scoretime<="1101101"cats_scoretime<="111101" when 24=>figure_scoretime<="1101101"cats_scoretime<="111101" when 25=>figure_scoretime<="1101101"cat

36、s_scoretime<="111101" when 26=>figure_scoretime<="1101101"cats_scoretime<="111101" when 27=>figure_scoretime<="1101101"cats_scoretime<="111101" when 28=>figure_scoretime<="1101101"cats_scoretime<="111101&q

37、uot; when 29=>figure_scoretime<="1101101"cats_scoretime<="111101" when 30=>figure_scoretime<="1111001"cats_scoretime<="111101" when others=>cats_scoretime<="111111" end case; when 1=>case num_jishi iswhen 0 => figure_sco

38、retime<="1111110"cats_scoretime<="111110"when 1 => figure_scoretime<="0110000"cats_scoretime<="111110"when 2 => figure_scoretime<="1101101"cats_scoretime<="111110"when 3 => figure_scoretime<="1111001"

39、cats_scoretime<="111110"when 4 => figure_scoretime<="0110011"cats_scoretime<="111110"when 5 => figure_scoretime<="1011011"cats_scoretime<="111110"when 6 => figure_scoretime<="1011111"cats_scoretime<="11111

40、0"when 7 => figure_scoretime<="1110000"cats_scoretime<="111110"when 8 => figure_scoretime<="1111111"cats_scoretime<="111110"when 9 => figure_scoretime<="1111011"cats_scoretime<="111110"when 10 => figure_sc

41、oretime<="1111110"cats_scoretime<="111110"when 11 => figure_scoretime<="0110000"cats_scoretime<="111110"when 12 => figure_scoretime<="1101101"cats_scoretime<="111110"when 13 => figure_scoretime<="1111001&q

42、uot;cats_scoretime<="111110"when 14 => figure_scoretime<="0110011"cats_scoretime<="111110"when 15 => figure_scoretime<="1011011"cats_scoretime<="111110"when 16 => figure_scoretime<="1011111"cats_scoretime<=&quo

43、t;111110"when 17 => figure_scoretime<="1110000"cats_scoretime<="111110"when 18 => figure_scoretime<="1111111"cats_scoretime<="111110"when 19 => figure_scoretime<="1111011"cats_scoretime<="111110"when 20 =>

44、 figure_scoretime<="1111110"cats_scoretime<="111110"when 21 => figure_scoretime<="0110000"cats_scoretime<="111110"when 22 => figure_scoretime<="1101101"cats_scoretime<="111110"when 23 => figure_scoretime<="

45、;1111001"cats_scoretime<="111110"when 24 => figure_scoretime<="0110011"cats_scoretime<="111110"when 25 => figure_scoretime<="1011011"cats_scoretime<="111110"when 26 => figure_scoretime<="1011111"cats_scoretim

46、e<="111110"when 27 => figure_scoretime<="1110000"cats_scoretime<="111110"when 28 => figure_scoretime<="1111111"cats_scoretime<="111110"when 29 => figure_scoretime<="1111011"cats_scoretime<="111110"whe

47、n 30 => figure_scoretime<="1111110"cats_scoretime<="111110"when others=>cats_scoretime<="111111" end case;when 2=>case add_score is when 0=> figure_scoretime<="1111110"cats_scoretime<="110111" when 1=> figure_scoretime&l

48、t;="1111110"cats_scoretime<="110111" when 2=> figure_scoretime<="1111110"cats_scoretime<="110111" when 3=> figure_scoretime<="1111110"cats_scoretime<="110111" when 4=> figure_scoretime<="1111110"cats_sco

49、retime<="110111" when 5=> figure_scoretime<="1111110"cats_scoretime<="110111" when 6=> figure_scoretime<="1111110"cats_scoretime<="110111" when 7=> figure_scoretime<="1111110"cats_scoretime<="110111"

50、when 8=> figure_scoretime<="1111110"cats_scoretime<="110111" when 9=> figure_scoretime<="1111110"cats_scoretime<="110111" when 10=> figure_scoretime<="0110000"cats_scoretime<="110111" when 11=> figure_scoretime

51、<="0110000"cats_scoretime<="110111" when 12=> figure_scoretime<="0110000"cats_scoretime<="110111" when 13=> figure_scoretime<="0110000"cats_scoretime<="110111" when 14=> figure_scoretime<="0110000"cat

52、s_scoretime<="110111" when 15=> figure_scoretime<="0110000"cats_scoretime<="110111" when 16=> figure_scoretime<="0110000"cats_scoretime<="110111" when 17=> figure_scoretime<="0110000"cats_scoretime<="11011

53、1" when 18=> figure_scoretime<="0110000"cats_scoretime<="110111" when 19=> figure_scoretime<="0110000"cats_scoretime<="110111" when 20=> figure_scoretime<="1101101"cats_scoretime<="110111" when 21=> figure

54、_scoretime<="1101101"cats_scoretime<="110111" when 22=> figure_scoretime<="1101101"cats_scoretime<="110111" when 23=> figure_scoretime<="1101101"cats_scoretime<="110111" when 24=> figure_scoretime<="110110

55、1"cats_scoretime<="110111" when 25=> figure_scoretime<="1101101"cats_scoretime<="110111" when 26=> figure_scoretime<="1101101"cats_scoretime<="110111" when 27=> figure_scoretime<="1101101"cats_scoretime<=&

56、quot;110111" when 28=> figure_scoretime<="1101101"cats_scoretime<="110111" when 29=> figure_scoretime<="1101101"cats_scoretime<="110111" when 30=> figure_scoretime<="1111001"cats_scoretime<="110111" when othe

57、rs=> cats_scoretime<="111111" end case;when 3=>case add_score is when 0=> figure_scoretime<="1111110"cats_scoretime<="111011" when 1=> figure_scoretime<="0110000"cats_scoretime<="111011" when 2=> figure_scoretime<=&qu

58、ot;1101101"cats_scoretime<="111011" when 3=> figure_scoretime<="1111001"cats_scoretime<="111011" when 4=> figure_scoretime<="0110011"cats_scoretime<="111011" when 5=> figure_scoretime<="1011011"cats_scoretime

59、<="111011" when 6=> figure_scoretime<="1011111"cats_scoretime<="111011" when 7=> figure_scoretime<="1110000"cats_scoretime<="111011" when 8=> figure_scoretime<="1111111"cats_scoretime<="111011" when 9=> figure_scoretime<="1111011"cats_scoretime<="111011" when 10=> figure_scoretime<=&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论