函数信号发生器vhdl.docx
- 文档编号:10575675
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:19
- 大小:212.51KB
函数信号发生器vhdl.docx
《函数信号发生器vhdl.docx》由会员分享,可在线阅读,更多相关《函数信号发生器vhdl.docx(19页珍藏版)》请在冰豆网上搜索。
函数信号发生器vhdl
重庆大学城市科技学院电气学院
课程设计报告
题目:
函数信号发生器
专业:
电子信息工程
(2)班
*********
小组成员:
贾雪奎、李继涛、陈一品
设计日期:
2009.01.14
目录…………………………………………………………3
摘要…………………………………………………………3
一、设计要求………………………………………………3
二、设计原理概述…………………………………………4
三、设计步骤………………………………………………4
四、软件设计流程及源程序代码…………………………5
4.1软件设计流程…………………………………………5
4.2二选一多路选择器(mux2)源程序……………………5
4.3四选一多路选择器(mux4)源程序及原理图……………6
4.46位计数器源程序(count6)及原理图………………7
4.5分频源程序(dvf)及原理图…………………………8
4.6四个函数发生器的Rom图………………………………10
4.7函数发生器的顶层文件原理图及源程序………………11
五、设计结果及波形图…………………………………14
六、设计中遇到的各种问题及解决办法…………………16
七、总结及心得体会………………………………………17
八、参考文献………………………………………………17
摘要
函数信号发生器是一种能能够产生多种波形,如三角波、锯齿波、矩形波(含
方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设
备检测中具有十分广泛的用途。
现在我们通过对函数信号发生器的原理以及构成
设计一个能变换出三角波、正弦波、方波的简易发生器。
我们通过对电路的分析,
参数的确定选择出一种最适合本课题的方案。
在达到课题要求的前提下保证最经
济、最方便、最优化的设计策略。
在实验室用EDA完成设计并进行引脚锁定下载连接用SignalTapIILogic
Analyer调试,观察波形效果并与课题要求的性能指标作对比。
一、设计要求
设计信号发生器,使之能产生正弦波、方波、锯齿波和三角波信号,其系统框图1示:
图1.
其函数发生器具体框图如图2
图2.
1.基本要求
(1)信号发生器能产生正弦波、方波和三角波、锯齿波四种周期性波形;
(2)输出信号频率在100Hz~10MHz范围内可调,输出信号频率稳定度1e3;
(3)输出信号波形无明显失真;
(4)根据技术指标要求及实验室条件分析工作原理、自选设计方案,设计出波
形发生器并能通过SignalTapIILogicAnalyer显示正确波形。
(5)通过按键和调节CLOCK0的大小选择波形和频率大小。
二、设计原理概述。
(1)函数信号发生器的结构:
四选一多路选择器、二选一多路选择器、分频器、
正弦信号、方波信号、锯齿波、三角波的信号数据ROM(6位据线)含有64
个8位数据(一个周期)。
(2)VHDL顶层设计。
(3)8位D/A转化。
(4)顶层文件在FPGA中实现,选择器由四选一多路选择器担任,分频器由八
分频担任,四个波形数据由四个模块(sin,fangbo,juchi,sanjiao)提供,地
址合成器的时钟由实验箱提供。
三、设计步骤
(1)分别建立四个.mif格式文件及正弦波、方波和三角波、锯齿波.mif。
(2)定制四个波形LPM_ROM文件。
(3)完成各个数据发生器模块,并把VHDL程序转换成原理图。
(4)二选一多路选择器的源文件编写,并把VHDL程序转换成原理图
(5)四选一多路选择器的源文件编写,并把VHDL程序转换成原理图。
(6)分频器的源文件编写,并把VHDL程序转换成原理图。
(7)用原理图完成函数发生器的设计。
(8)编译完成后,建立SingnalTap‖的工程文件。
(9)锁定引脚,下载连接。
(10)运行程序并观察结果。
(11)记录数据完成报告。
四、软件设计流程及源程序代码
4.1软件设计流程:
1.弄清设计原理图。
2.分别编写分频器,四选一和二选一数字选择器、6位地址发生器并作为低层文件.
3.建顶层文件,并调用底层文件,定义信号量进行列话语句。
4.生成实验原理电路图。
5.进行嵌入式逻辑分析,并改变其波形种类和频率。
6.连接数到模转换芯片,用示波器进行观察。
4.2二选一多路选择器(mux2)源程序及原理图:
libraryieee;
useieee.std_logic_1164.all;
entitymux2is
port(a,b,s:
instd_logic;
y:
outstd_logic);
endmux2;
architecturebhvofmux2is
begin
process(a,b,s)
begin
ifs='0'then
y<=a;else
y<=b;
endif;
endprocess;
endbhv;
mux2的原理图
4.3四选一多路选择器(mux4)源程序及原理图:
libraryieee;
useieee.std_logic_1164.all;
entitymux4is
port(d0:
instd_logic_vector(7downto0);
d1:
instd_logic_vector(7downto0);
d2:
instd_logic_vector(7downto0);
d3:
instd_logic_vector(7downto0);
sel:
instd_logic_vector(1downto0);
q:
outstd_logic_vector(7downto0));
endmux4;
architecturebehvofmux4is
begin
q<=d0whensel="00"else
d1whensel="01"else
d2whensel="10"else
d3;
endbehv;
mux4的原理图
4.46位计数器源程序(count6)及原理图:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycont6is
port(clk:
instd_logic;
q:
outstd_logic_vector(5downto0));
endcont6;
architecturebhvofcont6is
signalq1:
std_logic_vector(5downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q1<=q1+1;
endif;
endprocess;
q<=q1;
endbhv;
count6的原理图
4.5分频源程序(dvf)及原理图:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydvfis
port(clk:
instd_logic;
d:
instd_logic_vector(7downto0);
fout:
outstd_logic);
end;
architectureoneofdvfis
signalfull:
std_logic;
begin
p_reg:
process(clk)
variablecnt8:
std_logic_vector(7downto0);
begin
ifclk'eventandclk='1'then
ifcnt8="11111111"then
cnt8:
=d;
full<='1';
elsecnt8:
=cnt8+1;
full<='0';
endif;
endif;
endprocessp_reg;
p_div:
process(full)
variablecnt2:
std_logic;
begin
iffull'eventandfull='1'then
cnt2:
=notcnt2;
ifcnt2='1'thenfout<='1';
elsefout<='0';
endif;
endif;
endprocessp_div;
end;
分频器原理图
4.6四个函数发生器的Rom图如下所示:
SinRom方波Rom
4.7函数发生器的顶层文件原理图及源程序如下所示:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYwork;
ENTITYBlock1IS
port(s:
INSTD_LOGIC;clk:
INSTD_LOGIC;
aa:
INSTD_LOGIC;
d:
INSTD_LOGIC_VECTOR(7downto0);
sel:
INSTD_LOGIC_VECTOR(1downto0);
pin_name5:
OUTSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7downto0));
ENDBlock1;
ARCHITECTUREbdf_typeOFBlock1IS
componentsin
PORT(inclock:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(5downto0);
q:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentfangbo
PORT(inclock:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(5downto0);
q:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentjuchibo
PORT(inclock:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(5downto0);
q:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentsanjiaobo
PORT(inclock:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(5downto0);
q:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentcont6
PORT(clk:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(5downto0));
endcomponent;
componentmux4
PORT(d0:
INSTD_LOGIC_VECTOR(7downto0);
d1:
INSTD_LOGIC_VECTOR(7downto0);
d2:
INSTD_LOGIC_VECTOR(7downto0);
d3:
INSTD_LOGIC_VECTOR(7downto0);
sel:
INSTD_LOGIC_VECTOR(1downto0);
q:
OUTSTD_LOGIC_VECTOR(7downto0));
endcomponent;
componentdvf
PORT(clk:
INSTD_LOGIC;
d:
INSTD_LOGIC_VECTOR(7downto0);
fout:
OUTSTD_LOGIC);
endcomponent;
componentmux2
PORT(a:
INSTD_LOGIC;
b:
INSTD_LOGIC;
s:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
endcomponent;
signalSYNTHESIZED_WIRE_13:
STD_LOGIC;
signalSYNTHESIZED_WIRE_14:
STD_LOGIC_VECTOR(5downto0);
signalSYNTHESIZED_WIRE_8:
STD_LOGIC_VECTOR(7downto0);
signalSYNTHESIZED_WIRE_9:
STD_LOGIC_VECTOR(7downto0);
signalSYNTHESIZED_WIRE_10:
STD_LOGIC_VECTOR(7downto0);
signalSYNTHESIZED_WIRE_11:
STD_LOGIC_VECTOR(7downto0);
signalSYNTHESIZED_WIRE_12:
STD_LOGIC;
BEGIN
pin_name5<=aa;
b2v_inst:
sin
PORTMAP(inclock=>SYNTHESIZED_WIRE_13,
address=>SYNTHESIZED_WIRE_14,
q=>SYNTHESIZED_WIRE_8);
b2v_inst1:
fangbo
PORTMAP(inclock=>SYNTHESIZED_WIRE_13,
address=>SYNTHESIZED_WIRE_14,
q=>SYNTHESIZED_WIRE_9);
b2v_inst2:
juchibo
PORTMAP(inclock=>SYNTHESIZED_WIRE_13,
address=>SYNTHESIZED_WIRE_14,
q=>SYNTHESIZED_WIRE_10);
b2v_inst3:
sanjiaobo
PORTMAP(inclock=>SYNTHESIZED_WIRE_13,
address=>SYNTHESIZED_WIRE_14,
q=>SYNTHESIZED_WIRE_11);
b2v_inst4:
cont6
PORTMAP(clk=>clk,
q=>SYNTHESIZED_WIRE_14);
b2v_inst5:
mux4
PORTMAP(d0=>SYNTHESIZED_WIRE_8,
d1=>SYNTHESIZED_WIRE_9,
d2=>SYNTHESIZED_WIRE_10,
d3=>SYNTHESIZED_WIRE_11,
sel=>sel,q=>q);
b2v_inst6:
dvf
PORTMAP(clk=>clk,
d=>d,
fout=>SYNTHESIZED_WIRE_12);
b2v_inst9:
mux2
PORTMAP(a=>SYNTHESIZED_WIRE_12,
b=>clk,
s=>s,
y=>SYNTHESIZED_WIRE_13);
END;
五、设计结果及波形图
1:
RTL电路图如下所示:
2:
各ROM数据导入图如下所示:
3:
各端口引脚图设置如下所示:
4:
输出波形图如下所示:
方波
锯齿波
三角波
sin波
六、设计中遇到的各种问题及解决办法
1:
四个波形文件的数据波形的输入解决方法:
利用波形发生器软件建立四个形
的.mif文件后保存,并利用Quartus‖软件后,即可建立LPM_ROM的文件。
2:
顶层文件原理图的制作方法:
利用二选一、四选一多路择器、分频器、6位计
数发生器以及四个波形的ROM为底层文件连线,完成顶层文件的制作。
3:
在程序编写时,明白变量(Variable)与信号(Signal)的作用及区别.
4:
在一个文件夹中只允许有一个工程,建立顶层文件时需要把所有相关的数和
文件导入工程。
5:
引脚锁定的解决方法:
根据顶层文件设计中各输入输出单元的功能,选择式
后,再根据所选择硬件模块的要求来完成引脚功能的锁定。
6:
用SignalTapIILogicAnalyer之前,要锁定下载引脚.
七、总结及心得体会
通过设计此函数发生器,进一步了解和学习了EDA的电子设计,并且熟悉了用嵌
入式逻辑分析仪(SignalTapIILogicAnalyer)测试波形,用MegaWizardPlug-In
Manager建立.mif文件ROM.了解EDA的设计流程:
设计输入→综合→适配→仿真→编程下
载→硬件测试.更加巩固和掌了所学的VHDL语言的一些语法结构,例如:
if..then...else,case,when..else等语句。
并且通过此次的课程设计不仅培养我们动手和
独立思考的能力,而且还能让我们在实践操作中更好的运用书本上所学的知识,从而加深理
解所学知识。
八、参考文献
EDA技术实用教程第三版潘松黄继业编著科学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 信号发生器 vhdl