logo资料库

EDA简易电子琴课程设计报告.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
简易电子琴设计
一 实训目的
二 实训内容及要求
三 实训报告正文
1、设计规划:
2、各模块的原理及其程
(1)、4Hz时钟信号模块
(2)、控制电路模块(节拍产生模块和音符产生模块)
(3)、分频系数、音符显示数据产生模块
(4)、可控分频模块
3、波形仿真
(1)、4Hz时钟信号模块
(2)、控制电路模块(节拍产生模块和音符产生模块)
(3)、分频系数、音符显示数据产生模块
(4)、可控分频模块
(5)、系统的整体组装设计原理图
四 总结
EDA 课程设计报告 简易电子琴设计 小组成员姓名: 专业班级: 指导教师: 起止日期:2011.09.01~2011.12.30
EDA 课程设计任务书 一、设计题目:简易电子琴设计 二、设计目的 1、掌握可编程逻辑器件的基本原理及利用 EDA 开发工具 QuartusII 进行可编程逻辑器件 设计的方法; 2、掌握用 VHDL 语言设计节拍、分频系数、音符产生电路、音符显示数据产生电路以及可 控分频电路的方法; 3、熟练掌握可编程逻辑器件的原理图层次化设计方法; 4、掌握利用 QuartusII 进行软件仿真及对可编程逻辑器件进行硬件下载的方法。 三、设计任务及要求 利用 FPGA 器件和 VHDL 语言设计一个音乐播放电路,下载芯片:Altera 的 MAXII 系列 EPM240/570。 具体要求: 1、能够实现乐曲的播放功能,同时在音乐播放时能够显示音的高低; 2、播放和演奏功能可以通过按键切换。 四、指导教师评语及学生成绩 指导教师评语: 成绩 指导教师(签字): 年 月 日 1
一 实训目的 1、掌握基本的 VHDL 语言。 2、理解音乐播放电路的设计方案。 3、掌握用 VHDL 语言设计节拍与音符产生电路。 4、掌握用 VHDL 语言设计分频系数、音符显示数据产生电路。 5、掌握用 VHDL 语言设计可控分频电路。 6、学会用 FPGA 器件和 VHDL 语言设计一个简易电子琴。 二 实训内容及要求 利用 FPGA 器件和 VHDL 语言设计一个音乐播放电路,包括节拍、分频系数、音符 产生电路、音符显示数据产生电路以及可控分频电路。具体要求: 1、能够实现乐曲的播放功能,同时在音乐播放时能够显示音的高低; 2、播放和演奏功能可以通过按键切换; 3、用 QuartusII 进行软件仿真及对可编程逻辑器件进行硬件下载 4、分组讨论,独立撰写项目报告,提交 Word 及设计电子文档。 三 实训报告正文 1、设计规划: 根据系统设计要求,系统设计采用自上而下模块化设计方法,系统的整体组装设 计原理图如下图所示,它由 4Hz 时钟信号模块、控制电路模块(节拍产生模块和 音符产生模块)、分频系数、音符显示数据产生模块和可控分频模块四部分组成。 2、各模块的原理及其程 (1)、4Hz 时钟信号模块 输出 4Hz 的时钟信号。VHDL 程序(div_f)如下: library ieee; use ieee.std_logic_1164.all; entity div_f is port(clk :in std_logic; 2
miao_out :out std_logic); end div_f; architecture miao of div_f is begin p1:process(clk) variable cnt:integer range 0 to 6249999; variable ff:std_logic; begin if clk'event and clk='1' then if cnt<6249999 then cnt:=cnt+1; else cnt:=0; ff:=not ff; end if; end if; miao_out<=ff; end process p1; end miao; (2)、控制电路模块(节拍产生模块和音符产生模块) 控制电路模块的输入时钟信号与 4Hz 时钟信号模块相连,Index 表示音符信 息,由于 Index 取值为 1—15,故用四进制信号即可表示。此控制电路模块有两 个进程,CNT8 进程描述的是一个时序逻辑电路计数器(节拍产生模块),Search 进程描述的是一个组合逻辑译码电路(音符产生模块),两模块由 Counter 信号 相连。VHDL 程序(aaa)如下: LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; ENTITY aaa IS PORT(clk:IN STD_LOGIC; Index:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END; ARCHITECTURE one OF aaa IS SIGNAL Counter:INTEGER RANGE 0 TO 138; SIGNAL DateOut:INTEGER RANGE 0 TO 15; BEGIN CNT8:PROCESS(clk, Counter) BEGIN 3
IF Counter=138 THEN Counter<=0; ELSIF (clk'EVENT AND clk='1') THEN Counter<=Counter+1; END IF; END PROCESS; Search: PROCESS(Counter) BEGIN CASE Counter IS WHEN 00=>DateOut<=3; WHEN 01=>DateOut<=3; WHEN 02=>DateOut<=3; WHEN 03=>DateOut<=3; WHEN 04=>DateOut<=5; WHEN 05=>DateOut<=5; WHEN 06=>DateOut<=5; WHEN 07=>DateOut<=6; WHEN 08=>DateOut<=8; WHEN 09=>DateOut<=8; WHEN 10=>DateOut<=8; WHEN 11=>DateOut<=9; WHEN 12=>DateOut<=6; WHEN 13=>DateOut<=8; WHEN 14=>DateOut<=5; WHEN 15=>DateOut<=5; WHEN 16=>DateOut<=12;WHEN 17=>DateOut<=12; WHEN 18=>DateOut<=12;WHEN 19=>DateOut<=15; WHEN 20=>DateOut<=13;WHEN 21=>DateOut<=12; WHEN 22=>DateOut<=10;WHEN 23=>DateOut<=12; WHEN 24=>DateOut<=9; WHEN 25=>DateOut<=9; WHEN 26=>DateOut<=9; WHEN 27=>DateOut<=9; WHEN 28=>DateOut<=9;WHEN 29=>DateOut<=9; WHEN 30=>DateOut<=9;WHEN 31=>DateOut<=9; WHEN 32=>DateOut<=9;WHEN 33=>DateOut<=9; WHEN 34=>DateOut<=9;WHEN 35=>DateOut<=10; WHEN 36=>DateOut<=7;WHEN 37=>DateOut<=7; WHEN 38=>DateOut<=6;WHEN 39=>DateOut<=6; WHEN 40=>DateOut<=5;WHEN 41=>DateOut<=5; WHEN 42=>DateOut<=5;WHEN 43=>DateOut<=6; WHEN 44=>DateOut<=8;WHEN 45=>DateOut<=8; WHEN 46=>DateOut<=9;WHEN 47=>DateOut<=9; WHEN 48=>DateOut<=3;WHEN 49=>DateOut<=3; WHEN 50=>DateOut<=8;WHEN 51=>DateOut<=8; WHEN 52=>DateOut<=6;WHEN 53=>DateOut<=5; WHEN 54=>DateOut<=6;WHEN 55=>DateOut<=8; WHEN 56=>DateOut<=5;WHEN 57=>DateOut<=5; 4
WHEN 58=>DateOut<=5;WHEN 59=>DateOut<=5; WHEN 60=>DateOut<=5;WHEN 61=>DateOut<=5; WHEN 62=>DateOut<=5;WHEN 63=>DateOut<=5; WHEN 64=>DateOut<=10;WHEN 65=>DateOut<=10; WHEN 66=>DateOut<=10;WHEN 67=>DateOut<=12; WHEN 68=>DateOut<=7;WHEN 69=>DateOut<=7; WHEN 70=>DateOut<=9;WHEN 71=>DateOut<=9; WHEN 72=>DateOut<=6;WHEN 73=>DateOut<=8; WHEN 74=>DateOut<=5;WHEN 75=>DateOut<=5; WHEN 76=>DateOut<=5;WHEN 77=>DateOut<=5; WHEN 78=>DateOut<=5;WHEN 79=>DateOut<=5; WHEN 80=>DateOut<=3;WHEN 81=>DateOut<=5; WHEN 82=>DateOut<=3;WHEN 83=>DateOut<=3; WHEN 84=>DateOut<=5;WHEN 85=>DateOut<=6; WHEN 86=>DateOut<=7;WHEN 87=>DateOut<=9; WHEN 88=>DateOut<=6;WHEN 89=>DateOut<=6; WHEN 90=>DateOut<=6;WHEN 91=>DateOut<=6; WHEN 92=>DateOut<=6;WHEN 93=>DateOut<=6; WHEN 94=>DateOut<=5;WHEN 95=>DateOut<=6; WHEN 96=>DateOut<=8;WHEN 97=>DateOut<=8; WHEN 98=>DateOut<=8;WHEN 99=>DateOut<=9; WHEN 100=>DateOut<=12;WHEN 101=>DateOut<=12; WHEN 102=>DateOut<=12;WHEN 103=>DateOut<=10; WHEN 104=>DateOut<=9;WHEN 105=>DateOut<=9; WHEN 106=>DateOut<=10;WHEN 107=>DateOut<=9; WHEN 108=>DateOut<=8;WHEN 109=>DateOut<=8; WHEN 110=>DateOut<=6;WHEN 111=>DateOut<=5; WHEN 112=>DateOut<=3;WHEN 113=>DateOut<=3; WHEN 114=>DateOut<=3;WHEN 115=>DateOut<=3; WHEN 116=> DateOut<=8;WHEN 117=>DateOut<=8; WHEN 118=>DateOut<=8;WHEN 119=>DateOut<=8; WHEN 120=>DateOut<=6;WHEN 121=>DateOut<=8; WHEN 122=>DateOut<=6;WHEN 123=>DateOut<=5; WHEN 124=>DateOut<=3;WHEN 125=>DateOut<=5; WHEN 126=>DateOut<=6;WHEN 127=>DateOut<=8; WHEN 128=>DateOut<=5;WHEN 129=>DateOut<=5; WHEN 130=>DateOut<=5;WHEN 131=>DateOut<=5; WHEN 132=>DateOut<=5;WHEN 133=>DateOut<=5; 5
WHEN 134=>DateOut<=5;WHEN 135=>DateOut<=5; WHEN 136=>DateOut<=0;WHEN 137=>DateOut<=0; WHEN 138=>DateOut<=0; WHEN OTHERS=>DateOut<=0; END CASE; END PROCESS; Index<=CONV_STD_LOGIC_VECTOR(DateOut,4); (3)、分频系数、音符显示数据产生模块 END; 在设计文件中,Index 为四位二进制信号,表示输入音符信息,CODE 为四位 二进制信号,是提供给外围数码管的用于显示简谱音符符号的数据,LED 是提供 给外围 LED 的用于显示高低音的数据,Tone 是供给可控分频模块的分频系数。 VHDL 程序(aaa)如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; LED : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END; ARCHITECTURE one OF ToneTaba IS BEGIN Search : PROCESS(Index) BEGIN CASE Index IS WHEN "0000" => Tone<="11111111111" ; CODE<="0000"; LED <='0'; WHEN "0001" => Tone<="01001101000" ; CODE<="0001"; LED <='0'; WHEN "0010" => Tone<="01100000101" ; CODE<="0010"; LED <='0'; WHEN "0011" => Tone<="01110010000" ; CODE<="0011"; LED <='0'; WHEN "0100" => Tone<="01111010000" ; CODE<="0100"; LED <='0'; WHEN "0101" => Tone<="10001000100" ; CODE<="0101"; LED <='0'; WHEN "0110" => Tone<="10010101101" ; CODE<="0110"; LED <='0'; WHEN "0111" => Tone<="10100001010" ; CODE<="0111"; LED <='0'; WHEN "1000" => Tone<="10101011100" ; CODE<="0001"; LED <='1'; WHEN "1001" => Tone<="10110000010" ; CODE<="0010"; LED <='1'; WHEN "1010" => Tone<="10111001000" ; CODE<="0011"; LED <='1'; 6
WHEN "1011" => Tone<="10111101000" ; CODE<="0110"; LED <='1'; WHEN "1100" => Tone<="11000100010" ; CODE<="0101"; LED <='1'; WHEN "1101" => Tone<="11001010110" ; CODE<="0110"; LED <='1'; WHEN "1110" => Tone<="11010000100" ; CODE<="0111"; LED <='1'; WHEN "1111" => Tone<="11010011010" ; CODE<="0001"; LED <='1'; WHEN OTHERS => NULL; END CASE; END PROCESS; END (4)、可控分频模块 可控分频模块的功能是用一个可控分频电路来产生播放音乐所需的每个音, 其实质是设计一个可预置数的计数器,预置数就是分频系数。可控分频模块是一 个具有 12 预分频和 2 后分频的可控分频电路,输入时钟 clk 频率选 12MHz,输 入时钟先经 12 分频,为了使输出信号 SpkS 具有较高的驱动功率,可控分频后再 经过 2 分频,使输出信号 SpkS 具有 50%的占空比,从而具有较高的驱动频率。 VHDL 程序(Speakera)如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGIN DivideCLK : PROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN IF clk'EVENT AND clk = '1' THEN if Count4>11 THEN PreCLK <= '1'; Count4 := "0000"; else Count4 := Count4 + 1; PreCLK <= '0';END IF; END IF; END PROCESS; GenSpkS : PROCESS(PreCLK, Tone) VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN 7
分享到:
收藏