数字电路课程设计《梁祝》乐曲数字时钟乒乓球游戏机串并乘法器.doc_第1页
数字电路课程设计《梁祝》乐曲数字时钟乒乓球游戏机串并乘法器.doc_第2页
数字电路课程设计《梁祝》乐曲数字时钟乒乓球游戏机串并乘法器.doc_第3页
数字电路课程设计《梁祝》乐曲数字时钟乒乓球游戏机串并乘法器.doc_第4页
数字电路课程设计《梁祝》乐曲数字时钟乒乓球游戏机串并乘法器.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

数字电路课程设计 题目1:梁祝乐曲题目2:数字时钟 题目3:乒乓球游戏机 题目4:串并乘法器 课程名称: 数字电路课程设计学 院: 专 业: 班 级: 学 号: 学生姓名: 成 绩: 2010 年 月 日(一)梁祝乐曲演奏一:系统功能概述 演奏电路逻辑图有三部分:音乐节拍和音调发生器、简谱码对应的分频预置数查表电路、数控分频与演奏发生器。 乐曲的每个音符的发音频率值及其持续的时间是乐曲能够连续演奏所需的两个基本要素,设计演奏电路的关键就是获得这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。 2、 系统组成以及系统各部分的设计顶层设计(SONGER.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Songer IS PORT ( CLK12MHZ : IN STD_LOGIC; CLK8HZ : IN STD_LOGIC; LED8 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); SPKOUT : OUT STD_LOGIC ); END;ARCHITECTURE one OF Songer ISSIGNAL QI : STD_LOGIC_VECTOR(5 DOWNTO 0); COMPONENT NoteTabs PORT ( clk : IN STD_LOGIC; ToneIndex : OUT INTEGER RANGE 0 TO 15 ); END COMPONENT; COMPONENT ToneTaba PORT ( Index : IN INTEGER RANGE 0 TO 15; Tone : OUT INTEGER RANGE 0 TO 16#7FF# ); END COMPONENT; COMPONENT Speakera PORT ( clk : IN STD_LOGIC; Tone : IN INTEGER RANGE 0 TO 16#7FF#; SpkS : OUT STD_LOGIC ); END COMPONENT; SIGNAL Tone : INTEGER RANGE 0 TO 16#7FF#; SIGNAL ToneIndex : INTEGER RANGE 0 TO 15;BEGIN u1 : NoteTabs PORT MAP (clk=CLK8HZ, ToneIndex=ToneIndex);u2 : ToneTaba PORT MAP (Index=ToneIndex, Tone=Tone);u3 : Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT ); PROCESS(CLK8HZ) BEGIN IF CLK8HZEVENT AND CLK8HZ = 1 THEN QI = QI + 1; END IF; END PROCESS; LED8(3 DOWNTO 0) = QI(5 DOWNTO 2); LED8(7 DOWNTO 4) = QI(5 DOWNTO 2); LED8(11 DOWNTO 8) = QI(5 DOWNTO 2); LED8(15 DOWNTO 12) = QI(5 DOWNTO 2); LED8(19 DOWNTO 16) = QI(5 DOWNTO 2); LED8(23 DOWNTO 20) = QI(5 DOWNTO 2); LED8(27 DOWNTO 24) = QI(5 DOWNTO 2); LED8(31 DOWNTO 28) = QI(5 DOWNTO 2);END;音乐节拍和音调发生器(NOTETABS.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NoteTabs IS PORT ( clk : IN STD_LOGIC; ToneIndex : OUT INTEGER RANGE 0 TO 15 );END;ARCHITECTURE one OF NoteTabs IS SIGNAL Counter : INTEGER RANGE 0 TO 138;BEGIN CNT8 : PROCESS(clk) BEGIN IF Counter = 138 THEN Counter = 0; ELSIF (clkEVENT AND clk = 1) THEN Counter ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex NULL; END CASE; END PROCESS;END;简谱码对应的分频预置数查表电路(ToneTaba.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY ToneTaba IS PORT ( Index : IN INTEGER RANGE 0 TO 15; CODE : OUT INTEGER RANGE 0 TO 15; HIGH : OUT STD_LOGIC; Tone : OUT INTEGER RANGE 0 TO 16#7FF# );END;ARCHITECTURE one OF ToneTaba ISBEGIN Search : PROCESS(Index) BEGIN CASE Index IS - 译码电路,查表方式,控制音调的预置数 WHEN 0 = Tone = 2047; CODE=0; HIGH Tone = 773; CODE=1; HIGH Tone = 912; CODE=2; HIGH Tone = 1036; CODE=3; HIGH Tone = 1197; CODE=5; HIGH Tone = 1290; CODE=6; HIGH Tone = 1372; CODE=7; HIGH Tone = 1410; CODE=1; HIGH Tone = 1480; CODE=2; HIGH Tone = 1542; CODE=3; HIGH Tone = 1622; CODE=5; HIGH Tone = 1668; CODE=6; HIGH Tone = 1728; CODE=7; HIGH NULL; END CASE; END PROCESS;END;数控分频与演奏发生器(Speakera.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN INTEGER RANGE 0 TO 16#7FF#; SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK : STD_LOGIC; SIGNAL FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : INTEGER RANGE 0 TO 15; BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone) VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#;BEGIN - 11位可预置计数器 IF PreCLKEVENT AND PreCLK = 1 THEN IF Count11 = 16#7FF# THEN Count11 := Tone; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0; END IF; END IF; END PROCESS; DelaySpkS : PROCESS(FullSpkS) VARIABLE Count2 : STD_LOGIC;BEGIN - 将输出再进行2分频,将脉冲展宽,以使扬声器有足够功率发音 IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS = 0; END IF; END IF; END PROCESS;END;三:系统以及各个模块的仿真波形音乐节拍和音调发生器的仿真波形简谱码对应的分频预置数查表电路仿真波形音乐节拍和音调发生器仿真波形数控分频与演奏发生器仿真波形四:系统调试运行结果说明与分析实验箱选择模式0。将设计出的演奏电路的程序经过编译(Compiler)后,选择FLEX10K系列中EPF10K10LC84-4作为目标器件(Assign/Device),并进行管脚锁定(Floorplan Editor)。器件编程(Programmer),将编译生成的*.sof文件下载到目标芯片。实验箱自带蜂鸣器(Speaker)奏出“梁祝”的旋律,由此说明实验成功。五:结论及体会 程序可以完成预定的功能,而且本系统还可以演奏出其他的曲子,只需将其简谱分频预置数写入ToneTaba.VHD,再将该曲子的节拍表输入到NoteTabs.VHD中,重新编译后,下载即可完成。通过这次实验,使我更加熟练的掌握了调制编译的过程,加深了对实验的兴趣。(二)数字钟一:系统功能概述 一个具有“时”、“分”、“秒”十进制数字显示(小时从00-23)计时器。 具有手动校时、校分的功能。二:系统组成以及系统各部分的设计顶层文件(SHUZIZHONG.VHD)library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity shuzizhong is port(clk,set,change,s1,s2,s3:in std_logic; second1,second2,minite1,minite2,hour1,hour2:out std_logic_vector(3 downto 0); cout:out std_logic);end entity;architecture one of shuzizhong isbegin pro1:process(clk,set,s1,s2,s3,change) variable msecond1,msecond2,mminite1,mminite2,mhour11,mhour12,mhour21,mhour22:std_logic_vector(3 downto 0); begin if clkevent and clk=1 then if set=1 then -启动校验 if s1=1 then msecond1:=msecond1+1; if msecond1=1010 then msecond1:=0000; msecond2:=msecond2+1; if msecond2=0110 then msecond2:=0000; end if; end if; end if; -秒校验 if s2=1 then mminite1:=mminite1+1; if mminite1=1010 then mminite1:=0000; mminite2:=mminite2+1; if mminite2=0110 then mminite2:=0000; end if; end if; end if; -分校验 if s3=1 then mhour11:=mhour11+1; mhour21:=mhour21+1; if mhour11=1010 then mhour11:=0000; mhour12:=mhour12+1; end if; if mhour11=0011 and mhour12=0001 then mhour11:=0001;mhour12:=0000; end if; if mhour21=1010 then mhour21:=0000; mhour22:=mhour22+1; end if; if mhour21=0100and mhour22=0010 then mhour21:=0000;mhour22:=0000; end if; end if;-时校验 else msecond1:=msecond1+1;-正常计时工作 if msecond1=1010 then msecond1:=0000; msecond2:=msecond2+1; if msecond2=0110 then msecond2:=0000; mminite1:=mminite1+1; if mminite1=1010 then mminite1:=0000; mminite2:=mminite2+1; if mminite2=0110 then mminite2:=0000; mhour11:=mhour11+1; mhour21:=mhour21+1; if mhour11=1010 then mhour11:=0000; mhour12:=mhour12+1; end if; if mhour11=0011 and mhour12=0001 then mhour11:=0001;mhour12:=0000; end if;-12小时制 if mhour21=1010 then mhour21:=0000; mhour22:=mhour22+1; end if; if mhour21=0100and mhour22=0010 then mhour21:=0000;mhour22:=0000; end if;-24小时制 end if;end if;end if;end if;if (msecond1=0000) and (msecond2=0000) and (mminite1=0000) and (mminite2=0000) then cout=1; else cout=0; end if; end if;end if;second1=msecond1;second2=msecond2;minite1=mminite1;minite2=mminite2;if change=0 then hour1=mhour11;hour2=mhour12; else hour1=mhour21;hour2=mhour22;-12/24小时制转换end if;end process;end architecture one;三:系统以及各个模块的仿真波形顶层文件仿真波形四、系统调试运行结果说明与分析 实验箱选择模式6。CLK接入1HZ的信号,数字钟开始计数,按下SET键进行时,分,秒的校准(分别按下S1,S2,S3进行校准),按下CHANGE键进行12/24小时制的切换,数码显示1,2,3,4,5,6分别显示秒,分和小时。五:结论与体会 通过调试,该系统能够完成预期的目标,并且计时较为准确,各部分功能完成的也很好。这是继第一次实验后的又一成功,尽管程序还不是自己编写的,但是使我们看到了数电实验丰富的内容和独特的魅力。(三)乒乓游戏机一:系统功能概述 两人乒乓球游戏能够模拟乒乓球比赛的基本过程和规则,并能自动裁判计分,在游戏中,以一排发光管交替发光知识乒乓球的行进路径,其行进速度可有输入的时钟信号clk控制。 Catcher是乒乓球街球控制模块,即发光管亮到最后一个的瞬间,若检测到对应的表示球拍的键的信号,立即将“球”反向运行:如果没有检测到该键信号,将给出出错音,同时为对方加分,并将计分现实出来。 Cout4和cout10分被是失球计数器的高低位计数模块。Direction是乒乓球行进方向控制模块,主要由发球键控制。Sound是失球提示发声模块。二:系统组成以及系统各部分的设计总控制模块(BALLCTRL.VHD)library ieee;use ieee.std_logic_1164.all;entity ballctrl is port(clr:in std_logic;系统复位 bain:in std_logic;左球拍 bbin:in std_logic;右球拍 serclka: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 behave 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 architecture behave;乒乓球灯模块(BALLPATH.VHD)library ieee;use ieee.std_logic_1164.all

温馨提示

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

评论

0/150

提交评论