当前位置:文档之家› EDA 数控分频器的设计

EDA 数控分频器的设计

EDA 数控分频器的设计
EDA 数控分频器的设计

专业班级:

学号:姓名:

EDA 技术实验报告

实验项目名称:数控分频器的设计

实验日期:2012.06.11 实验成绩:

实验评定标准:

一、实验目的

学习数控分频器的设计、分析和测试方法。

二、实验原理

数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。

三、实验器材

PC机、FPGA实验箱、QuartusⅡ软件

四、实验内容:

编写数控分频器的程序,完成之后在实验系统上硬件验证其程序的功能。可选实验电路模式一;键2和键1负责输入8位顶置数D;CLK由clock0输入,频率选65536HZ或更高;输出FOUT接扬声器。编译下载后进行硬件测试;改变键2或键1的输入值,可听到不同的音调的声音。

五、实验程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity DVF is

port (clk:in std_logic;

d:in std_logic_vector(7 downto 0);

fout:out std_logic);

end DVF;

architecture one of DVF is

signal full:std_logic;

begin

p_reg:process(clk)

variable cnt8 :std_logic_vector(7 downto 0); begin

if clk'event and clk='1' then

if cnt8="11111111" then

cnt8:=D;

full<='1';

else cnt8:=cnt8 +1;

full<='0';

end if;

end if;

end process p_reg;

p_div:process(full)

variable cnt2:std_logic;

begin

if full'event and full='1' then

cnt2:=not cnt2;

if cnt2='1' then fout<='1';else fout<='0';

end if;

end if;

end process p_div;

end one;

六、实验仿真、结果及分析

<一>实验仿真:

根据以上程序可知,给定预置值的波形如下:

从而,完成分频后的波形图如下:

<二> 实验结果与分析:

实验仿真结果如以上波形图;给定时钟信号为200MHz,调整预置值D端的输入为十六进制,如以上输入33、55、99、AA、BB、CE,由编写的程序所知,其所要完成的计数器终态值为‘11111111’,其进制为预置值到终态值之间的范围,所要完成的分频就是按这个倍数进行。也就是说,当预置值给出了之后,计数器开始计数,完成从所给预置值逐步加‘1’至终态值,之后进位端进‘1’,然后接着执行以下功能,CNT2端因FULL上升为高电平,D触发器输出取反,FOUT的输出波形与CNT2输出的波形一样,即CNT2输出为‘1’,FOUT 输出为‘1’,CNT2输出为‘0’,FOUT输出为零,经过这样一个变换,FOUT的波形的一个周期是所给信号的倍数关系。如上图波形,输出波形的频率与所给的波形频率之间的关系即验证了以上分析。从而,可以说明:实验结果是正确的,也就达到了此次实验的目的。

杭州电子科技大学数电大作业实验报告电子琴

数电大作业实验报告如图是CODE3的case语句程序,该模块是一个编码器,即将输入的8位琴键信号进行编码,输出一个4位码,最多能对应16个音符(若有16个键)。 如图所示是INX2CODE的case语句程序,该模块是一个译码器,它将来自键盘输入的编码信号译码成数控分频器SPK0输出信号的频率控制字。 另外两个模块是M_CODE和DCD7SG,它们的case语句程序如上图所示。前者的功能是将来自CODE3的键盘编码译成简谱码和对应的音调高低值H,后者是一个数码管7段显示译码器,负责将简谱码译成数码管的显示信号。 如图所示是SPK0模块的内部结构。其中的计数器CNT11B是一个LPM宏模块,这是一个11位二进制加法计数器。在设置其结构参数时,应该选择同步加载控制,即sload(Synchronous Load),这样能较好地避免来自进位信号cout中可能的毛刺影响。异步加载aload极易受到随机窄脉冲的误触发,在此类电路中不宜采用。图中D触发器和反相器的功能是将用于控制加载的进位信号延迟半个时钟周期,一来也是为了滤除可能的毛刺,以免对加载更为可靠,因为这时,时钟上升沿正好处于加载脉冲的中点。 模块CODE3,INX2CODE和SPK0的主要工作过程是这样的: 当按琴键后,产生的数据经编码器获得一个编码(例如,当按下第二个键,对应0010,即2),它对应模块INX2CODE中的一个值(2对应390H)。当这个值(如390H)被置入模块SPK0中的11位可预置计数器中后。由于计数器的进位端与预置数加载段端相连,导致此计数器将不断以此值作为计数起始值,直至全1。

以下以预置值为390H为例,来计算SPK0输出信号的频率值。 当以390H为计数器起始值后,此计数器成为一个模(7FFH-390H=46FH=1135)的计数器。即每从CLK端输入1135个脉冲,BEEP端输出一个进位脉冲。由于输入的时钟频率是1MHz (周期是1us),于是BEEP输出的信号频率是1/(1135us)=841Hz。 由下面电子琴的顶层电路可见,SPK0的输出信号经过一个由D触发器接成的T’触发器后才输出给蜂鸣器。这时信号被作了二分频,于是,预置值390H对应的与蜂鸣器发音的基频F 约等于440Hz。 B 电子琴顶层电路中T’触发器有两个功能,一个作用是作二分频器;另一个作用是作为占空比均衡电路。这是因为由SPK0模块输出信号的脉宽极窄,功率极低,无法驱动蜂鸣器,但信号通过T’脉宽就均匀了(F 的占空比为50%)。 B 如图所示是电子琴顶层设计电路,含2个输入口和3个输出口。 1.工作时钟CLK,频率:1MHz。用于在主控模块中产生与琴键对应的振荡频率,以驱动蜂 鸣器发出相应的声音。 2.琴键输入DIN[7..0].8个音符,8位中只能有一位为0,即8个琴键中每一时刻只能按 一个键。 3.输出端口SPK0用于驱动蜂鸣器。 4.输出信号LED接数码管,用于显示对应的简码谱。H显示音高低。

EDA乐曲硬件演奏电路设计 课程设计

摘要 乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM 器件。通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。 本课设在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,并定制LPM-ROM存储音乐数据,以“两只老虎”乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。 关键词:FPGA;EDA;VHDL;音乐

目录 设计要求 (1) 1、方案论证与对比 (1) 1.1方案一 (1) 1.2方案二 (1) 1.3综合对比 (1) 2 乐曲演奏电路原理 (2) 2.1 音乐演奏电路原理 (2) 2.2 音符频率的获得 (2) 2.3 乐曲节奏的控制 (3) 2.4 乐谱发生器 (3) 2.5 乐曲演奏电路原理框图 (3) 3音乐硬件演奏电路的设计实现 (4) 3.1 地址发生器模块 (4) 3.1.1 地址发生器的VHDL设计 (4) 3.2 分频预置数模块 (6) 3.2.1 分频预置数模块的VHDL设计 (6) 3.3 数控分频模块 (8) 3.3.1 数控分频模块的VHDL设计 (8) 3.4 music模块 (10) 3.4.1 音符数据文件 (10) 3.5.2 LPM-ROM定制 (12) 3.6 顶层文件 (14) 4 时序仿真及下载调试过程 (16) 4.1 时序仿真图 (16) 4.2 引脚锁定以及下载 (17) 4.3调试过程及结果 (17) 5扩大乐曲硬件演奏电路的通用性 (18) 5.1 完善分频预置数模块的功能 (18) 设计总结与心得体会 (21) 参考文献 (22)

分频器设计实验报告

竭诚为您提供优质文档/双击可除分频器设计实验报告 篇一:n分频器分析与设计 一、实验目的 掌握74190/74191计数器的功能,设计可编程计数器和n分频器,设计(n-1/2)计数器、分频器。 二、实验原理 分频是对输入信号频率分频。1、cD4017逻辑功能 2、74190/74191逻辑功能 3、集成计数器级联 当所需计数器模数超过所选计数器最大计数状态时,需要采取多片计数器级联。方法分为异步级联和同步级联。4、集成计数器的编程 在集成计数器的时序基础上,外加逻辑门电路等,反馈集成计数器的附加功能端,达到改变计数器时序的目的。可采用复位编程和置数编程两种。5、多片74190/74191计数器级联 可根据具体计数需求和增减需求,选用74190或74191,

选择不同功能、同步或异步设计等。 6、74190/74191计数器编程 由于没有复位端,因此只能使用置数编程,置数端置为0即可异步置数。可根据需求设计n进制加法或减法计数器。 n与译码逻辑功能如下。 7、74191组成(n-1/2)分频器电路如下图: u3 计数器的两个循环中,一个循环在cp的上升沿翻转;另一个是在cp的下降沿翻转,使计数器的进制减少1/2,达到(n-1/2)分频。 三、实验仪器 1、直流稳压电源1台 2、信号发生器1台 3、数字万用表1台 4、实验箱1台 5、示波器1台 四、仿真过程 1、按照cD4017和74191功能表验证其功能。 2、74191组成可编程计数器 (1)构成8421bcD十进制加法计数器,通过实验验证正确性,列出时序表。设计图如下 仿真波形如下 (2)构成8421bcD十进制减法计数器,通过实验验证正确性,列出时序表。设计图如下: 仿真波形如下

基于VHDL数控分频器设计

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (4) 四、功能 (5) 1、数控分频器 (5) 2、BCD译码器 (6) 3、扫描器 (11) 4、3-8译码器 (13) 5、7段数码管显示译码器 (16) 五、总体设计电路图 (19) 1总体(顶层)电路原理图 (19) 2仿真结果 (19) 3管脚分配图 (20) 4.硬件连接情况 (20) 六.心得体会 (20)

数控分频器设计 一、设计任务与要求 数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。 基本功能: 1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。 2、输出的波形应为占空比位50%的方波。 3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。 总体框图 设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。把输入端输入的八位二进

制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。 模块的功能: 1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频。 2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。 3、扫描器:when “000”=>daout<=dout(3 downto 0); when “001”=>daout<=dout(7 downto 4); when “010”=>daout<=dout(3 downto 2)<="00"; daout(1 downto 0)<=dout(9 downto 8); when others=>null; 4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。 当sel=1时,q=11111101;选择十位数码管亮。 当sel=2时,q=11111011;选择百位数码管亮。 5、7段数码管显示译码器:把BCD码表示的十进制数转换成驱动数码管显示的段信号,使数码管显示数字。 三、选择器件 1、装有QuartusII软件的计算机一台。 2、芯片:使用altera公司生产的Cyclone系列芯片,如EP1C12Q240C8芯片 。 此次设计实验采用ALTERA公司的cyclone系列的FPGA芯片EP1C12,设计和仿真采用ALTERA公司的QUARTUS II软件,EP1C12各项参数参照上表。 Cyclone的性能特性 (1)、新的可编程体系结构,实现低成本设计。

EDA实验报告

实验一计数器设计 一、实验目的 计数器是实际中最为常用的时序电路模块之一,本实验的主要目的是掌握使用HDL描述计数器类型模块的基本方法。 二、实验仪器与器材 1.EDA开发软件一套 2.微机一台 3.实验开发系统一台 4.其他器材与材料若干 三、实验说明 计数器是数字电路系统中最重要的功能模块之一,设计时可以采用原理图或HDL语言完成。下载验证时的计数时钟可选连续或单脉冲,并用数码管显示计数值。 四、实验要求 1.设计一个带有计数允许输入端、复位输入端和进位输入端的十进制计数器。 2.编制仿真测试文件,并进行功能仿真。 3.下载并验证计数器功能。 4.为上述设计建立元件符号。 5.在上述基础上设计计数器。 五、实验结果

十进制计数器程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter10 is port(en,reset,clk:in std_logic; q:buffer std_logic_vector(3 downto 0); co:out std_logic); end counter10; architecture behav of counter10 is begin process(clk,en) begin if clk'event and clk='1' then if reset='1' then q<="0000"; elsif en='1' then if q<"1001" then q<=q+'1'; else q<="0000"; end if; end if; end if; end process;

电子琴实验报告乐曲硬件演奏电路设计本科论文

武夷学院实验报告 课程名称:逻辑设计与FPGA 项目名称: 乐曲硬件演奏电路设计 ______________ 姓名: 专业:微电子学 班级:14微电子 学号:04实验日期 、 实验预习部分: 1. 实验目的: 学习利用数控分频器设计硬件乐曲演奏电路。 2. 实验原理: 综合利用数控分频器、LPM ROMPLL 等单元电路设计硬件乐曲演奏电路。系统框图如图 1 所示由三个模块组成,分别为 NOTETABSTONETABASPEAKERA NOTETAB 模块(把教材图9-4中的CNT138T 和MUSIC 模块合在一起即为此模块)类似于弹 琴人的手指;TONETAB 模块类似于琴键;SPEAKER 类似于琴弦或音调发生器。 音符的频率由SPEAKER 模块(与教材图9-4中的SPKEF 模块对应)获得,这是一个数控分 频器。由其CLK 端输入一具有较高频率(12MHZ 的信号,通过SPEAKER 分频后由SPKOU 输出。 SPEAKER 对CLK 输入信号的分频比由11位预置数TONE[10..0]决定。SPKOU 的输出频率将决定 每一音符的音调,这样,分频计数器的预置值 TONE[10..0]与SPKOU 的输出频率就有了对应关 系。例如在TONETAB 模块(与教材图9-4中的F_COD 模块对应)中若取 TONE[10..0] = 1036, 图1硬件乐曲演奏电路结构框图 i.;E-Z

将发出音符“ 3”音的信号频率。

实验预习成绩(百分制)____________________ 实验指导教师签字:_________________________

数控分频器实验报告

《数控分频实验》 姓名:谭国榕班级:12电子卓越班学号:201241301132 一、实验目的 1.熟练编程VHDL语言程序。 2.设计一个数控分频器。 二、实验原理 本次实验我是采用书上的5分频电路进行修改,通过观察其5分频的规律进而修改成任意奇数分频,再在任意奇数分频的基础上修改为任意偶数分频,本次实验我分为了三个部分,前两部分就是前面所说的任意奇数分频和任意偶数分频,在这个基础上,再用奇数输入的最低位为1,偶数最低位为0的原理实现合并。 三、实验步骤 1.任意奇数分频 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV1 IS PORT(CLK:IN STD_LOGIC; D:IN INTEGER RANGE 0 TO 255; K1,K2,K_OR:OUT STD_LOGIC ); END; ARCHITECTURE BHV OF DIV1 IS SIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL M1,M2:STD_LOGIC; --SIGNAL OUT1,OUT2,OUT3:STD_LOGIC; BEGIN PROCESS(CLK,TEMP3) BEGIN IF RISING_EDGE(CLK) THEN IF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF; IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF; END PROCESS; PROCESS(CLK,TEMP4) BEGIN IF FALLING_EDGE(CLK) THEN IF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF; IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2;

实验五 数控分频器

实验五数控分频器 一、实验目的 1、学会数控分频器的设计、分析和测试方法; 2、根据仿真结果分析设计的优缺点。 二、实验原理 数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIV IS PORT(CLK:IN STD_LOGIC; K_OR:OUT STD_LOGIC); END ENTITY DIV; ARCHITECTURE BHV OF DIV IS SIGNAL C1,C2:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL M1,M2:STD_LOGIC; BEGIN PROCESS(CLK,C1) BEGIN IF RISING_EDGE(CLK) THEN IF (C1="100") THEN C1<="000";ELSE C1<=C1+1;END IF; IF (C1="001") THEN M1<=NOT M1;ELSIF C1="011" THEN M1<=NOT M1; END IF; END IF; END PROCESS ; PROCESS(CLK,C2) BEGIN IF FALLING_EDGE(CLK) THEN IF (C2="100") THEN C2<="000";ELSE C2<=C2+1;END IF; IF (C2="001") THEN M2<=NOT M2;ELSIF C2="011" THEN M2<=NOT M2;

EDA实验报告

EDA 实验报告 实验一:组合电路的设计 实验内容是对2选1多路选择器VHDL 设计,它的程序如下: ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ; END ARCHITECTURE one ; Mux21a 仿真波形图 以上便是2选1多路选择器的VHDL 完整描述,即可以看成一个元件mux21a 。mux21a 实体是描述对应的逻辑图或者器件图,图中a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。Mux21a 结构体可以看成是元件的内部电路图。最后是对仿真得出的mux21a 仿真波形图。 Mux21a 实体 Mux21a 结构体

实验二:时序电路的设计 实验内容D 触发器的VHDL 语言描述,它的程序如下: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ; END bhv; D 触发器的仿真波形图 最简单并最具代表性的时序电路是D 触发器,它是现代可编程ASIC 设计中最基本的时序元件和底层元件。D 触发器的描述包含了VHDL 对时序电路的最基本和典型的表达方式,同时也包含了VHDL 中许多最具特色的语言现象。D 触发器元件如上图所示,其在max+plus2的仿真得出上面的波形 D 触发器

EDA数控分频器的设计报告

数控分频器的设计 1、实验目的: 学习数控分频器的设计、分析和测试方法。 2、实验原理: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例下文所示。 1) VHDL及语句分析 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS --定义实体DVF PORT ( CLK : IN STD_LOGIC; --时钟输入 D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --7位预置数 FOUT : OUT STD_LOGIC ); --输出的频率 END DVF; ARCHITECTURE one OF DVF IS --定义结构体one SIGNAL FULL : STD_LOGIC; --定义信号full BEGIN P_REG: PROCESS(CLK) --进程P_REG中CNT8从预置数D开始 逐步累加到255后,FULL置1;再将 CNT8置为D,循环以获得一个新的周期 脉冲序列FULL,即产生新的频率V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CNT8 = "11111111" THEN CNT8 := D; FULL<='1'; ELSE CNT8 := CNT8 + 1; FULL <= '0'; END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) --进程P_DIV中,FOUT是占空比为50%的周期

EDA简易电子琴设计报告

,、题目分析 1、分析要求,确定总体方框图 本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在Quartus II 平台下下载到Cyclone系列的EP1C12Q240C芯片中,该电路设计能够实现DO RE Ml、FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。 电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。 根据系统设计要求,系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图1所示,它由乐曲自动演奏模块AUTO音调发生模块TONE和数控分频模块FENPIN三部分组成。 图1系统的整体组装设计原理图 2、最终完成的技能指标 (1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。 (2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲 】、选择方案 通过可编程逻辑器件(PLD和VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。对于基本部分,设计的主体是数控分频器,对输入的频率进行分频,得

到各个音阶对应的频率最为输出。当按下不同的键时发出不同的声音。对于发挥部分,则在原设计的基础上,增加一个乐曲存储模块,代替了键盘输入,产生节拍控制(index数据存留时间)和音阶选择信号,即在此模块中可存放一一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。 方案一:由单片机来完成设计。可用单片机控制键盘的输入,以及产生相应的频率信号作为输出。目前,单片机的功能已比较强大,集成度日益增高且其设计和控制比较容易。但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,如锁存器,译码器等都需要单独的电路,因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环,可靠性降低,而功耗费用增高。 方案二:利用PLC来完成设计。目前利用PLC的技术已经比较成熟。PLC有其优点,其性能优异,体积小,可靠性和精度都比较好,在电子琴的设计中可 采用PLC来完成硬件的控制,但是用PLC实现编程相对比较复杂,对于电子琴这种小型设计来说成本过高。 方案三:利用可编程逻辑器件PLD来完成该设计。利用PLD可以很好的解决上述的问题。它的成品体积小,适合电子琴这种小型设计。其性能稳定,控制精度高(Xili nx公司的高密度,高速可预测延时,高性能系列芯片),易于管理和屏蔽,抗干扰能力强,可靠性高。 综上,在本设计中选择第三种方案最优。 三、各模块原理及其程序 1、乐曲自动演奏模块 乐曲自动演奏模块(AUTO.VHD的作用是产生8位发声控制输入信号/当进行自动演奏时,由存储在此模块中的8位二进制数作为发声控制输入,从而自动演奏乐曲。 为了实现扩展部分的设计,便需要多加上一个音乐存储模块,该模块的作用是产生8位发声控制输入index,auto为0或1时可以选择自动演奏或者键盘输入,如果auto为0,则而由存储在此模块中的8位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到4Hz 的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此处便是1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲。 这段模块的原理图如图2所示: CLK AUTO INDEX0[7.0] 图2乐曲自动演奏模块原理图 乐曲自动演奏模块可以由VHDL语言来实现,下面是一段主要代码:

vhdl实验报告--蜂鸣器

VHDL 实验报告 一、实验目的 1、掌握蜂鸣器的使用; 2、通过复杂实验,进一步加深对VHDL语言的掌握程度。 二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的12 平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。在2个八度音之间,又可分为12个半音。另外,音符A(简谱中的低音6)的频率为440Hz, 音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音I至高音1 之间每个音符的频率,如表所示。 音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 中音1 高音1 低音2 中音2 高音2 低音3 中音3 高音3 低音4 中音4 高音4 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7 表简谱音名与频率的对应关系 产生各音符所需的频率可用一分频器实现, 由于各音符对应的频率多为非整数, 而分频系数又不能为小数, 故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低, 则由于分频系数过小, 四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素, 在尽量减小频率误差的前提下取合适的时钟频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此, 要控制音符的音 长,就必须知道乐曲的速度和每个音符所对应的节拍数, 本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。 本例设计的音乐电子琴选取40MHZ的系统时钟频率。在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。由于数控分频器 输出的波形是脉宽极窄的脉冲波, 为了更好的驱动蜂鸣器发声, 在到达蜂鸣器之前需要均衡占空比, 从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频, 频率变为原来的二分之一即。 因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为 523. 3Hz,它的分频系数应该为: 0.375MHZ 0.375 106 716 523.3 523.3

实验八 数控分频器的设计

实验八数控分频器的设计 1、实验目的 1 学习数控分频器的设计; 2 熟悉VHDL常用语句的意义和使用; 3 练习引脚分配和时序分析。 2、实验内容 1 设计8位数控分频器; 三、实验原理 对于一个N分频器,分频出的时钟周期原时钟周期的N倍,频率是原时钟频率的1/N。 对于一个8位计数器,如果开始预置一个数D,然后启动计数器工作,则经过11111111-D个时钟周期计数器的值又变为11111111,当计数器为该数值时,下一个时钟沿到来之时,又将计数器预置为D,然后开始正常计数。如此通过计数、预置的周期性操作,可以得到一个周期信号(即分频信号),其周期为11111111-D+1,即分频比为R= 11111111-D+1。所以改变D,则可以控制分频比。 数控分频器的VHDL代码见教材P146-147。仿真波形如图8-1所示。 图8-1 数控分频器仿真波形

图8-2 数控分频器芯片引脚分配 三、实验步骤 (一)8位数控分频器的设计 1 建立一个设计工程,工程名为PULSE; 2 打开文本编辑器,建立一个VHDL设计文件,其VHDL代码见教材 P166例6-22,文件名存为PULSE.VHD。注意文件的扩展名要选 为.vhd,而且要求工程名、文件名和设计实体名必须相同。 3 选器件:将器件型号选为; 4 编译; 5 建立波形文件,然后保存,其文件名必须与工程名一致;【波形

设置:①设置仿真时间为500us:②设置输入信号的波形:时钟周期设置为50ns,其他输入信号的波形设置参看图8-1。】 6 仿真,观察输出波形是否正确【参看图8-1中的输出波形】。 7 引脚分配;【将引脚分配到如图8-2所示的位置,然后再编译。 编译通过才算成功】 8 时序分析:分析芯片所能达到的最高时钟频率。【打开时序分析器,然后执行菜单命令:analysis/register performance /start】 五、思考题 1 按本实验所示的方法进行分频,输出的分频信号FULL和FOUT是奇数分频还是偶数分频?分别说明之。 2 将本实验的8位数控分频器扩展为16位分频器; 3 在本实验的设计基础上,如果设置2个预置数D和D1,则可以控制输出信号FULL的占空比,使时钟信号变得比较均匀。试在原来的VHDL 代码基础上进行改进,使用D和D1来控制FULL信号的占空比。 4 设计一个5分频器,使其分频时钟的占空比位3/5,写出VHDL设计代码。 【提示:对于一个5分频器的设计,可以先设计一个4位5进制计数器,则计数器的值在0,1,2,3,4上周期性循环。设计方法是:当计数器为4时,如果下一个时钟沿到来则将计数器置0,然后开始正常计数。另外定义一个分频信号CLK_DIV5,当计数器值为0,1,2时,使CLK_DIV5=1,当计数器值为3,4时,使CLK_DIV5=0,则CLK_DIV5为5分频信号,其占空比为3/5。】

数控分频器的设计

实验四数控分频器的设计 一、实验目的: 1.学习数控分频器的设计、分析和测试方法,锻炼分析Verilog(VHDL)语言的能力。 二、原理说明: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,对原时钟进行占空比为50%的分频。在实验板选择50M 时钟,对其进行2~15分频,分频系数以拨码键盘控制,并用数码管进行显示(十六进制形式)。 三、实验内容: 1、根据由顶向下的设计原则,进行顶层建模。 分频系数分为奇数分频和偶数分频,因些包括Evn_Div(偶数分频)和Odd_Div(奇数分频)模块,数码管显示为SEG7_LUT,采用类似查找表的方式完成。 2、偶数分频 偶数分频模块比较简单,假设分频系数为N,只需要在计数器计到N/2时,将输出时钟反转即可。

仿真图如下: 3、奇数分频 奇数分频相对偶数分频比较麻烦,主要是对原时钟的上升沿和下降沿进行计数,通过两个计数器得到上升沿时钟和下降沿时钟,对这两个时钟进行与操作可得到奇数分频。

仿真图如下: 4、数码管显示 数码管显示模块应用case语句即可完成。

5、分频选择 分频系数有两种,一是偶数,另一个是奇数,因此可通过分频系数的最低位来进行选择,iDIV[0]既作为奇、偶分频模块的使能输入,又可作为输出时钟选择线。 6、顶层模块 将上述几个模块例化即可(注意iDiv[0]的连接方式)。 引脚: input CLOCK_50;//原时钟 input RST;//复位信号 input [3:0] iDIV;//分频系数 output oCLK;//输出时钟 output [6:0] oSEG;//数码管输出

EDA分频器的设计

EDA实验报告 学院:班级: 学号:指导老师: 姓名: 一、实验目的:学习数控分频器的设计,分析和测试方法。 二、实验原理:不同的分频比,数控分频器就是用计数值可并行预置的加法 计数器设计完成的,方法是将数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有计时器溢出位与预置数加载输入信号相接即可。 三、实验内容 1、将4096HZ的时钟信号分频为1HZ的时钟信号。 实验原理图: 实验源程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dvf is port(clk_in:in std_logic; fout:out std_logic); end; architecture one of dvf is signal cnt: integer range 0 to 2048; signal clk_out:std_logic; begin process(clk_in) begin if clk_in'event and clk_in = '1' then if cnt=2048 then cnt <=0; clk_out <=not clk_out; else cnt<=cnt+1; end if;

end if; end process; fout<=clk_out; end one; 功能仿真波形图: 实验引脚图: 实验箱上工作情况:当CLOCK5接4096HZ的时钟信号时,扬声器每秒钟响一次。 2、如实验内容1将4096HZ的时钟信号分频为2HZ、8HZ、16HZ的时钟信号。 3、编写四选一MUX,可用按键控制选择分频后的某时钟。 实验原理图: 实验源程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dvf is port(clk:in std_logic;

数控分频器的设计

数控分频器的设计 一、实验目的: 学习数控分频器的设计和测试方法。 二、实验原理: 数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。 电路输出波形图: 三、实验内容: 1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。 ------------------------------------------------------------------------------------------------------------- 原理图:

数控分频器输出频率与输入时钟的关系: 当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。 任意小数都可以表示成a n b +形式,其中a

vhdl实验报告--蜂鸣器

VHDL实验报告 一、实验目的 1、掌握蜂鸣器的使用; 2、通过复杂实验,进一步加深对VHDL语言的掌握程度。 二、实验原理 乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音。另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率,如表所示。 音名频率/Hz音名频率/Hz音名频率/Hz 低音1中音1高音1 低音2中音2高音2 低音3中音3高音3 低音4中音4高音4 低音5392中音5784高音51568 低音6440中音6880高音61760 低音7中音7高音7 表简谱音名与频率的对应关系 产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。 本例设计的音乐电子琴选取40MHZ的系统时钟频率。在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好的驱动蜂鸣器发声,在到达蜂鸣器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频,频率变为原来的二分之一即。

EDA 数控分频器的设计

专业班级: 学号:姓名: EDA 技术实验报告 实验项目名称:数控分频器的设计 实验日期:2012.06.11 实验成绩: 实验评定标准: 一、实验目的 学习数控分频器的设计、分析和测试方法。 二、实验原理 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。 三、实验器材 PC机、FPGA实验箱、QuartusⅡ软件 四、实验内容: 编写数控分频器的程序,完成之后在实验系统上硬件验证其程序的功能。可选实验电路模式一;键2和键1负责输入8位顶置数D;CLK由clock0输入,频率选65536HZ或更高;输出FOUT接扬声器。编译下载后进行硬件测试;改变键2或键1的输入值,可听到不同的音调的声音。 五、实验程序 library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity DVF is port (clk:in std_logic; d:in std_logic_vector(7 downto 0); fout:out std_logic); end DVF; architecture one of DVF is signal full:std_logic; begin p_reg:process(clk) variable cnt8 :std_logic_vector(7 downto 0); begin if clk'event and clk='1' then if cnt8="11111111" then cnt8:=D; full<='1'; else cnt8:=cnt8 +1; full<='0'; end if; end if; end process p_reg; p_div:process(full) variable cnt2:std_logic; begin if full'event and full='1' then cnt2:=not cnt2; if cnt2='1' then fout<='1';else fout<='0'; end if; end if; end process p_div; end one; 六、实验仿真、结果及分析 <一>实验仿真: 根据以上程序可知,给定预置值的波形如下:

FPGA硬件电子琴电路设计实验报告

FPGA实验报告 题目:硬件电子琴电路设计 一.实验目的:学习利用数控分频器设计硬件电子琴实验。 二.实验原理及内容:主系统由3个模块组成,顶层设计文件中包含三个功能模块,和,。 模块ToneTaba是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code 输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。 模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。 增加一个NoteTabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。 图1 硬件电子琴电路结构 三.实验步骤. 1.在QUARTUSII软件下创建一工程,工程名为songer,芯片名为EP2C35F672C6; 2.输入数控分频器程序并命名为,保存与工程相同的文件夹中。

其功能仿真波形和时序仿真波形分别如下: 3.输入音阶发生器程序并命名为,保存与工程相同的文件夹中。 4.输入27分频程序并命名为,保存与工程相同的文件夹中。

5.输入50分频程序并命名为,保存与工程相同的文件夹中。 其功能仿真波形和时序仿真波形分别如下: 6.建立梁祝乐曲演奏数据的MIF文件。 WIDTH = 4 ; 入程序并命名为,保存与工程相同的文件夹中。 8.输入硬件演奏电路顶层设计文件并命名为,保存与工程相同的文件夹中。 9.锁定引脚后重编译并进行下载。 四.思考题. 1.电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声

相关主题
文本预览