基于fpga的直接数字频率合成器的设计 本科毕业设计

上传人:仙*** 文档编号:29105204 上传时间:2021-09-26 格式:DOC 页数:55 大小:1.14MB
返回 下载 相关 举报
基于fpga的直接数字频率合成器的设计 本科毕业设计_第1页
第1页 / 共55页
基于fpga的直接数字频率合成器的设计 本科毕业设计_第2页
第2页 / 共55页
基于fpga的直接数字频率合成器的设计 本科毕业设计_第3页
第3页 / 共55页
点击查看更多>>
资源描述
河南理工大学毕业设计(论文)说明书毕业设计论文基于FPGA的直接数字频率合成器的设计摘要 在频率合成领域,常用的频率合成技术有直接模拟合成、模拟锁相环、小数分频锁相环等,直接数字频率合成(Direct Digital Frequency Synthesis ,DDFS,简称DDS)是近年来的新的频率合成技术。本文介绍了直接数字频率合成器的基本组成及设计原理,给出了基于FPGA的具体设计方案及编程实现方法。仿真结果表明,该设计简单合理,使用灵活方便,通用性好,可写入各种FPGA芯片,最高可将频率提高100万倍。具有良好的性价比。关键词 直接数字频率合成器(DDS) FPGA Design of direct digital frequency synthesizer based on FPGAAbstract 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 recent 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, convenient and flexible, high universality, writeable various FPGA chip, the highest frequency can be 100 million times. Ratiofor quality to price.Keywords Direct Digital frequency Synthesizer(DDS) FPGA前言在频率合成领域,常用的频率合成技术有直接模拟合成、模拟锁相环、小数分频锁相环等,直接数字频率合成(DDS)是近年来的新的频率合成技术。DDS以稳定度高的参考时钟为参考源,通过精密的相位累加器和数字信号处理,再通过高速D/A变换器产生所需的数字波形,这个数字滤波经过一个模拟滤波器后,得到最终的模拟信号波形。DDS是产生高精度、快速频率变换、输出波形失真小的优先选用技术。随着可编程逻辑器件的飞速发展,使用FPGA(FieldProgrammable Gate Array)设计DDS系统成为一种很好的选择,由于FPGA现场可编程,设计复杂或者简单系统完全从实际需要出发,通过重写RAM/ROM数据,可以做到任意波形输出和动态波形输出,这是其他方法所无法比拟的。本章提出了一种基于FPGA的直接数字频率合成设计方法,并利用比例乘法器,将频率分辨率提高到惊人的程度。目录1 DDS原理11.1 直接模拟(DAS)11.2 间接式频率合成(PLL)11.3 直接数字频率合成(DDS)22 系统设计62.1微控制器接口模块82.2 相位累加寄存器82.3双端口RAM83模块设计与实现153.1 微控制器接口模块153.1.1分频寄存器(FWORD1-FWORD4)163.1.2控制寄存器(DDSCR)163.1.3数据输入寄存器(DATA)173.2 比例乘法器模块313.3 相位累加器模块373.4 双端口RAM模块39致 谢48参考文献49511 DDS原理 顾名思义频率合成技术,就是能从一个高稳定和准确度的标准频率中产生千百万个同一高稳定度和准确度的频率。频率合成技术广泛地应用于通信、导航、雷达、仪器仪表、军事装备等领域、现代的电子系统对频率合成器提出越来越高的要求,主要表现在:转换速度快、频段宽、步进间隔小、杂散小、体积小、重量轻、功耗低等。随着大规模集成电路的发展,频率合成技术日趋完善,目前,主要有以下几种方式。1.1 直接模拟(DAS)直接模拟合成技术是通过对标准参考频率进行加、减、乘、除运算而合成一系列相干频率,其换频率速度主要由电路部件响应速度决定,相位噪声指标也还不错。主要技术问题是杂波干扰,由于直接模拟合成引入了大量的混频器、倍频器、分频器,这些非线性的部件使得杂波抑制相当困难、在实际应用中,这种技术的电路结构比较复杂,体积、重量、成本等方面缺点大大限制其应用、1.2 间接式频率合成(PLL)间接式频率合成技术重要有鉴频器、环路滤波器、压控振荡器、分频器等4个基本部件构成,如下图1-1所示。锁相环是一个相位误差反馈控制系统,它比较输入信号和压控振荡器经分频后输出信号之间的相位差,从而产生误差控制电压来调整压控制振荡器的输出频率,以达到与输入信号倍频的关系。锁相环的频率转换速度与环路滤波器的带宽有关,环路带宽越宽,转换速度越快,而环路带宽又取决于鉴相器频率。才用这种技术产生的频谱较纯,系统体积小、重量轻、成本低、易集成,具有广泛的应用前景。但是,它也有一个致命的缺点,就是在高分辨率情况下,换频速度较慢。分频器鉴相器压控振荡器低通滤波器合成频率参考频率图 1-1 锁相环电路基本结构为了解决高分辨率于高鉴相频率之间的矛盾,可以采用多环技术或者小数分频技术。如果要求分辨率很高,那么采用多环PLL就显得电路结构复杂、成本高、调试困难;而采用小数分频技术,可以轻易解决高分辨率问题,但是小数分频的主要问题是“尾数难抑”,国内外对这方面的研究不少,但是还没有彻底解决。1.3 直接数字频率合成(DDS) DDS的概念最初是有美国学者J.Tierncy,C.M.Rader 和 B.Gold 提出的,它是以全数字技术,从相位概念出发直接合成所需波形的一种新的频率合成技术,典型的DDS系统由相位累加器,波形查找表(ROM/RAM),D/A,低通滤波器(Low Pass Filter简称LPF)构成,如图 1-2所示。低通滤波器m相位累加器波形查找表D/A图 1-2 DDS原理框图图中,m为相位累加器步长,也有资料称为频率控制字,是参考频率,是合成频率。其系统的核心是相位累加器,它由一个累加器和一个n位相位寄存器组成(也可用带有输出锁存的累加器代替),如图1-3所示。每来一个时钟脉冲,相位累加器以步长m累加,其结果作为波形查找表地址。当相位累加器加满量程,就会产生一次溢出,完成一个周期性的动作,这个周期是合成信号的一个周期,换句话说,累加器的溢出频率也就是DDS的合成信号频率。相位累加器的输出数据作为波形查找表地址,进行波形的相位幅值的转换,即可在给定的时间上确定输出波形的抽样幅值,如图1-4所示。n位的寻址RAM/ROM相当于把正弦信号离散成具有个样值的序列,以二进制数值形式存储在个地址单元,按照地址不同输出相应的信号幅值。D/A转换器的作用是把合成的数字波形转换成模拟波形。离散量化幅度序列S(n)经D/A转换后变成了阶梯波S(t),值得注意的是,频率合成系统对D/A转换器的分辨率有一定要求,D/A转换器的分辨率越高,合成的阶梯波S(t)台阶数越多,输出的波形的精度也就越高,减少了量化失真。寄存器累加器步长m参考时钟相位码序列图 1-3 相位累加器波形存储器(ROM/RAM)幅度量化序列数据相位吗序列地址图 1-4 相位幅度变换原理图 低通滤波器的作用不容忽视。对D/A输出的阶梯波S(t)进行频谱分析,可知S(t)中除了主频外,还存在分布在,2两边处的非谐波分量。因此,为了取出主频,必须在D/A转换器的输出端接入截止频率为的低通滤波器。DDS具有以下特点:(1) 频率分辨率高。DDS的频率分辨率在固定时,取决于相位累加器的位数n,只要n足够大,理论上就可以获得相应的分辨率精度,这是传统方法难以实现的。(2) 频率变换速度快。在DDS中,一个频率的建立时间通常取决于滤波器的带宽。影响因素为相位累加器,ROM/RAM的工艺结构,D/A转换器及它信号处理过程中可能产生的时延。其中,信号处理的时延与时钟周期相关。由于DDS中不要相位反馈控制,频率建立及切换快,与频率分辨率,频谱纯度相互独立,明显优于PLL。(3) DDS中相位改变是线性过程。数字相位累加器是优良的线性数字增值发生器。因此,DDS的相位误差主要依赖于时钟的相位特性,相位误差小。另外,DDS的相位是连续变化的,形成的信号具有良好的频谱特性,这是传统的直接频率合成法所无法实现的。(4)输出频率范围宽。 理论上,DDS输出的频率范围在,实际上,考虑到低通滤波器的设计,为,而FPGA的时钟频率可达到100MHz,因此,利用FPGA,可以实现输出频率范围很宽的信号。根据前面的讲述,可以得到一下公式: 其中,是输出波形的周期,n是相位累加器位数,m是相位累加器步长,是输入波形周期。是参考频率,是输出波形频率,是最小分辨率,是最高合成频率。根据奈奎斯特(Nyquist)定理,即采样频率必须不小于被采样信号的最高频率,否则原信号不能被恢复,所以当时,得到最高合成频率,当然,这仅是理论值,实际上与D/A精度、转换速度,滤波网络性能密切相关,一般取,例如,晶振时钟为100MHz时,可知输出合成波频率将出现在较宽频段上。2 系统设计 本章所需要设计的直接数字频率合成系统与前面介绍的DDS原理完全一致。从实现方式上看,有如下特色:(1) 引入8级级联的BCD比例乘法器,将频率分辨率提高100万倍!(2) 利用FPGA内部嵌入式存储单元,在FPGA内部集成了2Kbit容量双端口RAM,降低了硬件难度,提高了系统可靠性。从前面的介绍中可以知道,增加相位累加器的位数n,可以提高频率分辨率,最低输出频率可达Hz、mHz甚至是Hz,即DDS的最低合成频率接近零频。有人计算过,如果为50MHz,那么当n为48位时,其分辨率可达179nHz。但是,增加相位累加器的位数n将使加法算法过于庞大,消耗惊人的FPGA资源。何不从入手,对实现任意可分频,利用降低来换取高分辨率呢?事实证明,使用比例乘法器是可行的,经过8级BCD比例乘法器的分频,分频比达到,例如,晶振频率为100MHz,经过分频可以是Hz任意整数频率,整个分频模块仅消耗65个宏单元。现代FPGA内部集成了存储单元,这些是宝贵的存储资源,通常只有通过利用开发商提供的知识产权核(IP CORE)才能使用,这些知识产权核经过严格的测试和优化,可以在特定器件上发挥最大效能,利用这些模块,就是将优秀EDA开发人员的硬件成果嵌入到自己设计中,缩短了开发时间,提高了效率。本章设计的参数选取如下。由相位累加器位数n=8,存储容量2568=2048 bit,晶振频率为100MHz,可知:(1) 频率分辨率 Hz(2) 最高合成频率MHZ前面讲过,这仅是理论值,实际中与具体电路(D/A,滤波器)有关。(3) 相位步进 本设计按照模块化层次化设计方法,根据结构功能,可以划分出3个功能模块,即微控制器接口模块、相位累加器模块、双端口RAM模块,其连接关系如图2-1所示。图 2-12.1 微控制器接口模块微控制器接口模块向微控制器提供友好,方便的操作接口,MCU可通过片选(CS)、地址选通(AS)、数据选通(DS)、数据总线和地址总线来操作其内部寄存器。微控制器接口模块内部实现了6个寄存器,其中,4个位分频寄存器,1个位控制寄存器,1个位数据输入寄存器。此外,8级比例乘法器组成的分频模块以端口映射的方式例化在控制器接口模块中,对外输出参考时钟频率fclk。2.2 相位累加寄存器相位累加寄存器是系统的核心模块,使用经过分频器分频后的时钟,范围相当宽广。相位累加器输出相位码序列,作为查寻地址送入双端口RAM,相应地,还有读使能和读时钟信号。相位累加步长m可取,n=0,1,2, ,7这里,为了减小失真,一般m取值不超过322.3 双端口RAM 利用ALtera提供的Mega Wizard Plug-In Manager定制了数据线和地址线宽度均为8位,存储容量为2048bit的双端口RAM,独立的两套读/写接口,有兴趣的读者不妨使用Mega Wizard Plug-In Manager定制其他的存储器,看看哪种存储器使用起来最方便。接口信号说明如下:RESET,系统复位,低电平有效;CS,片选信号,低电平有效;AS,地址选通信号,低电平有效;DS,数据选通信号,低电平有效;DATABUS,数据总线;宽度为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_VECTOR(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 DOWNTO 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);- 地址输出,送至双端口RAMaddrout: 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 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;- 读RAM地址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);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,- 经比例乘法器分频后的时钟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_ADDER: 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,表示相位累加器使能,随后,输出波形。读者可能暂时还不能理解整个系统的工作原理,这里只需了解系统的轮廓即可,后面会详细介绍各模块的设计与实现。3 模块设计与实现如前面所述,顶层实体由3个模块构成:微控制器接口模块、相位累加器模块及双端口RAM模块。由8个比例乘法器级联组成的分频器模块以端口定义的形式例化在微控制器模块中,属于后者的子模块,但是由于比例乘法器的本设计中所发挥的作用很大,加之相关资料少之又少,为了加深读者的领悟,决定单独作为一节。3.1 微控制器接口模块微控制器接口向8位、16位、32位微处理器级微控制器提供友好的操作接口,如图3-1所示。其输入引脚前面已经介绍过,这里不再重复。现在,介绍一下输出引脚。图 3-1ddsen:相位累加器使能,有效时为高电平;fclk:分频时钟,作为相位累加器的输入时钟;m:相位累加步长,m=,n=0,1,2, ,7;dataout:数据输出,作为RAM输入数据;addrout:地址输出,作为RAM输入地址;wern:RAM写使能信号;wrclock:RAM写时钟信号。前面已经提到,DDS内部实现了6个寄存器,其中,4个位分频寄存器,1个位控制寄存器,1个位数据输入寄存器,这些寄存器的地址在表3-1中。表 3-1 寄存器地址名称访问属性地址FWORD1Write000FWORD2Write001FWORD3Write010FWORD4Write011DDSCRWrite100DATAWrite1013.1.1 分频寄存器(FWORD1-FWORD4)以FWORD1为例,如表3-2所示。分频寄存器用于存储分频系数,分频模块由8个BCD比例乘法器构成。每一个比例乘法器需要4位二进制码来确定分频系数,48=32 bit,也就是4 byte。FWORD1对应第一级和第二级比例乘法器,FWORD2对应第三级和第四级比例乘法器,以此类推,FWORD4对应第七级和第八级比例乘法器。表3-2 分频寄存器FWORD1BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT03.1.2 控制寄存器(DDSCR)如表3-3所示,控制寄存器只有4位是有意义的,ddsen为相位累加器使能,当其为有效时(逻辑1),相位累加器工作,输出波形。m2、m1、m0是相位累加步长控制字,由于系统设计中规定相位累加步长m=,n=0,1,2, ,7,所以使用3位表示他们足够了,对应的累加步长值如表3-4所示。表 3-3 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DDSEN0000M2M1M0表 3-4 m2m1m0与相位累加步长m对照表m2m1m0m00010012010401181001610132110641111283.1.3 数据输入寄存器(DATA)如表3-5所示,微控制器通过数据输入寄存器缓冲,将数据写入双端口RAM中。复位时,地址为0,每向DATA寄存器写一次数据,地址自动加1,直到地址写满,自动清零,准备下一次写入过程。这意味着可以重复多次写波形数据,从而实现任意波形输出和动态波形输出的功能。表 3-5 控制寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0DATA7DATA6DATA5DATA4DATA3DATA2DATA1DATA0本模块通过片选信号、地址选通信号、数据选通信号来锁定地址和数据,当片选信号CS和地址选通信号AS有效时,根据地址总线内容使能对应寄存器。在检测到数据选通信号DS下降沿后,在系统时钟的上升沿将数据写入选中的寄存器中。微控制器接口模块的状态机如图3-2所示:(1) IDLE。当系统上电或复位后,微控制器接口处于此状态。此状态等待片选信号有效和AS信号的下降沿,当条件满足时,状态机切换到STROBE状态。(2) STROBE。当片选信号有效时,状态机在此状态等待,直到DS信号出现下降时沿,切换到DATA_LAUNCH状态;当片选信号无效时,状态机切换到IDLE状态。(3) DATA_LAUNCH。 此状态只持续1个时钟周期,在时钟上升沿写入数据,返回IDLE状态。图 3-2 微控制器接口状态机文件interface内部的各进程说明:第一个进程延迟信号,目的是检测信号跳变。第二个进程是状态寄存器,同步状态。第三个进程是主状态机。第四个进程是写RAM状态机。第五个进程根据地址译码,使能对应寄存器。第六个进程根据使能,写对应寄存器。描述微控制器接口模块的VHDL程序如下:- 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: 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);- 地址输出,送至双端口RAMaddrout: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);- 双端口RAM写使能wren: OUTSTD_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 DOWNTO 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; CONSTANT 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 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);SIGNAL 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_LOGIC_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: STD_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) THEN as_delay = 1; ds_delay = 1;ELSIF rising_edge(clk) THEN as_delay = 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 (prs_state, as,as_delay,ds,ds_delay,cs)BEGINnext_state - 等待as的下降沿 IF cs = 0 THEN - 片选,低有?IF as = 0 AND as_delay = 1 THEN next_state - 等待ds的下降沿IF cs = 0 THENIF ds = 0 AND ds_delay = 1 THEN next_state = DATA_LAUNCH; ELSIF ds = 1 THEN next_state = STROBE; END IF;ELSE next_state - 回到空闲状态 next_state = IDLE;END CASE;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上升沿wrclock_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 Process- 地址译码Addr_Decode_Proc: PROCESS (reset, clk, addrbus, cs, as)BEGINIF reset = RESET_ACTIVE THEN f1_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_en = 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_en f1_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_en = 0;cr_en = 0;data_en=0; END IF;END IF;END PROCESS;-
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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