摘要:介绍了利用现场可编程逻辑门阵列FPGA实现直接数字频率合成(DDS)的原理、电路结构和优化方法。重点介绍了DDS技术在FPGA中的实现方法,给出了采用ALTERA公司的ACEX系列FPGA芯片EP1K30TC进行直接数字频率合成的VHDL源程序。
关键词:直接数字频率合成(DDS);现场可编程逻辑门阵列(FPGA);EP1K30TC-144 直接数字频率合成(Direct Digital Fraquency Syn-thesis?即DDFS,一般简称DDS)是从相位概念出发直接合成所需波形的一种新的频率合成技术。它在相对带宽、频率转换时间、相位连续性、正交输出、高分辨率以及集成化等一系列性能指标方面已远远超过了传统频率合成技术。当累加器的N很大时,最低输出频率可达Hz、mHz?甚至μHz。也就是说:DDS的最低合成频率接近于零频。如果fc为50MHz, 那么当N为48位时,其分辨率可达179nHz。转换时间最快可达10ns的量级,这都是传统频率合成所不能比拟的。但它的不足之处是最高工作频率会受限、噪声和杂波不够理想。 本设计采用ALTERA 公司的FPGA芯片EP1K30TC-144来实现DDS技术。EP1K30芯片属ALTERA 公司的ACEX系列,该系列是ALTERA公司着眼于通信、音频处理及类似场合应用而推出的FPGA器件系列芯片,它采用0.22/0.18微米混合工艺,密度从10000门到100000门。所有ACEX系列器件均兼容64bit、66MHz的PCI,并支持锁相环电路。ACEX 1K采用查找表(LUT)和EAB(嵌入式阵列块)相结合的结构,可用来实现存储器、专用逻辑功能和通用逻辑功能,每个EBA能提供4096比特的存储空间,每个LE包含4个输入LUT、一个可编程的触发器、进位链和一个层叠链。合理运用进位链能够提高系统运行速度。 EP1K30TC-144的最大系统门数为119000,它有1728个逻辑宏单元数和5个嵌入式阵列块,最大可提供2kB的ROM/RAM位,因而可完全满足DDS设计的要求。 图1为DDS系统的基本原理图,图中的相位累加器由N位全加器和N位累加寄存器级联而成,可对频率控制字的2进制码进行累加运算,是典型的反馈电路,产生的累加结果的高M位作为ROM查找表的取样地址值,而此查找表中储存了一个周期的正弦波幅度值。显然,此处存储器ROM可以看作一个从相位到正弦幅值的转换器。这样,用ROM的输出值来驱动DAC,然后经滤波即可转换成所需要的模拟正弦波形;同时N位累加输出又可作为全加器的下一轮数据与频率数据相加,直到相位累加器加满产生溢出,从而完成一个周期,也就是DDS信号的频率周期。 考虑到本系统的规模以及以后的扩展需要,该系统中的DDS电路采用VHDL硬件描述语言来实现,因为VHDL语言设计的电路模块可以方便地移植到不同的FPGA芯片中。由于硬件原因,本系统的最高频率为100kHz,因此,采用常规设计即可满足要求,但若要应用于高速系统,还要采用一些提高系统运行速度的措施,如采用流水线技术,即在设计中把延时较大的组合逻辑块切割成两块大致相等的组合逻辑块,并在这两个逻辑块中插入触发器,也可通过多个触发器时钟来提高系统速度,还可以采用ALTREA 公司的FPGA器件所特有的进位链来设计高速电路。 2.1 ROM查找表的设计 ROM查找表在整个设计中是一个比较重要的部分。为了保证波形的平滑,设计时可将一个周期分为1024个点。但是,点数太多时,用文本方式输入可能有很多困难。因此,应当用C语言描述正弦方程式,最后再将其转化为所需的mif文件。以下是其C语言的源程序: main() {int i;float s; for(i=0;i<1024;i++) { s = sin(atan(1)*8*i/1024); ...... 2.2 DDS主模块设计 DDS主模块部分可根据上述原理,采用VHDL来描述,以下是部分源程序: BEGIN PROCESS (clk) BEGIN IF(clk'event AND clk='1') THEN \\时钟上升沿触发 freqw<=freqin; acc<=acc+freqw; \\开始累加 END IF; END PROCESS; romaddr<=acc(adder width-1 downto adder width-10);? \\累加结果的高11位作为 查找表的地址位 i_rom:lpm_rom \\调用ROM查找表 ...... 2.3 DDS控制模块设计 DDS部分的系统控制是根据所需要的功能(如相位调制、幅度调制等)要求而设计的,这一点也是利用了FPGA的灵活性。其部分程序如下: COMPONENT ddsc IS \调用DDS主模块 ...... END COMPONENT ; SIGNAL clkcnt :integer RANGE 4 DOWNTO 0; \\内部信号定义 SIGNAL clk:std_logic; SIGNAL freqind:std_logic_vector(15 DOWNTO 0);? BEGIN i_ddsc:ddsc \\调用DDS主模块 PORT MAP(clk=>clk,ddsout =>ddsout,freqin=>freqind); clk<=sclk; \\连接内部端口 PROCESS (sclk) BEGIN IF?sclk'event AND sclk='1'? THEN \\系统时钟的上升沿触发 freqind<=fpin; END IF; 本系统在频率不高于100kHz时能产生精确的正弦波形,而且十分稳定。由于基准时钟为50MHz,且分辨率为16位,因此,该系统能产生的最低频率为500Hz,若要产生更低频率及更精确的波形,可以提高分辨率并相应减小基准时钟,这在FPGA中实现起来相当容易。 实践证明:用FPGA设计DDS电路较采用专用DDS芯片更为灵活。因为,只要改变FPGA中的ROM数据,DDS就可以产生任意波形,因而具有相当大的灵活性。相比之下:FPGA的功能完全取决于设计需求,可以复杂也可以简单,而且FPGA芯片还支持在系统现场升级,虽然在精度和速度上略有不足,但也能基本满足绝大多数系统的使用要求。另外,将DDS设计嵌入到FPGA芯片所构成的系统中,其系统成本并不会增加多少,而购买专用芯片的价格则是前者的很多倍。因此,采用FPGA来设计DDS系统具有很高的性价比。 |