基于Multisim和VHDL的DDS仿真

Simulation of DDS Based on Multisim and VHDL
Wang Ai Jun
ev71病毒
(Department of Marine Engineering Nantong Shipping College
Nantong Jiangsu 226010)
Abstract: This paper introduces the Principle of Direct Digital Frequency Synthesizer(DDS),and builds a DDS model component in the use of Multisim VHDL modules and Component Wizard,and verifies the functionality of the component by simulation.
Key words:Multisim,VHDL,DDS,Simulation
基于Multisim和VHDL的DDS仿真
王爱军
(南通航运职业技术学院轮机工程系 江苏 南通 226010)
摘要:本文介绍了直接数字频率合成(DDS)的原理,采用Multisim VHDL模块和元件向导功能构建了一个DDS模型元件,并通过仿真验证了该元件的功能。
关键字:Multisim,VHDL,DDS,仿真
0.引言
Multisim是一种功能强大的电子电路仿真元件,提供了庞大的元件数据库和种类齐全的虚拟测试仪器仪表,可以方便地进行原理电路设计和电路功能测试。针对现代电子产品设计的需要,Multisim在软件中集成了VHDL接口和仿真模块、MCU软硬件协同仿真模块,使得其应用范围从电路级扩展到系统级。本文在Multisim中实现了一个由VHDL模块构建的DDS元件的功能仿真。
1.DDS的工作原理
直接数字频率合成器DDS(Direct Digital Frequency Synthesizer),是一种新型的频率合成技术。它是一种数字化技术,通过控制相位的变化速度,直接产生各种不同频率的信号。DDS具有较高的频率分辨率,可快速实现频率切换,且频率切换时能够保持相位连续。
DDS技术的理论依据是奈奎斯特采样定理。根据该定理,对于1个周期的连续正弦波信号,以等量的相位时间间隔对其进行相位/幅度采样,得到1个周期性正弦信号的离散相位的幅度序列,并对模拟幅度进行量化编码。这样就可以把一个周期性的连续正弦信号转换成一系列离散的二进制序列,最后把它存储在只读存储器中,每个存储单元的内容即是量化的正弦波的幅度值。这样的一个只读存储器构成一个与2π周期内相位取样相对应的正弦函数查表,称为正弦波波形存储器。
图1所示是一个DDS电路的工作原理框图。
图1 DDS原理框图
电路由基准时钟、相位累加器(包括累加器和相位寄存器)、波形存储器(包括正弦查表和
输出寄存器)、D/A转换器(DAC)和低通滤波电路(LPF)组成。相位步进量K的作用是控制相位变化的速度。相位寄存器输出值作为地址值送入正弦查表,每来一个时钟脉冲,取得相应相位对应的波形幅度,通过输出寄存器及后续电路输出对应的模拟幅值。同时,反馈到累加器端的相位数与相位步进量相加,产生新的累加相位数。累加器在基准时钟的作用下,进行线性相位累加,当加满量时就会产生一次溢出,这样就完成了一个周期,也就是DDS输出信号的周期。
举个例子,假定基准时钟=1024kHZ,累加器位数N=10,K=1,则累加器加满210=1024次产生溢出,输出一个完整的波形,峰峰值=1kHZ。如果K=8,则累加器只需要1024/8=128次就产生溢出,故=8kHZ。推导可得DDS输出信号的频率为:
输出频率与相位步进量K成正比,故又称为频率控制字。DDS的频率分辨率为,N位数越多,分辨率越高。
2.DDS的VHDL语言实现
现代电子设计的一个重要特征是采用HDL(Hardware Description Language)硬件描述语言来实现电路的设计。这种设计方法功能强大,避开具体的器件结构,可以用于设计大规模电子系统。其中VHDL语言是经过IEEE确认的标准硬件语言,应用广泛。在Multisim中就提供了VHDL设计接口与仿真功能。启动Multisim VHDL的方法是在用户界面中,单击仿真菜单下的VHDL仿真命令,系统将进入VHDL主窗口。
在VHDL中实现四个模块:10位累加器、相位寄存器、正弦查表和输出寄存器,然后用模块组装的方式形成一个整体。而D/A转换器电路和低通滤波器电路留在Multisim主界面中实现。
(1)10位累加器的实现
襄樊电影N位累加器的输入信号为:相位步进量K(10位)、基准时钟CLK、使能信号EN和复位信号RESET。输出信号为8位数据信号OUTS(低两位截去)。其实现的部分源程序如下:
PROCESS(CLK,EN,RESET) IS
        BEGIN
            IF RESET='1' THEN
                TEMP<="0000000000";
            ELSE
              IF CLK'EVENT AND CLK='1' THEN
                  IF EN='1' THEN
                      TEMP<=CONV_STD_LOGIC_VECTOR(CONV_INTEGER(TEMP)
+CONV_INTEGER(K),10);
                  END IF;
              END IF;
          END IF;
          OUTS<=TEMP(9 DOWNTO 2);
END PROCESS;
(2)相位寄存器的实现
相位寄存器的作用是在时钟脉冲的作用下将10位累加器的输出(8位)作为地址信号送到正弦查表。其实现的部分源程序如下:
        PROCESS(CLK) IS
        BEGIN
            IF(CLK'EVENT AND CLK='1') THEN
                Q<=D;
            END IF;
    END PROCESS;
(3)正弦查表的实现
正弦查表用于实现正弦波形数据的存储和输出。在本实例中,相位累加器的位数为10,对应1024个相位点。为了减小波形存储器的容量,将地址信号的低两位截去,故相邻的4个相位点对应一个波形数据。利用C语言编程得到0-255总共256个点的波形数据,通过一定的线性变换转换为整数十六进制形式,然后在VHDL源程序中应用。其实现的部分源程序如下:
PROCESS(CLK) IS
        BEGIN
            IF(CLK'EVENT AND CLK='1') THEN
                CASE ADDR IS
                    WHEN X"00" =>OUTP<=X"80";
                    WHEN X"01" =>OUTP<=X"83";
                    WHEN X"02" =>OUTP<=X"86";
                  ………………………………;
胥荣东                    WHEN X"FD" =>OUTP<=X"77";
                    WHEN X"FE" =>OUTP<=X"7A";
                    WHEN X"FF" =>OUTP<=X"7D"; 
                    WHEN OTHERS=>OUTP<="ZZZZZZZZ";
                END CASE;
            END IF;
    END PROCESS;
(4)输出寄存器的实现
输出寄存器与正弦查表组成了正弦波波形存储器。采用输出寄存器的目的是引入两级时钟形成流水线结构,提高波形存储器的响应速度。它的实现方法可参照相位寄存器的实现。
(5)DDS模块的组装与测试
将以上模块组装起来形成一个完整的DDS模块,其部分源程序如下:
    ENTITY DDS IS
            PORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
                CLK:IN STD_LOGIC;
                EN:IN STD_LOGIC;
                RESET:STD_LOGIC;
                Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
    END ENTITY DDS;
    ARCHITECTURE ART OF DDS IS
          U0:SUMPHASE PORT MAP(K=>K,CLK=>CLK,EN=>EN,RESET=>RESET,OUTS=>S1);
          U1:REGPHASE PORT MAP(D=>S1,CLK=>CLK,Q=>S2);
          U2:SINROM PORT MAP(ADDR=>S2,CLK=>CLK,OUTP=>S3);
          U3:REGOUT PORT MAP(D=>S3,CLK=>CLK,Q=>Q);
    END ARCHITECTURE ART;
为了在Multisim中进行正确的仿真,首先要在VHDL环境中进行功能测试。新建一个测试文件,给定输入激励信号和需要验证的输出信号。然后编译以上的源文件,并进行连接,产生一个可执行的仿真文件DDS.VX。在VHDL的仿真测试窗口中,只能看到在给定的相位步进量和基准时钟下,对应的正弦输出数据。为了更直观的进行系统测试,下面的仿真转移到Multisim主界面进行。
科学与文学的对话3.DDS的Multisim仿真
    在Multisim中构建DDS仿真电路,如图2所示。
图2 DDS仿真电路
其中模块DDS元件是利用Multisim的元件向导功能生成的。单击工具菜单下的元件向导菜单,在弹出的对话框中设置元件的模式(VHDL仿真模式),设置元件的名称,引脚数目,导入上面生成的仿真模型文件DDS.VX,并将元件引脚与VHDL中的输入输出引脚生产映射关系,这样在元件库中就生成了一个DDS仿真元件。其中引脚1-10输入频率控制字K,引脚1
4-21输出波形幅度数据,clk引脚输入基准时钟频率。
图中所用电位器R1和A/D转换器的功能是在仿真过程中,用于实时调节给定的频率控制字K。考虑到仿真速度和最高输出频率的限制,A/D转换器采用8位,频率控制字的最高两位设置为0,此时输出最高频率。设置R1调节的快捷键为A(增加)和SHIFIT+A(减少),步进量设为10%。比如电位器值0%,对应K=0,电位器值100%,对应K=255,电位器值50%,对应K=127。

本文发布于:2024-09-22 12:46:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/158301.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:相位   输出   信号   元件   频率   电路   实现   寄存器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议