1、数字电路与逻辑设计实验电子节拍器的设计与实现综合实验报告学院:信息与通信工程学院班级:2013211124姓名:曹爽学号:2013210640班内序号:062015 年 11 月 12 日1目 录一、 实验题目和任务要求 .2(一) 实验题目 .2(二) 基本要求 .2(三) 提高要求 .2二、 系统设计 .2(一) 设计思路 .2(二) 总体框图 .3(三) 分块设计 .6三、 仿真波形及波形分析 .6(一) encode 文件仿真 .6(二) change 文件仿真 .7(三) fangdou 文件仿真 .7四、 源程序 .8(一) connect.vhd.8(二) beat.vhd .1
2、0(三) change.vhd .12(四) chw.vhd .12(五) cnta.vhd.13(六) cora.vhd.14(七) encode.vhd.17(八) fangdou.vhd .18(九) fenpin.vhd .18(十) jibenpinlv.vhd.20(十一) voice.vhd.21(十二) xianshi.vhd.22五、 功能说明及资源利用情况 .23(一) 功能说明 .23(二) 资源占用情况 .24六、 故障及问题分析 .24七、 总结和结论 .25八、 参考文献 .262一、 实验题目和任务要求(一) 实验题目电子节拍器的设计与实现,设计并实现一个具有声光
3、显示的电子节拍器。(二) 基本要求1、速度在 40120 次/ 分钟范围内连续可调,通过 2 个按键进行速度调节,一个用来增加,一个用来减少,当长按按键时,按 5 次/秒的速度连续增加或减少,用 3 个数码管显示当前速度。2、节拍有 1/4、2/4 、3/4、4/4、3/8、6/8 可选,通过一个按键选择,用 2个数码管显示。3、通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。4、要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示强弱。(三) 提高要求1、通过一个按键选择时值(节奏类型) ,并在用点阵显示,如下图。2、自拟其他功能。二、 系统设计(一)
4、设计思路最开始,我的想法是先设置速度,让高频时钟经过分频器,分出 40120 次/分钟(即周期在 0.5s1.5s 之间,因为只有统一到周期上才能用数时钟沿的方式进行分频) ,分频系数随速度变化而变化,大概呈反比例关系。下一步是设计节拍类型,题目中要求的六种节拍类型含义如下:(其中表示强拍,表示次强拍,表示弱拍,| 表示小节线。 )1/4 拍:以四分音符为一拍,每小节一拍,节奏类型:|32/4 拍:以四分音符为一拍,每小节二拍,节奏类型:|3/4 拍:以四分音符为一拍,每小节三拍,节奏类型:| | |4/4 拍:以四分音符为一拍,每小节四拍,节奏类型:| | 3/8 拍:以八分音符为一拍,每小
5、节三拍,节奏类型:| | |6/8 拍:以八分音符为一拍,每小节六拍,节奏类型:| |从乐理的角度来说,两拍之间的时间间隔是由速度控制的。而如果没有指定以哪种音符为基准,那么 3/4 拍和 3/8 拍的节奏是完全一样的,如果指定了以某种音符为基准,则 3/4 拍和 3/8 拍的节奏是二倍的关系。题目中没有给出以哪种音符作为速度的基准,所以按理说 3/4 拍和 3/8 拍应该是一样的节奏,为了加以区分,我把 3/8 拍的节奏设置成了强,次强,弱() ,以示区分。经过了速度和节拍类型的设置之后,节拍器其实就已经确定了工作方式。在确定速度和节拍类型的同时,将设定的速度和节拍类型显示在数码管上,用两个
6、按键控制速度的增减,用另一个按键控制节拍类型的切换。之后,在节拍器正常工作的同时,设置蜂鸣器强、次强、弱三种蜂鸣频率作为每拍提示音,并且讲三个二极管提示灯设置成红、黄、绿三种颜色跟随节奏闪烁,以对应强、次强、弱三种节拍强度。整个节拍器可以通过一个拨码开关控制工作和停止工作,只要设置一个信号,1 时工作,0 时停止工作即可。整个思路可以由以下框图表示:图 2.1.1 初步设计框图这是我最初的设计思路,在之后的实际设计中,又添加了许多模块(如防抖模块、点阵显示模块等) ,这些内容会在后文叙述。分频器(选择速度) 选择节拍类型数码管显示蜂鸣器(含频率设置)LED 灯(含颜色设置)clkclearbu
7、tton button button4(二) 总体框图由于我采用的是用代码连接各模块的方式,所以在整个节拍器设计并调试完毕之后,我用 Quartus II 自带的 RTL Viewer 功能,将各模块的连接绘制成了整体框图,如图 2.2.1 和图 2.2.2 所示。5图 2.2.1 RTL Viewer 总体框图6图 2.2.2 RTL Viewer 总体框图(续)7从整体框图可以看出,整个节拍器由 13 个模块组成,外部信号包括:clearin(开关) 、clkin(高频时钟) 、button a、button b、button c 三个控制按钮组成;输出包括数码管显示、LED 显示、蜂鸣器
8、、点阵显示等。模块包括防抖模块、数码管显示模块、分频器模块、节奏选择模块等。(三) 分块设计根据流程图的内容,可以进行逐步细化的分块设计。首先,分频器速度选择模块要求能在 40120 次/ 分钟这 81 种状态中任意选择,状态转移图就有 81 个结点,每种状态(即每两拍的时间间隔)是通过计算得到的,满足反比例函数关系。比如用 30MHz 的高频时钟时,经过理论推导和实验计时,每两拍的时间间隔就满足如下关系式:每个时间间隔持续的时钟沿数= 1500000000/速度-1利用这个公式可以计算出每个状态需要数出的时钟沿个数,从而设置速度。之后,节拍类型模块包括 6 个状态,每种状态需要设定好各自的节
9、奏强弱,并将节奏强弱变成信号交给数码管、LED 灯、蜂鸣器等。LED 灯和蜂鸣器对节奏强弱进行解析,转变成发声频率和闪烁颜色,这都需要在不同的文件中编写程序,再通过信号连接实现。最后,我还设置了防抖模块和点阵显示模块,防抖模块用来防止按键瞬间的抖动,点阵显示用来显示具体的音符,这些也需要分文件分模块进行设计。三、 仿真波形及波形分析由于本程序中分频器的系数是用一个除法式表示的(1500000000/tmp-1,其中 tmp 取 40 到 120 之间的任意整数) ,如果把式中的 1500000000 改小,则它除以 tmp 之后的值将变得无法明显分辨,失去其分频的意义;而现在这个系数又无法在短
10、时间内仿真出来。所以无法通过更改分频系数进行整体仿真,只能进行分模块仿真。下面我就几个主要的模块进行分模块仿真并分析。(一) encode 文件仿真本程序用于设置蜂鸣器的脉冲断开,使其发出的声音间断,便于识别拍子。仿真波形如图 3.1.1 所示。图中 ai、bi 、ci 是三种输入频率。从仿真波形可以看出,输入频率连续不变的时候,输出并不是连续的频率,而是随着时钟 clkin=1的时候才有相应的频率输出,达到了脉冲断开的功能,避免了蜂鸣器输出连续8的声音不能分清节拍的问题。图 3.1.1 encode 文件仿真波形图(二) change 文件仿真本程序可将强、次强、弱三种拍子转化成蜂鸣器可识别
11、的频率强弱形式。为了便于仿真观察,在原有的 change.vhd 文件中加入了时钟,以展示仿真效果。仿真波形如图 3.2.1 所示, a、b 、c 表示强、次强、弱三种拍子,在外部时钟 clk的作用下,输出为 clkout。并且,clkout 的频率由 a、b、c 决定,a 频率最高,c 频率最低,实现了三种强弱拍子到时钟频率的转化。图 3.2.1 change 文件仿真波形图(三) fangdou 文件仿真本程序为防抖模块,仿真波形如图 3.3.1 所示。button 是我按下的按键,我随意设置了几段 0 值,从仿真波形可以看出,不论我按键时间多长,每次只会在按下按键(button=1)后遇
12、到第一个 clk 上升沿时,输出 buout 才为 1,其他时刻均为 0(毛刺除外) 。最后的波形尤为明显,button 恒等于 1 后,buout 仍然只在 clk 第一个上升沿开始到再次遇到下降沿这区间内等于 1,而在此后的时间均为 0,这便起到了防抖的作用。图 3.3.1 fangdou 文件仿真波形图其他的模块,或是无法改小分频系数仿真(如基本频率模块,改小分频系数之后就失去了其原有的功能) ,或是改小参数后会失去仿真的意义(如分频器9模块,如果把 1500000000 改小,则它除以 tmp 之后的值将变得无法明显分辨,失去其分频的意义) ,或是数组过多分频效果不明显(如点阵显示模块
13、定义数组过多,即使仿真也不易看出其图形) 。基于以上原因,其他不易或不必仿真的模块便没有给出仿真波形图。四、 源程序(一) connect.vhd本程序是主体,用于接口和信号的说明,以及各模块之间的连接,具体信号和连接方式可参见总体框图部分图 2.2.1 和图 2.2.2。library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;use IEEE.std_logic_arith.all;entity connect isport(clkin,clearin : in std_logic;buttona,bu
14、ttonb,buttonc : in std_logic; bout : out std_logic_vector (6 downto 0);ct :out std_logic_vector(5 downto 0);o1,o2,o3: out std_logic;dout :out std_logic;col:out std_logic_vector(7 downto 0);row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);end connect;architecture connect_arch of connect iscomponent jibenpinlv isport(clk , clear: in std_logic;clkout1,clkout2,clkout3 : out std_logic);end component;component beat isport(a:in std_logic; clk,clk3:in std_logic;o,y,z:out std_logic;n:out integer);end component;component fenpin isport(clk,clk3,clear: in std_logic;button1 , button2: in std_logic;
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。