基于fpga的数字相移信号发生器系统的设计内容摘要:
码器的输出进行片选,译码器的两个地址引脚由单片机控制。 使用三块双口 RAM 的好处是可以顺利地接受单片机发送过来的数据,不必再增加额外的接口电路。 DDS 电路输出相位地址寻址波形数据存储器,波形数据存储器的输出和基准波模块的输出通过数字比较器 产生 PWM 波形。 DDS 基本原理 直接数字合成 (DDS, Direct Digital Synthesis)技术是从相位概念出发直接合成所需波形的一种频率合成技术。 它是以一个固定频率精度的时钟作为参考时钟源,通过数字信号处理技术产生一个频率和相位可调的输出信号。 从本质上来说,它是由设置的可编程的二进制控制字对参考时钟做除法运算。 控制字一般是 24~ 48 位字长。 所以可以认为 DDS 就是数字信号处理理论的延伸,是数字信号中信号综合的硬件实现问题。 下面,通过从相位出发的正弦函数产生描述 DDS 的概念。 图 25表示了半径 R 为 1单 位圆,半径 R 绕圆心旋转与 x 轴的正方向形成相位角。 图 25 单位圆表示正弦函数 它的基本结构 主要由相位累加器、波形 ROM、 D/ A 转换器和低通滤波器四个部分构成, 如下图 26 所示。 9 图 26 DDS的基本结构 DDS 的工作原理是基于相位和幅度的对应关系,通过改变频率控制字来改变相位累加器的累加速度,然后在固定时钟的控制下取样,取样得到的相位值通过相位幅度转换得到与相位值对应的幅度序列,幅度序列通过数模转换得到模拟形式量化的正弦波输出。 图 27 中相位累加器结构如图 所示。 图 27 相位累加器结构图 相位累加器由 N 位加法器和 N 位累加器级联构成。 每一个时钟脉冲 fc,加法器 将控制字 k 与累加寄存器输出的累加相位数据相加,把相加后的结果送到累加寄存器 的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。 这样, 相位加法器在时钟作用下,不断对频率控制字进行线性相位累加,每个时钟周期增加 k。 由此可以看出,相位累加器在每一个时钟输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的输出频率就是 DDS 的输出信号 的频率。 这里的 N 是相位累加器的字长,这里的 K 叫做频率控制字。 相位累加器根据输入的频率控制字的不同,以所输出的相位序列为地址去寻址波形存储器。 每来一个时钟脉冲.厂,加法器将频率控制字 K 与寄存器输出的数据相加,再把相加后的结果送至寄存器的数据输入端。 寄存器将加法器在上一个时钟作用后所产生的相位数据反馈到加法器的输入端,以使加法器在下一个时钟作用下继续与频率控制字进行相加。 10 这样,相位累加器在时钟的作用下,进行相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。 波形 ROM 示意图如图 28 所示。 图 28 波形 ROM 结构图 当 ROM 地址线上的地址 (相位 )改变时,数据线上输出相应的量化值 (波形幅度量化序列 )。 需要指出的是因为波形 ROM 的存储容量有限,相位累加器的字长一般不等于波形 ROM 地址线的位数,因此在这个过程中会引入相位截断误差。 D/ A 转换器将波形 ROM 输出的幅度量化序列转换成对应的电平输出,将数字信号转换成模拟阶梯信号。 低通滤波器对 D/ A 转换器输出的模拟阶梯信号进行平滑处理,形成平滑的波形输出。 DDS 基础上数字相移信号发生器 本设计基于 DDS 的基本原理,要实现两路同频的信号,重在设计 相位累加器,利用它来产生信号递增的相位信息,整个 DDS 系统在统一的参考时钟下工作,每个时钟周期相位累加器作加法运算一次。 加法运算的步进越大,相应合成的相位值变化越快,输出信号的频率也就越高。 对于幅值归一化的正弦波信号的瞬时幅值完全由瞬时相位来决定,因为 w=dΦ(t)/ at,所以相位变化越快,信号的频率越高。 ROM 表完成将累加器相位信息转换为幅值信息的功能。 再由 D/ A 完成数字抽样信号到连续时域信号的转换, D/ A 输出的台阶信号再经低通滤波器平滑可以得到精确的连续正弦信号波形。 相位累加器利用 N bit 二进制加法 器的模溢出特性来模拟理想正弦波的 2π相位周期。 相位累加器输出和 ROM 输出可分别理解为理想正弦波相位信号和时域波形的时钟抽样。 用相位累加器输出的数据作为波形存储器的相位取样地址,这样就可以把存储在波形存储器内的波形抽样值 (二进制编码 )经查找表查出,完成相位到幅值转换。 波形存储器的输出送到 D/ A 转换器, D/ A 转换器将数字量形式的 11 波形幅值转换成所要求合成频率的模拟量形式信号。 低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。 其具体图如下 29。 图 29 DDS 实现的数字相移结构图 DDS 系统在 FPGA 上实现 早期的 DDS 系统使用分离的数字器件搭接,随着整个电路系统运行频率的升高,采用分离器件构建的 DDS 电路有其自身无法克服的缺点,主要表现在电磁兼容和系统工作频率上。 后来出现的专用 DDS 芯片极大的推动了 DDS技术的发展,但专用 DDS 芯片价格昂贵,且无法实现任意波形输出,近来,CPLD 及 FPGA 的发展为实现 DDS 提供了更好的技术手段。 FPGA 的应用不仅使得数字电路系统的设计非常方便,并且还大大缩短了系统研制的周期,缩小了数字电路系统的体积和所用芯片的品种。 而且它的时钟频率已可达到几百 兆赫兹,加上它的灵活性和高可靠性,非常适合用于实现波形发生器的数字电路部分。 用 FPGA 设计 DDS 电路比采用专用 DDS 芯片更为灵活。 因为,只要改变 FPGA 中的 ROM 数据, DDS 就可以产生任意波形,因而具有相当大的灵活性。 相比之下 FPGA 的功能完全取决于设计需求,可以复杂也可以简单,而且FPGA 芯片还支持在系统现场升级,虽然在精度和速度上略有不足,但也能基本满足绝大多数系统的使用要求。 另外,将 DDS 设计嵌入到 FPGA 芯片所构成的系统中,其系统成本并不会增加多少,而购买专用芯片的价格则是前者的很多倍。 因此,采用 FPGA 来设计 DDS 系统具有很高的性价比。 用 FPGA 可 12 以非常方便的实现 DDS 系统的数字电路环节,且可现场编程进行电路的修改。 在 DDS 系统中, FPGA 的主要完成: (1)保存频率字; (2)保存相位字; (3)构成相位累加器,产生波形 RAM 的地址; (4)形成波形 RAM。 FPGA 的设计流程如下图 210。 图 210 FPGA 设计框图 FPGA 的主要功能是: (1)产生与 C2440 的接口电路,使其能够接受 ARM处理器控制信号; (2)保存频率字,并构成相位累加器,产生与主时钟相同频率的 RAM 寻址字; (3)用内部的存储 块构成存放多种波形数据的 ROM,并通过相应的控制线进行选择; (4)构造出两个多波形选择输出的输出通道,其中的一路通道可具备移相功能; (5)用内部的 PLL 倍频外部低频品振源,并输出与主时钟同频的时钟,驱动片外高速 D/ A。 13 3 系统模块设计 FPGA 设计的模块划分 数字相移信号发生器的 FPGA 的电路设计主要是用 FPGA 设计 DDS 的核心部分即相位累加器、相位加法器、相位寄存器、控制字输入寄存器、波形查找表、任意波形数据寄存器。 数字相移信号发生器的 FPGA 的电路组成框图如图 31 所示。 该系统可实现常规固 定波形输出和任意波形输出。 其中相位累加器是一个带有累加功能的 32 位加法器,它以设定的频率控制字 k作为步长来进行加法运算,当其和满时清零,并进行重新运算。 相位寄存器是一个 10位寄存器,它接收单片机送来的频率和相位控制字数据并进行寄存,当下一个时钟到来时,输入寄存的数据,对输出波形的频率和相位进行控制。 波形查找表 ROM 及 RAM 是DDS 的关键部分,设计时首先需对时域波形进行采样,将采样的波形数据储存到波形查找表 ROM 及 RAM 中,每一位地址对应一个波形点的数值,任意波形数据寄存器接收单片机送来的任意波形数据。 整个系 统各模块是在同步时钟信号 CLK的控制下协调工作的。 25 图 31 FPGA 设计的模块划分 14 地址发生器 的设计 地址发生器模块包含相位累加器和相位控制器,其中相位累加器是一个带有累加功能的 32 位加法器,由 ADDER32B 和 REG32B 组成。 它接收单片机送来的频率控制字数据并进行寄存,它以设定的 32 位频率控制字 k 作为步长来进行加法运算,当其和满时,记数器清零,并进行重新运算,由 DDS 原理可知,通过控制频率控制字 K 就可以方便地控制输出频率。 相位控制器是一个 10 位寄存器 ADDERIOB,它接收单片机送来 的相位控制字数据并由 REGIOB 进行寄存。 当下一个时钟到来时,输出寄存的频率和相位数据,对输出波形的频率和相位进行控制。 该模块输出 32 位的地址数据,而由于设计的波形数据存储器深度为 1024点,存储容量有限,只能取高 10位作为波形 RAM 的地址。 其图如下 32。 图 32 地址累加器的设计 相位累加器的设计 相位累加器的设计实际包括两个模块: 32位相位累加器和 32位相位寄存器。 1) 相位累加器 相位累加器实质上就是一个 32 位的加法器电路。 定义两个 32 位的信号作为被加数和加数,直接相加输出 32 位的和。 图 33 所示为 32 位相位累加器实体符号图。 从图上可以看出:该实体定义了三个信号,输入信号 beijiashu3 15 jiashu32 和输出信号 sum32 都是 32 位信号,前两个信号相加的结果从第三个信号输出,典型的组合型电路。 图 33 32 位相位累加器实体符号图 其 VHDL语言如下 LIBRARY IEEE。 32位加法器模块 USE。 USE。 ENTITY ADDER32B IS PORT (A: IN STD_LOGIC_VECTOR (31 DOWNTO 0)。 —— 被加数 B: IN STD_LOGIC_VECTOR (31 DOWNTO 0) —— 加数 Ci:in std_logic。 —— 低位进位 Co:out std_logic。 S: OUT STD_LOGIC_VECTOR (31 DOWNTO 0))。 —— END ADDER32B。 ARCHITECTURE behav OF ADDER32B IS Signal temp:std_logic_vector_(31 downto 0)。 BEGIN Temp=(‘ 0’ downto 0)。 S=temp(31 downto 0)。 Co=temp(32)。 END behav。 2)相位寄存器 32 位相位寄存器属于最基本的时序逻辑电路 ,就是在系统时钟信号的控制 16 下完成数据的保存和输出。 图 34 所示为 32 位相位寄存器的实体符号图。 从图上可以看出:该实体定义了三个信号,输入信号 clk、 data in32 和输出信号data out32 都是 32 位信号,在时钟信号的控制下完成 32 位数据的保存和输出。 图 34 32 位相位寄存器的实体符号图 LIBRARY IEEE。 32位寄存器模块 USE。 ENTITY REG32B IS PORT (Load: IN STD_LOGIC。 DIN: IN STD_LOGIC_VECTOR (31 DOWNTO 0)。 DOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0))。 END REG32B。 ARCHITECTURE behav OF REG32B IS BEGIN PROCESS (LOAD, DIN) BEGIN IF (Load’ EVENT AND Load=39。 139。 ) T HEN DOUT=DIN。 END IF。 END PROCESS。 END behav。 32 位相位寄存器的输出截断高 lO 位,即 data_out[31.. 22]作为移相累加器的一个输入端。 截断操作可以在相位寄存器的输出端直接进行,也可以在顶层模块中进行。 17 波形 ROM的设计 这个模块是一个相对简单的模块。 首先要确定波形 RAM 的深度和字长。 波形 ROM 的深度和字长与很多因素有关系。 这里我们先从字长入手。 由于我们选择的 DAC 的位数为 lO。 10 位的 DAC 理论上可以达到 66DB 的信噪比,这对我们的设计要求已经足够了。 这样 RAM 的字长很明显因该和 DAC 的字长一样也。基于fpga的数字相移信号发生器系统的设计
相关推荐
扰性的高频信号,由于不须运算发大器,参数 计算容易,对系统要求不高。 因此在本设计中,利用 RC 低通滤波器就可以达到要求。 第三章 软件设计 相关软件采用 VHDL 硬件描述语言编写。 VHDL 是用于逻辑设计的硬件描述语言, 为IEEE 标准。 利用它,硬件的功能描述可完全在软件上实现。 它支持自顶向下( Top Down)和基于库( Library_Based)的设计方法,支持同步电路
的实现步骤: (1):对输入和输出值进行分配 第一个输入: 位置误差 E 设定量化论域 E={10, „ „ ,10},模糊语言子集 E 为 {NB(负大 )、 NM(负中 )、 NS(负小 )、ZE(零 )、 PS(正小 )、 PM(正中 )、 PB(正大 )}。 第二个输入:位移误差变化量 设定量化论域 EC={1,0,1}, EC 模糊语言子集取 {N (负 )、 ZE (零 )、 P(正
么不完全符合设计者的需要。 这种矛盾来自于 FPGA 本身的结构局限性, 短期内很难得到很好的解决。 (6).尽管 FPGA 实现了 ASIC 设计的硬件仿 真,但是由于 FPGA 和门阵列、标准单元等传统 ASIC形式的延时特性不尽相同,在将 FPGA设计转向其它 ASIC设计时,仍然存在由于延时不匹配造成设计失败的可能性。 针对这个问 题,国际上出现了用 FPGA 数组对 ASIC
京:科学出版社 .2020。 3. 赵俊超等 .集成电路设计 VHDL 教程 .【 M】 .北京 .北京希望电子出版社 .2020。 4. 周俊峰 陈 涛 . 基于 FPGA 的 直 接 数 字 频 率 合 成 器 的 设 计 和 实现 . 年 附录 : 顶层程序 文件名: library IEEE。 use。 use。 use。 entity top is Port (sysclk,reset
TB=S1(4)amp。 S0(4)。 在此添加“B”的功能模块中,例如程序代码为:(CODEOUTV=01)THEN IF(COUNT1=0)THEN FIRST_1=39。 139。 COUNT1=1。 S1(4)=S1(3)。 S0(4)=S0(3)。 表示当输入的代码CODEOUTV=01时,判断计“1”计数器COUNT1的状态,当为0时,即V之间的非0符号为偶数时
第一章 绪 论 数字 秒表是日常生活中比较常见的电子产品 ,其设计也是 EDA 技术中重要的设计之一 [1]。 EDA 是 20 世纪 90 年代初以来迅速发展起来的现代电子工程领域的一门新技术。 它以可编程逻辑器件 (PLD)为载体 ,以计算机为工作平台 ,以EDA 工作软件为工作环境 ,以硬件描述语言 (VHDL)为电子系统功能描述方式 ,以电子系统设计为应用方向的电子产品自动化设计过程。