基于FPGA的多功能波形发生器设计研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于FPGA的多功能波形发生器设计研究作者:雷贵胡福云

来源:《现代商贸工业》2011年第11期

摘要:设计以VHDL为开发语言,对FPGA芯片进行编程设计,并对输出数据进行数模转换,以完成一个简单的周期可调的多波形发生器。

关键词:

FPGA;VHDL;多波形发生器

中图分类号:TB

文献标识码:A

文章编号:1672-3198(2011)11-0280-02

1 引言

在教学实验和教学研究中,信号发生器作为提供测试用电信号的仪器必不可少。目前通用的信号发生器一般只能输出常用的波形信号,无法满足教学实验和教学研究的需要。基于可编程逻辑器件FPGA的多波形信号发生器,采用VHDL编程实现,整个系统除晶体振荡器和

D/A转换外,全部集成在一片美国Altera公司生产的EPF10K10LC84-3的芯片上,FPGA输出的8位数据经DAC0832模数转换器后接示波器观察其波形,通过改变控制信号线的高低电平实现波行的转换。它除了输出常用的正弦波、三角波、方波以外,还可以输出以上两种波形任意线性组合波形。该信号发生器输出波形的频率可数控选择,100HZ~1KHZ,且可手动调节频率,频率步进间隔为100HZ。

2 各模块电路设计

2.1 总体设计

FPGA器件内部结构多功能波形发生器由初值模块、分频模块、方波产生模块、三角波产生模块、正弦波产生模块、波形输出控制模块等部分组成,如图1所示。

调频模块TIAOPIN的主要目的是使频率调节能够手动执行。通过手动输入端口RESETY 输入若干脉冲,可达到对周期可调的多波形发生器循环选择输出频率的目的。初值模块

CHUZHI提供初值,供下一个模块FANA分频时用,通过不同的初值,在波形产生模块得到不同的工作频率,从而实现调节波形频率的目的。由于输入的晶振频率是5MHz。而要求得到的波形的频率为100Hz~1KHz,频率步进为100Hz。而又由于设计的波形模块都是64个时钟为一个周期。因此要求波形模块得到的频率是6.4KHz~64KHz。由5M/64KHz≈78,而又由频率输出分高电平和低电平。这样78/2≈39,这样可以得到输入状态为1001时,Q的输出参数为39;分频模块FANA的功能是将前一模块CHUZHI送来的初值对时钟进行分频,得到不同的工作频率,从而调节波形频率;方波产生模块ZENG的功能是产生方波;三角波产生模块DELTA的功能是产生三角波;正弦波产生模块SIN的功能产生正弦波;波形输出控制模块CHPRO31设置了三个按键,分别控制三种波形任意一种,或任意两种波形的叠加。

2.2 方波发生模块

方波的产生,只需根据占空比,调节一个周期内输出高、低电平时间即可。每32个时钟翻转一次,每64个时钟为一个周期(为了与正弦波相同)。对于输出Q就是从0和255转换。主要程序如下:

ifclr='0'then a

elsif clk'event and clk='1' then

if cnt

cnt:=cnt+1;

else

cnt:=0;

a

end if;

end if;

if clk'event and clk='1' then --输出Q循环输出0和255

if a='1' then

q

esle

q

end if;

end if;

2.3 正弦波发生模块

对幅度为1 的正弦波的一个周期进行64 点采样,将每个点的数值存贮到FPGA芯片中,由时钟脉冲提供频率,已存数值提供幅度值,这样来完成一个完整的波形输出。理论上,采样点数及量化位数越多,合成波形精确度越高。D/AC0832 位数为8 位,量化等级最高为256,其量化误差已能达到要求,对于查正弦表的舍入误差也可忽略,故不采用更高位数的数模转换器。即可得到幅度上离散正弦波,再经过D/A 转换,便可得到连续正弦波。

2.4 三波角输出

利用波形的函数表达式,以计数器的方式来实现三角波形输出。为了得到64个时钟为一个周期的三角波,对于8位D/A转换芯片,输出Q每次都加/减8。程序如下:

if clr='0' then

tmp:="00000000";

elsif clk'event and clk='1' then

if a='0' then --a表示三角波上升状态(0)或下降状态(1)

if tmp="11111000" then

tmp:="11111111";

a:='1';

else

tmp:=tmp+8;--

end if;

else

if tmp="00000111" then

tmp:="00000000";

a:='0';

else

tmp:=tmp-8;

end if;

end if;

end if;

q

2.5 叠加输出

CHPRO31模块是一个简单的波形选择输出模块。为了使波形叠加以后每一时刻的波形,都不超过数模转换芯片的范围,因此做了相应的除法操作,就是利用并置运算符&。

case tmp is

when "100" =>q

when "010" =>q

when "001" =>q

when "110" =>a:="00"&dlta+zeng;

q

when "101" =>a:="00"&dlta+sina;

q

when "011" =>a:="00"&zeng+sina;

q

when "111" =>a:="00"&dlta+zeng;

相关文档
最新文档