精品资料(2021-2022年收藏)简易电子琴课程设计QUARTUS制作_第1页
精品资料(2021-2022年收藏)简易电子琴课程设计QUARTUS制作_第2页
精品资料(2021-2022年收藏)简易电子琴课程设计QUARTUS制作_第3页
精品资料(2021-2022年收藏)简易电子琴课程设计QUARTUS制作_第4页
精品资料(2021-2022年收藏)简易电子琴课程设计QUARTUS制作_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、可编程逻辑可编程逻辑期末设计期末设计题题 目:简易电子琴制作目:简易电子琴制作学学 院:信息工程学院院:信息工程学院年年 级:级:20092009 级级完成时间完成时间 :20122012 年年 2 2 月月 2727 日日可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计目录目录1、课程设计目的.32、课程设计要求.32.1、基础部分.32.2、发挥部分.33、设计(课程)基本内容.43.1、EDA技术/VHD语言.44、电子琴设计原理及过程.54.1、设计规划.54.2、基础部分原理.54.3、简易电子琴的设计流程.55、课程设计的程序模块.65.1、乐曲演奏模块(

2、PS2SCAN).65.1.1、模块说明.65.1.2、乐曲演奏模块文本程序.75.2、音调发生模块.115.2.1、模块说明.115.2.2、音调发生模块文本程序: .125.3、数控分频模块.135.3.1、模块说明.135.3.2、数控分频模块文本程序.145.4、音符存储模块.175.4.1、模块说明.175.4.2、音符存储模块的源程序.176、顶层模块设计.196.1、模块说明.196.2、顶层模块文本程序.206.3、综合设计原理图(完善).227、系统程序仿真和编译.227.1、程序编译.227.1.1、编译过程.228、设计中遇到问题以及设计小结.258.1、 遇到的问题(分

3、析).258.2、设计小结(总结).26可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计1 1、课程设计目的、课程设计目的1) 利用数控分频器设计一个电子琴硬件电路和音乐发生器,设计达到演奏时可以选择是手演奏(键盘输入) ,或自动演奏已存入的乐曲,并且能自动演奏。2) 巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的14音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工

4、作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。3) 提高学生对eda软件实践操作能力和工程设计能力,对eda技术和fpga应用的相关知识进行了系统的介绍,内容包括eda技术的基本知识,fpga的基本原理,quartus ii的使用方法与使用技巧,主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制或通信功能模块的设计方法实例,以及采用vhdl语言描述的fpga综合实例。2 2、课程设计要求、课程设计要求2.12.1、基础部分、基础部分1) 当键盘输入 123456789abcde 是对应响应的频率2) 演奏

5、时在 8 段数码管显示对应音符2.22.2、发挥部分、发挥部分3) 具有存储功能存储 20 个音符4) 当键盘上某一个键(如 v)时,自动重放存储区音符可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计3 3、设计(课程)基本内容、设计(课程)基本内容内容包括eda技术的基本知识,fpga的基本原理,quartus ii的使用方法与使用技巧,主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制或通信功能模块的设计方法实例,以及采用vhdl语言描述的fpga综合实例设计。本书由浅入深,从易到难,既让初学者轻松入门,又让有经验的设计者得到有价值的参考信息。3.13.

6、1、edaeda 技术技术/vhd/vhd 语言语言随着基于cpld的eda技术的发展和应用领域的扩大与深入,eda技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设

7、计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。此次设计主要是基于vhdl文本输入法设计乐曲演奏电路,运用vhdl语言对简易电子琴的各个模块进行设计,并使用eda 工具对各模块进行仿真验证。该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言vhdl按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真) 。该设计最重要的一点就是通过按键控制不

8、同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计4 4、电子琴设计原理及过程、电子琴设计原理及过程4.14.1、设计规划、设计规划根据系统设计要求,系统设计采用自顶向下的设计方法,它由乐曲自动演奏模块、音调发生模块和数控分频模块,存储模块四部分组成4.24.2、基础部分原理、基础部分原理本课程设计目的在于灵活运用 eda 技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出相对应频率的声音。故系统可分为乐曲自动演奏

9、模块(ps2scan)、音调发生模块(tonetaba)和数控分频模块(speakera)三部分。4.34.3、简易电子琴的设计流程、简易电子琴的设计流程根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演奏模块、音调发生模块和数控分频模块三部分组成。用 vhdl 语言设计电路的流程:1.使用文本编辑器输入设计源文件。2.使用编译工具编译源文件:vhdl 的编译语言。3.功能仿真。 4.综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分最终目的是生成门电路级的网表(netlist)

10、。5.框图布局、布线。这一步的目的是生成用于编程文件。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。6.编译完成,下载。可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计5 5、课程设计的程序模块、课程设计的程序模块5.15.1、乐曲演奏模块(、乐曲演奏模块(ps2scanps2scan)5.1.15.1.1、模块说明、模块说明乐曲自动演奏模块的作用是产生 14 位发生控制输入信号。当进行自动演奏时,由存储在此模块的 8 位二进制数作为发声控制输入,从而自动演奏乐曲。该模块的 vhdl 源

11、程序主要由 3 个 process(clk)工作进程组成, 第一个 process(clk)的作用是根据键盘输入(自动演奏)的值(0 或 1)来判断计数器 count 以及脉冲 clk 的输出值。部分源程序如下:部分源程序如下: process(clk) -工作进程开始 begin if clkevent and clk = 1 then 时钟输入信号为 1 kbclkreg = kbclk; kbclkfall dispdisp=0010; 该模块最主要的用途就是将输入二进制数转化为发声控制输入,是产生音符的重要步骤, ps2scan 模块的源程序符号编辑图如图图 5-1-1:ps2scan

12、 模块的符号编辑在此程序中自动模块输出的音符数据,经过翻译后将输出到数控分频模块为其提供分频系数的初始值, 5.1.25.1.2、乐曲演奏模块文本程序、乐曲演奏模块文本程序-程序名称:ps2scan.vhd-程序功能:采用 vhdl 语言编程产生 14 位发声控制输入信号library ieee; use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity ps2scan is port ( clk,kbclk,kbdata:in std_logic; -系统时钟信号/键盘输入演奏信号 /键盘输入信号 disp : out std_l

13、ogic_vector(3 downto 0); -音符显示信号(时钟输出) auto : out std_logic - -音频信号(键盘输入信号)end entity;architecture rtl of ps2scan is signal kbclkreg, kbclkfall : std_logic; 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 signal datacoming : std_logic:=0; signal cnt : integer range 0 to 9; signal shiftdata,kbcodereg : std_log

14、ic_vector(7 downto 0);- -输入 8 位控制信号 signal delay:std_logic:=0; signal count: integer range 0 to 10000; -定义信号计数器, 10000 个信号元素begin process(clk) -工作进程开始 begin if clkevent and clk = 1 then kbclkreg = kbclk; kbclkfall = kbclkreg and (not kbclk); end if; end process; process(clk) begin if clkevent and cl

15、k = 1 then-键盘输入为 1 if kbclkfall = 1 and datacoming = 0 and kbdata = 0 then datacoming = 1;cnt = 0; elsif kbclkfall = 1 and datacoming = 1 then if cnt = 9 then if kbdata = 1 then datacoming = 0;end if; cnt = 0;kbcodereg=shiftdata; else shiftdata = kbdata & shiftdata(7 downto 1); cnt dispdispdispd

16、ispdispdispdispdispdispdispdispdispdispdispdispdispdelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelay=0; end case; end if;if clkevent and clk = 1 then count = count + 1;else null;end if;if count=1000 and delay=1 then count=0; auto=1;else if count = 1000 and delay=0 then

17、 count=0; auto tone=01100000101 ; -code tone=11111111111 ; -code tone=01100000101 ; -code tone=01110010000 ; -code tone=11111111111 ; -code tone=01100000101 ; -code tone=01110010000 ; -code tone=10000001100 ; -code tone=10001011100 ; -code tone=10010101101 ; -code tone=10100001010 ; -code tone=10101

18、011100 ; -code tone=10110000010 ; -code tone=10111001000 ; -code tone=11000000110 ; -code tone=11000110110 ; -code tone=11001010110 ; -code tone=11010000100 ; -code tone=11010011100 ; -code null; end case; end process;end5.35.3、数控分频模块、数控分频模块5.3.15.3.1、模块说明、模块说明数控分频模块是对时基脉冲进行分频,得到与1、2、3、4、5、6、7、8、9、a

19、、b、c、d、e 这 14 个音符相对应的频率。speakera 模块的源程序符号编辑图如图。图 5-3-1:speakera 模块的符号编辑图该模块主要由 3 个工作进程(divideclk,genspks,delayspks)组成。首先,根据系统时钟信号的输入得到时基脉冲以及计数器的值,而时钟信号在 auto 模块中便已给出,两者之间的设置关系类似于 auto 模块中第一个工作进程的设置。第二个 process 是此模块的核心,即由时基脉冲值转化为音符的频率。可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计部分源程序如下:部分源程序如下:genspks : pro

20、cess(preclk, tone)- 11 位可预置计数器 variable count11 : std_logic_vector (10 downto 0);最后一个 process 则是用来设置扬声器输出信号的,扬声器信号由 0 和 1 控制,当且仅当前一个 process 中的 fullspks 输出为 1 时,扬声器才有输出,再根据计数器取值来确定输出是 1 还是 0。部分源程序如下:部分源程序如下:if fullspksevent and fullspks = 1 then count2 := not count2; -扬声器音频信号为 1 if count2 = 1 then s

21、pks = 1; -扬声器输出为 1 else spks = 0; end if; 5.3.25.3.2、数控分频模块文本程序、数控分频模块文本程序-程序名称:speakera.vhd-程序功能:采用 vhdl 语言编程实现发生器的数控分频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

22、 : 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 preclk 11 then preclk = 1; count4 := 0000; elsif clkevent and cl

23、k = 1 then count4 := count4 + 1; -时钟信号为 1时 -判断计数器取值为 1 end if; end process;genspks : process(preclk, tone) -此进程按照 tone1 输入的分频系数对 8mhz 的脉冲再次分频,得到所需要的音符频率 variable count11 : std_logic_vector (10 downto 0);begin if preclkevent and preclk = 1 then if count11 = 16#7ff# then count11 := tone ; fullspks = 1

24、; -若计数器 11 值小于音符信号 1,计数器加 1,音频信号为 1 else count11 := count11 + 1; fullspks = 0; end if; end if; end process;-音频信号输出进程开始delayspks : process(fullspks)- 此进程对 fullspks 进行 2 分频,展宽脉冲,使扬声器有足够功率发音 variable count2 : std_logic; -定义变量频率计数器 2可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计begin if fullspksevent and fullspk

25、s = 1 then count2 := not count2; -扬声器音频信号为 1 if count2 = 1 then spks = 1; -扬声器输出为 1 else spks = 0; end if; end if; end process;end;以上三个模块组装的整体组装设计原理图如图 5-3 所示。 图 5-3 基础发音系统的整体组装设计原理图可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计由于设计分模块组成,每个单独的模块都是一个完整的源程序,分别实现不同性质的功能,但是每个模块又是紧密关联的,前一个模块的输出很可能是后一模块的输入。如 ps2sc

26、an 模块的音符信号输出就是 tonetaba 模块的音符信号输入。另外,时钟脉冲信号在本课程设计中用的最多,用处也最大,一般情况下时钟信号处上升沿有效,判断和控制各个计数器计数多少。(此框图编译完成的功能为:当按下一个键时,有相应的乐音发出,同时用指示灯显示乐音,用数码管显示音符)。5.45.4、音符存储模块、音符存储模块5.4.15.4.1、模块说明、模块说明此模块将根据自己编制的音符顺序存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控

27、制信号。5.4.25.4.2、音符存储模块的源程序、音符存储模块的源程序-程序名称:save.vhd-程序功能:采用 vhdl 语言编写,参与主程序调用 3 个子程序,实现音符存储演奏的功能library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity save is port ( inter,clks:in std_logic; input: in std_logic_vector(3 downto 0); disp: out std_logic_vector(3 downto 0) - led : out s

28、td_logic_vector(3 downto 0)可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 );end entity;architecture rtl of save is type ram_array is array (0 to 30) of std_logic_vector(3 downto 0); signal a: ram_array;- signal i : integer range 0 to 30; signal b : integer range 0 to 30;- signal cnt : integer range 0 to 9;si

29、gnal count: integer range 0 to 3; -计数器宽度 - variable result : inter:=1;-变量赋初值beginprocess(inter) begin if interevent and inter = 1 then i=i+1;if i=20 then i=0; end if; end if; end process;-以上程序类似于中断响应,即来一次数据便存一次,数组进入下一个process(inter) beginif input=xf then -数据回放disp=a(b); if clksevent and clks = 1 the

30、ncount = count + 1; -计数器来做延时,时钟为 8hzif count=3 thencount=0;可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 b=b+1; if b=20 then b=0;end if;end if;end if; else a(i)=input;disp=a(i);-数据通过数组存储end if;- disp=a(i); end process; end rtl;6 6、顶层模块设计、顶层模块设计6.16.1、模块说明、模块说明该 music_ram 模块是整个电子琴设计的核心,也是 vhdl 程序的主程序,前面 3 个源

31、程序都是作为子程序分别实现电子琴的某一功能,而 music_ram 模块则通过调用子程序最终实现乐曲演奏的目的,奏出美妙的乐曲。利用 vhdl 语言 component 将三个模块组合起来,其中 3 个模块和 music_ram 模块的输入输出是一一对应的,比如 disp 对应musicin,auto 对应 auto,musicout 对应 index 等,该模块的符号编辑图如图 3-4。可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计图:6-1:music_ram 系统模块的符号编辑图该图描述的是 music_ram 模块输入输出的变量表示,整个系统的整体组装设计原

32、理图就是这 4 幅编辑图按输入输出关系顺序连接而成的。6.26.2、顶层模块文本程序、顶层模块文本程序-程序名称:music_ram.vhd-程序功能:采用 vhdl 语言编写主程序调用 3 个子程序,实现乐曲演奏(存/放)的功能。library ieee;-use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity music_ram is port (musicin:in std_logic_vector(3 downto 0); -系统时钟信号 auto,c

33、lk :in std_logic; -auto=1:read ,0=write -键盘输入/自动演奏信号 musicout: out std_logic_vector(3 downto 0) -音符显示信号 );end music_ram;architecture behavioral of music_ram is-subtype word is std_logic_vector(3 downto 0);type memory is array (20 downto 0) of std_logic_vector(3 downto 0); signal musram : memory; - s

34、ignal addr: integer range 0 to 20; -存储 20 个音符signal ptr: integer range 0 to 20;-signal count: integer range 0 to 3;-计数范围 0 到 3beginprocess(auto) -引入 kbclk 元件begin 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计if autoevent and auto=1 then -键盘输入为 1ptr=ptr+1; -计数器值为 1,时钟信号幅值为 1if ptr=20 then ptr=0; end if;end i

35、f;end process;-auto is a flag of signal process (clk,musicin)beginif musicin=1111 then -如果输入字母 f,-调用存储的音符自动演奏musicout=musram(addr);if clkevent and clk = 1 then -时钟信号为 1count = count + 1; -计数器来做延时,时钟为 8hzif count=3 thencount=0;addr=addr+1; if addr=20 then addr=0;end if;end if;end if;else musram(ptr)=

36、musicin; musicout=musram(ptr);end if;end process;可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计end behavioral;6.36.3、综合设计原理图(完善)、综合设计原理图(完善)将 tonetaba,speakera,music_ram,和 ps2scan 四个模块连接在一起形成完整的电子琴发音系统,将绘制好的原理图保存,确保无误后运行进行引脚搭配,编译,和下载。图 6-3:系统的整体组装设计原理图7 7、系统程序仿真和编译、系统程序仿真和编译系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它

37、是指通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行模型实验。因而,系统仿真的结果决定整个课程设计任务完成的到位程度。7.17.1、程序编译、程序编译7.1.17.1.1、编译过程、编译过程1)建立顶层设计文件夹 top在硬盘适当位置建立 top 文件夹中。可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计注意:该文件夹的路径中不能包含汉字。路径中的所有目录和子目录的名称都必须符合vhdl 的语法规则。2)子模块文件的设计打开 quartusii 新建五个.vhd 文件,tonetaba.vhd、speakera.vhd、save.vhd 和

38、ps2scan.vhd),输入所有的子模块源程序后保存在 top 文件夹下,并进行查错操作。3)顶层模块文件设计打开 quartusii,新建一个 music.bdf 文件,输入源程序后进行保存、查错、编译、功能和时序仿真等相关操作。4)设计原理框图 top.bdf,并将 top.bdf 设置为顶层步骤:在顶层文件夹中选择 top.bdf,单击右键,选择 set as top-level entity 5)编译在菜单栏选择图标,full complication was successful 时候完成编译。6)下载输入程序并且编译无误,并且仿真无误后,便进行引脚锁定及程序下载,在进行引脚锁定时必须对照引脚锁定图进行锁定可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计引脚配置如图:引脚锁定/编译后的框图:可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子

温馨提示

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

评论

0/150

提交评论