基于FPGA和SRAM的数控振荡器的设计与实现

发布者:绿意盎然最新更新时间:2006-09-13 来源: 国外电子元器件关键字:寄存器  相位  正弦 手机看文章 扫描二维码
随时随地手机看文章

1 引言
  数控振荡器是数字通信中调制解调单元必不可少的部分,同时也是各种数字频率合成器和数字信号发生器的核心。随着数字通信技术的发展。对传送数据的精度和速率要求越来越高。如何得到可数控的高精度的高频载波信号是实现高速数字通信系统必须解决的问题。可编程逻辑器件和大容量存储器的发展为这一问题的解决带来了曙光。本文介绍如何用FPGA(现场可编程逻辑门阵列)和SRAM(静态随机存储器)实现高精度数控振荡器。

2 NCO概述
  
NCO(Numerical Controlled Oscillator)即数控振荡器用于产生可控的正弦波或余弦波。其实现的方法目前主要有计算法和查表法等。计算法以软件编程的方式通过实时计算产生正弦波样本.该方法耗时多且只能产生频率相对较低的正弦波.而需要产生高速的正交信号时,用此方法无法实现。因此,在实际应用中一般采用最有效、最简单的查表法,即事先根据各个NCO正弦波相位计算好相位的正弦值。并以相位角度作为地址把该相位的正弦值数据存储在表中,然后通过相位累加产生地址信息读取当前时刻的相位值在表中对应的正弦值,从而产生所需频率的正弦波。

  用查表法实现NCO的性能指标取决于查表的深度和宽度,即取决于表示相位数据的位数(查表存储器地址线的位数)和表示正弦值数据的位数(查表存储器数据线的位数)。改善NCO性能最简单和最根本的方法是加大查找表的深度和宽度。目前,用查找表法实现NCO的普遍做法是用片内ROM作为查找表,由于片内资源的限制,查找表的深度和宽度一般不会很大(通常为256x8 bits),大大限制了NCO性能的提高。用独立的大容量SRAM作为查找表,把查找表从片内移到片外,可以较好解决这个问题。基于这种思想,笔者成功地用FPGA(Xilinx公司的XC2V1000型门阵列)和SRAM(Cypress公司的CY7C1021型存储器)实现了NCO。

3 NCo的实现
3.1 结构设计

  用FPGA和SRAM实现的NCO的结构如图1所示。大框内部分是由FPGA完成.主要部件分为频率控制字寄存器、相位控制字寄存器、通道控制字寄存器、累加器、加法器、通道选择器和锁存器等。微处理器对NC()进行控制,可用单片机或DSt,(数字信号处理器)实现。

3.1.1 频率控制字寄存器、相位控制字寄存器、累加器和加法器
  频率控制字寄存器和相位控制字寄存器都是32位并行输入,并行输出寄存器,它们通过微处理器接口进行读写。频率控制字寄存器确定载波的频率.相位控制字寄存器确定载波的初始相位。32位累加器对代表频率的频率控制字进行累加运算,累加结果与代表初始相位的相位控制字通过32位加法器进行相加运算.相加结果的高16位数据读取查找表的地址信息。频率控制字寄存器、相位控制字寄存器、累加器和加法器可以用VHD[.语言描述,集成在一个模块中,其VHDL源程序如下:

  

3.1.2通道控制字寄存器和通道选择器
  通道控制字寄存器和频率控制字寄存器与相位控制字寄存器的结构完全一样.都是32位并行输入/并行输出寄存器,通过微处理器接口进行读写。通道控制字寄存器仅用最后一位对通道选择器进行控制。通道选择器是二选一复用器.当Sel控制端为O时选择通道l,当Sel控制端为1时选择通道2。通道选择器作为SRAM与FPGA的接口.每个通道不仅包括16条地址线,而且还有3条控制线和32条数据线。在图l中,为了使NCO的结构更加清晰,通道选择器的控制线和数据线没有表示出来。

3.1.3 SRAM和锁存器
  SRAM是64Kx32的高性能静态RAM.由2个CY7C102l(64KXl6)并联构成,用作查找表。SRAM通过微处理器进行配置,直接存放2路、1个周期、65 536个16位载波样本(高16位存放正弦波,低16位存放余弦波)。虽然SRAM是异步器件,但由于工作速度极高,在简单控制逻辑配合下完全可以工作在同步模式下。NCO工作时.控制逻辑(用VHDL语言描述)通过通道l使SRAM的控制信号线处于读有效电平,用相位地址直接驱动SRAM.从SRAM读出的数据进入32位锁存器.分2路直接输出.不需要任何地址和数据转换逻辑。用于锁存器的时钟和用于累加器、加法器的时钟在相位上相差180°,这是由SRAM的开关特性决定的。

3.2 NCO的工作过程

  NCO工作前必须对SRAM进行初始化.图2示出NCO的工作流程。首先,微处理器向通道控制字寄存器写入1,使通道选择器选择微处理器接口。然后.微处理器对SRAM进行配置.向SRAM中写入载波样本.接着,微处理器向频率控制字寄存器和相位控制字寄存器写入频率控制字和相位控制字,确定载波的频率和初始相位.最后,向通道控制字寄存器写入0.通道选择器选择通道l,使NCO处于工作状态。此时微处理器可以对频率控制字寄存器和相位控制字寄存器进行动态读写,实现对NCO的动态实时控制.完成NCO频率与初始相位的调整。

 


3.3 NCO性能评估
  按照上述结构.笔者设计了一种NCO系统。该系统的工作时钟为80MHz.用DSP作为微处理器。通过系统测试.该NCO的性能指标达到了设计要求,频率分辨率△f=O.0186Hz,信噪比(SNR)在100dB以上.图3示出NCO的典型特性曲线。


4 结构特点
  用FPGA和SRAM实现数控振荡器有许多特点。

  首先,查找表的容量可以进一步加大。此设计的结构把相位累加部分和查找表分开单独实现.由于FPGA具有可重复编程性且有丰富的I/O资源,因此只要稍加改动FPGA内的逻辑设计就可以外挂更大容量的SRAM。

  其次,载波样本的数据位数可以灵活控制。在查找表容量一定的情况下,可以根据具体应用调整载波样本的数据宽度。实现的手段有二:一是在对SRAM配置时通过微处理器以软件编程的方式直接调整SRAM的数据宽度:二是在FPGA内对SRAM输出数据的位数进行截位处理.可通过调整FPGA中锁存器的输出实现。

  第三,能够灵活应用到其他领域中。该NCO只消耗FPGA中6%的Slices资源,大量资源包括片内RAM和硬件乘法器都没有用到,利用这些资源可以对NCO进行功能扩展,实现数字下变频器(Digital Down Converter-DDC)、数字频率合成器(Direct Digital Synthesizer-DDS)和调制解调器等。

5 结束语

  本文介绍了一种新的NCO实现方法,用该方法设计的NCO可实现对载波的频率、相位和幅度的完全控制。由于用独立的大容量SRAM作为查找表,使得NCO有较高的精度。同时该NCO有很大的发挥空间,能够灵活地运用到其他领域。

关键字:寄存器  相位  正弦 引用地址:基于FPGA和SRAM的数控振荡器的设计与实现

上一篇:基于TMS320C5409的图像压缩系统
下一篇:PPCBoot在MPC8250上的移植方法

推荐阅读最新更新时间:2024-05-02 20:25

ATmega168的SPI发送完寄存器SPIF不置位的问题
利用ATmega168的硬件SPI驱动74HC595来扩展串行接口。把MOSI和SCK设置为输出,然后设置好寄存器。,具体如下: static void vSpi595Init(void) { DDRB|=(1 DDRD|=(1 SPCR=(1 spe)|(1 mstr)|(1 spr0)|(1 spr1); 使能spi主机模式传送速度。 = p= } 然后调用如下的发送函数 static void vSPIMasterTransmit(unsigned char ucData) { SS_L();//拉低存储寄存器时钟 SPDR = ucData;// 启动数据传输 while
[单片机]
怎么在修改的正弦波或纯正弦波逆变器间进行选择
纯正弦波逆变器相对于改良型正弦波逆变器的优势: a)输出电压波形为纯正弦波,谐波失真极低,并且像公用事业电力一样干净。 b)诸如微波炉和交流电动机之类的感应负载运行得更快,更安静,更凉爽并且效率更高。 c)减少风扇,荧光灯,音频放大器,电视,游戏机,传真机和答录机中的听觉和电气噪声。 d)防止计算机崩溃,毛刺和显示器噪音。 e)可靠地为以下设备供电,这些设备通常无法与改进的正弦波逆变器一起使用: •激光打印机,复印机,磁光硬盘驱动器。 •一些带电子镇流器的荧光灯。 •在交流电动机上运行的电动工具和变速控制。 •具有速度/微处理器控制功能的缝纫机。 •充电电池充电器。 修改后的正弦波对大多数设备都适用,并且是市场上最常见的逆变器类型
[嵌入式]
C8051F020中的ADC应用要素
C8051F020(简称F020)是美国德州Cygnal公司推出的一种混合信号SOC型8位单片机。它属于C8051F系列中的F02x子系列。其性能价格比在目前应用领域极具竞争力。F020具有8路12位A/D转换(简称ADC)接口和8路8位在线可编程(ISP)的ADC电路,片上的特殊功能寄存器(简称SFR)有15个与ADC的控制相关,它们是: AMUX0SL——AMUX0通道选择寄存器,复位值为00000000; MAX0CF——AMUX0配置寄存器,复位值为00000000; ADC0CF——ADC0配置寄存器,复位值为11111000; ADC0CN——ADC0控制寄存器,复位值为00000000; ADC0H——AD
[单片机]
单片机的存储器、寄存器
单片机的存储器有程序存储器ROM与数据存储器RAM两种。 这两种存储器在使用上是严格区分的,不得混用。 程序存储器存放程序指令,以及常数,表格等;而数据存储器则存放缓冲数据。 MCS-51单片机存储器的结构共有3部分:一是程序存储器 二是内部数据存储器 三是外部数据存储器MCS-51单片机的存储器可分为5类:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间、外部数据存储器 程序存储器   程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。如前述用助记符编写的命令MOV A,#20H,换成机器认识的代码74H、20H:(写成二进制就是01110100B和00100000B)。在单片机处理问
[单片机]
使用excel制作的AVR寄存器配置助手---轻松搞定AVR
/*********************************************************** -功能描述:开机初始化 -参数说明:无 -返回说明:无 ***********************************************************/ void Init_Start(void) { ADC_InitTypeDef ADC_InitStruct; /*ADC配置*/ ADC_InitStruct.refSource = REF_INT; //内部基准源 ADC_InitStruct.dataAlign = AD_LEFT; //ADC数据为左对齐
[单片机]
使用excel制作的AVR<font color='red'>寄存器</font>配置助手---轻松搞定AVR
LPC1788--TIMER匹配中断设置--寄存器操作
简单记录LPC1788定时器匹配中断设置--通过寄存器直接操作 #include timer_lpc1788.h #include uart_lpc1788.h void TIMER0_IRQHandler(void) //TIMER0中断函数 { if(((LPC_TIM0- IR) &(1 0))==(1 0)) //匹配中断发生 { UARTSendStr( CLOSrn ); } LPC_TIM0- IR |=(1 0);//清除匹配中断标志位 } void TIMER0_Init(uint32_t clk, uint32_t howtime) { LPC_SC- PCONP|=
[单片机]
STM32寄存器操作端口模式SDA_OUT()/SDA_IN()
#define SDA_IN() {GPIOB- CRL&=0X0FFFFFFF;GPIOB- CRL|=(u32)8 28;} #define SDA_OUT() {GPIOB- CRL&=0X0FFFFFFF;GPIOB- CRL|=(u32)3 28;} 是不是看到懵了,其实不难,相信用寄存器写过stm8s的就明白了,其实这是利用寄存器配置端口模式,只是32为的寄存器太多! 首先得明白CRL、CRH是2个控制端口模式的寄存器。他们的位数数据为: CRL(引脚的0-7脚) CRH(引脚的8-16脚) 然后一个端口分4位来控制模式,这4为的组合为: 我们来分析一下: GPIOB- CRL&=
[单片机]
简单的正弦波发生器
简单的正弦波发生器
[模拟电子]
简单的<font color='red'>正弦</font>波发生器
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved