数字电路综合设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成都信息工程学院数字电路综合设计报告
课程名称:乐曲演奏电路综合设计系部:信息安全工程学院
专业班级:信对121
学生姓名:罗星
学号:2012123015
指导教师:邓娜曾祥萍龚一光
一. 设计要求 (3)
二. 系统概述及工作原理 (3)
2.1系统概述 (3)
2.2工作原理 (3)
2.2.1乐曲发声原理 (3)
2.2.2硬件电路发声原理 (4)
三. 设计的具体实现 (4)
3.1单元电路设计与分析 (5)
3.1.1十分频器 (5)
3.1.2数控分频器 (6)
3.1.3分频预置数器 (7)
3.1.4 lpm_connter的设置 (9)
3.2音乐演奏电路的总体工作原理,时钟和音乐节拍的控制关系 (11)
3.2.1总体工作原理 (11)
3.2.2时钟和音乐节拍的控制关系 (11)
3.3调试及运行 (11)
3.3.1运行结果 (11)
3.3.2扩展为其他音乐的方法 (11)
四.心得体会及建议 (12)
基于FPGA的音乐演奏电路设计
一.设计要求
1. 设计一个乐曲硬件演奏电路,通过数字逻辑电路控制蜂鸣器演奏指定的乐曲;
2. 使用数字电路实验板上的FPGA器件(EP1C3T144C8)作为硬件电路平台,使用板载的交流蜂鸣器作为发声元件;
3. 在QuartusII环境下,将各单元电路按各自对应关系相互连接,构成乐曲硬件演奏电路,进行编译及仿真;
4. 将设计下载到实验板上验证乐曲演奏的效果。
二.系统概述及工作原理
2.1系统概述
该系统主要由十分频器,数控分频器,分频预置数器,计数器等构成。
整体电路框图如图一:
图1
2.2工作原理
2.2.1乐曲发声原理
1.乐曲中的每一音符对应着一个特定的频率,要想FPGA发出不同音符的音调,
实际上只要控制它输出相应音符的频率即可。
2.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在喇叭上连续地发出各个音符的音调。
3.组成乐曲的每个音符持续的时间是乐曲能够连续演奏所需要的另一个基本要素。
4.音律与频率对照表如图2:
图2
2.2.2硬件电路发声原理
声音的频谱范围约在几十到几kHz,若能利用程序来控制FPGA芯片某个引脚按照一定的顺序输出一定频率的矩形波,接上喇叭就能发出相应频率的声音。模型如图3:
图3
三.设计的具体实现
3.1单元电路设计与分析
3.1.1十分频器
用VHDL语言设计10分频器,代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY Freq IS
PORT(Clk_10M : IN STD_LOGIC;
clk_1MHz : OUT STD_LOGIC);
END Freq;
ARCHITECTURE Behv OF Freq IS
BEGIN
DivideCLK:PROCESS(Clk_10M)
VARIABLE Count:INTEGER RANGE 0 TO 9; BEGIN
IF Clk_10M'EVENT AND Clk_10M='1' THEN IF Count < 10 THEN
clk_1MHz <= '0';
Count := Count + 1;
ELSE
clk_1MHz <='1';
Count := 0 ;
END IF;
END IF;
END PROCESS DivideCLK;
END Behv;
编译成功之后,生成逻辑器件:
图4
3.1.2数控分频器
产生各音符所需的频率可用数控分频器实现,将较高频率的信号输入数控分频器,数控分频器在与相应音符对应的分频预置数的控制下,就可产生所对应音符的信号频率。若基准频率采用1MHz ,则使用11位数控分频器即可满足要求。输出信号的频率与分频预置数的关系如下:
其中fm 为音阶对应的频率,x 为产生该频率在数控分频器里对应的预置数。 用VHDL 语言设计数控分频器,代码如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DigFreq IS
PORT(Clk_1MHZ :IN STD_LOGIC;
Tone :IN STD_LOGIC_VECTOR(10 DOWNTO 0); Spks :buffer STD_LOGIC); END DigFreq;
ARCHITECTURE Behv OF DigFreq IS BEGIN
GenSpks:PROCESS(Clk_1MHz,Tone)
VARIABLE SetCount:STD_LOGIC_VECTOR(10 DOWNTO 0); BEGIN
IF Clk_1MHz'EVENT AND Clk_1MHZ='1' THEN IF SetCount = 16#7FF# THEN SetCount := Tone; Spks <= '1'; ELSE
SetCount :=SetCount + 1; Spks <= '0'; END IF; END IF;
END PROCESS GenSpks; END Behv;
编译成功后。生成逻辑器件:
6
1020472m
x f =-
⨯