版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 PAGE50 / NUMPAGES55毕业设计论文基于FPGA的直接数字频率合成器的设计摘要 在频率合成领域,常用的频率合成技术有直接模拟合成、模拟锁相环、小数分频锁相环等,直接数字频率合成(Direct Digital Frequency Synthesis ,DDFS,简称DDS)是近年来的新的频率合成技术。本文介绍了直接数字频率合成器的基本组成与设计原理,给出了基于FPGA的具体设计方案与编程实现方法。仿真结果表明,该设计简单合理,使用灵活方便,通用性好,可写入各种FPGA芯片,最高可将频率提高100万倍。具有良好的性价比。关键词 直接数字频率合成器(DDS) FPGA Designo
2、fdirectdigitalfrequencysynthesizerbasedonFPGAAbstract In Frequency domain, the common Synthesis technology has Direct simulation, phase lock loop simulation, decimal Frequency and phase lock loop, Direct Digital Frequency Synthesis (as some DDFS, Digital, referred to as spurious bio-synthesis) in re
3、cent years is the new Frequency Synthesis technology. The structure and principles of Direct Digital Frequency Synthesizer is introduced. Also a detailed design and the method of program realization based on FPGA are introduced. The result of simulation shows that the design is simple and feasible,
4、convenient and flexible, high universality, writeable various FPGA chip, the highest frequency can be 100 million times. Ratiofor quality to price.Keywords Direct Digitalfrequency Synthesizer(DDS)FPGA前言在频率合成领域,常用的频率合成技术有直接模拟合成、模拟锁相环、小数分频锁相环等,直接数字频率合成(DDS)是近年来的新的频率合成技术。DDS以稳定度高的参考时钟为参考源,通过精密的相位累加器和数字
5、信号处理,再通过高速D/A变换器产生所需的数字波形,这个数字滤波经过一个模拟滤波器后,得到最终的模拟信号波形。DDS是产生高精度、快速频率变换、输出波形失真小的优先选用技术。随着可编程逻辑器件的飞速发展,使用FPGA(FieldProgrammable Gate Array)设计DDS系统成为一种很好的选择,由于FPGA现场可编程,设计复杂或者简单系统完全从实际需要出发,通过重写RAM/ROM数据,可以做到任意波形输出和动态波形输出,这是其他方法所无法比拟的。本章提出了一种基于FPGA的直接数字频率合成设计方法,并利用比例乘法器,将频率分辨率提高到惊人的程度。目录TOC o 1-3 h z u
6、HYPERLINK l _Toc2630065221DDS原理 PAGEREF _Toc263006522 h 1HYPERLINK l _Toc2630065231.1 直接模拟(DAS) PAGEREF _Toc263006523 h 1HYPERLINK l _Toc2630065241.2 间接式频率合成(PLL) PAGEREF _Toc263006524 h 1HYPERLINK l _Toc2630065251.3 直接数字频率合成(DDS) PAGEREF _Toc263006525 h 2HYPERLINK l _Toc2630065262 系统设计 PAGEREF _Toc
7、263006526 h 6HYPERLINK l _Toc2630065272.1微控制器接口模块 PAGEREF _Toc263006527 h 8HYPERLINK l _Toc2630065282.2 相位累加寄存器 PAGEREF _Toc263006528 h 8HYPERLINK l _Toc2630065292.3双端口RAM PAGEREF _Toc263006529 h 8HYPERLINK l _Toc2630067063模块设计与实现 PAGEREF _Toc263006706 h 15HYPERLINK l _Toc2630067083.1 微控制器接口模块 PAGER
8、EF _Toc263006708 h 15HYPERLINK l _Toc2630067403.1.1分频寄存器(FWORD1-FWORD4) PAGEREF _Toc263006740 h 16HYPERLINK l _Toc2630067593.1.2控制寄存器(DDSCR) PAGEREF _Toc263006759 h 16HYPERLINK l _Toc2630067973.1.3数据输入寄存器(DATA) PAGEREF _Toc263006797 h 17HYPERLINK l _Toc2630072123.2 比例乘法器模块 PAGEREF _Toc263007212 h 31
9、HYPERLINK l _Toc2630072303.3 相位累加器模块 PAGEREF _Toc263007230 h 37HYPERLINK l _Toc2630072863.4 双端口RAM模块 PAGEREF _Toc263007286 h 39 TOC o 1-1 h z u HYPERLINK l _Toc263015834致 PAGEREF _Toc263015834 h 48HYPERLINK l _Toc263015835参考文献 PAGEREF _Toc263015835 h 49DDS原理 顾名思义频率合成技术,就是能从一个高稳定和准确度的标准频率中产生千百万个同一高稳定
10、度和准确度的频率。频率合成技术广泛地应用于通信、导航、雷达、仪器仪表、军事装备等领域、现代的电子系统对频率合成器提出越来越高的要求,主要表现在:转换速度快、频段宽、步进间隔小、杂散小、体积小、重量轻、功耗低等。随着大规模集成电路的发展,频率合成技术日趋完善,目前,主要有以下几种方式。1.1 直接模拟(DAS)直接模拟合成技术是通过对标准参考频率进行加、减、乘、除运算而合成一系列相干频率,其换频率速度主要由电路部件响应速度决定,相位噪声指标也还不错。主要技术问题是杂波干扰,由于直接模拟合成引入了大量的混频器、倍频器、分频器,这些非线性的部件使得杂波抑制相当困难、在实际应用中,这种技术的电路结构比
11、较复杂,体积、重量、成本等方面缺点大大限制其应用、1.2 间接式频率合成(PLL)间接式频率合成技术重要有鉴频器、环路滤波器、压控振荡器、分频器等4个基本部件构成,如下图1-1所示。锁相环是一个相位误差反馈控制系统,它比较输入信号和压控振荡器经分频后输出信号之间的相位差,从而产生误差控制电压来调整压控制振荡器的输出频率,以达到与输入信号倍频的关系。锁相环的频率转换速度与环路滤波器的带宽有关,环路带宽越宽,转换速度越快,而环路带宽又取决于鉴相器频率。才用这种技术产生的频谱较纯,系统体积小、重量轻、成本低、易集成,具有广泛的应用前景。但是,它也有一个致命的缺点,就是在高分辨率情况下,换频速度较慢。
12、分频器鉴相器压控振荡器低通滤波器合成频率参考频率图 1-1 锁相环电路基本结构为了解决高分辨率于高鉴相频率之间的矛盾,可以采用多环技术或者小数分频技术。如果要求分辨率很高,那么采用多环PLL就显得电路结构复杂、成本高、调试困难;而采用小数分频技术,可以轻易解决高分辨率问题,但是小数分频的主要问题是“尾数难抑”,国外对这方面的研究不少,但是还没有彻底解决。1.3 直接数字频率合成(DDS) DDS的概念最初是有美国学者J.Tierncy,C.M.Rader 和 B.Gold 提出的,它是以全数字技术,从相位概念出发直接合成所需波形的一种新的频率合成技术,典型的DDS系统由相位累加器,波形查找表(
13、ROM/RAM),D/A,低通滤波器(Low Pass Filter简称LPF)构成,如图 1-2所示。低通滤波器m相位累加器波形查找表D/A图 1-2 DDS原理框图图中,m为相位累加器步长,也有资料称为频率控制字,是参考频率,是合成频率。其系统的核心是相位累加器,它由一个累加器和一个n位相位寄存器组成(也可用带有输出锁存的累加器代替),如图1-3所示。每来一个时钟脉冲,相位累加器以步长m累加,其结果作为波形查找表地址。当相位累加器加满量程,就会产生一次溢出,完成一个周期性的动作,这个周期是合成信号的一个周期,换句话说,累加器的溢出频率也就是DDS的合成信号频率。相位累加器的输出数据作为波形
14、查找表地址,进行波形的相位幅值的转换,即可在给定的时间上确定输出波形的抽样幅值,如图1-4所示。n位的寻址RAM/ROM相当于把正弦信号离散成具有个样值的序列,以二进制数值形式存储在个地址单元,按照地址不同输出相应的信号幅值。D/A转换器的作用是把合成的数字波形转换成模拟波形。离散量化幅度序列S(n)经D/A转换后变成了阶梯波S(t),值得注意的是,频率合成系统对D/A转换器的分辨率有一定要求,D/A转换器的分辨率越高,合成的阶梯波S(t)台阶数越多,输出的波形的精度也就越高,减少了量化失真。寄存器累加器步长m参考时钟相位码序列图 1-3 相位累加器波形存储器(ROM/RAM)幅度量化序列数据
15、相位吗序列地址图 1-4 相位幅度变换原理图 低通滤波器的作用不容忽视。对D/A输出的阶梯波S(t)进行频谱分析,可知S(t)中除了主频外,还存在分布在,2两边处的非谐波分量。因此,为了取出主频,必须在D/A转换器的输出端接入截止频率为的低通滤波器。DDS具有以下特点:(1) 频率分辨率高。DDS的频率分辨率在固定时,取决于相位累加器的位数n,只要n足够大,理论上就可以获得相应的分辨率精度,这是传统方法难以实现的。(2) 频率变换速度快。在DDS中,一个频率的建立时间通常取决于滤波器的带宽。影响因素为相位累加器,ROM/RAM的工艺结构,D/A转换器与它信号处理过程中可能产生的时延。其中,信号
16、处理的时延与时钟周期相关。由于DDS中不要相位反馈控制,频率建立与切换快,与频率分辨率,频谱纯度相互独立,明显优于PLL。(3) DDS中相位改变是线性过程。数字相位累加器是优良的线性数字增值发生器。因此,DDS的相位误差主要依赖于时钟的相位特性,相位误差小。另外,DDS的相位是连续变化的,形成的信号具有良好的频谱特性,这是传统的直接频率合成法所无法实现的。(4)输出频率围宽。 理论上,DDS输出的频率围在,实际上,考虑到低通滤波器的设计,为,而FPGA的时钟频率可达到100MHz,因此,利用FPGA,可以实现输出频率围很宽的信号。根据前面的讲述,可以得到一下公式:其中,是输出波形的周期,n是
17、相位累加器位数,m是相位累加器步长,是输入波形周期。是参考频率,是输出波形频率,是最小分辨率,是最高合成频率。根据奈奎斯特(Nyquist)定理,即采样频率必须不小于被采样信号的最高频率,否则原信号不能被恢复,所以当时,得到最高合成频率,当然,这仅是理论值,实际上与D/A精度、转换速度,滤波网络性能密切相关,一般取,例如,晶振时钟为100MHz时,可知输出合成波频率将出现在较宽频段上。2 系统设计本章所需要设计的直接数字频率合成系统与前面介绍的DDS原理完全一致。从实现方式上看,有如下特色:(1) 引入8级级联的BCD比例乘法器,将频率分辨率提高100万倍!(2) 利用FPGA部嵌入式存储单元
18、,在FPGA部集成了2Kbit容量双端口RAM,降低了硬件难度,提高了系统可靠性。从前面的介绍中可以知道,增加相位累加器的位数n,可以提高频率分辨率,最低输出频率可达Hz、mHz甚至是Hz,即DDS的最低合成频率接近零频。有人计算过,如果为50MHz,那么当n为48位时,其分辨率可达179nHz。但是,增加相位累加器的位数n将使加法算法过于庞大,消耗惊人的FPGA资源。何不从入手,对实现任意可分频,利用降低来换取高分辨率呢?事实证明,使用比例乘法器是可行的,经过8级BCD比例乘法器的分频,分频比达到,例如,晶振频率为100MHz,经过分频可以是Hz任意整数频率,整个分频模块仅消耗65个宏单元。
19、现代FPGA部集成了存储单元,这些是宝贵的存储资源,通常只有通过利用开发商提供的知识产权核(IP CORE)才能使用,这些知识产权核经过严格的测试和优化,可以在特定器件上发挥最大效能,利用这些模块,就是将优秀EDA开发人员的硬件成果嵌入到自己设计中,缩短了开发时间,提高了效率。本章设计的参数选取如下。由相位累加器位数n=8,存储容量2568=2048 bit,晶振频率为100MHz,可知:(1) 频率分辨率 Hz(2) 最高合成频率MHZ前面讲过,这仅是理论值,实际中与具体电路(D/A,滤波器)有关。(3) 相位步进 本设计按照模块化层次化设计方法,根据结构功能,可以划分出3个功能模块,即微控
20、制器接口模块、相位累加器模块、双端口RAM模块,其连接关系如图2-1所示。图 2-1微控制器接口模块微控制器接口模块向微控制器提供友好,方便的操作接口,MCU可通过片选(CS)、地址选通(AS)、数据选通(DS)、数据总线和地址总线来操作其部寄存器。微控制器接口模块部实现了6个寄存器,其中,4个位分频寄存器,1个位控制寄存器,1个位数据输入寄存器。此外,8级比例乘法器组成的分频模块以端口映射的方式例化在控制器接口模块中,对外输出参考时钟频率fclk。2.2 相位累加寄存器相位累加寄存器是系统的核心模块,使用经过分频器分频后的时钟,围相当宽广。相位累加器输出相位码序列,作为查寻地址送入双端口RA
21、M,相应地,还有读使能和读时钟信号。相位累加步长m可取,n=0,1,2, ,7这里,为了减小失真,一般m取值不超过32双端口RAM利用ALtera提供的Mega Wizard Plug-In Manager定制了数据线和地址线宽度均为8位,存储容量为2048bit的双端口RAM,独立的两套读/写接口,有兴趣的读者不妨使用Mega Wizard Plug-In Manager定制其他的存储器,看看哪种存储器使用起来最方便。接口信号说明如下:RESET,系统复位,低电平有效;CS,片选信号,低电平有效;AS,地址选通信号,低电平有效;DS,数据选通信号,低电平有效;DATABUS,数据总线;宽度为
22、8位;ADDRBUS,地址总线,宽度为3位。顶层实体的VHDL程序如下:- dds.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY dds ISPORT(- 与微控制器接口信号- 全局复位reset: INSTD_LOGIC;- 全局时钟clk: INSTD_LOGIC;- 地址总线addrbus: INSTD_LOGIC_VECTOR(2 DOWNTO 0);- 数据总线databus: INSTD_lOGIC_VEC
23、TOR(7 DOWNTO 0);- 片选cs: INSTD_LOGIC;- 地址选通as: INSTD_LOGIC;- 数据选通ds: INSTD_LOGIC;- 数据输出,送至D/A转换器q: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END dds;ARCHITECTURE rtl of dds IS- 元件说明- 接口模块COMPONENT interfaceport(- 与微控制器接口信号- 全局复位reset: INSTD_LOGIC;- 全局时钟clk: INSTD_LOGIC;- 地址总线addrbus: INSTD_LOGIC_VECTOR(2 DOWNT
24、O 0);- 数据总线databus: INSTD_lOGIC_VECTOR(7 DOWNTO 0);- 片选cs: INSTD_LOGIC;- 地址选通as: INSTD_LOGIC;- 数据选通ds: INSTD_LOGIC;- 与部模块接口信号- DDS扫频使能ddsen: OUTSTD_LOGIC;- 经比例乘法器分频后的时钟fclk: OUT STD_LOGIC;- 步长m: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 数据输出,送至双端口RAMdataout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 地址输出,送至双端口RAMad
25、drout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 双端口RAM写使能wren: OUTSTD_LOGIC;- 双端口RAM写时钟wrclock: OUTSTD_LOGIC);END COMPONENT;- 双端口RAMCOMPONENT ramdpPORT(wren: IN STD_LOGIC;wrclock: INSTD_LOGIC;rden: IN STD_LOGIC;rdclock: INSTD_LOGIC;data: INSTD_LOGIC_VECTOR(7 DOWNTO 0);wraddress:INSTD_LOGIC_VECTOR(7 DOWNTO
26、0);rdaddress:INSTD_LOGIC_VECTOR(7 DOWNTO 0);q: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;- 相位累加器COMPONENT phasesumPORT(- 全局复位reset: INSTD_LOGIC;- 分频时钟fclk: INSTD_LOGIC;- 扫频使能ddsen: INSTD_LOGIC;- 相位累加步长m: INSTD_LOGIC_VECTOR(7 DOWNTO 0);- 读RAM时钟rdclock: OUTSTD_LOGIC;- 读RAM使能rden: OUTSTD_LOGIC;- 读R
27、AM地址rdaddress:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;- 信号说明SIGNAL ddsen: STD_LOGIC;SIGNAL fclk: STD_LOGIC;SIGNAL wren: STD_LOGIC;SIGNAL wrclock: STD_LOGIC;SIGNAL rdclock: STD_LOGIC;SIGNAL rden: STD_LOGIC;SIGNAL dataout: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL addrout: STD_LOGIC_VECTOR(7 DOWNTO 0)
28、;SIGNAL m: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL rdaddress: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN- 元件例化INTER_CONTROL: interfacePORT MAP(- 与微控制器接口信号- 全局复位reset= reset,- 全局时钟clk= clk,- 地址总线addrbus= addrbus,- 数据总线databus= databus,- 片选cs= cs,- 地址选通as= as,- 数据选通ds= ds,- 与部模块接口信号- DDS扫频使能ddsen= ddsen,- 经比例乘法器分
29、频后的时钟fclk= fclk,- 步长m= m,- 数据输出,送至双端口RAMdataout= dataout,- 地址输出,送至双端口RAMaddrout= addrout,- 双端口RAM写使能wren= wren,- 双端口RAM写时钟wrclock= wrclock);- 双端口RAMDP_RAM: ramdpPORT MAP(wren= wren,wrclock= wrclock,rden= rden,rdclock= rdclock,data= dataout,wraddress=addrout,rdaddress=rdaddress,q= q);- 相位累加器PHASE_ADD
30、ER: phasesumPORT MAP(- 全局复位reset= reset,- 分频时钟fclk= fclk,- 扫频使能ddsen= ddsen,- 相位累加步长m= m,- 读RAM时钟rdclock= rdclock,- 读RAM使能rden= rden,- 读RAM地址rdaddress=rdaddress);END rtl;图 2-2是顶层实体仿真波形,由图中可以看到,首先,向地址为000的寄存器写数据00010000,表示将晶振频率10分频,然后向地址为100的寄存器写数据10000000,表示相位累加器使能,随后,输出波形。读者可能暂时还不能理解整个系统的工作原理,这里只需了
31、解系统的轮廓即可,后面会详细介绍各模块的设计与实现。模块设计与实现如前面所述,顶层实体由3个模块构成:微控制器接口模块、相位累加器模块与双端口RAM模块。由8个比例乘法器级联组成的分频器模块以端口定义的形式例化在微控制器模块中,属于后者的子模块,但是由于比例乘法器的本设计中所发挥的作用很大,加之相关资料少之又少,为了加深读者的领悟,决定单独作为一节。3.1 微控制器接口模块微控制器接口向8位、16位、32位微处理器级微控制器提供友好的操作接口,如图3-1所示。其输入引脚前面已经介绍过,这里不再重复。现在,介绍一下输出引脚。图 3-1ddsen:相位累加器使能,有效时为高电平;fclk:分频时钟
32、,作为相位累加器的输入时钟;m:相位累加步长,m=,n=0,1,2, ,7;dataout:数据输出,作为RAM输入数据;addrout:地址输出,作为RAM输入地址;wern:RAM写使能信号;wrclock:RAM写时钟信号。前面已经提到,DDS部实现了6个寄存器,其中,4个位分频寄存器,1个位控制寄存器,1个位数据输入寄存器,这些寄存器的地址在表3-1中。表 3-1 寄存器地址名称访问属性地址FWORD1Write000FWORD2Write001FWORD3Write010FWORD4Write011DDSCRWrite100DATAWrite101分频寄存器(FWORD1-FWORD
33、4)以FWORD1为例,如表3-2所示。分频寄存器用于存储分频系数,分频模块由8个BCD比例乘法器构成。每一个比例乘法器需要4位二进制码来确定分频系数,48=32 bit,也就是4 byte。FWORD1对应第一级和第二级比例乘法器,FWORD2对应第三级和第四级比例乘法器,以此类推,FWORD4对应第七级和第八级比例乘法器。表3-2 分频寄存器FWORD1BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0控制寄存器(DDSCR)如表3-3所示,控制寄存器只有4位是有意义的,ddsen为相位累加器使能,当其为有效时(逻辑1),相位累加器工作,输出波形。m2、m1、m0是相位累加步
34、长控制字,由于系统设计中规定相位累加步长m=,n=0,1,2, ,7,所以使用3位表示他们足够了,对应的累加步长值如表3-4所示。表 3-3 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DDSEN0000M2M1M0表 3-4 m2m1m0与相位累加步长m对照表m2m1m0m0001001201040118100161013211064111128数据输入寄存器(DATA)如表3-5所示,微控制器通过数据输入寄存器缓冲,将数据写入双端口RAM中。复位时,地址为0,每向DATA寄存器写一次数据,地址自动加1,直到地址写满,自动清零,准备下一次写入过程。这意味着可以重
35、复多次写波形数据,从而实现任意波形输出和动态波形输出的功能。表 3-5 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DATA7DATA6DATA5DATA4DATA3DATA2DATA1DATA0本模块通过片选信号、地址选通信号、数据选通信号来锁定地址和数据,当片选信号CS和地址选通信号AS有效时,根据地址总线容使能对应寄存器。在检测到数据选通信号DS下降沿后,在系统时钟的上升沿将数据写入选中的寄存器中。微控制器接口模块的状态机如图3-2所示:(1) IDLE。当系统上电或复位后,微控制器接口处于此状态。此状态等待片选信号有效和AS信号的下降沿,当条件满足时,状态
36、机切换到STROBE状态。(2) STROBE。当片选信号有效时,状态机在此状态等待,直到DS信号出现下降时沿,切换到DATA_LAUNCH状态;当片选信号无效时,状态机切换到IDLE状态。(3) DATA_LAUNCH。 此状态只持续1个时钟周期,在时钟上升沿写入数据,返回IDLE状态。图 3-2 微控制器接口状态机文件interface部的各进程说明:第一个进程延迟信号,目的是检测信号跳变。第二个进程是状态寄存器,同步状态。第三个进程是主状态机。第四个进程是写RAM状态机。第五个进程根据地址译码,使能对应寄存器。第六个进程根据使能,写对应寄存器。描述微控制器接口模块的VHDL程序如下:-
37、interface.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY interface ISport(- 与微控制器接口信号- 全局复位reset: INSTD_LOGIC;- 全局时钟clk: INSTD_LOGIC;- 地址总线addrbus: INSTD_LOGIC_VECTOR(2 DOWNTO 0);- 数据总线databus: INSTD_lOGIC_VECTOR(7 DOWNTO 0);- 片选cs: IN
38、STD_LOGIC;- 地址选通as: INSTD_LOGIC;- 数据选通ds: INSTD_LOGIC;- 与部模块接口信号- DDS扫频使能ddsen: OUTSTD_LOGIC;- 经比例乘法器分频后的时钟fclk: OUT STD_LOGIC;- 步长m: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 数据输出,送至双端口RAMdataout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 地址输出,送至双端口RAMaddrout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 双端口RAM写使能wren: OUTST
39、D_LOGIC;- 双端口RAM写时钟wrclock: OUTSTD_LOGIC);END interface;ARCHITECTURE rtl of interface IS- 元件说明- 8个比例乘法器级联COMPONENT fre_divPORT(- 输入时钟FIN: IN STD_LOGIC;- 分频系数BCD1: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD2: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD3: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD4: INSTD_LOGIC_VECTOR(3 DOWNT
40、O 0);BCD5: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD6: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD7: INSTD_LOGIC_VECTOR(3 DOWNTO 0);BCD8: INSTD_LOGIC_VECTOR(3 DOWNTO 0);- 分频时钟FOUT: OUTSTD_LOGIC);END COMPONENT;- 常数声明CONSTANT RESET_ACTIVE : STD_LOGIC := 0;CONSTANT FWORD1_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 000;CON
41、STANT FWORD2_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 001;CONSTANT FWORD3_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 010;CONSTANT FWORD4_ADDR : STD_LOGIC_VECTOR(2 downto 0) := 011;CONSTANT DDSCR_ADDR: STD_LOGIC_VECTOR(2 downto 0) := 100;CONSTANT DATA_ADDR: STD_LOGIC_VECTOR(2 downto 0) := 101;- 信号声明SIGNAL
42、as_delay: STD_LOGIC;SIGNAL ds_delay: STD_LOGIC;SIGNAL bcd8: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd7: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd6: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd5: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd4: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd3: STD_LOGIC_VECTOR(3 downto 0);S
43、IGNAL bcd2: STD_LOGIC_VECTOR(3 downto 0);SIGNAL bcd1: STD_LOGIC_VECTOR(3 downto 0);- 状态机定义TYPE STATE_TYPE IS (IDLE,STROBE,DATA_LAUNCH);- 状态机信号SIGNAL prs_state, next_state : STATE_TYPE;- 状态机定义TYPE WR_STATE_TYPE IS (wr_idle,wr_high,wr_low);- 状态机信号SIGNAL wr_state : WR_STATE_TYPE;SIGNAL DDSCR_reg: STD_L
44、OGIC_VECTOR(7 downto 0);SIGNAL wrclock_reg: STD_LOGIC;SIGNAL wren_reg: STD_LOGIC;SIGNAL ramaddress: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ramdata: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL fout: STD_LOGIC;- FWORD1寄存器使能SIGNAL f1_en : STD_LOGIC;- FWORD2寄存器使能SIGNAL f2_en: STD_LOGIC;- FWORD3寄存器使能SIGNAL f3_en: S
45、TD_LOGIC;- FWORD4寄存器使能SIGNAL f4_en: STD_LOGIC;- DDSCR 寄存器使能SIGNAL cr_en: STD_LOGIC;- DDSDATA寄存器使能SIGNAL data_en: STD_LOGIC;BEGIN- Delayed Signals Detection Process- 检测延迟信号Delay_Signals_Proc:PROCESS(reset,clk)BEGINIF(reset = RESET_ACTIVE) THENas_delay = 1;ds_delay = 1;ELSIF rising_edge(clk) THENas_de
46、lay = as;ds_delay = ds;END IF;END PROCESS;- Status Register Process- 状态寄存器- 同步状态State_Register_Proc: PROCESS (clk, reset)BEGINIF reset = RESET_ACTIVE THENprs_state = IDLE;ELSIF rising_edge(clk) THENprs_state = next_state;END IF;END PROCESS;- Next Status Logic Process- 次态逻辑Next_Logic_Proc: PROCESS (p
47、rs_state, as,as_delay,ds,ds_delay,cs)BEGINnext_state - 等待as的下降沿IF cs = 0 THEN- 片选,低有?IF as = 0 AND as_delay = 1 THENnext_state - 等待ds的下降沿IF cs = 0 THENIF ds = 0 AND ds_delay = 1 THENnext_state = DATA_LAUNCH;ELSIF ds = 1 THENnext_state = STROBE;END IF;ELSE next_state - 回到空闲状态next_state = IDLE;END CAS
48、E;END PROCESS;- wr state Process- wr信号状态机Wr_Logic_Proc: PROCESS (clk,reset)BEGINIF reset = RESET_ACTIVE THENwren_reg = 0;wrclock_reg = 0;ramaddress = 00000000;wr_state wren_reg = 0;wrclock_reg = 0;IF prs_state = DATA_LAUNCH THENIF data_en = 1 THENwren_reg = 1;ramdata = databus;wr_state - 产生wr上升沿wrcl
49、ock_reg = 1;wr_state wrclock_reg = 0;- 计算RAM地址IF ramaddress = 11111111 THENramaddress = 00000000;ELSEramaddress = ramaddress + 1;END IF;- 回到空闲状态wr_state = wr_idle;END CASE;END IF;END PROCESS;- 写双端口RAM的信号wrclock = wrclock_reg;wren = wren_reg;dataout = ramdata;addrout = ramaddress;- ADDR_DECODE Proces
50、s- 地址译码Addr_Decode_Proc: PROCESS (reset, clk, addrbus, cs, as)BEGINIF reset = RESET_ACTIVE THENf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 1;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 1;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 1;f4_e
51、n = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 1;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 1;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_enf1_en = 0;f2_en = 0;f3_en = 0;f4_en = 0;cr_en = 0;data_en=0;END CASE;ELSEf1_en = 0;f2_en = 0;f3_en = 0;f4_
52、en = 0;cr_en = 0;data_en=0;END IF;END IF;END PROCESS;- register write Process- 写寄存器Reg_Write_Proc: PROCESS(clk, reset, prs_state)BEGIN- 部寄存器复位IF reset = RESET_ACTIVE THEN- 分频系数寄存器bcd1 = 0000;bcd2 = 0000;bcd3 = 0000;bcd4 = 0000;bcd5 = 0000;bcd6 = 0000;bcd7 = 0000;bcd8 = 0000;- 控制寄存器DDSCR_reg = 000000
53、00;- 等待时钟上升沿ELSIF rising_edge(clk) THENIF (prs_state = DATA_LAUNCH) THEN- FWORD1寄存器使能IF f1_en = 1 THENbcd1 = databus(7 DOWNTO 4);bcd2 = databus(3 DOWNTO 0);END IF;- FWORD2寄存器使能IF f2_en = 1 THENbcd3 = databus(7 DOWNTO 4);bcd4 = databus(3 DOWNTO 0);END IF;- FWORD3寄存器使能IF f3_en = 1 THENbcd5 = databus(7
54、 DOWNTO 4);bcd6 = databus(3 DOWNTO 0);END IF;- FWORD4寄存器使能IF f4_en = 1 THENbcd7 = databus(7 DOWNTO 4);bcd8 = databus(3 DOWNTO 0);END IF;- DDSCR寄存器使能IF cr_en = 1 THENDDSCR_reg = databus;END IF;END IF;END IF;END PROCESS;ddsen = DDSCR_reg(7);- m是相位累加器的计数步长- 000 - 1001 - 2- 010 - 4 011 - 8- 100 - 16 101
55、 - 32- 110 - 64 111 - 128WITH DDSCR_reg(2 DOWNTO 0) SELECTm clk,- 分频系数BCD1= bcd1,BCD2= bcd2,BCD3= bcd3,BCD4= bcd4,BCD5= bcd5,BCD6= bcd6,BCD7= bcd7,BCD8= bcd8,- 分频时钟FOUT= fout);- 作为相位累加器的时钟fclk = fout;END rtl;程序的仿真波形如图3-3所示,首先,系统复位,想FWORD1(地址为000)写数据1。作用是设置分频器系数位100:1,可以看到下面的fclk信号输出与系统时钟clk之间的关系;然后,
56、向DDSCR(地址为100)写数据3,查表3-4可知,设置相位累加系数m=8;最后,向数据输入寄存器DATA(地址101)连续写数据,1,2,可以看到写使能信号wren,写时钟信号wrclock以与数据输出、地址输出信号的波形。图 3-3 微控制器接口模块的仿真波形比例乘法器模块比例乘法器分为两种,一种是BCD比例乘法器(CD4527,J690),另一种是二进制比例乘法器(CD4089)。BCD比例乘法器是由BCD输入数控制输出脉冲序列个数,所谓BCD码指4位二进制表示1位十进制数,对应关系如表3-6。输出脉冲序列的多少取决于一个可变的数X(BCD码或二进制码)与运算系数和输入时钟的运算关系,
57、表示为: 因而输出脉冲数总是比小或是等于,式中的是运算系数,K值在BCD比例乘法器中为10,在二进制比例乘法器中为16,n为运算级数。在并行连接方式时,对于第一级比例乘法器n为1。依次,后面几级分别为2,3,4。 这种电路具有用积木式产生很宽围的数字频率功能,在频率系统中广泛应用,当与可逆计数器与一些控制逻辑连用时,可以实现乘法、加法、减法、开方、平方以与解代数方程和微分方程、积分等功能。表3-6 BCD码与十进制数对应关系BCD码十进制数00000000110010200113010040101501106011171000810019图3-4为J690和CD4527比例乘法器的逻辑图。CD
58、4527主要由两部分组成,即BCD计数器和比例输出控制电路组成。BCD计数器采用5421码编码,计数器中的技术单元采用T型触发器。对计数器的逻辑结构用卡诺图进行分析,并考虑时禁止输入端INHin,可以得到每个T型触发器的控制逻辑表达式:图中INHin是时钟脉冲禁止输入端,当INHin为1时,禁止时钟激励计数器计数;为0时允许时钟激励计数器计数。SET9是置“9”端,在SET9为1时,计数器置9(1001)。ST端为选通端,在ST为0时允许脉冲输出。CS是扩展级联端,不用时为0,扩展时将前一级比例乘法器输出OUT送入下一级的扩展级联端CS,当上一级比例乘法器A的输出端送出一个脉冲给下一级比例乘法
59、器B的扩展级联端时,这个脉冲将传至比例乘法器B的输出端,也就是说比例乘法器B的输出端OUT输出的脉冲,除了它本身的输出脉冲外,还包含了一级比例乘法器输出的脉冲序列,更进一步说,如果比例乘法器B还有下一级,即比例乘法器C的话,C通过扩展级联端与B级联,那么比例乘法器C的输出脉冲个数是A、B、C输出脉冲个数之和。“9”为计数器的译码输出,有效时输出1;INHout端是禁止输出端,也是计数器的“9”译码输出,有效时为输出0。它同时还受到禁止输入端INHin的控制,实际上,“9”端与INHin端的点位始终是相反的,可以把INHout看作是“9”的反向输出;OUT受扩展级联输入CS的控制,而NOUT端不
60、受CS控制,即NOUT的输出不包含扩展级联端的脉冲,两者有这种区别。应该注意到,CC4527(J690)电路中的计数器是在输入时钟脉冲Fin的上升沿计,而电路的输出端OUT在输入时钟的下降沿同步输出。图 3-4 BCD比例乘法器CD4527下面举2个BCD比例乘法器CD4527级联时的例子,如图3-5所示。图3-5 2个BCD比例乘法器CD4527级联设。则 第一级比例乘法器输出端OUT取得的输出脉冲数,并将此输出送入第二级比例乘法器的扩展级联端,因此在第二级比例乘法器的输出端输出的脉冲数包含了从扩展级联端输入的个脉冲,和该位自身的比例输出个脉冲两部分。后一部分的输出是由于第二级比例乘法器的禁
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理咨询师助理意向书合同
- 垫资施工合同防腐蚀工程
- 地下垃圾处理打井施工合同样本
- 汽车专卖店广告牌租赁合同范本
- 地下停车场班组施工合同
- 离婚协议书中情感调适调整
- 出纳临时聘用协议兼职
- 教育机构货车司机聘用协议
- 乡村餐饮店会计岗位聘用协议
- 房屋买卖改造合同范例
- 动力系统故障应急预案
- 30题调度员岗位常见面试问题含HR问题考察点及参考回答
- 卤味熟食策划方案
- 国家开放大学电大《刑法学》期末题库及答案
- 《能源概论》课件
- 计划运营培训课件
- 石油形成过程科普知识讲座
- 辅警心理健康知识讲座
- 吸附计算完整
- 无人机在农业领域的实践应用与发展前景
- 《综合实践一-用多媒体介绍湖北名人课件》小学信息技术华中科大课标版五年级下册课件2919
评论
0/150
提交评论