基于FPGA信号发生器的设计文档格式.docx
《基于FPGA信号发生器的设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA信号发生器的设计文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
![基于FPGA信号发生器的设计文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/26/bf1e5074-5e0c-4d51-aaa6-1143eb86bffe/bf1e5074-5e0c-4d51-aaa6-1143eb86bffe1.gif)
在传统的信号发生器中,大都使用分立元件,而且体积庞大携带不便,且大部分只能输出一种脉冲信号波形。
在设计领域,不管采用什么技术生产,生产的产品用在哪里,其产品设计的宗旨都是离不开以下几点:
实用性高、成本低、可升级、功能完善可扩展等!
使用专用的数字电路设计的信号发生器,设备成本高、使用复杂。
基于以上考虑,在中小型数字电路的设计和测试中,迫切需要设计一种小型易用成本低廉的信号发生器。
此课题的设计以小型经济,集成度高,性能稳定,使用方便为指导,在功能上力求完善实用,同时兼顾商业价值与应用价值的体现。
第2章设计方案
2.1总体设计思路
2.1.1设计步骤
此设计将按模块式实现,据任务书要求,设计总共分四大步份完成:
(1)产生波形(三种波形:
方波、三角波和矩形波)信号;
(2)波形组合;
(3)频率控制;
(4)幅度控制。
2.1.2设计思想
利用VHDL编程,依据基本数字电路模块原理进行整合。
系统各部分所需工作时钟信号由输入系统时钟信号经分频得到,系统时钟输入端应满足输入脉冲信号的要求。
组合波形信号经显示模块输出。
具备幅度和频率可调功能,幅度可通过电位器调整,频率控制模块则是一个简易的计数器,控制步径为100HZ的可调频率,最终送至脉冲发生模块输出脉冲信号,达到设计课题所要求的输出波形频率可调及幅度可调功能。
幅度可调功能由于比较简单,可以在FPGA外部利用硬件电路实现。
总体设计框图如下图1所示:
控制电路
正弦波、方波、三角波信号产生模块
频率控制模块/计数器模块
输出电路
波形组合选择模块
滤波电路
幅度控制/电位器
100HZ~1KHZ
1KHZ
FPGA
图1总体设计框图
2.2方案论证
2.2.1方案一
采用DDS(直接数字频率合成器)来设计,设计总体框图如图2所示。
在设计界里众所周知,DDS器件采用高速数字电路和高速D/A
转换技术,具有频率转换时间短、频率分辨率高、频率稳定度高、输出信号频率和相位可快速程控切换等优点,所以,我们可以利用DDS具有很好的相位控制和幅度控制功能,另外其数据采样功能也是极具精确和完善的,它可以产生较为精确的任何有规则波形信号,可以实现对信号进行全数字式调制。
用FPGA和DDS实现信号调制,既克服了传统的方法实现带来的缺点,若采用它来编程设计,必定会事半功倍,且使设计趋于理想状态。
但鉴于DDS的占用RAM空间较大,我们设计是采用FPGA10K10器件,总共只有一万门的逻辑门数量,而整个DDS设计下来,大概最少会占用3-4万门的数量,所以在性价比方面不合理,这样也使得我们的设计会有些不切实际。
相位累加器
低通滤波
D/A变换
频率控制字信号输出
ROM
时钟
图2DDS与FPGA总体设计图
2.2.2方案二
采用震荡器频率合成方案。
具体方案如下:
首先通过频率合成技术产生所需要频率的方波,通过积分电路就可以得到同频率的三角波,再经过滤波器就可以得到正弦波。
其优点是工作频率可望做得很高,也可以达到很高的频率分辨率;
缺点是使用的滤波器要求通带可变,实现很难,高低频率比不可能做得很高。
2.2.3方案三
采用VHDL语言来编程,然后下载文件到FPGA来实现。
VHDL语言是电子设计领域的主流硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大降低了硬件设计任务,提高了设计效率和可靠性,要比模拟电路快得多。
该方案是利用FPGA具有的静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,极大地提高了电子系统设计的灵活性和通用性,而且大大缩短了系统的开发周期。
2.3方案确定
由上述三个方案对比,采用第三种方案:
通过FPGA软件扫描方式将波形数据读出传输给DAC0832产生波形输出。
这种方法在软、硬件电路设计上都简单,且与我们的设计思路紧密结合。
由于幅度控制部分在设计需要用到数字电子,这样有要经过D/A转换器再输出,必将占用大量资源,造成不必要的开销。
鉴于有设计经验的同学和老师的建议,采用一个电位器代替,虽然精确度不够,但是也弥补了性价比方面的不足。
波形组合如果采用分开式模块实现,也必将导致占用大量的资源,而且模块设计复杂度提高,只要采用重复调用一个模块的设计方法,既可以降低资源的占用率,也使得设计更加灵活且有针对性。
此信号发生器的特点及功能集成度高,因采取整体模块式设计,在此也考虑到实际应用中,万一FPGA的逻辑门数量不够,特准备了一套备用方案。
备用方案:
将波形数据存放在6116RAM中,6116的存储容量大,且可重复使用,虽用单片机在速度方面远不及FPGA,但是这样是在出现上述状况后的最佳补偿方式。
综合以上涉及方面的分析,因此本次课题采用此方案进行设计。
第3章软件设计
3.1波形产生模块
本设计用VHDL语言根据傅立叶函数采集点进行扫描,分别产生正弦波、三角波和矩形波。
以下介绍各种常用周期信号的傅立叶函数展开式。
3.1.1正弦波
(1)设计思想
正弦波发生分为两个步骤,即正弦波幅值采样存储和正弦波波形的还原输出。
幅值采样是将一个周期正弦波进行64等分,如图3所示,将64个采样点进行量化处理,量化值=255*sin360/64(V),将64点量化值存入存储器。
正弦波形的产生是通过循环反复将存储器中的64点采样值通过DAC0832进行还原输出,得到幅值正比于64点采样值的正弦波。
f(t)
t
T
图4方波采样图
图3正弦波采样图
(2)VHDL实现
1.正弦信号波形数据文件建立
正弦波波形数据由64个点构成,此数据经DAC0832,可在示波器上观察到正弦波形。
源程序如下程序1所示:
[程序1]
WIDTH=8;
------表示数据输出位宽是8
DEPTH=64;
----表示共有64个8位数据点
ADDRESS_RADIX=HEX;
-----表示地址信号用十六进制数表示
DATA_RADIX=DEC;
-----表示输出数据是十进制数
CONTENTBEGIN
00:
255;
01:
254;
02:
252;
03:
249;
04:
245;
05:
239;
06:
233;
07:
225;
08:
217;
09:
207;
0A:
197;
0B:
186;
0C:
174;
0D:
162;
0E:
150;
0F:
137;
10:
124;
11:
112;
12:
99;
13:
87;
14:
75;
15:
64;
16:
53;
17:
43;
18:
34;
19:
26;
1A:
19;
1B:
13;
1C:
8;
1D:
4;
1E:
1;
1F:
0;
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
2A:
2B:
2C:
2D:
2E:
2F:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
3A:
3B:
3C:
3D:
3E:
3F:
END;
2.定制ROM源程序如下所示:
SINDATA.VHD:
LIBRARYieee;
USEieee.std_logic_1164.all;
entitysindatais
port(address:
instd_logic_vector(5downto0);
inclock:
instd_logic;
q:
outstd_logic_vector(7downto0);
endsindata;
architecturesynofsindatais
signalsub_wire0:
std_logic_vector(7downto0);
component1pm_rom
generic(1pm_width:
natural;
1pm_widthid:
1pm_address_control:
string;
1pm_outdata:
1pm_file:
string);
outstd_logic_vector(7downto0));
endcomponent;
begin
q<
=sub_wire0(7downto0);
1pm_rom_component:
1pm_rom
genericmap(lpm_width=>
8,lpm_widthad=>
6,
lpm_address_comtrol=>
"
registered"
lpm_outdata=>
unregistered"
lpm_file=>
D:
/SIN_G/DATA/sin_data.mif"
)
portmap(address=>
address,inclock=>
inclock,q=>
sub_wire0);
endsyn;
正弦波信号发生器顶层设计源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigend.all;
entitysigntis
port(clk:
dout:
outstd_logic_vector(7downto0));
end
architecturedaccofsingtis
componentsindata
endconponent;
signalq1:
std_logic_vector(5downto0);
process(clk)
ifclk'
eventandclk='
1'
thenq1<
=q1+1;
endif
endprocess;
u1:
sindataportmap(address=>
q1,q=>
dout;
inclock=>
clk);
end;
3.1.2矩形波
1设计思路
矩形波的实现较之正弦波发生简单,由于矩形波是两个电平值间的交替变换,因此波形采样值的预存只要有两个不同的数值就行了,为了使矩形波发生的频率灵活可调,采用60个采样值扫描输出来实现,每半个矩形波周期采用三十个采样值,循环反复将存储器中的60点采样值通过DAC0832进行还原输出,得到幅值正比于点采样值的矩形波。
采样图如图4所示。
2VHDL实现
源程序见附录。
3.1.3三角波
由于三角波是线性的,比较简单就可以产生,如果最低电压设为15V,最高是255V,那么根据它的公式255/15=17,每个点的电压只要依次加17就可以得到,一个波形所以采用简单的加减算法就可实现,如图5所示三角波的采样图:
图5三角波采样图
2VHDL实现
具体源程序见附录。
3.1.4基波
通过VHDL编程产生的正弦波、方波、三角波三种周期性波形即为基波。
3.1.5谐波的产生
采用与基波产生的同样原理,编程产生三种波形的谐波,所不同的是一个波形的周期采样的点数不同,如果基波采样点为63个,谐波采样点数则为21个,其每点的电压值为255*(sin360/60+sin360/20)(V),在对其进行循环扫描即可实现基波与谐波的线性叠加。
3.1.6波形模块图
最终波形的设计模块图如图6所示,L1是三角波,L2是方波,L3是正弦波,L4是谐波。
3.2频率控制模块
本课题要求频率控制是在100HZ-1KHZ,步进为100HZ。
在本题设计中只需借助FPGA便可完成。
根据用户需要的频率,通过编程把频率控制数值传送给各个模块,从而实现频率的控制。
如下图7所示:
3.3选择波形模块
这一部分主要是通过一个按键对波形进行循环选择,按下确认按钮后进行波形的调用。
设计流程图如下图8所示
图6波形模块图
键按下否?
图7频率控制模块流程图
确认键按下否?
图8选择波形电路设计流程图
3.4分频器模块
3.4.1设计思路
分频器模块将输入的高频脉冲降频得到各模块所需的低频脉冲,分频器模块利用计数器的原理进行设计,通过对预设的分频值进行比较计数,实现输入高频时钟脉冲的分频输出功能。
本次课题的设计方案中使用了十组分频器,其设计原理完全相同,将对应的频率用8421BCD码对其进行编程赋值,如100HZ则对应的二进制数是“0000”,200HZ则是“0001”…1KHZ则是“1010”。
现选取其中的500分频分频器进行简单说明。
具体程序见附录。
3.4.2VHDL实现
PROCESS(CLK_IN)
BEGIN
IF(CLK_IN'
EVENTANDCLK_IN='
0'
)THEN
IFStep<
249THEN――分频值
Step<
=Step+1;
ELSE
=0;
――循环累加
CLK_OUT<
=NOTCLK_OUT;
――计数满,输出翻转
ENDIF;
ENDIF;
ENDPROCESS;
3.4.3分频值计算
分频值=(输出时钟脉冲周期/输入时钟脉冲周期)/2-1
输入时钟脉冲频率=1KHz,周期=1ms;
输出时钟脉冲频率=2Hz,周期=500ms
分频值=(500ms/1ms)/2-1=249
3.4.4分频器模块及初步仿真图
分频器模块及初步仿真图如图9所示。
第4章硬件电路设计
4.1硬件设计注意事项
此次设计利用EDA试验箱实现硬件功能,试验箱设计可靠,干扰小,能使系统在良好的环境中正常工作。
但是实际制作硬件电路时,就应考虑到干扰所带来的负面影响。
为了避免干扰信号影响系统正常工作,未分配功能的FPGA引脚必须接地,在FPGA器件的电源端必须并连一0.01uF的退耦电容,在所有的输入引脚上串联100欧姆左右电阻减弱干扰信号影响,如有必要还应在输入端设置上拉或下拉电阻。
4.2滤波电路
如图10所示,设计D/A输出后,通过滤波电路、输出缓冲电路,使信号平滑且具有负载能力。
正弦波的输出频率小于262kHz,为保证262kHz频带内输出幅度平坦,又要尽可能抑制谐波和高频噪声,综合考虑取
R1=1k,R2=1k,C1=100pF,C=100pF
运放选用宽带运放LF351,用ElectronicsWorkbench分析表明:
截止频率约为1MHz,262KHz以内幅度平坦。
为保证稳幅输出,选用AD817,这是一种低功耗、高速、宽带运算放大器,具有很强的大电流驱动能力。
实际电路测量结果表明:
当负载100Ω、输出电压峰-峰值1OV时,带宽大于500kHz,幅度变化小于土1%。
图10滤波电路
4.3幅度控制电路
幅度控制电路采用初定方案来设计,即用一个电位器来控制波形的输出幅度。
电位器的型号为10K欧。
4.4FPGA器件引脚分配
为了方便硬件设计,降低硬件设计的复杂度,对FPGA的输入输出引脚进行分配,将关联的引脚集中排布,将同一组内的引脚按顺序排布,将需要输入高频时钟脉冲的端口安排在时钟输入端,以提高其信号接收能力。
分配如下:
CLKUSRPIN62。
CS0PIN67。
CS1PIN68
BEV_CLKPIN76.
BEV_OEPIN72
INPIN31、33、73、75。
D0PIN1
TD0PIN9
TD1PIN4
CE0PIN64
CE1PIN3
CONFIGPIN23
CONF_DONEPIN65
RSPIN70
WSPIN69
TMSPIN46
TRSTPIN45
TCKPIN66
DCLKPIN2
STATUSPIN44
MSEL0PIN20
MSEL1PIN21
INIT_DONEPIN58
RDY_BUSYPIN59
DEV_OEPIN72
DEV_CLRPIN77
4.5硬件电路实现
此次设计硬件部分通过FPGA/CPLD实验箱完成,如今后需制作单独的硬件电路,亦可以依照实验箱各部分结构进行设计。
第5章调试