VHDL简易信号发生器.docx
《VHDL简易信号发生器.docx》由会员分享,可在线阅读,更多相关《VHDL简易信号发生器.docx(14页珍藏版)》请在冰点文库上搜索。
VHDL简易信号发生器
中国计量学院
光学与电子科技学院
课程设计报告
课程设计名称集成电路课程设计
系电科系
专业班级
学号
姓名
成绩
指导老师
2012年月日
概述
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等波形的电路。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
现在我们通过对函数信号发生器的原理以及构成设计一个能变换出三角波、正弦波、方波的简易发生器。
本设计采用FPGA来设计制作多功能信号发生器。
在实验室用EDA完成设计并进行引脚锁定下载连接用SignalTapIILogicAnalyer调试。
一、设计原理
本设计由信号产生,信号选择,信号控制输出三大模块组合而成。
其中信号产生模块有:
三角波模块、方波模块、正弦波模块。
本设计采用K0~K2这三个按键为信号选择开关,选择信号产生模块输出的信号。
其控制模块(SIG_CONTROL)是由数据选择器实现对以上三种信号的选择,并产生相应波形。
其结构框图如下:
二、设计原理概述
(1)函数信号发生器的结构:
三角波信号、方波信号、正弦信号的发生器各一个,数据选择器。
(2)VHDL顶层设计。
(3)SignalTapIILogicAnalyer的仿真分析。
(4)顶层文件在FPGA中实现,通过外加按键控制波形输出,三个波形数据由三个信号发生模块(delta—三角波、square—方波、sin—正弦波)提供,信号发生器时钟由实验箱提供。
三、设计步骤
(1)三角波、方波和正弦波源文件的编写并把VHDL程序转换成原理图。
(2)数据选择器的源文件编写,并把VHDL程序转换成原理图。
(3)用原理图完成函数发生器的设计。
(4)编译完成后,建立SingnalTap‖的工程文件。
(5)锁定引脚,下载连接。
(6)运行程序并观察结果。
(7)记录数据完成报告。
四、软件设计流程及源程序代码
4.1软件设计流程:
1.设计原理图。
2.分别编写各函数发生器,数据选择器的程序,并作为低层文件。
3.建顶层文件,并调用底层文件,定义信号量进行列话语句。
4.生成实验原理电路图。
4.2各信号发生器及数据选择器源程序及原理图:
1.三角波程序及其原理图
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdeltaIS
port(clk,clrn:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDdelta;
ARCHITECTUREaOFdeltaIS
BEGIN
PROCESS(clk,clrn)
VARIABLEtmp:
STD_LOGIC_VECTOR(7DOWNTO0);
VARIABLEf:
STD_LOGIC;
BEGIN
IFclrn='0'THENtmp:
="00000000";
ELSIFclk'EVENTANDclk='1'THEN
IFf='0'THEN
IFtmp="11111110"THENtmp:
="11111111";f:
='1';
ELSEtmp:
=tmp+1;
ENDIF;
ELSE
IFtmp="00000001"THENtmp:
="00000000";f:
='0';
ELSEtmp:
=tmp-1;
ENDIF;
ENDIF;
ENDIF;
q<=tmp;
ENDPROCESS;
ENDa;
原理图如下:
图2.三角波信号发生器原理图
2.方波程序及其原理图
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsquareIS
PORT(clk,clrn:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7downto0));
ENDsquare;
ARCHITECTUREaOFsquareIS
SIGNALf:
STD_LOGIC;
BEGIN
PROCESS(clk,clrn)
VARIABLEtmp:
STD_LOGIC_VECTOR(7downto0);
BEGIN
IFclrn='0'THENtmp:
="00000000";
ELSEIFclk'eventandclk='1'THEN
IFtmp="11111111"THENtmp:
="00000000";
ELSEtmp:
=tmp+1;ENDIF;
IFtmp<"10000000"THENf<='1';
ELSEf<='0';ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk,f)
BEGIN
IFclk'eventandclk='1'THEN
IFf='1'THENq<="11111111";
ELSEq<="00000000";ENDIF;
ENDIF;
ENDPROCESS;
ENDa;
原理图如下:
图3.方波信号发生器原理图
3.正弦波程序及其原理图
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysinis
port(clk,clrn:
instd_logic;
q:
outintegerrange255downto0);
endsin;
architectureaofsinis
begin
process(clk,clrn)
variabletmp:
integerrange63downto0;
begin
ifclrn='0'thenq<=0;tmp:
=0;
else
ifclk'eventandclk='1'then
iftmp=63thentmp:
=0;elsetmp:
=tmp+1;endif;
casetmpis
WHEN00=>q<=255;WHEN01=>q<=254;WHEN02=>q<=252;
WHEN03=>q<=249;WHEN04=>q<=245;WHEN05=>q<=239;
WHEN06=>q<=233;WHEN07=>q<=225;WHEN08=>q<=217;
WHEN09=>q<=207;WHEN10=>q<=197;WHEN11=>q<=186;
WHEN12=>q<=174;WHEN13=>q<=162;WHEN14=>q<=150;
WHEN15=>q<=137;WHEN16=>q<=124;WHEN17=>q<=112;
WHEN18=>q<=99;WHEN19=>q<=87;WHEN20=>q<=75;
WHEN21=>q<=64;WHEN22=>q<=53;WHEN23=>q<=43;
WHEN24=>q<=34;WHEN25=>q<=26;WHEN26=>q<=19;
WHEN27=>q<=13;WHEN28=>q<=8;WHEN29=>q<=4;
WHEN30=>q<=1;WHEN31=>q<=0;WHEN32=>q<=0;
WHEN33=>q<=1;WHEN34=>q<=4;WHEN35=>q<=8;
WHEN36=>q<=13;WHEN37=>q<=19;WHEN38=>q<=26;
WHEN39=>q<=34;WHEN40=>q<=43;WHEN41=>q<=53;
WHEN42=>q<=64;WHEN43=>q<=75;WHEN44=>q<=87;
WHEN45=>q<=99;WHEN46=>q<=112;WHEN47=>q<=124;
WHEN48=>q<=137;WHEN49=>q<=150;WHEN50=>q<=162;
WHEN51=>q<=174;WHEN52=>q<=186;WHEN53=>q<=197;
WHEN54=>q<=207;WHEN55=>q<=217;WHEN56=>q<=225;
WHEN57=>q<=233;WHEN58=>q<=239;WHEN59=>q<=245;
WHEN60=>q<=249;WHEN61=>q<=252;WHEN62=>q<=254;
when63=>q<=255;whenothers=>null;
endcase;
endif;
endif;
endprocess;
enda;
原理图如下:
图4.正弦波信号发生器原理图
4.数据选择器程序及其原理图
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsig_controlIS
PORT(delta,square,sin:
INSTD_LOGIC;
d0,d1,d2:
INSTD_LOGIC_VECTOR(7DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDsig_control;
ARCHITECTUREbehaveOFsig_controlIS
SIGNALsel:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
sel<=delta&square&sin;
PROCESS(sel)
BEGIN
CASEselIS
WHEN"100"=>q<=d0;
WHEN"010"=>q<=d1;
WHEN"001"=>q<=d2;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDbehave;
原理图如下:
图5.数据选择器原理图
4.3信号发生器的顶层文件原理图
由三个函数信号发生器以及数据选择器设计实验顶层文件原理图,如图6示
图6.函数信号发生器顶层文件原理图
五、信号发生器的时序仿真与硬件测试
5.1仿真与测试流程
1.各模块时序仿真结果。
2.进行嵌入式逻辑分析,连接数到模转换芯片,并改变其波形种类和频率,用SignalTapIILogicAnalyer进行观察。
3.观察记录,得到模拟信号波形
5.2时序仿真
1.当选择信号K0置1,K1、K2置0时,信号发生器输出波形为三角波,其时序仿真波形如图7所示。
图7.三角波时序仿真图
2.当选择信号K1置1,K0、K2置0时,信号发生器输出波形为方波,其时序仿真波形如图8所示。
图8.方波时序仿真图
3.当选择信号K2置1,K0、K1置0时,信号发生器输出波形为正弦波,其时序仿真波形如图9所示。
图9.正弦波时序仿真图
5.3引脚锁定,如图10所示
图10.引脚锁定图
5.4SignalTapII实时测试
1.编译完成后,建立SingnalTap‖的工程文件,如图11所示:
图11
2.连接好实验箱后,将编译产生的SOF格式文件配置进FPGA中,进行硬件测试,如图12所示:
图12
3.下载连接,运行程序并观察结果。
①当选择信号K0置1时,其余按键置0,信号发生器输出三角波,其模拟信号波形如图13所示:
图13.三角波模拟信号波形
②当选择信号K1置1时,其余按键置0,信号发生器输出方波,其模拟信号波形如图14所示:
图14.方波模拟信号波形
③当选择信号K2置1时,其余按键置0,信号发生器输出正弦波,其模拟信号波形如图15所示:
图15.正弦波模拟信号波形
六、总结及心得体会
6.1遇到的问题及解决方案
1:
三个波形文件的数据波形的输入解决方法:
利用波形发生器软件建立三个形
的.mif文件后保存,并利用Quartus‖软件后,即可建立LPM_ROM的文件。
2:
顶层文件原理图的制作方法:
利用数据选择器、三个波形的ROM为底层文件连线,完成顶层文件的制作。
3:
在程序编写时,明白变量(Variable)与信号(Signal)的作用及区别.
4:
在一个文件夹中只允许有一个工程,建立顶层文件时需要把所有相关的数和
文件导入工程。
5:
引脚锁定的解决方法:
根据顶层文件设计中各输入输出单元的功能,选择式
后,再根据所选择硬件模块的要求来完成引脚功能的锁定。
6:
用SignalTapIILogicAnalyer之前,要锁定下载引脚.
6.2心得体会
通过设计此函数发生器,进一步了解和学习了EDA的电子设计,并且熟悉了用嵌入式逻辑分析仪(SignalTapIILogicAnalyer)测试波形,用MegaWizardPlug-InManager建立.mif文件ROM.了解EDA的设计流程:
设计输入→综合→适配→仿真→编程下载→硬件测试.更加巩固和掌了所学的VHDL语言的一些语法结构,例如:
if..then...else,case,when..else等语句。
并且通过此次的课程设计不仅培养我们动手和独立思考的能力,而且还能让我们在实践操作中更好的运用书本上所学的知识,从而加深理解所学知识。
七、参考文献
[1]包明编著.《EDA技术与可编程器件的应用》,北京航空航天大学出版社
[2]董艳燕孙一翎陈亮编著.《可编程逻辑器件PLD实验讲义》