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

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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于FPGA和SRAM的数控振荡器的设计与实现-Read

基于FPGA和SRAM的数控振荡器的设计与实现 1 引言 数控振荡器是数字通讯中调制解调单元必不可少的部分,同时也是各种数字频率合成器和数字信号发生器的核心。随着数字通信技术的发展,对传送数据的精度和速率要求越来越高。如何得到可数控的高精度的高频载波信号是实现高速数字通信系统必须解决的问题,可编程逻辑器件和大容量存储器的发展为这一问题的解决带来了曙光。本文介绍如何用FPGA(现场可编程逻辑门阵列)和SRAM(静态随机存储器)实现高精度数控振荡器。 2 NCO概述 NCO(Numerical Controlled Oscillator)即数控振荡器用于产生可控的正弦波或余弦波,其实现的方法目前主要有计算法和查表法等。计算法以软件编程的方式通过实时计算产生正弦波样本,该方法耗时多且只能产生频率相对较低的正弦波,而需要产生高速的正交信号时,用此方法无法实现。因此,在实际应用中一般采用最有效、最简单的查表法,即事先根据各个NCO正弦波相位计算好相位的正弦值,并以相位角度作为地址把该相位的正弦值数据存储在表中,然后通过相位累加产生地址信息读取当前时刻的相位值在表中对应的正弦值,从而产生所需频率的正弦波。 用查表法实现NCO的性能指标取决于查表的深度和宽度,即取决于表示相位数据的位数(查表存储器地址线的位数)和表示正弦值数据的位数(查表存储器数据线的位数)。改善NCO性能最简单和最根本的方法是加大查找表的深度和宽度。目前,用查找表法实现NCO的普遍做法是用片内ROM作为查找表,由于片内资源的限制,查找表的深度和宽度一般不会很大(通常为256×8bits),大大限制了NCO性能的提高,用独立的大容量SRAM作为查找表,把查找表从片内移到片外,可以较好解决这个问题,基于这种思想,笔者成功地用FPGA(Xilinx公司的XC2V1000型门阵列)和SRAM(Cypress公司的CY7C1021型存储器)实现了NCO。 3 NCO的实现 3.1 结构设计 用FPGA和SRAM实现的NCO的结构如图1所示。大框内部分是由FPGA完成,主要部件分为频率控制字寄存器,相位控制字寄存器、通道控制字寄存器、累加器、加法器、通道选择器和锁存器等。微处理器对NCO进行控制,可用单片机或DSP(数字信号处理器)实现。 3.1.1 频率控制字寄存器、相位控制字寄存器、累加器和加法器 频率控制字寄存器和相位控制字寄存器都是32位并行输入/并行输出寄存器,它们通过微处理器接口进行读写。频率控制字寄存器确定载波的频率,相位控制字寄存器确定载波的初始相位。32位累加器对代表频率的频率控制字进行累加运算,累加结果与代表初始相位的相位控制字通过32位加法器进行相加运算,相加结果的高16位数据读取查找表的地址信息。频率控制字寄存器、相位控制字寄存器、累加器和加法器可以用VHDL语言描述,集成在一个模块中,其VHDL源程序如下: entity addr_sin is Port(clock:in STD_LOGIC;——时钟信号 reset:in STD_LOGIC;——同步复位信号 ——定义频率控制字寄存器 g_sin:in STD_LOGIC; data_con_sin:in STD_LOGIC_VECTOR(31 downto 0); d_con_sin:out STD_LOGIC_VECTOR(31 downto 0); ——定义相位控制字寄存器 g_sin1:in STD_LOGIC; data_con_sin1:in STD_LOGIC_VECTOR(31 downto 0); d_con_sin1:out STD_LOGIC_VECTOR(31 downto 0); dout:out STD_LOGIC_VECTOR(15 downto 0)——加法器输出信号 ); end addr_sin; architecture Behavioral of addr_sin is signal a_sin,a_sin1,count,count1:STD_LOGIC_VECTOR(31downto0):=“00000000000000000000000000000000”;——定义中间变量并初始化 begin d_con_sin<=a_sin;——用于微处理器读频率控制字寄存器 d_con_sin<=a_sin1;——用于微处理器读相位控制字寄存器 dout<=count1(31 downto 16);——加法器输出 process(g_sin,data_con_sin)——写频率控制字寄存器 begin if(g_sin=“1”)then a_sin<=data_con_sin; end if; end process; pr

您可能关注的文档

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档