第8章应⽤VHDL语⾔⽅法设计简易正弦波信号发⽣器 第8章应⽤VHDL语⾔⽅法设计简易正弦波信号发⽣器
【要求】
掌握运⽤VHDL语⾔设计正弦波形发⽣器的基本⽅法
【知识点】
理解函数发⽣器的含义
理解VHDL设计正弦波形发⽣器
理解FPGA对D/A的接⼝和控制技术
【重点和难点】
VHDL设计正弦波形发⽣器
FPGA对D/A的接⼝和控制技术
§8.1 ⼯作任务的陈述与背景
⼀、⼯作任务
⽤VHDL语⾔⽅法设计⼀个正弦波形发⽣器。
基本要求:
①学习VHDL设计正弦波形发⽣器;
②掌握FPGA对D/A的接⼝和控制技术。
完成波形发⽣器的设计、仿真测试及实验系统上的硬件测试。
⼆、任务背景
⾃20世纪60年代以来信号发⽣器有了迅速的发展,出现了函数发⽣器。作为电⼦系统的重要组成部分,它⼴泛地应⽤在电⼦技术实验、⾃动控制系统和其他科研领域。早期的信号发⽣器多采⽤模拟电⼦技术,电路形式有采⽤运放及分离元件构成,也有采⽤单⽚集成函数发⽣器专⽤芯⽚。
但采⽤模拟电路组成的函数信号发⽣器,⼀般可靠性较差,频率输出精度、稳定度低,调节不够精确, 设计过程复杂、困难,功能不易扩展,尤其对任意波信号产⽣较为困难,难以满⾜科研和⾼精度实验的需要。现代⾼精度函数发⽣器设计采⽤了EDA 技术,不但⼤⼤缩短了开发研制周期,提⾼了设计效率,输出信号频率精度和稳定度有很⼤提升,⽽⽬使系统具有结构紧读、设计灵活、实现简单、性能稳定的特点。
本章着重介绍采⽤EDA技术,应⽤VHDL语⾔,在ALTERA公司的QuartusⅡ软件环境下,完成频率可调的正弦波发⽣器的程序设计过程,并进⾏逻辑综合、仿真和硬件下载,产⽣正弦波信号。
§8.2 完成⼯作任务的引导
⼀、资讯
要完成本任务,需要了解以下⽅⾯的知识。高斯加速器
1.函数(波形)信号发⽣器的定义和作⽤
函数(波形)信号发⽣器能产⽣某些特定的周期性时间函数波形(C n1,弦波、⽅波、⼆⾓波、锯齿波和脉冲波等)信号,频率范围可从⼏个微赫到⼏⼗兆赫。函数信号发⽣器在电路实验、设备检测、通信、宙达、导航、宇航等领域中具有⼗分⼴泛的⽤途。本次设计只是简单完成正弦波输出的功能。
2.直接数字合成器DDS ( Direct Digtal Synthesizer)知识
DDS中变要包括频率控制寄存器、⾼速相位累加器和正弦计算器⼆个部分,本次设计参考DDS设计电路结构。 ①频率变化知识。⽤户通过输⼊频率控制码来改变输出信号频率。
②相位变化知识。通过相位累加器根据频率控制码在每个时钟周期内进⾏相位累加来改变相位值。
③波形信号产⽣知识。正弦计算器计算数字化正弦波幅度值,再把幅度值保在芯⽚的ROM中。通过查表⽅式扫描数据输出。
3. DAC控制器的知识
DDS芯⽚输出的⼀般是数字化的正弦波,因此还需经过⾼速D/A转换器和低通滤波器才能得到⼀个可⽤的模拟频率信号。使⽤DAC时要考虑DAC的位数和转换时间。常⽤的低速⼋位DAC为DAC0832。
⼆、计划
采⽤DDS⽅式设计波形信号发⽣器,⾸先要了解DDS的结构和每个部分的功能,如图8-1所⽰,本次设计在CPLD/FPGA芯⽚内部由频率控制字、相位累加器、波形数据ROM⼆个部分构成,在外部把波形数据循环扫描后输出给DAC转换成模拟信号,通过低通滤波器平滑波形最后输出所需波形。设计中着重完成以下部分内容。
①完成频率控制器的设计。此设计可以通过计数器、分频器设计原理完成。
②相位控制设计。对所查表中每个地址进⾏数据累加,即可改变信号输出相位。
③计算正弦波各点的幅度离散值。在此设计中我们把⼀个正弦波分离成128个点坐标。由于VHDL只适合整数运算,此各离散值由计算器或公式求出,并存储在ROM中。
三、决策
根据图8-1所⽰的正弦波信号发⽣器组成框图,分步完成正弦波信号发⽣器的设计。其设计步骤可参考如下步骤进⾏。
①设计⼀个分频器,要求能进⾏频率调整。
②设计⼀个相位累加器,相位可以前后移位。
③通过计算求出正弦波128个离散幅值,并进⾏储存。
④将程序下载⾄FPGA/CPLD芯⽚,并和DAC0832连接。
四、实施
如图8-1所⽰,完整的正弦波形发⽣器由3部分组成。
1.频率控制字设计
由于⼀个完整的波形由128个离散坐标点构成,所以要完整⽣成⼀个波形,则输⼊时钟需要128个脉冲。从⽽可得知要输出1 Hz的正弦波,需要
128 Hz的时钟,也就是输⼊输出分频⽐128/1。若对输出信号频率进⾏控制,可通过对输⼊时钟分频来改变频率,分频系数可以改变。
在下⾯实例中,“ clk”为芯⽚时钟输⼊端,可由品振提供⾼稳定度、⾼精度脉冲信号。“d” 和“f”为分频系数控制脚,当f =“0”时,
cagaad脚每来⼀次脉冲,则分频系数⾃动加1;相反,若f = "1”时,根据d脚的
脉冲数⾃动减。
图8-2为频率控制的仿真图。clk_o为输出脚进过分频后的时钟信号,该信号可以接⼊到下⼀级相位控制部分,然后进⾏相位调节。
如果仿真结果正确,可以将设计的项⽬⽣成⼀个元件符号备⽤。其步骤是:选择原理图⽂件为当前⽂件后,选择菜单命File →Create/LTpdate
→Create Symbol Files for Current File即可。本电路⽣成的元件符号如
图8-3所⽰。学生证制作
频率控制程序参考:
process(clk)⼀基准时钟分频
begin
if clk'event and clk='1' then
t0<=t0+tl;
end if;
end process;
--------------------------------------
process(d,f) ---频率控制字
begin
if d'event and d='1' then
if f='0' then
tl<=t1+1;
else
t1 <=tl-1;
end if;
end if;
end process;
Clk_o<=t0(3);
2.相位累加器设计
对于正弦信号发⽣器,它的输出可以⽤下式来描述:
(8-1)
其中,是该信号发⽣器的输出波形; 指输出信号对应的频率。上式的表述对于时间t 是连续的,为了⽤逻辑实现该表达式,必须进⾏
离散化处理,⽤基准时钟进⾏抽样,令正弦信号的相位为
(8-
2)
在⼀个clk 周期内,相位的变化为
(8-3) 其中,foot 指clk 的频率,2π可以理解为“满”相位。为了对其进⾏数
字量化,把2π切割成份,由此每个clk 周期的相位增量⽤量化值
来表⽰:
(8-4)
且为整数。与式(8-3)联⽴,可得 (8-5) 显然,信号发⽣器的输出可描述为 (8-6) t f out πθ2=clk
out clk out f f T f ππθ22==?)2sin(t f A s out out π=N B 22??≈?πθθclk
out N clk out N
f f B f f B ?==??2,2θθ
)sin()](22sin[)sin(111θθθθπ
θθ??-+=+?=?+=--B B Af B B A A S k k N k out
其中,指前⼀个clk 周期相位值,同样得出
由上⾯的推导可以看出,只要对相位的量化值进⾏简单的祟加运
算,就可以得到正弦信号的当前相位值,⽽⽤于叠加的相位量量化
值决定了信号的输出频率,并呈现简单的线性关系:
(8-8) 相位累加器的输⼊⼜可称为频率输⼊字,事实上当系统基准时钟为时,就等于。图8-4为⽣成元件图,clk 为系统基准时钟分频后的时钟输⼊; p 为
相位控制字端,每输⼊⼀个脉冲,波形前后移⼀个相位; d 为相位⽅向控制,
当d = "0”时,相位后移,相反,当d= "1”时,相位前移。
相位控制仿真图如图8-5所⽰,当d=“0”时,P 输⼊每个脉冲后,
相位地址Y 输出量发⽣改变,地址向后增加2。
相位控制程序参考:
process(clk) --- 相位地址累加进程
begin
if clk'event and clk='1' then
tt<=tt+1;
else
tt<=tt-1;
end if;
end if;
end process;
3.波形数据存储
正弦ROM 的查表完成的查表转换,在这⾥可以理解成
相位到幅度的转换,它的相位输⼊是相位调制器的输出,事实上就是ROM 的数
据值输出送往D/A ,转化成模拟信号。ROM 中的数据为正弦波信号⼀个周期的
离散值,可以通过相关计算求出。
N k k B 2
211?≈--πθθclk out N
FFU净化单元f f B ?=?2θ
若需把正弦波改为锯齿波、⽅波信号输出,只需改变ROM中的数据值即可达到产⽣任意波的功能。求正弦波离散点的公式见式(8-5)
因输出数据值范围为0~255,相位离散点为128,则求出每个相位对应的数据:
(8-9)
波形分割的离散点越⼤,相隔相位差别越⽰,输出的波形失真也越⽰。但离散点过多,输出信号的频率与输⼊信号频率分频⽐过⼤,难以提⾼输出信号频率。图8-6中a[6..0]为相位地址输⼊,数据宽度为7位,寻址范围为0~127; D[7..0]为波形数据输出,接DAC数据脚,即可把数字量变化为模拟量输出。
ROM中数据与相位地址关系描述:
process(a)
CASE a IS
WHEN 00=>D<=255;
WHEN O1=>D<=251;
WHEN 02=>D<=247;
WHEN 03=>D<=243;
WHEN 04=>D<=239;
WHEN OS=>D<=235;
WHEN 06=>D<=231;
………… End process;
密度天平4. 连接DAC0832设计
DAC0832是⼋位D/A转换器,转换周期为1µs,其参考电压与+5 V⼯作电压相接(实⽤电路应接精密基准电压)。
DAC0832的引脚功能简述如下。
ILE: 数据锁存允许信号,⾼电平有效,系统上⼰经连接+5V上? :写信号1, 2,低电平有效。
:数据传送控制信号,低电平有效。
:基准电压,可正,可负,-10~+10 V 。
Rfb:反馈电阻端。
IoutI/Iout2 CPIN11, PIN12)电流输出1和 2。 D/A转换量是以电流形式输出的,所以必须将电流信号变为电压信号。
AGND/DGND CPIN3, PIN10):模拟地与数字地。在⾼速情况下,此⼀地的连接线必须尽可能短,⽬系统的单点接地点必须在此连接线的某⼀点上。
在本次设计中,FPGA芯⽚的波形数据输出脚D [7..0]分别接到图8-7中的DA7-DAO脚上,DAC0832可以采⽤直接控制⽅式与FPGA同步⼯作,也可使、信号受控于FPGA⼯作;若直接⼯作,则将、
直接接地即可;若受控于FPGA,则把该⽵脚接在FPGA某个控制脚上,当该⽵
脚输出低电平时,DAC0832输出模拟波形。
1.单独增加频率控制字对输出频率的影响(图8-9、图8-10)
从图中看出,当fre_d的脉冲个数增加时,输出D的频率与clk的频率差距越来越⽰,也就是输出信号的频率增⼤。
当fre_f为“1”时,随着fre_d的脉冲输⼊,信号输出脚的频率降低,从⽽达到频率可调的功能。
2.相位控制仿真(图8-11、图8-12)
部分波形数据对照表如图8-13:
从仿真图和波形数据可以看出,通过相位控制,使输出波形的数据提前或延迟输出。
五、检查
无线公话以上对⼀个正弦信号波发⽣器的各组成部分进⾏了说明并给出了参考电路,读者可⾃⾏按照本设计⽅案的组成原理框图(如图8-1所⽰)将各部分连接起来,组成⼀个完整的正弦波信号发⽣器。频率控制字由fre_d和fre_f同时控制,fre_f控制频率的增减,fre_d控制频率增量⼤⽰。clk是系统基准
时钟,由晶振提供。
若要提⾼输出信号最⾼频率,则品振频率必须提⾼。Pha_p和pha_f 共同负责相位移动。控制⽅法和
频率控制相同。以下给出采⽤本⽅案设计⽽成的正弦波信号发⽣器整体框图(图8-8)和仿真波形图(图8-9和图8-10),以供读者设计时参考。