【精品】Verilog HDL数字设计实训教程第3章 数字系统应用类实训项目精品ppt课件.ppt
-
资源ID:76420098
资源大小:1.47MB
全文页数:50页
- 资源格式: PPT
下载积分:15金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
【精品】Verilog HDL数字设计实训教程第3章 数字系统应用类实训项目精品ppt课件.ppt
Verilog HDL数字设计实训教程第3章 数字系统应用类实训项目第第1章章 Verilog HDL数字设计实训基础数字设计实训基础第第2章章 接口类实训项目接口类实训项目第第3章章 数字系统应用类实训项目数字系统应用类实训项目第第4章章 NiosII处理器实训项目处理器实训项目第3章 数字系统应用类实训项目3.1 序列检测器设计序列检测器设计 3.2 多功能计算器设计多功能计算器设计 3.3 求最大公因数设计求最大公因数设计 3.4 多功能数字钟设计多功能数字钟设计 3.5 音乐播放器设计音乐播放器设计 3.6 小结小结 3.1 序列检测器设计序列检测器设计 1.设计要求设计要求 试设计一个试设计一个“1101”序列检测器,每当序列检测器,每当1101连续出现连续出现时,检测输出时,检测输出1,控制,控制LED点亮。例如:序列点亮。例如:序列“11110110100110100110100”经经FPGA处理后,则处理后,则先后亮先后亮4次次LED灯。灯。要求:要求:(1)使用按键)使用按键2来输入来输入1和和0;(2)使用按键)使用按键3作为序列的时钟信号,每按一次,则作为序列的时钟信号,每按一次,则将按键将按键2确定的二进制码串入序列中。确定的二进制码串入序列中。(3)检测出)检测出“1101”序列后,第序列后,第4个个led灯点亮,否则灯点亮,否则该该led灯灭。灯灭。3.1 序列检测器设计序列检测器设计 2.设计说明设计说明 图图3-1“1101”序列检测器状态图序列检测器状态图3.1 序列检测器设计序列检测器设计 4.代码说明代码说明(1)顶层模块)顶层模块sequence_top调用了两个模块。调用了两个模块。模块模块key_sequence用于产生二进制码和序列移入时用于产生二进制码和序列移入时钟,同时将产生的二进制码送数码管显示;模块钟,同时将产生的二进制码送数码管显示;模块serial_detected用于进行序列检测,若检测到事先用于进行序列检测,若检测到事先设定的二进制码,就会控制设定的二进制码,就会控制led点亮。点亮。(2)serial_detected在进行序列检测时,使用在进行序列检测时,使用了包含了包含4个状态的状态机予以实现,该状态机代码就个状态的状态机予以实现,该状态机代码就是由图是由图3-1所示的状态图转化而成。所示的状态图转化而成。3.1 序列检测器设计序列检测器设计 5.仿真分析仿真分析 图图3-3 序列检测模块序列检测模块仿真波形图仿真波形图 3.1 序列检测器设计序列检测器设计 6.硬件验证硬件验证 图图3-4 引脚锁定引脚锁定3.1 序列检测器设计序列检测器设计 7.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)在检测出序列的基础上,对检测出现的次数)在检测出序列的基础上,对检测出现的次数进行累加计数,并将计数结果显示在数码管上。进行累加计数,并将计数结果显示在数码管上。(2)使用)使用2只数码管显示最近两次输入的数据,只数码管显示最近两次输入的数据,这样可使序列移入效果更直观。这样可使序列移入效果更直观。3.2 多功能计算器设计多功能计算器设计 1.设计要求设计要求 实现多功能计算器,具体要求如下:实现多功能计算器,具体要求如下:该计算器可以实现加法、减法、乘法该计算器可以实现加法、减法、乘法3种功能:种功能:3种功能由按键种功能由按键2进行选择;进行选择;2个运算数由键个运算数由键1和键和键3产生,每按一次键则使相应的运算数加产生,每按一次键则使相应的运算数加1;加、;加、减、乘均产生一个结果,当按下键减、乘均产生一个结果,当按下键4时,产生运时,产生运算结果并将结果显示液晶上,显示格式分别为算结果并将结果显示液晶上,显示格式分别为“3+2=5”、“8-14=-7”、“3x5=15”;要求参与;要求参与运算的运算的2个数为个数为9以内的整数。以内的整数。3.2 多功能计算器设计多功能计算器设计 2.设计说明设计说明 由于开发板资源有限,仅有由于开发板资源有限,仅有4个按键,计算器的个按键,计算器的功能全部通过功能全部通过4个按键来完成,所以为了操作方便,个按键来完成,所以为了操作方便,限定参与运算的两个数均为限定参与运算的两个数均为9以内的整数,同时限定以内的整数,同时限定该计算器仅完成加、减、乘运算。该计算器仅完成加、减、乘运算。理论上,如果我们按一次键,就对操作数加理论上,如果我们按一次键,就对操作数加1,那么操作数可以是任意的正整数;同理,如果按一次那么操作数可以是任意的正整数;同理,如果按一次键,就改变成一种新的运算,那么计算器可以完成很键,就改变成一种新的运算,那么计算器可以完成很多种运算。但是,通过按键加多种运算。但是,通过按键加1来改变操作数或改变来改变操作数或改变运算种类,比较麻烦,所以我们对操作数以及运算种运算种类,比较麻烦,所以我们对操作数以及运算种类均作了限定,操作数限定为类均作了限定,操作数限定为9以内的整数,运算仅以内的整数,运算仅限于加、减、乘。限于加、减、乘。3.2 多功能计算器设计多功能计算器设计 3.设计模块设计模块 图图3-5 计算器计算器模块模块端口框端口框图图3.2 多功能计算器设计多功能计算器设计 3.设计模块设计模块 4个模个模块的功能:块的功能:模块模块U1为分频器,得到为分频器,得到200Hz的频率,该频率用于的频率,该频率用于U2、U4等模块;等模块;模块模块U2使用按键来设置计算器的功能以及设置参与使用按键来设置计算器的功能以及设置参与计算的计算的2个数据;个数据;模块模块U3根据计算器的功能以及参与计算的数据,完根据计算器的功能以及参与计算的数据,完成运算,并将结果转换成适宜在成运算,并将结果转换成适宜在LCD上显示的数据;上显示的数据;模块模块U4实现将结果显示在液晶屏上。实现将结果显示在液晶屏上。3.2 多功能计算器设计多功能计算器设计 4.代码说明代码说明(1)在在calculator _top模块模块中,可以看到调用了中,可以看到调用了4个模块。模块个模块。模块divf_cal为分频器,得到为分频器,得到200Hz的频率,该频率用于的频率,该频率用于key_cal、lcd_1602_cal等模块;模块等模块;模块key_cal使用按键来设置计算器的功能以及使用按键来设置计算器的功能以及设置参与计算的设置参与计算的2个数据;模块个数据;模块calculator根据计算器的功能以及参与根据计算器的功能以及参与计算的数据,进行运算,并将结果转换成适宜在计算的数据,进行运算,并将结果转换成适宜在LCD上显示的数据;上显示的数据;模块模块lcd_1602_cal用于将结果显示在液晶屏上用于将结果显示在液晶屏上.(2)4个按键的功能:个按键的功能:3种功能由按键种功能由按键2进行选择,每按一次键进行选择,每按一次键2就改就改变一种功能,变一种功能,3种功能依次循环选择;种功能依次循环选择;2个运算数由键个运算数由键1和键和键3产生,每产生,每按一次键则使相应的运算数加按一次键则使相应的运算数加1;键;键4则启动计算并得到计算结果。则启动计算并得到计算结果。请请读者参照读者参照key_cal模块认真体会。模块认真体会。(3)动态数据在液晶上显示的方法,由状态机来完成,请读者参照)动态数据在液晶上显示的方法,由状态机来完成,请读者参照lcd_1602_cal模块模块的代码及其注释认真体会。的代码及其注释认真体会。3.2 多功能计算器设计多功能计算器设计 5.仿真分析仿真分析 图图3-6 calculator模块仿真波形图模块仿真波形图3.2 多功能计算器设计多功能计算器设计 6.硬件验证硬件验证 图图3-7 引脚锁定引脚锁定3.2 多功能计算器设计多功能计算器设计 7.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)本小节设计的多功能计算器,仅包含加、减、乘法,请读者)本小节设计的多功能计算器,仅包含加、减、乘法,请读者在此基础上完成除法运算功能。要求:(在此基础上完成除法运算功能。要求:(i)除法中除数为)除法中除数为0,则需,则需要报错,并将错误信息要报错,并将错误信息“E”显示在液晶上;(显示在液晶上;(ii)除法产生商和)除法产生商和余数余数2个结果,除法在液晶上显示的格式为个结果,除法在液晶上显示的格式为“13/5=23”,即要,即要求商和余数之间使用求商和余数之间使用“”隔开;要求参与运算的隔开;要求参与运算的2个数为个数为9以内以内的整数。的整数。(2)本小节设计的多功能计算器,对参与计算的操作数限定为)本小节设计的多功能计算器,对参与计算的操作数限定为9以内的整数,事实上对于更大的数,其实现原理是一样的。将读以内的整数,事实上对于更大的数,其实现原理是一样的。将读者将参与计算的操作数扩展到者将参与计算的操作数扩展到1000以内,并将结果显示在液晶上。以内,并将结果显示在液晶上。3.3 求最大公因数设计求最大公因数设计 1.设计要求设计要求 实现求最大公因数,具体要求如下:实现求最大公因数,具体要求如下:对任意输入的两个正整数,能够得到它们的对任意输入的两个正整数,能够得到它们的最大公因数,最大公因数,2个数由键个数由键1和键和键2产生,键产生,键4则启则启动求最大公因数并将结果显示液晶上,显示格动求最大公因数并将结果显示液晶上,显示格式分别为式分别为“8G4=4”,要求输入的,要求输入的2个数均为个数均为9以内的整数。以内的整数。图图3-8 GCD系统框图系统框图2.设计说明设计说明 3.3 求最大公因数设计求最大公因数设计 2.设计说明设计说明 图图3-9 状态图转换模板状态图转换模板 3.3 求最大公因数设计求最大公因数设计 2.设计说明设计说明 图图3-10求最求最大公约数的大公约数的状态图(左)状态图(左)及化简后的及化简后的状态图(右)状态图(右)3.3 求最大公因数设计求最大公因数设计 3.设计模块设计模块 图图3-11 GCD模块模块端口框端口框图图 3.3 求最大公因数设计求最大公因数设计 3.设计模块设计模块 使用使用4个模块个模块实现实现:模块模块U1为分频器,得到为分频器,得到200Hz的频率,该频率的频率,该频率用于用于U2、U3、U4等模块;等模块;模块模块U2使用按键来设置参与运算的使用按键来设置参与运算的2个数据;个数据;模块模块U3根据求最大公因数的算法,完成运算,根据求最大公因数的算法,完成运算,并将结果转换成适宜在并将结果转换成适宜在LCD上显示的数据;上显示的数据;模块模块U4实现将结果显示在液晶屏上。实现将结果显示在液晶屏上。3.3 求最大公因数设计求最大公因数设计 4.代码说明代码说明(1)在在gcd_top模块中,可以看到调用了模块中,可以看到调用了4个模块。模块个模块。模块divf_gcd为分频器,得到为分频器,得到200Hz的频率,该频率用于的频率,该频率用于key_gcd、gcd、lcd_gcd等模块;模块等模块;模块key_gcd实现求最实现求最大公因数的算法,完成运算,并将结果转换成适宜在大公因数的算法,完成运算,并将结果转换成适宜在LCD上上显示的数据;模块显示的数据;模块lcd_gcd 实现将结果显示在液晶屏上。实现将结果显示在液晶屏上。(2)4个按键,仅用到了个按键,仅用到了3个按键:个按键:2个运算数由键个运算数由键1和键和键2产生,每按一次键则使相应的运算数加产生,每按一次键则使相应的运算数加1;键;键4则启动计算并则启动计算并得到计算结果。得到计算结果。按键的处理以及使用,请参考按键的处理以及使用,请参考key_gcd模块。模块。(3)动态数据在液晶上显示的方法,与多功能计算器中的)动态数据在液晶上显示的方法,与多功能计算器中的方法类似,也由状态机来完成,请读者参照方法类似,也由状态机来完成,请读者参照lcd_gcd模块的代模块的代码及其码及其注释认真体会。注释认真体会。3.3 求最大公因数设计求最大公因数设计 5.仿真分析仿真分析 图图3-12 gcd模块仿真波形图模块仿真波形图 3.3 求最大公因数设计求最大公因数设计 6.硬件验证硬件验证 图图3-13 引脚锁定引脚锁定3.3 求最大公因数设计求最大公因数设计 6.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)输入为)输入为0是一种异常情况,请读者在程序是一种异常情况,请读者在程序中添加中添加“输入为输入为0”的异常处理代码。的异常处理代码。(2)尝试将输入的)尝试将输入的2个数扩展为个数扩展为99以内的整数,以内的整数,2个数仍由键个数仍由键1和键和键2产生,在液晶上的显示格式为产生,在液晶上的显示格式为“36G24=12”。3.4 多功能数字钟设计多功能数字钟设计 1.设计要求设计要求 实现一个多功能数字钟(含跑表功能),如图实现一个多功能数字钟(含跑表功能),如图3-14所示,所示,具体要求如下:具体要求如下:(1)计时功能:包括时、分、秒、百分秒的计时,)计时功能:包括时、分、秒、百分秒的计时,可以实现一可以实现一天天以内精确至百以内精确至百分之一秒的计时分之一秒的计时,并将结果显示在液晶上。,并将结果显示在液晶上。(2)定时功能:可设定闹钟定时的小时和分钟值。)定时功能:可设定闹钟定时的小时和分钟值。(3)校时功能:)校时功能:根据当前根据当前准确准确时间时间对小时、分钟能手动调整以校准时间。通过对小时、分钟能手动调整以校准时间。通过按键来修改小按键来修改小时、分时、分钟值,完成钟值,完成对小时、分钟对小时、分钟的的校准校准。(4)复位和暂停功能:这一功能是针对数字跑表的,数字钟不需要这个功能。)复位和暂停功能:这一功能是针对数字跑表的,数字钟不需要这个功能。图图3-14 多功能数字钟多功能数字钟 3.4 多功能数字钟设计多功能数字钟设计 2.设计说明设计说明 设计将两个项目放在了一起,一个项目是数字钟,另设计将两个项目放在了一起,一个项目是数字钟,另一个项目是数字跑表,这两个项目针对不同的应用,因此一个项目是数字跑表,这两个项目针对不同的应用,因此设计要求也有所不同。设计要求也有所不同。对于数字钟来说,需要计时、校时、闹钟等功能,针对于数字钟来说,需要计时、校时、闹钟等功能,针对计时功能,则要求实现括时、分、秒的计时,并且对计时功能,则要求实现括时、分、秒的计时,并且可以可以实现一实现一天天以内精确至以内精确至1秒的计时秒的计时。对于跑表来说,需要复位清零、暂停等功能,针对计对于跑表来说,需要复位清零、暂停等功能,针对计时功能,则要求实现分、秒、百分秒的计时,时功能,则要求实现分、秒、百分秒的计时,可以实现一可以实现一小时小时以内精确至百分之一秒的计时以内精确至百分之一秒的计时。本节仅完成设计要求中的前面本节仅完成设计要求中的前面3个。个。3.4 多功能数字钟设计多功能数字钟设计 3.设计模块设计模块 图图3-15 数字钟数字钟模块模块端口框端口框图图3.4 多功能数字钟设计多功能数字钟设计 3.设计模块设计模块 4个模个模块的功能:块的功能:模块模块U1用于分频,得到用于分频,得到100Hz和和1kHz两个频两个频率,分别为按键和液晶提供合适的工作频率;率,分别为按键和液晶提供合适的工作频率;模块模块U2产生工作模式以及得到时间信息、闹钟产生工作模式以及得到时间信息、闹钟定时信息以及校时信息;定时信息以及校时信息;模块模块U3产生显示用的时、分、秒及百分秒信息;产生显示用的时、分、秒及百分秒信息;模块模块U4用于实现液晶的显示控制。用于实现液晶的显示控制。3.4 多功能数字钟设计多功能数字钟设计 4.代码说明代码说明(1)在)在digitalclock_top模块中调用了模块中调用了4个模块实现。模块个模块实现。模块divf_digitalclk用于分频,得到用于分频,得到100Hz和和1kHz两个频率,分别为按键两个频率,分别为按键和液晶提供合适的工作频率;模块和液晶提供合适的工作频率;模块key_digitalclk通过按键产生工作模通过按键产生工作模式、设定闹钟定时、设定校准时间等,并得到时间信息、闹钟定时信式、设定闹钟定时、设定校准时间等,并得到时间信息、闹钟定时信息以及校时信息;模块息以及校时信息;模块digitalclock产生显示用的时、分、秒及百分秒产生显示用的时、分、秒及百分秒信息;模块信息;模块lcd_digitalclk用于实现液晶的显示控制。用于实现液晶的显示控制。(2)在)在key_digitalclk模块中,使用按键产生工作模式、设定闹钟定模块中,使用按键产生工作模式、设定闹钟定时、设定校准时间等,工作模式由变量时、设定校准时间等,工作模式由变量mode来存储:来存储:mode=0,为计,为计时模式;时模式;mode=1,为闹钟模式;,为闹钟模式;mode=2,为校时模式。在校时模式,为校时模式。在校时模式下,设定校准时间后,需要将校准的小时和分钟信息传给计时用的小下,设定校准时间后,需要将校准的小时和分钟信息传给计时用的小时和分钟,以同步更新,如时和分钟,以同步更新,如“if(mode=2)hour_n=hour_adj;”“if(mode=2)min_n=min_adj;”这两条语句所示。这两条语句所示。(3)在数字钟设计中,小时、分、秒异步更新,更新时采用了不同时)在数字钟设计中,小时、分、秒异步更新,更新时采用了不同时钟,同时对小时、分、秒的十位和个位采取了分别处理的方法,这是钟,同时对小时、分、秒的十位和个位采取了分别处理的方法,这是一个很实用的技巧,请读者参照代码认真体会。一个很实用的技巧,请读者参照代码认真体会。3.4 多功能数字钟设计多功能数字钟设计 5.硬件验证硬件验证 图图3-16 引脚锁定引脚锁定3.4 多功能数字钟设计多功能数字钟设计 6.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)对于数字钟功能,计时信息可仅显示时、分、秒,读者可以将百分秒信)对于数字钟功能,计时信息可仅显示时、分、秒,读者可以将百分秒信息去掉,这一功能很容易实现,由读者自行完成。息去掉,这一功能很容易实现,由读者自行完成。(2)整点报时功能和闹铃功能:每逢整点,产生间隔)整点报时功能和闹铃功能:每逢整点,产生间隔1s的的嘀嘀嘀嘀嘀嘀嘀嘀嘟嘟,四短一长的报时音。在闹钟定时到的时刻,启动闹铃响,闹铃音为急促的,四短一长的报时音。在闹钟定时到的时刻,启动闹铃响,闹铃音为急促的嘀嘀嘀嘀嘀嘀音,响声延续音,响声延续30秒。需要增加一个输出到扬声器的信号,该信号可直秒。需要增加一个输出到扬声器的信号,该信号可直接从接从FPGA管脚引出到扬声器,用于产生闹铃音和报时音。管脚引出到扬声器,用于产生闹铃音和报时音。(3)使用按键来开启或关闭闹钟功能,并用使用按键来开启或关闭闹钟功能,并用1个个LED灯指示是否设置了闹钟功灯指示是否设置了闹钟功能,亮表示已设置,不亮表示未设置;在校时或闹钟模式下,增加能,亮表示已设置,不亮表示未设置;在校时或闹钟模式下,增加2个个LED灯灯来指示调整的是小时还是分钟。来指示调整的是小时还是分钟。(4)使用按键来开启或关闭数字跑表功能,对于跑表功能,计时信息仅显示)使用按键来开启或关闭数字跑表功能,对于跑表功能,计时信息仅显示分、秒、百分秒信息。分、秒、百分秒信息。(5)针对跑表功能,要求增加)针对跑表功能,要求增加pause暂停和暂停和reset复位功能按键:按动复位功能按键:按动复位后,复位后,数字跑表数字跑表从从00:00:00:00开始计数开始计数;按动暂停后,数字跑表停止计数,在液晶;按动暂停后,数字跑表停止计数,在液晶上稳定显示最后的计数值。上稳定显示最后的计数值。3.5 音乐播放器设计音乐播放器设计1.设计要求设计要求 设计硬件乐曲演奏电路设计硬件乐曲演奏电路,具体要求如下:,具体要求如下:(1)了解乐谱的一些基本知识,可以将乐谱转了解乐谱的一些基本知识,可以将乐谱转换为相应的换为相应的QuartusII文件文件。(2)识谱并演奏)识谱并演奏沂蒙山小调沂蒙山小调和和两只老虎两只老虎,通过按键,通过按键4来选择其中的一首乐曲播放,来选择其中的一首乐曲播放,两首乐曲的简谱如图两首乐曲的简谱如图3-17和图和图3-18所示。所示。(3)掌握本设计各模块的功能,能够填入并演)掌握本设计各模块的功能,能够填入并演奏一些新的曲子奏一些新的曲子 图图3-17 沂蒙山小调的简谱沂蒙山小调的简谱图图3-18 两只老虎的简谱两只老虎的简谱3.5 音乐播放器设计音乐播放器设计 2.设计说明设计说明 图图3-19 简谱中音名与音频的对应关系简谱中音名与音频的对应关系 3.5 音乐播放器设计音乐播放器设计 2.设计说明设计说明 图图3-20 简谱中音频与分频预置数的对应关系简谱中音频与分频预置数的对应关系 表表3-1 常用音符常用音符及其及其长度标记长度标记3.5 音乐播放器设计音乐播放器设计 3.设计模块设计模块 图图3-21 硬件乐曲演奏电路模块硬件乐曲演奏电路模块端口框端口框图图 3.5 音乐播放器设计音乐播放器设计 3.设计模块设计模块 6个模个模块的功能:块的功能:U1是分频模块,得到的是分频模块,得到的clk_100Hz和和clk_8Hz分别用于按键分别用于按键处理,以及作为作为基准音长;处理,以及作为作为基准音长;U2是选曲模块,得到曲目号码;是选曲模块,得到曲目号码;U3模块输出所选曲目的音符模块输出所选曲目的音符,并通过数码管和并通过数码管和LED灯显示音灯显示音符;符;U4模块得到数码管显示的段码;模块得到数码管显示的段码;U5模块根据音符选取分频预置数;模块根据音符选取分频预置数;U6模块根据分频预置数得到音符的频率并输出扬声器,输出模块根据分频预置数得到音符的频率并输出扬声器,输出美妙的音乐。美妙的音乐。在图在图3-21中,模块中,模块U3类似于弹琴的人的手指;类似于弹琴的人的手指;U5类似于琴键;类似于琴键;U6类似于琴弦或音调发声器类似于琴弦或音调发声器。3.5 音乐播放器设计音乐播放器设计 4.代码说明代码说明(1)songer_top模块中调用了模块中调用了6个模块个模块。divf_speaker是分频模块,是分频模块,得到的得到的clk_100Hz和和clk_8Hz分别用于按键处理,以及作为作为基准音分别用于按键处理,以及作为作为基准音长;长;song_sel是选曲模块,得到曲目号码;是选曲模块,得到曲目号码;NoteTabs模块输出所选模块输出所选曲目的音符曲目的音符,并通过数码管和并通过数码管和LED灯显示音符;灯显示音符;Decode_8S模块得到模块得到数码管显示的段码;数码管显示的段码;ToneTaba模块根据音符选取分频预置数;模块根据音符选取分频预置数;Speakera模块根据分频预置数得到音符的频率并输出扬声器,输出美模块根据分频预置数得到音符的频率并输出扬声器,输出美妙的音乐。妙的音乐。(2)分频预置数存放在)分频预置数存放在ToneTaba模块的参数模块的参数pre_divf中。中。ToneTaba模块根据输入的音符,选择输出相应的分频预置数。该分频预置数是模块根据输入的音符,选择输出相应的分频预置数。该分频预置数是在输入为在输入为1MHz的频率下得到的,而开发板的时钟源为的频率下得到的,而开发板的时钟源为50MHz,所以要,所以要使用这些分频预置数,需要先对使用这些分频预置数,需要先对50MHz分频得到分频得到1MHz频率,分频这一频率,分频这一步是在步是在Speakera模块中完成。模块中完成。(3)两首乐曲分别存放在在)两首乐曲分别存放在在NoteTabs模块的模块的参数参数music1和和music2中。如果需要播放其它乐曲,可以在中。如果需要播放其它乐曲,可以在NoteTabs模块模块中增加参数,如中增加参数,如music3、music4等,将乐曲保存在这些参数中。等,将乐曲保存在这些参数中。3.5 音乐播放器设计音乐播放器设计 4.代码说明代码说明(4)NoteTabs模块模块输入的是输入的是8Hz的频率,的频率,即即每个音调的基准每个音调的基准停留时停留时间为间为0.125秒,恰为当全音符设为秒,恰为当全音符设为1秒时,四四拍的秒时,四四拍的八八分音符分音符的的持续时持续时间。在间。在NoteTabs中设置了一个中设置了一个10位二进制计数器(计数最大值为位二进制计数器(计数最大值为1024),作为音符数据),作为音符数据的选取信号的选取信号。随着。随着NoteTabs中的计数器按中的计数器按8Hz的时钟速率作加法计数时,的时钟速率作加法计数时,music中的音符中的音符不断被选择输出不断被选择输出,乐曲就,乐曲就开始连续自然地演奏起来了开始连续自然地演奏起来了。(5)音符的频率可以由音符的频率可以由Speakera模块模块获得。获得。Speakera模块的模块的clk端端输入输入50MHz的的频率信号,通过频率信号,通过Speakera模块模块分频后分频后得到得到2MHz的的PreCLK输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占触发器以均衡其占空比,但这时的频率将是原来的空比,但这时的频率将是原来的1/2。Speakera模块模块对对clk输入信号的输入信号的分频比由分频比由11位预置数位预置数Tone10.0决定。决定。speaker的输出频率将决定每的输出频率将决定每一音符的音调,这样,分频预置值一音符的音调,这样,分频预置值Tone10.0 与与speaker的输出频率,的输出频率,就有了对应关系。例如在就有了对应关系。例如在ToneTaba模块中若取模块中若取Tone10.0=1036,将,将发音符为发音符为“3”音的信号频率。音的信号频率。3.5 音乐播放器设计音乐播放器设计 4.代码说明代码说明(6)音符的持续时间须根据乐曲的速度及每个音符音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,的节拍数来确定,图图3-21中模块中模块ToneTaba的功能首的功能首先是为先是为Speakera模块模块提供决定所发音符的分频预置提供决定所发音符的分频预置数,而此数在数,而此数在speaker输入口停留的时间即为此音符输入口停留的时间即为此音符的节拍值。模块的节拍值。模块ToneTaba是乐曲简谱码对应的分频是乐曲简谱码对应的分频预置数查表电路,其中设置了预置数查表电路,其中设置了高音、中音、低音高音、中音、低音全部全部音符所对应的分频预置数,共音符所对应的分频预置数,共21个,个,每一音符的停每一音符的停留时间由音乐节拍和音调发生器模块留时间由音乐节拍和音调发生器模块ToneTaba的的clk的输入频率决定,在此为的输入频率决定,在此为8Hz。这。这21个值的输出由对个值的输出由对应于应于ToneTaba的的5位输入值位输入值Index4.0确定。确定。3.5 音乐播放器设计音乐播放器设计 5.硬件验证硬件验证 图图3-22 引脚锁定引脚锁定3.5 音乐播放器设计音乐播放器设计 6.硬件验证硬件验证 图图3-23 开发板的硬件连接以及演示效果开发板的硬件连接以及演示效果 3.5 音乐播放器设计音乐播放器设计 7.扩展部分扩展部分 请读者思考请读者思考并实现以下扩展功能:并实现以下扩展功能:(1)本节设计的例子将音乐简谱全部存放在程序的参数中。当然,将)本节设计的例子将音乐简谱全部存放在程序的参数中。当然,将乐曲存储在乐曲存储在ROM中,也是一个不错的选择,请读者尝试使用中,也是一个不错的选择,请读者尝试使用ROM来存来存储乐曲。储乐曲。(2)填入新的乐曲,如)填入新的乐曲,如“梁祝梁祝”、或其它熟悉的乐曲。操作步骤如下:、或其它熟悉的乐曲。操作步骤如下:在在模块模块NoteTabs增加一个参数,如增加一个参数,如parameter music3,用来存放乐,用来存放乐曲的音符曲的音符;根据乐曲的长短,合理设置根据乐曲的长短,合理设置模块模块NoteTabs中计数器的位数,中计数器的位数,如如10位时可达位时可达1024个基本节拍。个基本节拍。(3)在在NoteTabs模块中添加模块中添加多首歌曲,多首歌曲,并且实现并且实现手动或自动选择歌手动或自动选择歌曲(推荐曲(推荐“梁祝梁祝”和和“难忘今宵难忘今宵”)。)。3.6 小结小结在本章,重点讨论了以下知识点:在本章,重点讨论了以下知识点:本章在第本章在第2章按键、章按键、LED灯、数码管、灯、数码管、LCD、UART等接口项目开发的基础上,精选了几个数等接口项目开发的基础上,精选了几个数字系统设计项目,并对这些项目进行了详细分析字系统设计项目,并对这些项目进行了详细分析和实现,具体包括序列检测器、多功能计算器、和实现,具体包括序列检测器、多功能计算器、求最大公因数、多功能数字钟和音乐播放器。求最大公因数、多功能数字钟和音乐播放器。这些项目最大限度地发挥了开发板的作用,充这些项目最大限度地发挥了开发板的作用,充分利用了开发板有限的接口资源,是比较经典的分利用了开发板有限的接口资源,是比较经典的项目,这些项目的设计思路和实现方法值得借鉴。项目,这些项目的设计思路和实现方法值得借鉴。扩展部分的实现有助于对项目的深入理解和掌扩展部分的实现有助于对项目的深入理解和掌握,也有助于延伸项目的应用范围,感兴趣的读握,也有助于延伸项目的应用范围,感兴趣的读者自行完成。者自行完成。