内容发布更新时间 : 2024/12/26 9:43:44星期一 下面是文章的全部内容请认真阅读。
DDS直接数字频率合成器电路设计
图 6 相位累加器结构图
相位累加器在基准频率信号fc的控制下以频率控制字kf为步长进行累加运算,产生所需要的频率控制数据。相位寄存器则在时钟的控制下把累加的结果作为波形存储器ROM的地址,实现对波形存储器ROM的寻址。当累加器加满量时就会产生一次溢出,完成一个周期性的动作。这个周期也就是DDS信号的一个频率周期。
本设计相位累加器采用文本输入法VHDL语言设计,具体如下(参见VHDL源文件SUM4096.vhd):
--SUM4096.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SUM4096 IS
PORT(K:IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK:IN STD_LOGIC; EN: IN STD_LOGIC; RESET:IN STD_LOGIC;
OUT1:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); END ENTITY SUM4096;
ARCHITECTURE ART OF SUM4096 IS
SIGNAL TEMP: STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN
PROCESS(CLK,EN,RESET)IS BEGIN
IF RESET='1' THEN //清零端为1时累加器清零 TEMP<=\ ELSE
IF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN //使能端EN为1时累加器正常工作
TEMP<=TEMP+K; //时钟CLK上升沿到来时以kf为步长递增 END IF; END IF; END IF;
OUT1<=TEMP; //将目前的累加结果保存并输出,下次上升沿时实现累加 END PROCESS;
END ARCHITECTURE ART;
7
DDS直接数字频率合成器电路设计
以上程序不仅定义了累加器还添加了清零和使能功能。相位寄存器是与相位累加器同步的寄存器,也是采用文本输入法VHDL语言设计,具体如下(参见VHDL源文件EG1.vhd):
--REG1.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG1 IS
PORT(D:IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); END ENTITY REG1;
ARCHITECTURE ART OF REG1 IS BEGIN
PROCESS(CLK) IS BEGIN
IF(CLK'EVENT AND CLK='1' )THEN
Q<=D; //当时钟上升沿到来时输出相位累加器的结果 END IF;
END PROCESS;
END ARCHITECTURE ART;
//相位寄存器的输出就是波形存储ROM的地址。
6.3 波形存储器模块
用累加器的输出作为波形存储器的取样地址,进行波形的相位—幅值转换,即可在给定的时间上确定输出的波形的抽样幅值。以正弦波形存储器sine_rom为例,N(12)位的寻址ROM相当于把0—2π的正弦信号离散成具有2N个样值的序列,波形ROM有D(10)位数据位,所以设置2N个样值的sin值以D位二进制数值固化在ROM中,这里设置D=10,所以ROM中的数据范围应该从0到1023,但是正弦值只从-1到1,所以要对其进行量化,公式如下:
存储数据=round(sin(n×2π/4096))×512+512
其中,n为存储地址,范围是从0到4095。
按照地址的不同可以输出相应相位的正弦信号的幅值。相位—幅度变换原理如图7
8
DDS直接数字频率合成器电路设计
所示。
图7 相位-幅度变换原理图
同理,余弦波ROM、锯齿波ROM、三角波ROM、方波ROM只需在ROM里存储相应波形的幅度量化序列即可。
1) 正弦ROM的存储数据表参见dds.mif。
2) 余弦ROM的存储数据表与正弦ROM类似(参见cos.mif):
存储数据=round(cos(n×2π/4096)×512)+512
3) 三角波ROM的数据表参见sanjiao.mif。三角波的数据没有现成的生成三角波的数据,本设计根据图5做出相应的函数产生三角波的数据表。
图8 三角波
所以三角波函数如下:
当n∈(0,1023)时,存储数据=round(n/2)+512;
当n∈(1023,3071)时,存储数据= 1024-round(n/2)+512; 当n∈(3071,4095)时,存储数据= round(n/2)-2048+512;
4) 锯齿波ROM的数据表参见juchibo.mif。锯齿波的波形如图9所示。
9
DDS直接数字频率合成器电路设计
图 9 锯齿波
由图9可得出锯齿波的函数如下:
存储数据=round(n/4)
5) 方波ROM的数据表参见fangbo.mif。方波的波形如图10所示。
图 10 方波
由图10可得出方波的函数如下:
1023,n ∈(0,2047)
存储数据= 0, n ∈(2047,4095)
最后,生成5个存有不同波形的存储器,分别是sine_rom、cos_rom、fangbo_rom、juchibo_rom、sanjiao_rom。
分别如图11所示。
10
DDS直接数字频率合成器电路设计
正弦波sine_rom
余弦波cos_rom
方波fangbo_rom
三角波sanjiaobo_rom
图11 5个波形存储器
锯齿波juchibo_rom
所有.mif文件的数据都来源于电子表格ROM地址数据。
6.4频率测定模块设计
本设计的测频电路是通过测定相位累加器输出的ROM地址信号在1秒钟内溢出的次数来测定输出频率的。原理图如图12所示:
图12 测频电路原理框图
电路波形示意图如图13所示:
11