基于FPGA的任意倍数分频及设计文献综述
- 格式:doc
- 大小:38.00 KB
- 文档页数:6
毕业设计开题报告电子信息工程基于单片机和FPGA的任意频率发生器设计1前言单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可......用它来做一些控制电器一类不是很复杂的工作足矣了。
我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!......它主要是作为控制部分的核心部件。
[9-13]直接数字频率合成(简称DDS)是一种新的频率合成技术,同传统的直接频率合成(DS),锁相环间接频率合成(PLL)方法相比,它具有很多优点,如频率切换时间短,频率分辨率高,相位变化连续,容易实现对输出信号的多种调制等。
近几年来,疙瘩芯片制造厂商都继续推出各种各样的高性能,多功能的DDS 专用芯片,为电路设计者提供了多种选择,满足了工程的实际需要。
但DDS专用芯片确实固定的,使用不灵活。
二用FPGA设计的DDS电路只需要改变FPGA 中的ROM数据,DDS就可以产生任意波形,而且FPGA芯片要比专用DDS专用芯片便宜很多倍。
FPGA分频与倍频的简单总结(涉及⾃⼰设计,调⽤时钟IP核,调⽤MMCM原语模块)原理介绍1、分频FPGA设计中时钟分频是重要的基础知识,对于分频通常是利⽤计数器来实现想要的时钟频率,由此可知分频后的频率周期更⼤。
⼀般⽽⾔实现偶数系数的分频在程序设计上较为容易,⽽奇数分频则相对复杂⼀些,⼩数分频则更难⼀些。
1)偶分频系数=时钟输⼊频率/时钟输出频率=50MHz/5MHz=10,则计数器在输⼊时钟的上升沿或者下降沿从0~(10-1)计数,⽽输出时钟在计数到4和9时翻转。
2)奇分频系数=50MHz/10MHz=5,则两个计数器分别在输⼊时钟的上升沿和下降沿从0~ (5-1)计数,⽽相应的上升沿和下降沿触发的输出时钟在计数到1和4时翻转,最后将两个输出时钟进⾏或运算从⽽得到占空⽐为50%的5分频输出时钟。
下图所⽰为50MHz输⼊时钟进⾏10分频和5分频的仿真波形2、倍频两种思路:PLL(锁相环)或者利⽤门延时来搭建注意:此仿真是利⽤FPGA内部电路延迟来实现的倍频需要在后仿真下才能看到波形,在⾏为仿真下⽆法得到输出波形。
⼀、时钟IP的分频倍频相关参数说明输⼊时钟:clk_in1(125MHz)输出时钟:clk_out1(50MHz),clk_out2(74.25MHz)则VCO Freq=1262.5MHz=clk_in1*CLKFBOUT_MULT_F/DIVCLK_DIVIDE=125*50.5/5clk_out1(50MHz)=VCO_Freq/Divide=1265.5/25.250clk_out2(74.25MHz)=VCO_Freq/Divide=1265.5/17⼆、MMCME4_ADVMMCME4是⼀种混合信号块,⽤于⽀持频率合成、时钟⽹络设计和减少抖动。
基于相同的VCO频率,时钟输出可以有单独的分频、相移和占空⽐。
此外,MMCME4还⽀持动态移相和分数除法(1)Verilog 初始化模板MMCME4_ADV #(.BANDWIDTH("OPTIMIZED"), // Jitter programming.CLKFBOUT_MULT_F(5.0), // Multiply value for all CLKOUT.CLKFBOUT_PHASE(0.0), // Phase offset in degrees of CLKFB.CLKFBOUT_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKIN1_PERIOD(0.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz)..CLKIN2_PERIOD(0.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz)..CLKOUT0_DIVIDE_F(1.0), // Divide amount for CLKOUT0.CLKOUT0_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT0.CLKOUT0_PHASE(0.0), // Phase offset for CLKOUT0.CLKOUT0_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT1_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT1_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT1_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT1_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT2_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT2_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT2_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT2_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT3_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT3_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT3_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT3_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT4_CASCADE("FALSE"), // Divide amount for CLKOUT (1-128).CLKOUT4_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT4_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT4_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT4_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT5_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT5_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT5_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT5_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).CLKOUT6_DIVIDE(1), // Divide amount for CLKOUT (1-128).CLKOUT6_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT outputs (0.001-0.999)..CLKOUT6_PHASE(0.0), // Phase offset for CLKOUT outputs (-360.000-360.000)..CLKOUT6_USE_FINE_PS("FALSE"), // Fine phase shift enable (TRUE/FALSE).COMPENSATION("AUTO"), // Clock input compensation.DIVCLK_DIVIDE(1), // Master division value.IS_CLKFBIN_INVERTED(1'b0), // Optional inversion for CLKFBIN.IS_CLKIN1_INVERTED(1'b0), // Optional inversion for CLKIN1.IS_CLKIN2_INVERTED(1'b0), // Optional inversion for CLKIN2.IS_CLKINSEL_INVERTED(1'b0), // Optional inversion for CLKINSEL.IS_PSEN_INVERTED(1'b0), // Optional inversion for PSEN.IS_PSINCDEC_INVERTED(1'b0), // Optional inversion for PSINCDEC.IS_PWRDWN_INVERTED(1'b0), // Optional inversion for PWRDWN.IS_RST_INVERTED(1'b0), // Optional inversion for RST.REF_JITTER1(0.0), // Reference input jitter in UI (0.000-0.999)..REF_JITTER2(0.0), // Reference input jitter in UI (0.000-0.999)..SS_EN("FALSE"), // Enables spread spectrum.SS_MODE("CENTER_HIGH"), // Spread spectrum frequency deviation and the spread type .SS_MOD_PERIOD(10000), // Spread spectrum modulation period (ns).STARTUP_WAIT("FALSE") // Delays DONE until MMCM is locked)MMCME4_ADV_inst (.CDDCDONE(CDDCDONE), // 1-bit output: Clock dynamic divide done.CLKFBOUT(CLKFBOUT), // 1-bit output: Feedback clock.CLKFBOUTB(CLKFBOUTB), // 1-bit output: Inverted CLKFBOUT.CLKFBSTOPPED(CLKFBSTOPPED), // 1-bit output: Feedback clock stopped.CLKINSTOPPED(CLKINSTOPPED), // 1-bit output: Input clock stopped.CLKOUT0(CLKOUT0), // 1-bit output: CLKOUT0.CLKOUT0B(CLKOUT0B), // 1-bit output: Inverted CLKOUT0.CLKOUT1(CLKOUT1), // 1-bit output: CLKOUT1.CLKOUT1B(CLKOUT1B), // 1-bit output: Inverted CLKOUT1.CLKOUT2(CLKOUT2), // 1-bit output: CLKOUT2.CLKOUT2B(CLKOUT2B), // 1-bit output: Inverted CLKOUT2.CLKOUT3(CLKOUT3), // 1-bit output: CLKOUT3.CLKOUT3B(CLKOUT3B), // 1-bit output: Inverted CLKOUT3.CLKOUT4(CLKOUT4), // 1-bit output: CLKOUT4.CLKOUT5(CLKOUT5), // 1-bit output: CLKOUT5.CLKOUT6(CLKOUT6), // 1-bit output: CLKOUT6.DO(DO), // 16-bit output: DRP data output.DRDY(DRDY), // 1-bit output: DRP ready.LOCKED(LOCKED), // 1-bit output: LOCK.PSDONE(PSDONE), // 1-bit output: Phase shift done.CDDCREQ(CDDCREQ), // 1-bit input: Request to dynamic divide clock.CLKFBIN(CLKFBIN), // 1-bit input: Feedback clock.CLKIN1(CLKIN1), // 1-bit input: Primary clock.CLKIN2(CLKIN2), // 1-bit input: Secondary clock.CLKINSEL(CLKINSEL), // 1-bit input: Clock select, High=CLKIN1 Low=CLKIN2.DADDR(DADDR), // 7-bit input: DRP address.DCLK(DCLK), // 1-bit input: DRP clock.DEN(DEN), // 1-bit input: DRP enable.DI(DI), // 16-bit input: DRP data input.DWE(DWE), // 1-bit input: DRP write enable.PSCLK(PSCLK), // 1-bit input: Phase shift clock.PSEN(PSEN), // 1-bit input: Phase shift enable.PSINCDEC(PSINCDEC), // 1-bit input: Phase shift increment/decrement.PWRDWN(PWRDWN), // 1-bit input: Power-down.RST(RST) // 1-bit input: Reset);(2)本实验仿真所⽤参数配置说明及部分端⼝调⽤1、参数配置说明本实验通过输⼊时钟CLKIN1(150MHz),实现输出反馈时钟CLKFBOUT(150MHz)、输出时钟CLKOUT0(74.25MHz)、输出时钟CLKOUT1(74.25MHz)、输出时钟CLKOUT2(59.4MHz)、输出时钟CLKOUT3(49.5MHz)。
基于FPGA分频器的设计摘要:分频器是数字系统设计中的基本电路,在复杂数字逻辑电路设计中,根据不同设计的需要,会遇到偶数分频、奇数分频、半整数分频等,有时要求等占空比,也有要求非等占空比。
在同一个设计中有时要求多种形式的分频,通常由计数器或计数器的级联构成各种形式的偶数分频和奇数分频,实现较为简单,但是对半整数分频实现较为困难。
设计师希望有一种比较方便实用的设计方法,根据情况的需要,在实验室就能设计分频器并且可以马上检测使用,只需要更改频率系数而不修改其他器件或是电路板。
因此,本文利用verilog硬件描述语言,通过开发平台,使用FPGA,设计了一种能满足上述情况的通用分频器。
只要在分频器的输入端输入相应的分频系数,就可以得到所需的频率。
关键词:分频器;偶数;奇数;半整数;分频系数;FPGASeparate frequency inverter based on FPGA designAbstract:Points are the frequency of an digital system design, the basic circuit in complex digital logic circuit design, according to different design needs, will meet even points frequency, an odd number of points frequency, half integer points frequency etc, sometimes require 390v, such as the request 390v. In the same design sometimes require multiple forms of points frequency, usually by a counter or counter cascade constitute various forms of the frequency and the odd points even points, to achieve comparatively simple frequency, but half-and-half integer points frequency division frequency realize more difficult. Designers hope to have a more convenient and practical design methods, according to the needs of the laboratory condition, can design points frequency device and can immediately detection using, only need to change frequency coefficients and not modify other device or circuit board. Therefore, this paper use verilog hardware description language, through the development platform, use the FPGA, design a kind of can meet the above situation of practical points frequency device. As long as the frequency of an in points corresponding points input input frequency coefficients, can get frequency required.Keywords: Points, frequency, manometers, Even, Odd, Half an integer, Points frequency coefficients, FPGA目录第一章绪论 (1)1.1 FPGA简介 (1)1.2 选题的意义和目的 (2)1.3 国内外应用现状及研究现状 (3)1.3.1 应用现状 (3)1.3.2 研究现状 (4)1.4 本文组织结构 (5)第二章几类分频器的设计及其分频原理 (7)2.1 偶数倍分频 (7)2.1.1 分频原理 (7)2.1.2 软件简介 (7)2.1.3 软件仿真 (7)2.2 奇数倍分频 (9)2.2.1 分频原理 (9)2.2.2 软件仿真 (10)2.3 半整数分频 (12)2.4 小数分频器 (13)2.4.1 积分分频器 (13)2.4.2 累加器分频 (14)2.4.3 小数分频器的应用 (15)2.5 本章小结 (17)第三章通用分频器的设计 (18)3.1 设计方案 (18)3.1.1 设计方案一 (18)3.1.2 设计方案二 (18)3.2 系统设计 (19)3.2.1 电路工作流程图及部分程序 (20)3.2.2时钟输出流程图及部分程序 (23)3.3 通用分频器的应用 (25)3.3.1 等占空比的奇数分频器 (25)3.3.2 任意占空比的奇、偶数分频 (25)3.3.3 等占空比的偶数分频器 (26)3.3.4 半整数分频器 (26)3.4 本章小结 (26)结论 (27)致谢 (28)参考文献 (29)第一章绪论1.1 FPGA简介FPGA是现场可编程门阵列的简称,是可编程逻辑器件(PLD)问世以来的第四代产品,适合于时序、组合等逻辑电路的应用。
FPGA结课论文学院:专业:班级:姓名:目录1、引言 (3)2、2N分频器的设计 (3)3、任意整数N分频器的设计 (4)4、半整数分频器设计 (5)5、由分频方法直接获得秒脉冲的设计方法 (6)6、总结 (7)基于FPGA的分频器设计)1 引言分频器是数字系统中常用来对某个给定时钟的频率进行再分频,以得到所需之各种信号频率的常用基本电路之一。
广泛应用于工业控制中的变频需要,电声技术的转化等。
基于FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供的锁相环电路,如 ALTERA 提供的 PLL(Phase Locked Loop),Xilinx 提供的 DLL(Delay Locked Loop);二是使用硬件描述语言,如VHDL、Verilog HDL 等。
使用锁相环电路有许多优点,如可以实现倍频、相位偏移、占空比可调等。
但 FPGA 提供的锁相环个数极为有限,不能灵活满足使用要求。
而用硬件描述语言实现的分频电路消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、灵活可编程等优点。
2 2N分频器的设计分频系数为2N的分频器的实现最简单,可采用二进制加或减法计数器的设计来实现。
计数器可直接从Altera公司提供的宏功能模块LPM中调用,也可文本输入或原理图输入方式构成。
以一个4bit的二进制加法计数器为例进行分析说明。
以原理图输入方式设计四位二进制加法计数器如图1所示,经编译、时序模拟后得到仿真波形如图2所示:图1 四位二进制加法计数器图2 四位二进制加法计数器仿真波形从仿真波形可以看出分别由Q0、Q1、Q2、Q3得到的脉冲波形频率正是时钟信号CP的1/2、1/4、1/8和1/16。
亦即分频系数是2、4、8和16。
假设FPGA的CP所接石英晶体是20MHz,则不同引脚所得到的频率分别为10 MHz、5 MHz、2.5 MHz和1.25 MHz。
由上讨论推广可知,N位二进制计数器输出端的每一位输出信号其占空比为50%,从低到高排列分频系数正好为21、22、23、24……。
邵阳学院课程设计第1章绪论1.1 课题背景当今社会是数字化的社会,是数字集成电路广泛应用的社会。
数字集成电路本身在不断地进行更新换代。
它由早期的电子管、晶体管、小中规模集成电路,发展到超大规模集成电路( VLSIC ,几万门以上)以及许多具有特定功能的专用集成电路。
但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。
系统设计师们更愿意自己设计专用集成电路(ASIC )芯片,而且希望ASIC 的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC 芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列( FPGA)和复杂可编程逻辑器件(CPLD)。
1.2 研究的目的及意义目的是一方面使我们能够进一步理解课程内容,基本掌握 EDA 技术和系统知识,增加集成电路应用知识,培养我们的实际动手能力以及分析、解决问题的能力。
另一方面也可以是我们更好地巩固和加深对基础知识的理解,学会设计中小型数字系统的方法,独立完成调试过程,增强我们理论联系实际的能力,提高电路分析和设计能力。
通过实践引导我们在理论指导下有所创新,为专业课的学习和日后工程实践奠定基础。
通过设计,一方面可以加深我们对理论知识的理解,另一方面也可以提高我们考虑问题的全面性,将理论知识上升到一个实践的阶段。
1.3EDA的发展历程及应用1.3.1 EDA 的发展历程随着集成电路和计算机技术的飞速发展,EDA (Electronic Design Automation)应运而生,它是一种高级、快速、有效的电子设计自动化技术。
EDA 技术以计算机为工具,代替人完成数字系统的逻辑综合、布局布线和设计仿真等工作。
设计者只需要完成对系统功能的描述,然后就可以由计算机来处理这些描述,得到设计结果,修改设计也很方便。
利用EDA 工具进行设计,可以极大的提高设计效率。
EDA 技术的发展经历了一个由浅到深的过程。
基于FPGA任意倍数分频器设计目录1 绪论 (1)1.1课题分析 (1)1.2FPGA概述 (2)1.3VHDL语言和QUARTUS II简介 (4)1.3.1 VHDL语言简介 (4)1.3.2 QUARTUS II简介 (6)2 分频基本原理 (8)2.1等占空比偶数分频方法 (8)2.2等占空比的奇数分频方法 (8)2.3分数分频方法 (9)2.4小数分频方法 (9)2.5任意倍数分频器 (10)3 任意倍数分频器设计 (12)3.1设计思想 (12)3.2顶层框图设计 (13)3.3顶层文件设计 (13)3.4 模块设计 (14)3.4.1 偶数分频模块的设计 (14)3.4.2 奇数分频模块的设计 (15)3.4.3 半整数模块设计 (16)3.4.4 占空比可调的分频模块设计 (17)3.4.5 小数分频模块设计 (18)3.4.6 encoder_35模块的设计 (19)3.4.7 led模块的设计 (20)3.4.8 mux51模块的设计 (21)结论 (23)致 (24)参考文献 (25)附录A VHDL源程序 (26)附录A1:偶数分频实现的程序 (26)附录A2奇数分频实现的程序 (28)附录A3半整数分频实现的程序 (30)附录A4占空比可调的分频实现的程序 (32)附录A5小数分频实现的程序 (34)附录A6 ENCODER_35模块实现的程序 (42)附录A7 LED的实现程序 (43)附录A8 MUX51模块的实现程序 (47)附录B顶层文件设计原理图 (48)1 绪论1.1 课题分析随着电子技术的高速发展,FPGA/CPLD以其高速、高可靠性、串并行工作方式等突出优点在电子设计中受到广泛的应用,而且代表着未来EDA设计的方向。
FPGA/CPLD的设计采用了高级语言,如VHDL语言AHDL语言等,进一步打破了软件与硬件之间的界限,缩短了产品的开发周期。
所以采用先进的FPGA/CPLD取代传统的标准集成电路、接口电路已成为电子技术发展的必然趋势[1]。
文献综述1概述伴随着社会经济不断发展和人们生活水平的不断提高以及全社会对交通运输需求的日益增加,城市的交通问题越来越引起人们的关注。
交通运输对经济迅速发展的制约作用不同程度地存在于各个国家和地区,怎样解决交通拥挤和堵塞现象就成了各国政府较为棘手的难题之一。
作为现代城市中交通控制系统的重要组成部分,城市交通控制系统使用的计算机管理系统来完成城市交通量数据的检测与交通信号灯控制部分。
在城市交通中,交通灯信号是管理交通网络的重要组成元素。
近年来城市交通车流量大幅度增长,给交通带来巨大压力。
如何提高十字路口的通行效率,对缓解交通阻塞问题具有十分重要的现实意义。
传统的交通灯控制系统多数由单片机或PLC实现,本文介绍的是基于EDA 技术设计交通灯系统的一种方案。
EDA技术的一个重要特征就是使用硬件描述语言来完成系统的设计文件,应用VHDL的数字电路实验降低了数字系统的设计难度,这在电子设计领域已得到设计者的广泛采用。
本设计就是针对交通信号灯控制器的设计问题,提出了基于VHDL语言的交通信号灯系统的硬件实现方法。
通过对系统进行结构分析,采用了层次化的设计方法,给出了各个模块的VHDL程序,并且利用QuartusⅡ对应用程序进行了仿真,并给出了相应的仿真结果。
在用VHDL语言进行电路设计时,应充分认识到VHDL语言的特点,从设计思想、语句运用及描述方法上等多方面对电路进行优化设计。
通过电路优化设计,可以使用规模更小的可编程逻辑芯片,从而降低系统成本。
2设计过程设计采用自上而下的设计方法,首先根据交通灯控制系统的功能要求,将功能要求转化成系统状态图,然后再对系统进行模块的划分、定义各个模块的I/O端口及具体功能,本系统共有7个模块,分别是分频模块和ferquencyl、计数模块、控制模块、分位模块、显示模块、声音模块,然后对各个模块用VHDL 语言编程、编译及功能仿真,检查所编程序是否正确。
如果正确则生成图形文件供顶层文件调用;如果出现错误。
基于FPGA的分频器设计FPGA(Field-Programmable Gate Array)是一种可编程逻辑设备,它可以在设计过程中根据需求进行编程和配置,实现不同的功能。
在FPGA中实现分频器是一个常见的应用,本文将介绍基于FPGA的分频器设计。
1.分频器的原理分频器用于将输入信号的频率减小到所需的频率。
它包含一个计数器和一个比较器。
计数器根据一个时钟信号进行计数,当达到一个预设值时,比较器会产生一个输出信号,作为分频器的输出。
在FPGA中实现分频器,首先需要选择适当的时钟源作为输入信号。
FPGA通常有一个高频时钟源,我们可以利用这个时钟源生成所需的低频信号。
3.设计步骤(1)确定时钟源:选择一个合适的高频时钟信号作为输入信号。
(2)选择分频器类型:根据需求选择分频器的类型,常见的有可控分频器和固定分频器。
(3)设置分频值:根据需要将输入信号的频率降低到所需的频率,设置分频值。
(4)设置计数器:在FPGA中,使用计数器来实现分频器。
根据所需的分频值,设置计数器的初始值和比较值。
(5)设计比较器:比较器用于判断计数器是否达到比较值,如果达到则产生一个输出信号。
(6)输出信号:比较器产生的输出信号作为分频器的输出信号,可以将其连接到需要的模块或引脚。
4.分频器设计实例下面以一个简单的可控分频器为例进行分频器的设计。
假设需要将输入信号的频率分频为输入频率的1/8,即输入频率为100MHz,输出频率为12.5MHz。
根据步骤,我们可以选择一个100MHz的时钟源作为输入信号。
然后,设置分频值为8,计数器的初始值为0,比较值为7(8-1)。
接下来,在FPGA中使用一个8位计数器来实现分频器。
计数器的输出连接到一个8位比较器,比较器的输出即为分频器的输出信号。
最后,将输出信号连接到需要的模块或引脚,以完成分频器的设计。
5.总结本文介绍了基于FPGA的分频器设计。
分频器是将输入信号的频率降低到所需频率的设备,可通过在FPGA中实现计数器和比较器来完成。
基于FPGA任意倍数分频器设计设计基于FPGA任意倍数分频器设计目录1 绪论 (1)1.1课题分析 (1)1.2FPGA概述 (2)1.3VHDL语言和QUARTUS II简介 (4)1.3.1 VHDL语言简介 (4)1.3.2 QUARTUS II简介 (6)2 分频基本原理 (8)2.1等占空比偶数分频方法 (8)2.2等占空比的奇数分频方法 (8)2.3分数分频方法 (9)2.4小数分频方法 (9)2.5任意倍数分频器 (10)3 任意倍数分频器设计 (12)3.1设计思想 (12)3.2顶层框图设计 (13)3.3顶层文件设计 (13)3.4 模块设计 (14)3.4.1 偶数分频模块的设计 (14)3.4.2 奇数分频模块的设计 (15)3.4.3 半整数模块设计 (16)3.4.4 占空比可调的分频模块设计 (17)3.4.5 小数分频模块设计 (18)3.4.6 encoder_35模块的设计 (19)3.4.7 led模块的设计 (20)3.4.8 mux51模块的设计 (21)结论 (23)致谢 (24)参考文献 (25)附录A VHDL源程序 (26)附录A1:偶数分频实现的程序 (26)附录A2奇数分频实现的程序 (28)附录A3半整数分频实现的程序 (30)附录A4占空比可调的分频实现的程序 (32)附录A5小数分频实现的程序 (34)附录A6 ENCODER_35模块实现的程序 (42)附录A7 LED的实现程序 (43)附录A8 MUX51模块的实现程序 (47)附录B顶层文件设计原理图 (48)1 绪论1.1 课题分析随着电子技术的高速发展,FPGA/CPLD以其高速、高可靠性、串并行工作方式等突出优点在电子设计中受到广泛的应用,而且代表着未来EDA设计的方向。
FPGA/CPLD的设计采用了高级语言,如VHDL语言AHDL语言等,进一步打破了软件与硬件之间的界限,缩短了产品的开发周期。
0 引言在腐蚀领域和电镀行业,常常需要使用任意波形的电流电压信号进行生产和测试。
任意波形是指频率可变、幅值可变、相位可变的正弦波形和其他波形,如三角波形、锯齿波、特殊波形等。
目前任意波形发生器大多采用直接数字频率合成(DDS)技术,即将波形的数字量信号存储于存储器中,嵌入式主机以一定的速率依次将存储器单元中的波形数据逐个发送给D/A转换器,合成为需要的波形。
随着微处理器日益广泛的应用和大规模集成电路技术的发展,出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求。
我们设计了一种基于FPGA芯片的任意波形发生器,充分利用了FPGA强大的逻辑功能,实现了利用单片FPGA芯片控制整个系统的方案。
同时选择USB2.0接口芯片CY7C68013,它能较好地与FPGA芯片合作,完成系统预先设计的功能,使总体电路简单,成本低廉,产生的波形信号精度较高。
数字波形数据从上位机通过USB总线直接存储在SRAM数据存储器中,通过FPGA控制,将波形数据读出,送入后向通道进行D/A转换和放大处理后得到所需的模拟信号波形。
与传统的发生器在ROM或FLASH存储波形数据的方法相比,具有更大的灵活性。
1 系统总体结构及工作过程波形发生器以FPGA为核心,它控制着整个系统的读、写、输出等操作,系统框图如图l所示。
上位机将数字波形数据通过USB2.O总线送到数据存储器中,数据存储器循环地将波形数据发送到DAC电路,由DDS电路产生相应的DAC刷新时钟(0~1MHz,步进0.02Hz),DAC输出波形经缓冲放大、低通滤波、放大输出。
输出的波形频率为0.1Hz(DC)~1MHz(-3dB),频率分辨率为0.01Hz。
本系统主要由五部分组成:(1)上位机。
主要功能是利用仿真软件(如CVI、MATLAB、VB等)产生所需波形数据,并通过USB接口下载到波形发生器中,其次就是存储USB2.0接口芯片的驱动程序。
基于FPGA的任意倍数分频及设计
摘要
随着电子技术、芯片集成技术、计算机及其软件等技术的飞速发展,现场可编程逻辑门阵列FPGA(Field Programmable Gate Array),从最初的数千个可利用门发展到如今的数百万个可利用门的单位FPGA芯片。
FPGA以其低电压、低功耗、体积小、高可靠性、设计灵活、静态可重复编程、开发周期短、开发成本不断降低等特点成为很多电子系统的首选。
分频器是数字系统设计中的基本电路,在同一个设计中有时要求多种形式的分频,如偶数分频、奇数分频、半整数分频等;有时要求等占空比,有时要求非等占空比。
本文通过在QuartursⅡ6.0开发平台下,设计一种能够实现等占空比、非等占空比整数及半整数分频的通用分频器。
关键词:FPGA VHDL 分频器
1 引言
众所周知分频器是FPGA设计中使用频率非常高的基本设计之一【1】。
分频器是数字系统设计中的基本电路。
在数字系统的设计中,设计人员会遇到各种形式的分频需求,如偶数分频、奇数分频、半整数分频、小数分频和分数分频等。
在某些设计中,系统不仅对频率有要求,而且对占空比也有严格的要求。
由计数器或计数器的级联构成各种形式的偶数分频及非等占空比的奇数分频实现起来较为简单,但对半整数分频及等占空比的奇数分频实现较为困难,小数分频和分数分频更困难。
为了解决这一问题,首先分析了各种分频器的设计方法,然后将其综合起来成为一套简明的设计方法,设计了一个任意倍数分频器,该分频器占用的逻辑资源较少。
所有分频均通过VHDL语言进行了编译并且给出了仿真图。
主要在QuartusII 开发平台下基于FPGA 方式完成通用分频器的设计,本设计中的分频器可移植性强,占用的FPGA资源少。
由于分频器应用非常广泛,顾本设计具有很强的使用价值。
2 FPGA
2.1 FPGA工作原理
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。
现场可编程门阵列(FPGA)是可编程器件。
与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA 具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。
FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
2.2 FPGA发展方向
第一个方向,也是传统方向主要用于通信设备的高速接口电路设计,这一方向主要是用FPGA处理高速接口的协议,并完成高速的数据收发和交换。
这类应用通常要求采用具备高速收发接口的FPGA,同时要求设计者懂得高速接口电路设计和高速数字电路板级设计,具备EMC/EMI设计知识,以及较好的模拟电路基础,需要解决在高速收发过程中产生的信号完整性问题。
FPGA最初以及到目前最广的应用就是在通信领域,一方面通信领域需要高速的通信协议处理方式,另一方面通信协议随时在修改,非常不适合做成专门的芯片。
因此能够灵活改变功能的FPGA就成为首选。
到目前为止FPGA 的一半以上的应用也是在通信行业。
第二个方向,可以称为数字信号处理方向或者数学计算方向,因为很大程度上这一方向已经大大超出了信号处理的范畴。
例如早就在2006年就听说老美将FPGA用于金融数据分析,后来又见到有将FPGA用于医学数据分析的案例。
在这一方向要求FPGA 设计者有一定的数学功底,能够理解并改进较为复杂的数学算法,并利用FPGA内部的各种资源使之能够变为实际的运算电路。
目前真正投入实用的还是在通信领域的无线信号处理、信道编解码以及图像信号处理等领域,其它领域的研究正在开展中,之所以没
有大量实用的主要原因还是因为学金融的、学医学的不了解这玩意。
不过最近发现欧美有很多电子工程、计算机类的博士转入到金融行业,开展金融信号处理,相信随着转入的人增加,FPGA在其它领域的数学计算功能会更好的发挥出来,而我也有意做一些这些方面的研究。
不过国内学金融的、学医的恐怕连数学都很少用到,就不用说用FPGA 来帮助他们完成数学_运算了,这个问题只有再议了。
第三个方向就是所谓的SOPC方向,其实严格意义上来说这个已经在FPGA设计的范畴之内,只不过是利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者主要是在上面进行嵌入式软件开发而已。
设计对于FPGA本身的设计时相当少的。
但如果涉及到需要在FPGA做专门的算法加速,实际上需要用到第二个方向的知识,而如果需要设计专用的接口电路则需要用到第一个方向的知识。
三分频器器件介绍
目前市场上主要有两类可编程逻辑器件:PLD 和FPGA。
PLD 分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30 多个组合逻辑输入,FPGA 的一个LUT 只能处理4 输入的组合逻辑。
因此,PLD 适合用于设计复杂组合逻辑。
但FPGA 的制造工艺确定了FPGA 芯片中包含的LUT 和触发器的数量非常多,往往成千上万,PLD 一般只能做到512 个逻辑单元,如果我们这样计算:用芯片价格除以逻辑单元数量,那么FPGA 的平均逻辑单元成本大大低于PLD。
所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA 就是一个很好选择。
四分频器原理
3.1等占空比的偶数分频
在设计偶数倍分频器时,常用的方法是:通过一个由待分频时钟上升沿所触发的计数器循环计数来实现N倍(N为偶数)分频的实现方法:通过由待分频的时钟触发的模为(N/2)-1的计数器计数,当计数器从0计数到(N/2)-1时,输出时钟信号进行翻转,同时给计数器一个复位信号,使得计数器在下一个时钟重新开始计数,采用这种方法不断循环,就可得到所需的N倍分频器。
这种方法可以实现占
空比为50%的任意偶数分频【2-3】。
3.2等占空比的奇数分频
占空比为50%的N倍(N为奇数)分频的实现方法:首先通过时钟的上升沿触发进行计数,当计数到某一个特定值时对计数输出进行翻转,然后经过(N-1)/2个输入时钟,再次对计数输出进行翻转,从而得到一个占空比非 50%的 N 倍奇数分频时钟。
在此同时进行时钟的下降沿触发进行计数,当计数到和上升沿触发输出时钟翻转时所选的特定值相同时,对计数输出进行翻转,同样经过(N-1)/2个时钟时,再次对计数输出进行翻转,从而得到另一个占空比非50%的N倍奇数分频时钟。
然后对两个占空比非50%的N倍奇数分频时钟进行逻辑或运算,就能得到一个占空比为50%的N倍奇数分频时钟。
如进行三倍分频时钟设计时,先通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到特定值时进行翻转,比如可以在计数器计数到时,输出时钟进行翻转,当计数到2时再次进行翻转,这样实际上实现一个占空比为1/3的三分频时钟。
然后通过待分频时钟下降沿触发计数,采用和上升沿触发的计数相似的方法,可以产生另外一个三分频的时钟,然后下降沿产生的三分频时钟和上升沿产生的时钟进行逻辑或运算,就可得到占空比为50%的三分频时钟【3】。
3.3半整数分频
半整数分频器设计思想:通过异或门和2分频模块组成一个改变输入频率的脉冲添加电路,也就是说N-0.5个输入信号周期内产生了N个计数脉冲,即输入信号其中的一个含一个脉冲的周期变为含两个脉冲的周期。
而这一改变是输入频率与2分频输出异或的结果。
由2分频输出决定一个周期产生两个脉冲有两种方式:当一个输入信号来一个脉冲(前半周期)时,2分频输出变为…1‟,clk_in取反,后半周期就会产生一个脉冲;2分频输出由…1‟变为…0‟时,clk_in 刚把一个周期(前半周期)内低电平变为高电平产生一个脉冲,而后半周期的脉冲与…0‟异或不变。
从而实现N-0.5分频。
3.4 通用分频器
上面介绍了各种单一功能的分频器的原理和VHDL实现,本文所讨论的通用分频器主要就是设定一个选择信号SEL。
当SEL为“00”时实现等占空比的偶数分频,当SEL 为“01”时实现等占空比的奇数分频,当SEL为“10”时实现占空比为X/(N-X)的N倍整数分频,当SEL为“11”时实现半整数分频。
五结束语
1985年,当全球首款FPGA产品诞生,虽然当时可编程器件从任何意义上来讲都不是当时的主流,因为被认为速度慢难以使用,但是随着技术的不断进步,现在的FPGA技术不但克服了初期的缺点,而且其效能高、成本低、可靠性高、便于长期维护、编程灵活等优点也使其成为现在可编程器件的主流。
FPGA技术正持续提升为高阶工具,为所有产业提供可重新城市设计晶片的便利优势。
参考文献
[1]徐志军.徐光辉.CPLD/FPGA的开发与应用.电子工业出版社.2002
[2]陈振官. 数字电路及制作实例,国防工业出版社,2006
[3]ALTERA公司,Introduction to QuartusⅡ,2007
[4]侯伯亨,顾新.VHDL硬件描述语言及数字逻辑电路设计,西安电子科技大学
出版社,2005。