1、摘 要 本篇报告主要介绍了用EDA设计完成直接数字频率合成器DDS的过程。该直接数字频率合成器输出的频率及相位均可控制,且能输出正弦、余弦、三角波、锯齿波、方波五种波形,经过转换之后还能在示波器上显示,在控制电路的作用下能实现保持、清零功能,另外还能同时显示输出频率、相位控制字、频率控制字。本设计利用QuartusII 5.0软件进行DDS的设计,最后下载到SmartSOPC实验系统中进行硬件测试。Abstract This report introduces the EDA design is completed with Direct Digital Synthesis DDS proce
2、ss. The direct digital frequency synthesis of the output frequency and phase can control, and can output sine, cosine, triangle wave, sawtooth, square waveform five, after conversion after also displayed on the oscilloscope, in the role of the control circuit can be Implementation maintained cleared
3、 function, and also shows the output frequency, phase control characters, frequency control word. This design uses DDS QuartusII 5.0 software design, the final download SmartSOPC experimental system hardware testing.关 键 词EDA设计、直接数字频率合成器DDS、QuartusII 5.0软件、SmartSOPC实验系统Key wordsEDA design,Direct Digi
4、tal Synthesizer DDS, QuartusII 5.0software, SmartSOPC experiment system目 录摘要 关键词第1篇 多直接数字频率合成器DDS设计要求说明 1.1 设计基本要求第3页 1.2 设计提高部分要求第3页第2篇 对整体电路工作原理的方案论证 第4页第3篇 各子模块设计原理说明 3.1频率预置与调节电路第5页 3.2相位累加器模块第5页 3.3波形存储器模块第7页 3.4相位调节器第9页 3.5波形输出模块第9页 3.6频率测定模块 第10页3.7显示模块模块 第12页 3.8开关功能说明 第14页第4篇 调试、仿真、编程下载过程第1
5、4页第5篇 实验总结 5.1 对本设计的一些改进方案第15页 5.2 实验感想第15页参考文献第1篇 直接数字频率合成器DDS设计要求说明1.1 设计基本要求1) 利用QuartusII软件和SmartSOPC实验箱实现DDS的设计;2) DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA 芯片中的ROM实现,ROM结构配置成409610类型;3) 具体参数要求:频率控制字K取4位;基准频率fc=1MHz,由 实验板上的系统时钟分频得到;4) 系统具有清零和使能的功能;5) 利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正弦波形;6)
6、 通过开关(实验箱上的Ki)输入DDS的频率和相位控制字,并能用示波器观察加以验证;1.2 设计提高部分要求1) 通过按键(实验箱上的Si)输入DDS的频率和相位控制字,以扩大频率控制和相位控制的范围(注意:按键后有消颤电路);2) 能够同时输出正余弦两路正交信号;3) 在数码管上显示生成的波形频率;4) 充分考虑ROM结构及正弦函数的特点,进行合理的配置,提高计算精度;5) 设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器;第2篇 对整体电路工作原理的方案论证 DDS即Direct Digital Synthesizer数字频率合成器,是一种基于全数字技术,从相位概念出发直接合
7、成所需波形的一种频率合成技术,是一种新型的数字频率合成技术。具有相对带宽大、频率转换时间短、分辨力高、相位连续性好等优点,很容易实现频率、相位和幅度的数控调制,广泛应用于通讯领域。fc相位累加器相位调节电路波形存储器D/A转换器频率控制字、相位控制字、频率显示电路低通滤波器kfkpN位fo2.1 DDS基本结构图频率预置与调节电路图1.本设计DDS基本结构图2.2工作原理说明 本设计DDS主要由频率预置电路、相位累加器、波形存储器、D/A转换器、低通滤波器组成。可通过频率控制字kf和相位控制字kp输出频率和相位均可调的正弦波、余弦波、三角波、锯齿波、方波。输出频率fo是对基准频率fc的分频,其
8、关系如下:fo=(kf/2N)fc 在本设计中,N取12位,基准频率fc取1MHz,kf从0000(0)到1111(15),所以输出频率从0到3840Hz。第3篇 各子模块原理说明3.1 频率预置与调节电路 本模块的主要功能是产生基准频率fc、频率控制字kf、相位控制字kp。 SmartSOPC实验箱提供的是48MHz的系统时钟,需要经过48分频得到基准频率fc,48分频用一个模48计数器即可实现。具体电路如图2所示(参见原理图文件48counter74161.bdf)。图2.模48计数器 如图所示,用两片二进制加法计数器74161实现模48计数器,在74161时钟输入端输入系统时钟48MHz
9、,q5端输出的就是基准频频1MHz。 频率控制字kf设计的是从0000到1111的四位二进制数,但是为了与相位累加器相匹配,kf需要定义成12位的二进制数。所以kf的高8为都要赋零,只需要控制低四位。若直接用开关输入需要4个开关,而SmartSOPC实验箱提供的只有8个开关,为了节省开关,本设计利用一个模16计数器来产生频率控制字kf。计数频率采用1Hz,1秒钟计一次数,通过开关来控制使kf达到需要频率控制字(参见原理图文件dds.bdf)。 同样,为了与加法器匹配,相位控制字也定义成了12位的二进制数,为了方便起见,kp也设计了从0000到1111十六个状态,但是若加在低四位,当kp也从00
10、00到0001时,相位只变化了2/212=/2048,肉眼很难观测到,从0000到1111也之变化了/204816=/128,在示波器上很难看到。所以本设计将4位相位控制字加在高四位,低八位赋零。这样从0000到1111,相位变化了2/21227=/16,在示波器上很容易看到的,从0000到1111相位变化了。3.2 相位累加器模块kf相位寄存器相位累加器fc相位量化序列N位 相位累加器的结构图如图3所示。 图3.相位累加器结构图 相位累加器在基准频率信号fc的控制下以频率控制字kf为步长进行累加运算,产生所需要的频率控制数据。相位寄存器则在时钟的控制下把累加的结果作为波形存储器ROM的地址,
11、实现对波形存储器ROM的寻址。当累加器加满量时就会产生一次溢出,完成一个周期性的动作。这个周期也就是DDS信号的一个频率周期。 本设计相位累加器采用文本输入法VHDL语言设计,具体如下(参见VHDL源文件SUM4096.vhd):-SUM4096.VHDLIBRARY 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
12、: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=000000000000; ELSE IF CLKEVENT AND CLK=1 THEN IF EN=1 THEN /使能端EN为1时累加器正常工作 TEMP=T
13、EMP+K; /时钟CLK上升沿到来时以kf为步长递增 END IF; END IF; END IF; OUT1=TEMP; /将目前的累加结果保存并输出,下次上升沿时实现累加 END PROCESS;END ARCHITECTURE ART; 以上程序不仅定义了累加器还添加了清零和使能功能。相位寄存器是与相位累加器同步的寄存器,也是采用文本输入法VHDL语言设计,具体如下(参见VHDL源文件REG1.vhd):-REG1.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG1 IS PORT(D:IN STD_LOGIC_VECTOR(
14、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(CLKEVENT AND CLK=1 )THEN Q=D; /当时钟上升沿到来时输出相位累加器的结果 END IF; END PROCESS; END ARCHITECTURE ART; 相位寄存器的输出就是波形存储ROM的地址。3.3 波形存储器模块 用累加器的输出作为波形存储器的取样地址,进行波形的相位幅值转
15、换,即可在给定的时间上确定输出的波形的抽样幅值。以正弦波形存储器sine_rom为例,N(12)位的寻址ROM相当于把02的正弦信号离散成具有2N个样值的序列,波形ROM有D(10)位数据位,所以设置2N个样值的sin值以D位二进制数值固化在ROM中,这里设置D=10,所以ROM中的数据范围应该从0到1023,但是正弦值只从-1到1,所以要对其进行量化,公式如下:存储数据=round(sin(n2/4096)512+512 其中,n为存储地址,范围是从0到4095。地址数据波形存储器ROM相位量化序列12位正弦幅度量化序列10位 按照地址的不同可以输出相应相位的正弦信号的幅值。相位幅度变换原理
16、如图4所示。图4.相位-幅度变换原理图 同理,余弦波ROM、锯齿波ROM、三角波ROM、方波ROM只需在ROM里存储相应波形的幅度量化序列即可。1) 正弦ROM的存储数据表参见dds.mif。2) 余弦ROM的存储数据表与正弦ROM类似(参见cos.mif):存储数据=round(cos(n2/4096)512)+512存储数据存储地址n0102351110232047307140953) 三角波ROM的数据表参见sanjiao.mif。三角波的数据没有现成的生成三角波的数据,本设计根据图5做出相应的函数产生三角波的数据表。图5. 三角波 所以三角波函数如下:当n(0,1023)时,存储数据r
17、ound(n2)512;当n(1023,3071)时,存储数据 1024round(n2)512;当n(3071,4095)时,存储数据 round(n2)2048512;存储数据存储地址n0102340954) 锯齿波ROM的数据表参见juchibo.mif。锯齿波的波形如图6所示。 图6.锯齿波 由图6可得出锯齿波的函数如下:存储数据=round(n4)5) 方波ROM的数据表参见fangbo.mif。方波的波形如图7所示。存储数据存储地址n0102340952047 图7.方波 由图7可得出方波的函数如下:1023,n (0,2047) 0, n (2047,4095)存储数据= 最后,
18、生成5个存有不同波形的存储器,分别是sine_rom、cos_rom、fangbo_rom、juchibo_rom、sanjiao_rom。分别如图8所示。正弦波sine_rom余弦波cos_rom方波fangbo_rom三角波sanjiaobo_rom锯齿波juchibo_rom 图8. 5个波形存储器 所有.mif文件的数据都来源于电子表格ROM地址数据。3.4 相位调节模块 相位控制模块是在ROM地址信号输入波形存储器ROM之前,将相位控制字叠加上去,使相位都增加相应的值。这个功能用一个加法器就能实现。该加法器采用文本输入法VHDL语言设计,具体如下(参见VHDL源文件xiangweij
19、iafa.vhd):-xiangweijiafa.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY xiangweijiafa IS PORT(K1:IN STD_LOGIC_VECTOR(11 DOWNTO 0); K2:IN STD_LOGIC_VECTOR(11 DOWNTO 0); OUT2:OUT STD_LOGIC_VECTOR(11 DOWNTO 0);END ENTITY xiangweijiafa;ARCHITECTURE ART OF xiangweijiaf
20、a IS BEGIN OUT2=K1+K2;END ARCHITECTURE ART; 加法器输出的信号再输入ROM的地址输入端,输出的波形在示波器上会发生平移,即相位输出发生了变化。3.5波形输出模块 由波形存储器ROM输出的是量化的数字信号,这种信号在示波器上显示出来是离散的,所以还要经过D/A转换器,在经过低通滤波器输出才能在示波器上显示出连续的波形。事实上经过D/A转换后不需要低通滤波器就已经可以满足我们的要求了。DDS基本工作流程图如图9所示。相位累加器ROMD/A低通滤波器图9.DDS基本工作流程图 本次实验箱提供了两片D/A转换芯片,本设计中,第一片D/A转换芯片始终输出正弦波,
21、余弦波、三角波、锯齿波、方波通过控制电路在第二篇D/A转换芯片选择输出。选择电路的原路很简单,四种波形由四路数据,每路数据都有10位,所以用两个开关作为地址端来控制5片双四选一数据选择器74153就可实现波形的四选一。具体电路如图10所示(参见原理图文件4xuan1.bdf):图10.四种波形的选择输出 图10中,c9.0是余弦信号,f9.0是方波信号,s9.0是三角波信号,j9.0是锯齿波信号。a1a0是地址端,对应的波形输出如表1所示。表1 输出波形选择a1a0输出信号y9.0对应波形00c9.0余弦波01f9.0方 波10s9.0三角波11j9.0锯齿波3.6频率测定模块 本设计的测频电
22、路是通过测定相位累加器输出的ROM地址信号在1秒钟内溢出的次数来测定输出频率的。原理图如图11所示。二分频单位时钟信号待测信号时钟清零计数器时钟锁存器图11.测频电路原理图 电路波形示意图如图12所示。计数锁存清零反相延时单位时钟单位时钟二分频反相延时待测信号图12.测频电路波形示意图 单位时钟进过二分频之后得到周期为2秒的时钟信号,利用这个时钟信号,使计数器在1秒钟的时间内对待测信号进行计数,在下一秒的时间内对计数结果进行锁存并输出。这里利用了反相器的演示效应,否则锁存器的输出永远都会是0000,而且在编译成功后进行仿真时会发现,功能仿真是输不出结果的,这就是因为软件进行的功能仿真是理想仿真
23、,忽略了门电路的实际延时效应,所以即使计数器输出正确,锁存器的也还是没有结果输出的,只有将总电路下载到试验箱才能检测测频器是否正确。 测频器的电路图如图13所示(参见原理图文件cepinyi.bdf)。图13.测频器电路图 图中,signal就是待测信号,接入的是相位累加器输出的最高位out1(11)。jishuqi4096是用4片十进制加法计数器组成的同步计数器,最大可计到十进制的9999,输出个十百千四路4位的8421BCD码,对于本设计来说输出频率最大是3840Hz,而设计计数器是模10000的,所以完全够用了。寄存器是由4片74173组成的。仿真波形如图14所示(参见波形文件cepin
24、yi.bdf)。图14.测频器仿真波形图 其中,g、s、b、q是寄存器的输出,gg、ss、bb、qq是计数器的输出,可见计数器的输出是没问题的,但是寄存器始终没有输出,这就是上面说到的功能仿真的缺陷。3.7显示模块 该模块实现了频率控制字kf、相位控制字kp、输出频率fo的显示。因为频率控制字和相位控制字都是四位的二进制码,要转换成8421BCD码才能在数码管上显示。输出频率本身就是8421BCD码,不需要转换。频率控制字和相位控制字都是只有从0000到1111十六个状态,也就是从十进制的0到15,各需要2各数码管,加上频率的四位数正好需要8各数码管。 首先看频率控制字和相位控制字的转换电路。
25、频率控制字和相位控制字的数据类型相同,所以可以用同样的转换电路。以下以频率控制字的转换为例。本设计是依据下表来进行码制转换的。表2.二进制与8421BCD码频率控制字kf十进制个位(kfg3.0)十进制十位(kfs3.0)0000(0)0000(0)00000001(1)0001(1)00000010(2)0010(2)00000011(3)0011(3)00000100(4)0100(4)00000101(5)0101(5)00000110(6)0110(6)00000111(7)0111(7)00001000(8)1000(8)00001001(9)1001(9)00001010(10)0
26、000(0)00011011(11)0001(1)00011100(12)0010(2)00011101(13)0011(3)00011110(14)0100(4)00011111(15)0101(5)0001 从上表可以一看出,当kf从0000到1001时,也就是从0到9是1位数时,转换后的8421BCD只有个位计数,十位保持0000,并且此时个位kfg3.0=kf;当kf从1010到1111,也就是从10到15上升为两位数时,转换后的8421BCD码十位一直保持是0001,个位是从0000到0101,也就是从0到5,所以此时个位kfg3.0=kf1010,也就是当kf上升为两位数以后减去1
27、0就是转换后的个位。所以设计电路如图15(参见原理图文件kf-to-8421.bdf)。图15.频率控制字码制转换电路 如图15所示,图中k3.0是频率控制字,首先通过一片4线16线译码器74154判断kf是一位数还是两位数。当kf是一位数时,译码器只有q0q9中的一个为0其余均为1;当kf是两位数时,译码器只有q10q15中的一个为0其余均为1。所以,将q9.0全部与非得到信号c,将q15.10全部与非得到信号d,c和d不可能同时为1或者同时为0,当c=1时,可以判断kf是一位数,当d=1时,可以判断kf是两位数。 根据表2,当kf是一位数即c=1时,kfg=kf,kfs=0;当kf是两位数
28、即d=1时,kfg=kf10,kfs=1。 对于转换后的十位,只需要输出最后一位即可,因为kfs只有0000和0001两个状态,所以前三位全部置零,最后一位直接用d信号表示即可。 对于个位,当kf是两位数时,kfg=kf10,减10即减1010,也即加上0101再加1,所以kfg=kf1010=kf+0110,本设计采用一片4位加法器7483实现,如图15中的jia模块,具体电路图参见原理图文件jia.bdf。加法器输出s3.0信号。所以现在再通过一个二选一电路就可以得到kfg3.0。原理如下:kfg3.0=c&kf3.0+d&s3.0 本设计采用简单的门电路实现2选1的功能,如图15中的to
29、8421模块,具体电路参见原理图文件to8421.bdf。用4个to8421模块就可以实现kfg3.0信号的选择输出。 这样频率控制字就从四位二进制数转换成为8421BCD码,可以在数码管上显示,相位控制字的转换原理同上。 下面就可以将这八路数据通过数码管显示了。本设计的显示电路同样是动态显示,具体电路图参见原理图文件xianshi.bdf。本设计现将八路数据都进行显示译码电路,在通过数据选择器轮流选择七段码,数据选择器的地址端由一个模8计数器的输出x2x1x0控制,同时x2x1x0经过一个三线八线译码器产生8个数码管的片选信号,数据选择器十一1KHz的时钟信号计数的。3.8开关功能说明开关功
30、能key1(en端)使能开关:k1=1正常工作,k1=0保持key2(reset端)清零开关:k2=1清零,k2=0正常工作key3(kf端)频率控制字计数开关:k3=1频率控制字以1Hz的频率递增,k3=0保持当前的频率控制字key4(kp端)相位控制字计数开关:k3=1相位控制字以1Hz的频率递增,k3=0保持当前的相位控制字key5(a0端)选择输出波形key6(a1端)第4篇 调试、仿真、编程下载过程 实验过程中没做完一个模块添加一项功能之后都要进行编译仿真,在确定各子模块的功能都正确之后组合整体电路(参见原理图文件dds.bdf),并对其进行综合编译,编译成功之后就可以准备下载到Sm
31、artSOPC实验箱了。在下载之前要注意将未使用的管脚设置为三态输入。之后就可以给各输入端输出端分配管脚,其中输入端48MHz分配到实验箱的系统时钟48MHz的脉冲,输入端en、reset、kf、kp、a0、a1分别分配到实验箱的手动开关KEY1到KEY6,输出端abcdefg分配到显示管七段码,输出端s7.0分配到数码管的片选端DIG7到DIG0。 之后下载到SmartSOPC实验箱后对各项功能进行验证和调试。第5篇 实验总结5.1 对本设计的一些改进方案1. 本设计的译码显示部分先将8路32位数据进行显示译码后再用数据选择器选择输出,这样32位数据进过显示译码变成8路56位,还需要7个8选
32、1数据选择器。总共用了15个芯片。但事实上可以不用这么多芯片,先用4片8选1数据选择器选出一路数据,再用一片显示译码器就可以了,这样采用了5个芯片,但是实现了同样的功能。具体原理图如图16所示(参见原理图文件xianshi2.bdf)。图16.改进显示电路2. 在波形选择模块,我认为可以把4种波形的数据存入1个ROM中,那么这个ROM就要设置成1638410的。这样通过开关来控制地址端,当控制端加1时,ROM的地址段加4096,跳入到另一个波形的数据存储区,输出就会使另一种波形。但是这样需要对地址输入信号进行处理,ROM地址输入信号要定义成48位的二进制数。控制端加1,实际上就是12位的地址信
33、号向高位移动12位。利用VHDL语言编程如下(参见VHDL源文件12to48.vhd):-addto48.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY addto48 IS PORT(K1:IN STD_LOGIC; K2:IN STD_LOGIC; ADD:IN STD_LOGIC_VECTOR(12 DOWNTO 0); OUT1:OUT STD_LOGIC_VECTOR(47 DOWNTO 0);END ENTITY addto48;ARCHITECTURE ART O
34、F addto48 IS SIGNAL TEMP: STD_LOGIC_VECTOR(47 DOWNTO 0); BEGIN PROCESS(k1,k2)IS BEGIN IF k1=0 AND K2=0 THEN /第一个状态,将12位地址输入ROM的低12位 OUT1(11 DOWNTO 0)=ADD(11 DOWNTO 0); ELSE IF k1=1 AND K2=0 THEN /第二个状态,将12位地址输入ROM的下一个12位 OUT1(23 DOWNTO 12)=ADD(11 DOWNTO 0); ELSE IF k1=0 AND K2=1 THEN /第三个状态,将12位地址输入
35、ROM的第三个12位 OUT1(35 DOWNTO 24)=ADD(11 DOWNTO 0); ELSE IF k1=1 AND K2=1 THEN /第四个状态,将12位地址输入ROM的高12位 OUT1(47 DOWNTO 36)=ADD(11 DOWNTO 0); END IF; END PROCESS;END ARCHITECTURE ART; 这段程序编译不成功,提示的错误是:Error: VHDL syntax error at addto48.vhd(24) near text PROCESS; expecting a sequenial statement, Error: VH
36、DL error at addto48.vhd(25): type of identifier ART does not agree with its usage as void type 找不到是什么原因,但是思路应该是对的。5.2 实验感想 本次实验我们还是只用了不到4天的时间设计了一个直接数字频率合成器,相比上星期的EDA难度增加了很多。也许是老师的训练重点变了,上星期重点是熟悉EDA设计的主要工具QuartusII 5.0软件,而这星期就应该将重点转入利用这个工具完成设计。 这次实验用到了很多以前没接触过个知识,像VHDL语言,本设计里虽然那有几个模块是用VHDL语言编的,但是都是很简
37、单的程序,还是现学的,终于明白了我们所谓的本科大学生对于专业技术还只是略懂一二而已。看来以后要加强自己的专业知识的积淀。 此外,这两星期的实验都是我和谢婷同学合作完成的,不敢说完成的很顺利,至少出错率比较低,因为两个人都在认真的思考、检查,总有一个人会检查到隐藏的错误。如果是我一个人做实验,一定会出更多的错误,也不一定能完成这么多的功能设计。 最后,感谢电子技术实验中心的老师的耐心指导!参考文献1. 蒋立平编著.数字电路.南京理工大学出版社2. 南京理工大学电子技术中心编.EDA设计实验指导书3. 付文红、花汉兵编著.EDA技术与实验.机械工业出版社4. 王毅评、张振荣编著.VHDL编程与仿真.北京人民邮电出版社5. 潘松、黄继业编著.EDA技术实用教程.北京科学出版社6. 邹彦编著.EDA技术与数字系统设计.北京电子工业出版社7. 谭会生、瞿遂春等编.EDA技术综合应用实例与分析.西安电子科技大学出版社
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100