




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可编程逻辑可编程逻辑 期末设计期末设计 题题 目:简易电子琴制作目:简易电子琴制作 学学 院:信息工程学院院:信息工程学院 年年 级:级:20092009 级级 完成时间完成时间 :20122012 年年 2 2 月月 2727 日日 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 目录目录 1、课程设计目的.3 2、课程设计要求.3 2.1、基础部分.3 2.2、发挥部分.3 3、设计(课程)基本内容.4 3.1、EDA技术/VHD语言.4 4、电子琴设计原理及过程.5 4.1、设计规划.5 4.2、基础部分原理.5 4.3、简易电子琴的设计流程.5 5、课程设计的程序模块.6 5.1、乐曲演奏模块(PS2SCAN).6 5.1.1、模块说明.6 5.1.2、乐曲演奏模块文本程序.7 5.2、音调发生模块.11 5.2.1、模块说明.11 5.2.2、音调发生模块文本程序: .12 5.3、数控分频模块.13 5.3.1、模块说明.13 5.3.2、数控分频模块文本程序.14 5.4、音符存储模块.17 5.4.1、模块说明.17 5.4.2、音符存储模块的源程序.17 6、顶层模块设计.19 6.1、模块说明.19 6.2、顶层模块文本程序.20 6.3、综合设计原理图(完善).22 7、系统程序仿真和编译.22 7.1、程序编译.22 7.1.1、编译过程.22 8、设计中遇到问题以及设计小结.25 8.1、 遇到的问题(分析).25 8.2、设计小结(总结).26 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 1 1、课程设计目的、课程设计目的 1) 利用数控分频器设计一个电子琴硬件电路和音乐发生器,设计达到演奏时可以选择 是手演奏(键盘输入) ,或自动演奏已存入的乐曲,并且能自动演奏。 2) 巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立 工作能力,通过对一个简易的14音符电子琴的设计,进一步加深对计算机原理以及数字 电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和 步骤。巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立 工作能力。为了进一步了解计算机组成原理与系统结构,深入学习EDA技术,用VHDL语言 去控制将会使我们对本专业知识可以更好地掌握。 3) 提高学生对eda软件实践操作能力和工程设计能力,对eda技术和fpga应用的相关 知识进行了系统的介绍,内容包括eda技术的基本知识,fpga的基本原理,quartus ii的 使用方法与使用技巧,主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制 或通信功能模块的设计方法实例,以及采用vhdl语言描述的fpga综合实例。 2 2、课程设计要求、课程设计要求 2.12.1、基础部分、基础部分 1) 当键盘输入 abcde 是对应响应的频率 2) 演奏时在 8 段数码管显示对应音符 2.22.2、发挥部分、发挥部分 3) 具有存储功能存储 20 个音符 4) 当键盘上某一个键(如 v)时,自动重放存储区音符 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 3 3、设计(课程)基本内容、设计(课程)基本内容 内容包括eda技术的基本知识,fpga的基本原理,quartus ii的使用方法与使用技巧, 主流硬件描述语言vhdl的语法规则介绍及实例说明,常用的控制或通信功能模块的设计 方法实例,以及采用vhdl语言描述的fpga综合实例设计。本书由浅入深,从易到难,既 让初学者轻松入门,又让有经验的设计者得到有价值的参考信息。 3.13.1、edaeda 技术技术/vhd/vhd 语言语言 随着基于cpld的eda技术的发展和应用领域的扩大与深入,eda技术在电子信息、通 信、自动控制用计算机等领域的重要性日益突出。EDA技术就是以计算机为工具,设计者 在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编 译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、 逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性, 减轻了设计者的劳动强度。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作 可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版 图的整个过程的计算机上自动处理完成。 此次设计主要是基于vhdl文本输入法设计乐曲演奏电路,运用vhdl语言对简易电子 琴的各个模块进行设计,并使用eda 工具对各模块进行仿真验证。该系统基于计算机中 时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自 动演奏已存入的歌曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部 分组成。系统实现是用硬件描述语言vhdl按模块化方式进行设计,然后进行编程、时序 仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进 行编程和时序仿真) 。该设计最重要的一点就是通过按键控制不同的音调发生,每一个音 调对应不同的频率,从而输出对应频率的声音。 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 4 4、电子琴设计原理及过程、电子琴设计原理及过程 4.14.1、设计规划、设计规划 根据系统设计要求,系统设计采用自顶向下的设计方法,它由乐曲自动演奏模块、音 调发生模块和数控分频模块,存储模块四部分组成 4.24.2、基础部分原理、基础部分原理 本课程设计目的在于灵活运用 eda 技术编程实现一个简易电子琴的乐曲演奏,它要求 在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不 同音阶的按键时,能够发出相对应频率的声音。故系统可分为乐曲自动演奏模块 (ps2scan)、音调发生模块(tonetaba)和数控分频模块(speakera)三部分。 4.34.3、简易电子琴的设计流程、简易电子琴的设计流程 根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向 下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演 奏模块、音调发生模块和数控分频模块三部分组成。 用 vhdl 语言设计电路的流程: 1.使用文本编辑器输入设计源文件。 2.使用编译工具编译源文件:vhdl 的编译语言。 3.功能仿真。 4.综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分 最终目的是生成门电路级的网表(netlist)。 5.框图布局、布线。这一步的目的是生成用于编程文件。先将各个设计中的门根据 网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接, 把各个门的输入输出连接起来。 6.编译完成,下载。 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 5 5、课程设计的程序模块、课程设计的程序模块 5.15.1、乐曲演奏模块(、乐曲演奏模块(ps2scanps2scan) 5.1.15.1.1、模块说明、模块说明 乐曲自动演奏模块的作用是产生 14 位发生控制输入信号。当进行自动演奏时,由存 储在此模块的 8 位二进制数作为发声控制输入,从而自动演奏乐曲。 该模块的 vhdl 源程序主要由 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 模块的符号编辑 在此程序中自动模块输出的音符数据,经过翻译后将输出到数控分频模块为其提供分 频系数的初始值, 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_logic_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_logic_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 clk = 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 cnt dispdispdispdispdispdispdispdispdispdispdispdispdispdispdispdispdelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelaydelay=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 count=0; auto tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code tone= ; -code null; end case; end process; end 5.35.3、数控分频模块、数控分频模块 5.3.15.3.1、模块说明、模块说明 数控分频模块是对时基脉冲进行分频,得到与 1、2、3、4、5、6、7、8、9、a、b、c、d、e 这 14 个音符相对应的频率。speakera 模 块的源程序符号编辑图如图。 图 5-3-1:speakera 模块的符号编辑图 该模块主要由 3 个工作进程(divideclk,genspks,delayspks)组成。首先,根据 系统时钟信号的输入得到时基脉冲以及计数器的值,而时钟信号在 auto 模块中便已给出, 两者之间的设置关系类似于 auto 模块中第一个工作进程的设置。第二个 process 是此模 块的核心,即由时基脉冲值转化为音符的频率。 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 部分源程序如下:部分源程序如下: genspks : process(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 spks = 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 : 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 clk = 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; -若计数器 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 fullspks = 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 基础发音系统的整体组装设计原理图 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 由于设计分模块组成,每个单独的模块都是一个完整的源程序,分别实现不同性质 的功能,但是每个模块又是紧密关联的,前一个模块的输出很可能是后一模块的输入。 如 ps2scan 模块的音符信号输出就是 tonetaba 模块的音符信号输入。另外,时钟脉冲信 号在本课程设计中用的最多,用处也最大,一般情况下时钟信号处上升沿有效,判断和 控制各个计数器计数多少。(此框图编译完成的功能为:当按下一个键时,有相应的乐 音发出,同时用指示灯显示乐音,用数码管显示音符)。 5.45.4、音符存储模块、音符存储模块 5.4.15.4.1、模块说明、模块说明 此模块将根据自己编制的音符顺序存入电子琴,演奏时可选择键盘输入乐曲或者已存 入的乐曲。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲 曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐 曲节拍控制信号。 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 std_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; signal count: integer range 0 to 3; -计数器宽度 - variable result : inter:=1;-变量赋初值 begin process(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) begin if input=xf then -数据回放 disp=a(b); if clksevent and clks = 1 then count = count + 1; -计数器来做延时,时钟为 8hz if count=3 then count=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 个源 程序都是作为子程序分别实现电子琴的某一功能,而 music_ram 模块则通过调用子程序 最终实现乐曲演奏的目的,奏出美妙的乐曲。利用 vhdl 语言 component 将三个模块组合 起来,其中 3 个模块和 music_ram 模块的输入输出是一一对应的,比如 disp 对应 musicin,auto 对应 auto,musicout 对应 index 等,该模块的符号编辑图如图 3-4。 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 图:6-1:music_ram 系统模块的符号编辑图 该图描述的是 music_ram 模块输入输出的变量表示,整个系统的整体组装设计原理 图就是这 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,clk :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; - signal addr: integer range 0 to 20; -存储 20 个音符 signal ptr: integer range 0 to 20;- signal count: integer range 0 to 3;-计数范围 0 到 3 begin process(auto) -引入 kbclk 元件 begin 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 if autoevent and auto=1 then -键盘输入为 1 ptr=ptr+1; -计数器值为 1,时钟信号幅值为 1 if ptr=20 then ptr=0; end if; end if; end process; -auto is a flag of signal process (clk,musicin) begin if musicin=1111 then -如果输入字母 f,-调用存储的音符自动演奏 musicout=musram(addr); if clkevent and clk = 1 then -时钟信号为 1 count = count + 1; -计数器来做延时,时钟为 8hz if count=3 then count=0; addr=addr+1; if addr=20 then addr=0; end if; end if; end if; else musram(ptr)=musicin; musicout=musram(ptr); end if; end process; 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 end behavioral; 6.36.3、综合设计原理图(完善)、综合设计原理图(完善) 将 tonetaba,speakera,music_ram,和 ps2scan 四个模块连接在一起形成完整的电子 琴发音系统,将绘制好的原理图保存,确保无误后运行进行引脚搭配,编译,和下载。 图 6-3:系统的整体组装设计原理图 7 7、系统程序仿真和编译、系统程序仿真和编译 系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它是指 通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行 模型实验。因而,系统仿真的结果决定整个课程设计任务完成的到位程度。 7.17.1、程序编译、程序编译 7.1.17.1.1、编译过程、编译过程 1)建立顶层设计文件夹 top 在硬盘适当位置建立 top 文件夹中。 可编程逻辑期末大作业可编程逻辑期末大作业- -简易电子琴设计简易电子琴设计 注意:该文件夹的路径中不能包含汉字。路径中的所有目录和子目录的名称都必须符合 vhdl 的语法规则。 2)子模块文件的设计 打开 quartusii 新建五个.vhd 文件,tonetaba.vhd、speakera.vhd、save.vhd 和 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿定量合同范本
- 医院分成协议合同范本
- 征地拆迁合同范本
- 供货渠道合同范本
- 新余小升初房屋合同范本
- 大牌代工合同范本
- 门窗员工安全合同范本
- 车位充电租赁合同范本
- cfg桩施工合同范本
- 代付协议合同范本
- 2025-2030中国海水淡化技术经济性分析与政策补贴机制报告
- 学校学生一日常规管理细则(2025年修订)
- 【语文】小学四年级下册期末质量模拟试题测试卷
- 2025年甘南事业单位考试笔试试题
- 项目保密管理措施及方案
- 山东护士招聘考试题库及答案
- 2025-2026学年高一上学期开学第一课主题班会课件
- 湖北省襄阳市枣阳市2024-2025学年七年级下学期期末考试英语试卷(含答案无听力部分)
- 存量贷款管理办法
- 产品供货方案及按时供货保证措施
- 科研协作管理办法
评论
0/150
提交评论