电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现

这篇具有很好参考价值的文章主要介绍了电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击查看学习资料)

wx供重浩:创享日记
对话框发送:乐曲电路
免费获取完整无水印论文报告(包含电路图)



一、设计任务要求

1、课程设计题目
设计一个乐曲演奏电路,能够自动播放编写好的音乐。要求将音乐通过实验箱上的喇叭播放出来,用发光二级管显示出乐曲的节拍。
(附加功能:本设计在题目所要求的功能全部实现的基础之上又添加了许多附加功能,所有的功能将在“工程设计总述”中阐明,特此声明。)

2、设计分析
(1) 音乐硬件演奏电路基本原理
硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。

(2) 音符频率的获得
多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取1MHz的基准频率。数控分频器采用12位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。

根据分频系数,可计算数控分频器得到的初始值。(语言已经无法描述其中的原理了,程序可以说明此问题,关于初始值的解释,请看下文给出的程序)
初始值的计算公式如下:由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
(3) 乐曲节奏的控制
一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出4Hz的1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即8Hz。

(4) 乐谱的发生
本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。

(5) 选择模块
选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性,用vhdl语言描述比较简单,不在此详述。

(6)译码器等其他模块
译码器等模块在以前做实验的时候做过,且原理比较简单易懂,不再这里阐述。

3、工程设计总述
当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数所需的初始值,将初始值送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的8Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了。同时led数码管会随着音乐显示相应的乐谱,3位led灯会随着高中低的频率,相应的闪烁。当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏,这时用拨码开关选择播放的乐曲,拨码开关给选择器一个选择信号,即可选择相应的歌曲莫开中的数据进入数据翻译模块,播放出相应的歌曲,本工程选取了四首乐曲,以格雷码的形式编码,每次只变一位拨码开关,比较方便选择。(其余完整详见下载)


二、总体框图

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
该工程由是个模块构成,其中有四个为乐谱储存模块ROM,如图所示。

1、分频器的功能是将芯片上提供的50MHz的时钟分频为12MHz和8Hz的时钟,分别供计数器与分频驱动器(数控分频器)使用。
2、计数器完成计数功能,183进制(最长的歌曲菊花台有183个字符)每个时钟沿加一。
3、四个音乐模块分别记录了4首歌的乐谱。根据上一模块计数器所计的数读取相应地址里的数据传递给下一模块。
4、选择器完成选择歌曲的功能。
5、数据翻译模块将选择器所选择的歌曲rom里的地址的数据翻译成分频驱动器(数控分频器)分频所需的控制数据、3个led灯数据(高中低音)、以及译码器所需的数据。
6、分频驱动器也就是一个数控分频器,完成分频的功能,并驱动蜂鸣器。
7、译码器将乐谱数据在led数码管上显示。


三、选择器件

详见下载


四、功能模块

1.分频器(div)
将芯片上提供的50MHz的时钟分频为12MHz和8Hz的时钟,分别供计数器与分频驱动器(数控分频器)使用。

(1)模块图形:
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
(2)程序如下:

LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY div IS
   PORT(
       clk :IN STD_LOGIC; 
       CLK12MHz,CLK8Hz: OUT std_logic);
END div;
ARCHITECTURE  one of div is
begin
nana:process(clk)
variable cnt:integer range 0 to 2;
variable tmp:std_logic;
begin
if(clk'event and clk='1')then
if cnt>=1 then
cnt:=0;
tmp:=not tmp;
else
cnt:=cnt+1;
end if;
end if;
CLK12MHz<=tmp;
end process nana;
nbnb:process(clk)
variable cnt:integer range 0 to 3125000;
variable tmp:std_logic;
begin
if(clk'event and clk='1')then
if cnt>=3124999 then
cnt:=0;
tmp:=not tmp;
else
cnt:=cnt+1;
end if;
end if;
CLK8Hz<=tmp;
end process nbnb;
end one;

(3)仿真波形:
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
(4)仿真波形分析
由波形可看出ckl为输入50MHz的时钟信号,ckl12输出为平12MHz的时钟信号,clk8为8Hz的时钟信号,由于纸张有限没有打印出其全部波形。
经分析该模块功能完全正确。

2、计数器(notetabs)
(详见下载)

3、选择模块(choice)
(详见下载)

4、数据翻译模块(tontaba)

将选择器所选择的歌曲rom里的地址的数据翻译成分频驱动器(数控分频器)分频所需的控制数据、3个led灯数据(高中低音)、以及译码器所需的数据。

(1)模块图像:
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
(2)程序如下:

library ieee;
use ieee.std_logic_1164.all;
entity tonetaba is
  port(index:in std_logic_vector (4 downto 0);
    code:out std_logic_vector(3 downto 0);
    high0:out std_logic_vector(2 downto 0);
    tone:out std_logic_vector(11 downto 0))
;
  end;
architecture one of tonetaba is
begin
search:process(index)
begin
  case index is
when"00000"=>tone<="111111111111";code<="0000";high0<="000";--0/4095
when"00001"=>tone<="011100011111";code<="0001";high0<="001";--L1/1823
when"00010"=>tone<="100000001111";code<="0010";high0<="001";--L2/2063
when"00011"=>tone<="100011110010";code<="0011";high0<="001";--L3/2291
when"00100"=>tone<="100101010101";code<="0100";high0<="001";--L4/2390
when"00101"=>tone<="101000010000";code<="0101";high0<="001";--L5/2576
when"00110"=>tone<="101010111000";code<="0110";high0<="001";--L6/2745
when"00111"=>tone<="101101001011";code<="0111";high0<="001";--L7/2891
when"01000"=>tone<="101110001111";code<="0001";high0<="010";--M1/2960
when"01001"=>tone<="110000001001";code<="0010";high0<="010";--M2/3082
when"01010"=>tone<="110001111001";code<="0011";high0<="010";--M3/3193
when"01011"=>tone<="110010101100";code<="0100";high0<="010";--M4/3244
when"01100"=>tone<="110100001001";code<="0101";high0<="010";--M5/3337
when"01101"=>tone<="110101011100";code<="0110";high0<="010";--M6/3420
when"01110"=>tone<="110110100101";code<="0111";high0<="010";--M7/3494
when"01111"=>tone<="110111000111";code<="0001";high0<="100";--H1/3528
when"10000"=>tone<="111000000101";code<="0010";high0<="100";--H2/3589
when"10001"=>tone<="111000111100";code<="0011";high0<="100";--H3/3645
when"10010"=>tone<="111001010110";code<="0100";high0<="100";--H4/3670
when"10011"=>tone<="111010000100";code<="0101";high0<="100";--H5/3717
when"10100"=>tone<="111010101101";code<="0110";high0<="100";--H6/3758
when"10101"=>tone<="111011010010";code<="0111";high0<="100";--H7/3795
when others=>null;
  end case;
  end process;
  end;

(3)仿真波形:
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
(4)仿真波形分析

由波形可看出,当输入信号index为00110时high0显示1,code显示6(即 中音6),预置初值为101010111000,查询上文所列的表,可发现功能完全正确。

第二个波形图,输入信号00010,输出为中音2,再查预置初值,同样可发现完全正确。因此该模块功能完全正确。

5、译码器模块(deled)
(详见下载)

6、数控分频器模块(speakera)
(详见下载)

7、乐谱数据ROM(四个模块)
(详见下载)

8、地址线的选择:
除了上文所写到的模块外,还需要加入地址线的选择,已选择实验底箱的不同功能,本实验用到led数码管,因此地址线vga的赋值为vga0=0,vga1=1,vga2=0,vga3=0。如下图:

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现

9、led数码管位选功能的解决方案:
本工程只需显示一位简朴,因此选用一位数码管即可,由于实验箱上的数码管是共阳数码管,因此只需选取一位数码管赋上低电平即可,如图:(我在这里选取了2、4、6、8四位数码管共同显示)

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现


五、总体设计电路图

1、顶层设计的电路原理图

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
2、顶层设计的仿真结果
由于该工程总体的输入时钟信号为50MHz,其中要经过多个分频器且分频系数巨大,因此不可能整体仿真成功,(会导致仿真时间过长而失败)。关于这个问题,我特意请教了李兵老师,老师告诉我仿真的时候去掉几个模块,只仿真一部分功能,去掉的模块再单独仿真即可证明整个工程的正确性,我按这个方案想了很久,发现这个仿真可以先去掉div分频模块,再更改speakera的程序(像仿真speakera模块那样)仿真,也可以同时去掉div与speakera模块,进行仿真。但这两种方法也都是拆分为几块分别仿真,而没有整个工程的仿真,因此这种仿真与将每个模块分别仿真验证其功能的正确性本质上是一样的。
只要证明了每个模块的功能完全正确,即可得出本工程整体的功能可以实现,在上文已经分别证明了每个模块功能的完全正确,因此,整个工程的功能也是完全正确的。经分析,顶层设计仿真功能完全正确。

3、电路的顶层文件管脚分配图如下

电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
4、连线及下载
在硬件电路上实现此程序 CLK接50MHz晶振输入;音乐选择指示灯分别接IO9、I010、IO11、IO12,然后再与LED灯连接;高中低音分别接IO14、IO15、IO16,然后再与LED连接,SPKOUT接IO13,然后与扬声器连接。


六、结束语

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM器件。通过引入支持LPM的EDA[1]软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。
这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时采用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。文章来源地址https://www.toymoban.com/news/detail-454056.html

到了这里,关于电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浙江理工大学数字电子技术课程设计

    班级:       20 计算机科学与技术( 3 )班          学号:              2020329621193                姓名:                  杨正龙                     序号:                3 — 22                       浙江理工大学本科课

    2024年02月12日
    浏览(53)
  • 增益可控放大电路-电路与电子技术课程设计

    1.设计一款放大电路,其增益包括0.01、0.1、1、10、100、1000倍可选。 2.设计一个增益选择电路,可利用若干按钮(非开关)进行选择。 3.设计一个数字显示电路,显示当前增益大小(分贝显示)。 通过本项目实验,使学生熟悉掌握电路原理和设计方法,尤其在电路出现异常现

    2024年02月16日
    浏览(50)
  • 【微软技术栈】基于.NET MAUI跨平台电子白板的设计与实现

    1、摘 要 随着科技的发展,电子白板功能已经普及到视频会议、在线课堂、企业、学校乃至其他更多行业。在多种移动设备并存的大环境下,为每个平台(如:Android、IOS、Windows等)都编写一套代码,无论是前期开发还是后期维护,成本都会增加。另一方面,移动互联网经过

    2024年02月06日
    浏览(64)
  • 计算机毕业论文内容参考|基于区块链技术的电子健康记录系统的设计与实现

    本文介绍了基于区块链技术的电子健康记录系统的设计与实现。该系统旨在解决传统电子健康记录系统存在的数据安全性、数据隐私性和数据互操作性等问题。通过利用区块链的去中心化、不可篡改和可追溯的特点,实现了电子健康记录的安全存储、隐私保护和共享交换。文

    2024年02月03日
    浏览(54)
  • 基于微信电子书小说阅读小程序毕业设计成品作品(3)开发技术文档

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(48)
  • 电力电子技术课程实验:实验一、DC/DC直流斩波电路制作与性能测试

    直流斩波电路的工作原理是什么?有哪些结构形式和主要元器件? 答:直流斩波电路的工作原理:将直流信号变化成有信号幅值的脉冲信号。 结构形式:降压斩波电路、 升压斩波电路、升降压斩波电路。 主要元器件:晶体管、IGBT、电容、电感、PWM集成电路(SG3525)和电阻

    2024年02月02日
    浏览(53)
  • #课程笔记# 电路与电子技术基础 课堂笔记 第3章 电路分析的几个定理

    激励:电流源或电压源 响应:电流或电压 叠加定理一般用于已知激励或响应中的一种,求另一种。做法就是,每次只求一个激励作用下的响应,将其他激励置零, 置零 的具体做法是, 电压源变短路,电流源变断路 。之后将所求得的所有响应叠加,就是所有激励共同作用下

    2023年04月08日
    浏览(55)
  • 【电子技术综合设计】数字钟(包含计数模块、12/24进制切换模块以及闹钟模块)

    工程文件: https://pan.baidu.com/s/1PnYd2mwMUf0tgxczdcl2MA 提取码: ihrk B站演示: 【电子技术综合设计】数字电子时钟(包含计数模块、12/24进制切换模块以及闹钟模块)_哔哩哔哩_bilibili 一、设计要求 1. 24小时制的时、分、秒计时; 2. 手动调时功能; 3. 闹钟功能; 4. 12/24小时制转换;

    2023年04月22日
    浏览(53)
  • 基于前端技术原生HTML、JS、CSS 电子病历编辑器源码

    电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了纸质病历的电子化储存,而且实现了病历的

    2024年02月11日
    浏览(67)
  • 电子设计自动化 (EDA)——新技术需要为 EDA 提供新的解决方案

    电子设计自动化 (EDA) 成本持续增加,而周期时间缩短。这些都为 EDA 设计带来了前所未有的挑战,对现代高性能工作流的需求变得从未如此巨大。 新技术需要为 EDA 提供新的解决方案 最近,对 5 纳米和 3 纳米流程的计算和存储需求的增长已经超过了最常见的 EDA 基础架构方法

    2024年02月04日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包