基于FPGA智能函数发生器设计.docx
- 文档编号:9365467
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:23
- 大小:259.14KB
基于FPGA智能函数发生器设计.docx
《基于FPGA智能函数发生器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA智能函数发生器设计.docx(23页珍藏版)》请在冰点文库上搜索。
基于FPGA智能函数发生器设计
[摘要]FPGA实现智能函数发生器设计介绍了一种基于FPGA的智能函数发生器的设计.采用EDA技术对此设计进行功能仿真和时序仿真,在EDA系统开发平台上实现程序下载,同时在示波器上观察波形输出.
[关键词]函数发生器FPGAEDA
DesignofintelligentfunctionsignalgeneratorbasedonFPGA
(ShaanxiUniversityofTechnologyDepartmentofCommunicationEngineeringElectronicinformationengineeringmajorClass082)
Guideteacher:
HanTuanjun
[Abstract]FPGAintelligentfunctiongeneratordesignintroducedonekindbasedontheFPGAintelligentfunctiongeneratordesign.UsingEDAtechnologytodesignthefunctionsimulationandtimingsimulation,inthedevelopmentofEDAsystemplatformtoachieveprogramdownload,whileintheoscilloscopetoobservethewaveformoutput.
[Keyword]FunctiongeneratorFPGAEDA
1.智能函数器发生原理和系统实现
1.1智能函数发生器的性能指标
综合市场上的函数发生器的指标和自身的硬件情况以及考虑到其应用的不
同的场合,该智能函数发生器的设计要求如下:
该函数发生器采用直接数字频率合成(DDS--DigitalDirectFrequency
Synthesis)技术实现,可以产生范围为1~180kHz的三角波、正弦波、方波递增
斜波,递减斜波。
该函数发生器可以实现波形的幅度可调以及可以叠加直流。
此函数发生器在共分为四个档,分别为1Hz~100Hz、100Hz~1kHz、1KHz~
10KHz、10KHz~80KHz,在这四个档位内的最小可调节频率分别为1Hz、10Hz、
100Hz、1KHz。
该函数发生器有四个按键,五个数码管,一个调节幅度的旋钮,一个调剂叠
加直流分量的旋钮以及一个波形输出端口,其四个按键的具体功能如下:
按键1:
任何状态下按下此键都输出频率为1Hz的方波
按键2:
波形选择键:
通过此按键可选择波形。
每按一次键,波形就改变一
次,波形在方波、正弦波、三角波,递增斜波,递减斜波五种波形间切换。
按键3:
频率档位选择键:
通过按键选择频率档位。
每按一次键,选择一个
频率档位,共分为四个档,分别为1Hz~100Hz,100Hz~1KHz,1KHz~10KHz,
10KHz~80KHz。
按键4:
频率步进选择键:
通过按键选择频率的步进值。
每按一次键,步进
值则根据此时所处的频率的档位的不同而改变:
当频率处于1Hz~100Hz时,步
进值为1Hz,当频率为100Hz~1KHz时,其步进值为10Hz,当频率处于1KHz~
10KHz时,其步进值为100Hz,当频率为10KHz~80KHz,其步进值为1KHz。
此函数发生器具有五个数码管,用一个数码管的1~5来区分当前的波形种
类,1代表方波,2,代表三角波,3代表正弦波,4代表递增斜波,5代表递减
斜波。
一个用于显示档位,1代表1Hz~100Hz的档位,2代表100Hz~1KHz档
位,3代表1KHz~10KHz档位,4代表10KHz~80KHz档位。
还有三位用于显示
当前波形的频率
1.2仿真软件介绍及操作步骤
1.21QuartusII软件简介
1)QuartusII软件介绍
QuartusII是Alera公司推出的一款功能强大,兼容性最好的EDA工具软件。
该软件界面友好、使用便捷、功能强大,是一个完全集成化的可编程逻辑设计环境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、支持多种硬件描述语言及有多种高级编程语言接口等特点。
QuartusII是Altera公司推出的CPLD/FPGA开发工具,QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片平面布局连线编辑;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
1.22QuartusII软件设计流程
(1)打开QuartusII软件。
(2)选择路径。
注意:
工作目录名不能有中文。
(3)添加设计文件。
(4)选择FPGA器件。
Family选择Cyclone,240,8。
(5)建立原理图或用VHDL语言描述设计电路。
(6)对原理图或用VHDL语言进行编译,无误后进行添加信号。
(7)对上述电路进行仿真。
(8)进行管脚分配。
(9)全局编译。
(10)采用JTAG或AS模式进行下载测试。
2.智能函数器设计
2.1设计的基本原理和思路
本设计采用直接频率合成的方式设计函数信号发生单元。
直接频率合成的基本原理是:
首先设定一个(或多个)基准频率,将这个(或多个)基准频率变换成另一个(或多个)合乎质量要求的所需频率。
直接频率合成技术(DirectDigitalFrequencySynthsis)就是把要输出的波形,预先归一化处理后,采样足够的点数,存储于波形存储器中,在需要输出时,将波形从存储器中读出,经过数/模转换,再通过后续模拟电路处理输出。
DDS信号产生单元主要有由相位累加器、只读存储器、数模转换器组成。
存储器中存储的是波形一个周期内不同相位对于函数波形幅值的编码,通过时钟触发相位累加器累加,相位累加器的输出作为地址取出存储器存储的值,该值进入D/A转换为相应的模拟信号,通过一个周期内相位的累加我们就可以得到一个周期的信号输出,该信号通过后续模拟电路处理就可以得到我们想要的函数波形。
2.2总体方案设计
本论文设计的函数信号发生器主要由波形选择部分,波形发生部分和输出部分组成,其硬件结构图如图2.2所。
其中波形选择部分是数据选择器电路;波形发生部分包括递增斜波产生电路,递减斜波产生电路,三角波产生电路,斜梯波产生电路,正弦波产生电路和方波产生电路;输出部分是数/模转换电路。
其中数/模转换模块是通过硬件实现的,其它都是依靠软件实现的。
根据实验箱的硬件资源,本次设计选用ALTERA公司MAX7000S系列的EPM7128SLC84-15作为主控芯片。
它是一种基于乘积项结构的复杂可编程逻辑器件,它的基本逻辑单元是由一些与、或阵列加上触发器构成,其中与或阵列完成组合逻辑功能,触发器完成时序逻辑。
它的逻辑控制灵活,可反复编程,有利于系统的扩展和修改,而且其集成度高,保密性好。
在实际应用中,它体积小、功耗低、价格便宜,维护和升级都十分方便,具有较好的应用前景。
图2.2硬件结构图
数模转换器原理
D/A转换器输入的是数字量,经转换后输出的是模拟量。
有关D/A转换器的技术性能很多,例如分辨率、建立时间、接口形式、偏移量误差以及线形度等等。
分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。
数字量位数越多,分辨率也就越高。
建立时间是描述D/A转换速度快慢的一个参数,指从输入数字量变化到输出并达到终值误差正负(1/2)LSB(最低有效位)时所需时间。
通常以建立时间来表示转换速度。
D/A转换器与微机借口方便与否,主要决定于转换器本身是否带数据锁存器。
总的来说有两类D/A转换器,一类是不带锁存器的,另一类是带锁存器的。
带锁存器的D/A转换器,可以把它看作一个输出口,因此可直接在数据总线上,而不是另加锁存器。
偏移量误差是指输入数据量为0的时候,输出模拟量对0的偏移量。
这种误差可以通过DAC的外接VREF和电位计加以调整。
线形度是指DAC的实际转换特性曲线和理想直线之间的最大偏差。
D/A转换器有2大类:
一类是在电子线路中使用,不能使能控制端口,只有数字量输入和模拟量输出;另一类带有使能控制端口,可以与微机直接连接。
此实验中采用后者的LM358,以实现数字信号到模拟信号的转换。
LM358转换模块8位D/A,I/O口定义如下:
D0~D7:
数据总线,输入口;
/CE:
转换允许,低电平有效;
/CS:
片选,低电平有效;
有两种输出方式。
第一种,将短路子接在左侧的两个铜柱上,D/A转换输出到D/AOUT区域的第六个孔输出;第二种,将短路子接在右侧的两个铜柱上,D/A转换输出接到LM358的同相输入端。
LM358单电源二运放。
与AD558配合,将AD558的输出接到LM358的同相输入端,作为他的同相输入信号;在LM358的右上脚,有TESTIN模块,他的信号可作为LM358的反相输入端。
3.单元模块的设计
3.1递增斜波信号产生模块:
递增斜波产生原理:
当复位信号为1时,每当检测到时钟上升沿时,计数器值加1,当增加到最大后清零。
计数值增加呈现线性关系,因此输出的波形是递增的斜波。
(a)程序
LIBRARYIEEE;--锯齿波递增
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjuchibo_adIS
PORT(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
END;
ARCHITECTUREbehaveOFjuchibo_adIS
BEGIN
PROCESS(clk,reset)
VARIABLEtmp:
std_logic_vector(7downto0);
BEGIN
IFreset='0'THEN
tmp:
="00000000";
ELSIFclk'eventandclk='1'THEN
IFtmp="11111111"THEN
tmp:
="00000000";
ELSE
tmp:
=tmp+1;
ENDIF;
ENDIF;
q<=tmp;
ENDPROCESS;
END
(b)递增斜波仿真波形:
图3.11递增锯齿波仿真波形
(c)递增斜波信号产生模块元件图:
图3.12递增斜波元件图
3.2递减斜波信号产生模块
递减斜波产生原理:
当复位信号为1时,每当检测到时钟上升沿时,计数器值减1,当增加到0后赋值到最大。
计数值减少呈现线性关系,因此输出的波形是递减的斜波。
(a)程序
LIBRARYIEEE;--锯齿波递减
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjuchibo_jiIS
PORT(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
END;
ARCHITECTUREbehaveOFjuchibo_jiIS
BEGIN
PROCESS(clk,reset)
VARIABLEtmp:
std_logic_vector(7downto0);
BEGIN
IFreset='0'THEN
tmp:
="11111111";
ELSIFclk'eventandclk='1'THEN
IFtmp="00000000"THEN
tmp:
="11111111";
ELSE
tmp:
=tmp-1;
ENDIF;
ENDIF;
q<=tmp;
ENDPROCESS;
END;
(b)递减斜波仿真波形:
图3.21递减锯齿波原件图
(c)递减斜波信号产生模块元件图:
图3.22递减斜波元件图
3.3三角波信号产生模块
三角波产生原理:
三角波是对称的,每边呈线性变化,所以可以根据数据做简单运算,就可以得到三角波。
(a)程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysanjiaobois
port(reset:
instd_logic;
clk:
instd_logic;
q:
outstd_logic_vector(7downto0));
end;
architecturebehaveofsanjiaobois
begin
process(clk,reset)
variabletmp:
std_logic_vector(7downto0);
variablea:
std_logic;
begin
ifreset='0'thenq<="00000000";
elsifclk'eventandclk='1'then
ifa='0'then
iftmp="11111110"then
tmp:
="11111111";
a:
='1';
elsetmp:
=tmp+1;
endif;
else
iftmp="00000001"then
tmp:
="00000000";
a:
='0';
elsetmp:
=tmp-1;
endif;
endif;
endif;
q<=tmp;
endprocess;
end;
(b)三角波仿真波形:
图3.31三角波仿真波形
(c)三角波信号产生模块元件图:
图3.32三角波元件图
3.4阶梯波信号产生模块
阶梯波产生原理:
数据的递增是以一定的阶梯常数往上增加,所以输出的波形是呈现阶梯状的,而不是,完全呈现是直线增长。
(a)程序
libraryieee;--阶梯波
useieee.std_logic_1164.all;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjietiboIS
PORT(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
END;
ARCHITECTUREbehaveOFjietiboIS
BEGIN
PROCESS(clk,reset)
VARIABLEtmp:
std_logic_vector(7downto0);
BEGIN
IFreset='0'THEN
tmp:
="00000000";
ELSIFclk'eventandclk='1'THEN
IFtmp="11111111"THEN
tmp:
="00000000";
ELSE
tmp:
=tmp+16;
ENDIF;
ENDIF;
q<=tmp;
ENDPROCESS;
END;
(b)阶梯波仿真波形:
图3.41阶梯波仿真波形
(c)阶梯波信号产生模块元件图:
图3.42阶梯波元件图
3.5方波信号产生模块
方波产生原理:
其内部计数到达64时,根据输出标志a的数值输出对应的数值,当a=0是输出0,也就是方波周期中的低电平,当a=1,输出255,也就是方波周期中的高电平。
连续的输出便成了观测的方波波形。
(a)程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfangbois
port(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
end;
architecturebehaveoffangbois
signala:
std_logic;
begin
process(clk,reset)
variabletmp:
std_logic_vector(7downto0);
begin
ifreset='0'then
a<='0';
elsifclk'eventandclk='1'then
iftmp="11111111"then
tmp:
="00000000";
else
tmp:
=tmp+1;
endif;
iftmp<="10000000"then
a<='1';
else
a<='0';
endif;
endif;
endprocess;
process(clk,a)--信号输出
begin
ifclk'eventandclk='1'then
ifa='1'then
q<="11111111";
else
q<="00000000";
endif;
endif;
endprocess;
end;
(b)方波仿真波形:
图3.51方波仿真波形
(c)方波信号产生模块元件图:
图3.52方波元件图
3.6正弦波信号产生模块
正弦波产生原理:
通过循环不断地从波形数据ROM文件中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生正弦波。
其频率取决于读取数据的速度。
(a)程序
libraryieee;--正弦波
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityZhengxianbois
port(clk,reset:
instd_logic;
d:
outintegerrange0to255);
end;
architecturebehaveofZhengxianbois
begin
process(clk,reset)
variabletmp:
integerrange0to63;
begin
ifreset='0'then
d<=0;
elsifclk'eventandclk='1'then
iftmp=63then
tmp:
=0;
else
tmp:
=tmp+1;
endif;
casetmpis
when00=>d<=255;when01=>d<=254;when02=>d<=252;
when03=>d<=249;when04=>d<=245;when05=>d<=239;
when06=>d<=233;when07=>d<=225;when08=>d<=217;
when09=>d<=207;when10=>d<=197;when11=>d<=186;
when12=>d<=174;when13=>d<=162;when14=>d<=150;
when15=>d<=137;when16=>d<=124;when17=>d<=112;
when18=>d<=99;when19=>d<=87;when20=>d<=75;
when21=>d<=64;when22=>d<=53;when23=>d<=43;
when24=>d<=34;when25=>d<=26;when26=>d<=19;
when27=>d<=13;when28=>d<=8;when29=>d<=4;
when30=>d<=1;when31=>d<=0;when32=>d<=0;
when33=>d<=1;when34=>d<=4;when35=>d<=8;
when36=>d<=13;when37=>d<=19;when38=>d<=26;
when39=>d<=34;when40=>d<=43;when41=>d<=53;
when42=>d<=64;when43=>d<=75;when44=>d<=87;
when45=>d<=99;when46=>d<=112;when47=>d<=124;
when48=>d<=137;when49=>d<=150;when50=>d<=162;
when51=>d<=174;when52=>d<=186;when53=>d<=197;
when54=>d<=207;when55=>d<=217;when56=>d<=225;
when57=>d<=233;when58=>d<=239;when59=>d<=245;
when60=>d<=249;when61=>d<=252;when62=>d<=254;
when63=>d<=255;whenothers=>null;
endcase;
endif;
endprocess;
end;
(b)正弦波仿真波形:
图3.61正弦波仿真波形
(c)正弦波信号产生模块元件图:
图3.62正弦波元件图
3.7波形输出选择器模块
选择器产生原理:
选择器是一个6选1的数据选择器,其中sel为波形数据选择端口,d0—d6为8位二进制输入端口,q为8位二进制输出端口。
该模块可以根据外部开关的状态选择相应的输出波形。
(a)程序
LIBRARYIEEE;--选择器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYXuanzeqiIS
PORT(sel:
instd_logic_vector(2downto0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 智能 函数 发生器 设计