基于-FPGA的音乐播放器的设计.doc

上传人:暗伤 文档编号:24288913 上传时间:2022-07-04 格式:DOC 页数:19 大小:171KB
返回 下载 相关 举报
基于-FPGA的音乐播放器的设计.doc_第1页
第1页 / 共19页
基于-FPGA的音乐播放器的设计.doc_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《基于-FPGA的音乐播放器的设计.doc》由会员分享,可在线阅读,更多相关《基于-FPGA的音乐播放器的设计.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、摘要根据国家发改委与专业教学委员会对教育机构的要求,为培养适应我国21世纪国民经济发展的电子设计人才;同时基于国家教委面向21世纪电工电子课程体系改革和电工电子工科教学基地建设两项教学改革研究成果。要求高等本科在校学生能够自己动手完成简单的数字器件设计。本次设计在自己手动焊接简易的PFGA板子上实现,并且在QusrtusII 9.0上利用VHDL设计数控分频器电路,利用数控分频原理设计音乐硬件演奏电路,并制定LPM-ROM存储音乐数据,以“梁祝”乐曲为例,将音乐数据存储到LPM-ROM,就达到了已纯硬件的手段来实现乐曲演奏的效果,只要修改LPM-ROM所存储的音乐数据,将其转换为其他的音乐数据

2、,再重新制定LPM-ROM,在连接到程序中就可以实现其他与取得演奏。本次设计采用的FPGA主芯片位ALTERA公司的FLEX系列的EPF10K10LC84-4。由于板子是自己手动在万用板上焊接的所以只焊接了必要的外设如蜂鸣器和LED。关键词FPGA;音乐播放器;QuartusII;VHDL;I目录摘要I第一章 前言21.1关于EDA技术21.2 关于VHDL21.3 关于EDA工具31.4 有关本次课程设计3第二章 设计实现42.1音乐演奏电路原理42.1.1音符频率的获得42.1.2乐曲节奏的控制52.1.3乐谱发生器52.1.4乐曲演奏电路原理框图52.2音乐硬件演奏电路的设计实现52.2

3、.1各个模块的功能简介52.2.2 music模块62.3地址发生器模块82.3.1地址发生器的VHDL设计82.3.2波形仿真92.4分频预置数模块92.4.1分频预置数模块的VHDL设计92.4.2波形仿真102.5十六进制模块112.5.1十六进制模块的VHDL设计112.5.2波形仿真112.6数控分频模块122.6.1数控分频模块的VHDL设计122.6.2 波形仿真132.7 分频模块132.8顶层模块15结论17参考文献18基于FPGA的音乐播放器的设计第一章 前言1.1关于EDA技术随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化(Electronics

4、Design Automation,EDA)技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。现如今掌握EDA技术是电子信息类专业的学生、工程技术人员所必备的基本能力和技能。传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。然而,随着可编程器件和EDA技术的发展,传统设计的劣势被克服,采用可编程逻辑器件基于芯片的设计方法,期间的内部逻辑和引脚可

5、以由设计者自行决定,大大提高了设计的灵活性,提高了工作效率;同时,将系统集成在一个芯片上的设计,使系统具有体积小、功耗低、可靠性高等特点。EDA技术的发展大致经历了三个阶段:20世纪70年代的CAD(计算机辅助设计)阶段、20世纪80年代的CAE(计算机辅助工程)阶段、20世纪90年代后的EDA(电子设计自动化)阶段。以下主要介绍第三个阶段。EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(HDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。它主要采用“自顶向下”的设计方法,设计流程主要包括:设计输入、综合、仿真、适配、下载。EDA技术主要

6、有以下特征:(1)高层综合的理论和方法取得进展,从而将EDA设计层次由RT级提高到了系统级,并推出了相应的系统级综合优化工具,大大缩短了复杂ASIC的设计周期。(2)采用硬件描述语言来描述10万门以上的设计,并形成了VHDL和Verilog-HDL两种标准硬件描述语言。(3)采用平面规划技术对逻辑综合和物理版图设计联合管理,做到在逻辑设计综合早期阶段就考虑到物理设计信息的影响。(4)可测性综合设计。(5)为带有嵌入式IP核的ASIC设计提供软、硬件协同设计工具。(6)建立并行设计工具框架结构的集成化设计环境,以适应当今ASIC规模大而复杂、数字与模拟电路并存、硬件与软件设计并存、产品上市速度快

7、等特点。总而言之,EDA技术的出现,给电子信息产业带来了革命性的变革。1.2关于VHDLVHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。使用VHDL语言描述的电路,可以进行综合和仿真。然而,值得注意的是,尽管所有VHDL代码都是可仿真的,但并不是所有代码都能综合。VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的,从而可以方便地进行移植和重用。VHDL两个最直接的应用领域是可编程逻辑器件(PLD)和专用集成电路(ASIC),其中可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵

8、列(FPGA)。关于VHDL最后要说明的是:与常规的顺序执行的计算机程序不同,VHDL从根本上讲是并发执行的。在VHDL中,只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。1.3EDA工具目前有多种EDA工具支持采用VHDL进行电路综合、仿真以及实现。比较常见的是Altera公司的Quartus开发平台和Xilinx公司的ISE开发平台。这些平台中使用的综合工具和仿真工具通常由专业的EDA厂商提供。本次设计中所使用的平台正是Quartus7.2,它是Altera公司提供的一套集成了编译、布局布线和仿真工具在内的综合开发环境。它能完成从

9、代码输入到编译到仿真再到物理实现的全部设计流程。1.4有关于本次课程设计本次课程设计要求使用EDA工具,设计实现简易音乐演奏器,理解音名与频率的关系及数控分频原理,经过对整体进行模块化分析、编程、综合、仿真及最终下载,完整实现简易音乐器的播放功能。我们知道,与利用单片机来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具与硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。在后面的章节中会详细介绍利用EDA技术实现简易音乐演奏器的过程。第二章 设计实现2.1音乐演奏电路原理先介绍一下硬件电路的发声原理。声音的频谱范围约在几十到几千赫兹

10、,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。2.1.1音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为

11、小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本文中选取750KHz的基准频率。由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时

12、的频率将是原来的1/2。表1中各音符的分频系数就是从750KHz的基准频率二分频得到的375KHz频率基础上计算得到的。由于最大分频系数是1274,故分频器采用11位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为0,即初始值=211-1=2047,此时扬声器不会发声。表2-1 各个音符的频率及其对应的分频系数(基准频率375KHz)音符名频 率(Hz)分频系数计数初值音符名频 率(Hz)分频系数计数初值休止符37500002047中音4796.1784681579低音1294.3491274773中音5882.3534251622低音2330.3961135912中音6989.44

13、63791668低音3370.9210111036中音71136.3633301717低音4386.5989701077高音11175.5493191728低音5394.7379501197高音21353.7902771770低音6495.3767571290高音31512.0972481799低音7555.566751372高音41609.4422331814中音1588.6976371410高音51802.8842081839中音2638.845871480高音62027.0271851862中音3742.5745051542高音72272.72716518822.1.2乐曲节奏的控制本文

14、中的梁祝乐曲,最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要提供一个4Hz的时钟频率即可产生1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。2.1.3乐谱发生器本文将乐谱中的音符数据存储在LPM-ROM中,如“梁祝”乐曲中的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从

15、LPM-ROM中输出一个音符数据。2.1.4乐曲演奏电路原理框图当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了。2.2音乐硬件演奏电路的设计实现音乐硬件演奏电路主要是用VHDL语言来设

16、计,并利用QuartusII软件工具来编译、测试和仿真。2.2.1各个模块的功能简介根据顶层原理图,共分为music模块、地址发生器模块、分频预置数模块、十六进制模块、数控分频模块这五个模块。music模块存放乐曲中的音符数据,地址发生器模块作为music模块中所定制的音符数据ROM的地址发生器,分频预置数模块提供分频预置数即给数控分频模块提供计数初值,十六进制模块对12MHz的时钟脉冲进行16分频,得到750KHz的频率,给数控分频模块提供时钟脉冲。数控分频模块根据分频预置数输出各个音符所对应的频率。2.2.2 music模块Music模块存放乐曲中的音符数据,它是利用LPM-ROM来实现的

17、,将乐谱中相应的音符放在一个连续的地址上。它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。因为1拍的时间定为1秒,提供的是4Hz的时钟频率(即1/4拍的整数倍),则需将这个音符存储在相应次数的连续几个地址上。然后对音符数据进行ROM定制,最后对定制好的ROM文件进行测试和仿真。图2-1 音符数据文件形成ROM中的配置数据(初始化数据)文件的方法如下:在QuartusII中编辑.mif文件。首先在File菜单下的New菜单上选择Memory Initialization File命令,进入编辑器,然后在空格处输入以上格式的数据文件。如46位置处为9,表示46为地址,9为该地址

18、中的数据。这样每读到一个地址,即可输出其相应的数据。文件编辑好后,保存时取文件名为“c.mif”,存盘的路径为“工程文件夹下”。LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY c ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC := 1;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END c;ARCHITECTURE SYN OF c ISSIGNAL su

19、b_wire0: STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (clock_enable_input_a: STRING;clock_enable_output_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;wi

20、dthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL);PORT (clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq BYPASS,clock_enable_output_a = BYPASS,init_file = c.mif,intended_device_family = FLEX,lpm_hint = ENABLE_RUNT

21、IME_MOD=NO,lpm_type = altsyncram,numwords_a = 256,operation_mode = ROM,outdata_aclr_a = NONE,outdata_reg_a = CLOCK0,widthad_a = 8,width_a = 4,width_byteena_a = 1)PORT MAP (clock0 = clock,address_a = address,q_a = sub_wire0);END SYN;定制的基本步骤如下:1)进入QuartusII,选菜单 tools-megawizard plug-in manager,选择“crea

22、t a new”,然后按“next”键,进入图3所示界面。选择LPM-ROM;最后在browse下的栏中键入路径与输出文件名:“f:FPGA_musicc.vhd”,注意后缀vhd小写。2)单击“next”键,将出现图4所示的界面,选择ROM数据位宽度为4,地址线宽为8,即设置此ROM能存储8位二进制数据共64个,然后进入图5所示的窗口。3)通过在图5所示窗口的“browse”钮,找到ROM中的加载文件路径和文件名:“f:FPGA_musicc.mif”,注意ROM元件的inclock是地址锁存时钟。4)在QuartusII中打开已定制的ROM文件。将它设置为工程,并确定目标器件,进行测试。2

23、.3地址发生器模块地址发生器模块设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。每来一个时钟脉冲信号(Clk),8位二进制计数器就计数一次,ROM文件中的地址也就随着递增,音符数据ROM中的音符也就一个接一个连续的取出来了。2.3.1地址发生器的VHDL设计这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒,四四拍的4分音符持续时间。例如,地址发生器在以下的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间。那么相应随着程序4中的计数器按4Hz的时钟频率作加法计数时,即随地址递

24、增时,将从音符数据ROM中将连续取出4个音符“3”通过toneindex3.0端口输向分频预置数模块。这样梁祝乐曲中的音符就一个接一个的通过toneindex3.0端口输向分频预置数模块。程序如下Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity notetabs is Port( clk : in std_logic;Toneindex : out std_logic_vector(3 downto 0); End;Architecture one of notetabs is Com

25、ponent c Port(address: in std_logic_vector(7 downto 0);clock : in std_logic;q : out std_logic_vector(3 downto 0); End component; Signal counter : std_logic_vector(7 downto 0); Begin Cnt8 : process(clk) Begin If counter=11111111then counter=00000000; Elsif(clkevent and clk=1)then countercounter,q=ton

26、eindex,clock=clk);End;2.3.2波形仿真将所编写的地址发生器模块的程序设为工程,选用FLEX10K中的EPF10K10LC84-4为目标芯片进行仿真。仿真结果如下图:图2-2 地址发生器模块的仿真波形图程序的功能是每来一个时钟,地址值递增1,并将这个地址上所存储的音符数据输出。从图中可以看到,当Clk来了一个时钟脉冲,输出相应地址上的音符3, 地址值递增1;接下来的三个时钟脉冲来时,输出也是音符3,地址连续递增3次;再下一个脉冲来时,输出为音符5等等都符合模块中的音符数据文件中的地址/数据表。这个仿真波形图证明了程序实现了地址发生器模块的功能。2.4分频预置数模块分频预置

27、数模块是乐曲简谱码对应的分频预置数查表电路。它提供了每个音符所对应的分频预置数,即给数控分频模块提供计数初值,这里以“梁祝”乐曲为例,列出了在这个乐曲中所用到的13个音符的分频预置数。2.4.1分频预置数模块的VHDL设计在这个模块的VHDL逻辑描述中设置了“梁祝”乐曲中全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的输入频率决定,在此为4Hz。这13个值的输出由程序3的4位输入值index3.0确定。输向程序中index3.0的值又由地址发生器模块的输出toneindex3.0的输出值和持续时间决定。程序如下:Library ieee;Us

28、e 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); high : out std_logic;tone : out std_logic_vector(10 downto 0);End;Architecture one of tonetaba isBegin Search : process(index) Begin Case index is When 0000=tone=11111

29、111111;code=0000;hightone=01100000101;code=0001;hightone=01110010000;code=0010;hightone=10000001100;code=0011;hightone=10010101101;code=0101;hightone=10100001010;code=0110;hightone=10101011100;code=0111;hightone=10110000010;code=0001;hightone=10111001000;code=0010;hightone=11000000110;code=0011;high

30、tone=11001010110;code=0101;hightone=11010000100;code=0110;hightone=11011000000;code=0001;high null; End case; End process;End;End;2.4.2 波形仿真将所编写的分频预置数模块的程序设为工程,仿真选用的目标芯片是EPF10K10LC84-4。仿真结果如下图:图2-3 分频预置数模块的仿真波形图模块的功能是输出各个音符所对应的分频预置数,由上面的仿真波形图可看到当index是“0000”,tone输出为2047,即休止符的分频预置数;当index是“0101”时, to

31、ne输出为1197即低音5的分频预置数;当index是“1111”时, tone输出为1728即高音1的分频预置数等等其它状态时,tone分别输出相应音符的分频预置数。这个仿真波形图证明了程序实现了模块的功能。2.5十六进制模块由其clk端输入一具有较高频率的信号(这里是12MHz)的信号,通过分频后由cout输出。这里是对12MHz的信号进行16分频得到750KHz的信号。750KHz的时钟脉冲信号是给数控分频模块提供时钟信号。2.5.1十六进制模块的VHDL设计用以下的VHDL逻辑描述来实现十六进制模块的功能。Library ieee;use ieee.std_logic_1164.all

32、;use ieee.std_logic_unsigned.all;entity cnt16 is port( clk : in std_logic; cout : out std_logic);end cnt16;architecture shiliu of cnt16 is begin process(clk) variable cqi : std_logic_vector(3 downto 0); begin if cqi1111 then cqi:=0000; elsif clkevent and clk=1 then cqi:=cqi+1; end if; if cqi=1111the

33、n cout=1; else cout=0; end if; end process;end shiliu;2.5.2 波形仿真将程序设为工程,选用目标芯片为EPF10K10LC84-4对程序进行编译和仿真。仿真结果如下图:图2-4 十六进制仿真波形图此模块的功能是对输入的时钟脉冲信号的频率进行16分频。从仿真波形图上可以看到cout输出一个脉冲,此时的Clk刚好来第16个脉冲,即cout的频率是Clk频率的16分之一。可见所编写的程序实现了模块的功能。2.6 数控分频模块音符的频率由数控分频模块获得,这是一个数控分频电路。它是由一个初值可变的加法计数器构成。该计数器的模为2047,当计数器记

34、满时,计数器产生一个溢出信号FULL,此溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表1中的计数初值,就可得到不同音符的发音频率信号。它计满时所需要的计数初值可由下式来表示。计数初值(Tone)=2047-分频系数而分频系数又可有下式来求:分频系数=基准频率/音符的发生频率低音时Tone值小,分频系数大,溢出信号周期长,扬声器发出的声音低,Tone随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与音调Tone成正比。这就是利用数控分频器自动演奏音乐的原理。52.6.1 数控分频模块的VHDL设计其时钟(Clk)端输入的是在十六进制模块里对12

35、MHz的信号进行16分频得到的750KHz,750KHz的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值。此时从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频率。数控分频模块中对Clk输入信号的分频比由11位预置数tone10.0决定。Fout的输出频率将决定每一个音符的音调,这样,分频计数器的预置值tone10.0与Fout的输出频率就有了对应关系。例如在分频预置数模块中若取tone10.0=1036,将发出音符为“3”音的信号频率。程序3如下:library

36、 ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pulse is port ( clk : in std_logic; d : in std_logic_vector(10 downto 0); fout : out std_logic );end;architecture ONE of pulse is signal full : std_logic;begin p_reg: process(clk) variable cnt11,cnt111 : std_logic_vector(10 dow

37、nto 0); begin if clkevent and clk = 1 then cnt111:= 2046 - d; if cnt11 = cnt111 then cnt11 := 00000000000; full = 1; else cnt11:= cnt11 + 1; full = 0; end if; end if; end process p_reg ; p_div: process(full) variable cnt2 : std_logic; begin if fullevent and full = 1 then cnt2 := not cnt2; if cnt2 =

38、1 then fout = 1; else fout = 0; end if; end if; end process p_div ;end;2.6.2 波形仿真将以上程序设为当前工程,选用FLEX10K中的EPF10K10LC84-4为目标芯片对程序进行编译和仿真。仿真结果图如下图。图2-5 数控分频模块的仿真波形图此模块的功能是根据初始值d的值,对输入时钟信号Clk的频率进行分频,得到想要的音符的发声频率。在这个仿真波形图中,d的值设为6c0(即高音1的分频预置数1728),Clk的频率为750KHz,Fout输出的脉冲信号的周期为848.587us(即1178.43Hz),接近高音1的发

39、声频率。由表1中可知高音1的分频系数为319,即对输入时钟Clk进行319次分频就可得高音1的发声频率。因此这个程序实现了模块的功能。2.7分频模块 由于系统需要4hz的频率和25Mhz的输入由于只用一块25M晶振所以需要将25Mhz分频成为4hz,有如下两段代码:-分配器-*库定义、 包定义*library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-*实体定义*Entity clk25Mhz_4khz isgeneric(duty:integer

40、:=3125 );-类属参数说明语句-端口说明 port(clkin_25Mh:instd_logic;-时钟输入clkout_4khz: out std_logic-分频输出 );end clk25Mhz_4khz;-*构造体定义*Architecture div6250 of clk25Mhz_4khz is constant period : integer:=6250;-常数定义,分频数 signal count : integer range 0 to period-1;-信号定义,计数作用 beginprocess(clkin_25Mh)-进程,由clk这个信号启动 beginif

41、 rising_edge(clkin_25Mh) then -上升沿驱动,还有另一种写法,见其他例程 if countduty thenclkout_4khz=0;count=count+1;elsif countperiod-1 then clkout_4khz=1;count=count+1;elsecount=0;end if;end if;end process;end div6250;-分配器-*库定义、 包定义*library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-*实体定义*Entity clk4khz_4hz isgeneric(duty:integer:=500 );-类属参数说明语句

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁