全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

基于CORDIC 2FSK调制器的FPGA设计

[复制链接]
1743 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
摘要:频移键控(FSK)是用不同频率的载波来传递数字信号,并用数字基带信号控制载波信号的频率。提出一种基于流水线CORDIC算法的2FSK调制器的FPGA实现方案,可有效地节省FPGA的硬件资源,提高运算速度。最后,给出该方案的硬件测试结果,验证了设计的正确性。
   0 引言
   频移键控(FSK)是用不同频率的载波来传送数字信号,并用数字基带信号控制载波信号的频率。具有抗噪声性能好、传输距离远、误码率低等优点。在中低速数据传输中,特别是在衰落信道中传输数据时,有着广泛的应用。传统上以硬件实现载波的方法都是采用直接频率合成器(DDS)实现。但是DDS传统的实现方式是基于查找表思想,即通过查找预先存储的正余弦表来产生需要的正余弦值。当频率、精度要求越高,需要存储的值也就越多,考虑FPGA的RAM资源有限,传统的DDS实现方式就有了应用瓶颈。因此导致开发成本过高,甚至无法实现,不适合现代通信系统的发展。
   本文提出了应用CORDIC(Coordinate Rotation Digital Computer)算法实时计算正弦值的方案,并基于CORDIC算法在FPGA芯片上设计了2FSK调制器。这不仅能够节省大量的FPGA逻辑资源,而且能很好地兼顾速度、精度、简单、高效等方面。
   1 CORDIC算法原理及结构
   1.1 CORDIC算法原理
   CORDIC算法是由J.Volder于1959年提出的。该算法适用于解决一些三角学的问题,如平面坐标的旋转和直角坐标到极坐标的转换等。C-ORDIC算法的基本思想是通过一系列固定的、与运算基数有关的角度的不断偏摆以逼近所需的旋转角度。从广义上讲,CORDIC方法就是一种数值计算的逼近方法。该算法实现三角函数的基本原理如图1所示。
   
   设初始向量(x0,y0)逆时针旋转角度θ后得到向量(xn,yn),如图1所示。则:
    20121107054006328831525.jpg
   为了避免复杂的乘法运算,用一系列微旋转来处理,第i次旋转可表示为:
    20121107054006360081526.jpg
   式中:θi表示第i次旋转的角度,并且满足tanθi=2-i;zi表示第i次旋转后与目标角度的差;δi表示向量的旋转方向,由zi的符号位来决定,即δi=sign zi。 20121107054006406951527.jpg 20121107054006438201528.jpg 为每一级的校正因子,也就是每一级旋转时向量模长发生的变化,对于字长一定的运算,总的校正因子是一个常数。若总的旋转次数为n,则总校正因子用k表示为:
    20121107054006453831529.jpg
   由式(7)可知:xn,yn分别为输入角θ的余弦和正弦值,故基于CORDIC算法可产生正弦载波信号,而且由式(5)可以看出所有运算简化成加减法和移位操作,因此很容易用硬件实现。
   1.2 CORDIC流水线结构
   CORDIC算法的实现方式有2种:简单状态机法和高速全流水线处理器法。如果计算时间的要求不严格,可以采用状态机结构。这一结构中最复杂的就是两个桶状移位器,而桶状移位器的面积大约和它所包含的传输门的数目成正比。尽管可以通过改进CORDIC算法来减小CORDIC处理器的总面积,但桶状移位器所占的面积并不能减小。另外,这种结构由于只在时间上复用资源,因此,数据吞吐率不高。
   由于CORDIC算法的内部数据流规则,决定了在CORDIC处理器解决方案中非常适合采用流水线型微旋转结构。采用流水线可将一个算术操作分解成一些小规模的加减法和移位操作,并在多个比较高速的时钟内完成。另一方面,输出信号的精度只与CORDIC算法的旋转次数或流水单元数有关,即与级数有关。如需提高精度,只需简单地增加流水单元即可,其扩展性很好,而且这并不会大量增加FPGA的资源耗费。CORD-IC流水线结构的每一级迭代旋转的硬件实现基本单元如图2所示。
    20121107054006485081530.jpg
   2 基于CORDIC算法正弦载波发生器的总体结构
   正弦载波发生器系统结构如图3所示。
    20121107054006516331531.jpg
   在该系统结构图中,CORDIC计算单元是核心。CORDIC计算单元的输入由相位加法器提供。相位加法器不间断地产生角度值,由CORDIC计算单元计算出相应的三角函数值,即可在其输出端产生连续的数字正弦载波。
   通过频率控制字,改变相位累加器的步长,这样即可改变正弦载波的频率。具体的数学推导如下:
   设相位累加器的字长为N,频率控制字即步长为step,则2N就相当于2π rad,N位中的最低有效位相当于2π/2N rad,即最小的相位增量,step对应的相位为step×(2π/2N)rad,完成一个周期的正弦载波输出需要2N/step个参考时钟周期。所以输出正弦载波的周期为:
    20121107054006750701532.jpg
   可见改变相位累加器的步长step,可以改变正弦载波的频率;改变相位累加器的字长N,可控制正弦载波的频率分辨率。在相位累加器后加入相位加法器,通过改变相位控制字P,可以控制输出信号的相位;通过设置幅度控制字A,可控制最终输出的正弦载波的幅度大小。因此,通过对相位控制字、频率控制字或幅度控制字进行多路选择,可以形成不同进制的调制方式。可以看出,使用该结构可以很容易实现频率调制、相位调制和幅值调制。
   3 2FSK调制器的FPGA设计
   图4为2FSK调制器顶层工程原理图。该原理图主要由三个模块组成:2选1数据选择器MUX21、相位累加器adder、正弦载波生成模块eor-dic。其中,clk为系统时钟信号,rst为系统清零信号,step1,step2为2个不同的频率控制字,s为系统频率控制字选通端。2选1数据选择器的选通端s受基带信号控制,当基带信号为‘0’时,选通控制字step1;当基带信号为‘1’时,选通控制字step2。通过对step1,step2的选择,可以实现频率的切换。
    20121107054006891321533.jpg
   在QuartusⅡ环境中,三个子模块均用VHDL语言进行设计,系统顶层工程采用原理图进行设计,对系统顶层工程进行器件选择、引脚锁定、编译、综合后下载到Cyclone系列EP1C12Q240C8器件中,通过在频率控制字的引脚选择不同参数即可在FPGA器件中完成2FSK调制器的设计。
   4 系统硬件实时测试
   调制器的输出信号为数字信号,经D/A转换后可以通过示波器进行测试,也可以直接采用QuartusⅡ软件中的嵌入式逻辑分析仪Signal-TapⅡ进行测试。
   采用SignalTapⅡ进行芯片测试,用户无需外接专用仪器,就可以对FPGA器件内部所有信号和节点进行捕获分析,而又不影响原硬件系统的正常工作。经测试得到的实时波形如图5所示。测试结果表明,基于FPGA和CORDIC算法的2FSK调制器设计方案是正确可行的,且波形流畅,在转换处能快速进行切换。
    20121107054006922571534.jpg
   5 结语
   用FPGA和CORDIC算法实现信号调制,既克服了传统方法耗费资源、运行速度低等缺点,还具有静态可重复编程和动态在系统重构的特性,极大地提高了电子系统设计的灵活性和通用性,大大缩短了系统的开发周期。
   作者:雷能芳 渭南师范学院   来源:现代电子技术

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表