基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx

上传人:b****8 文档编号:9355325 上传时间:2023-02-04 格式:DOCX 页数:34 大小:286.01KB
下载 相关 举报
基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx_第1页
第1页 / 共34页
基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx_第2页
第2页 / 共34页
基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx_第3页
第3页 / 共34页
基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx_第4页
第4页 / 共34页
基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx

《基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx(34页珍藏版)》请在冰豆网上搜索。

基于fpga的基于dds技术的信号发生器设计本科毕业设计论文.docx

基于fpga的基于dds技术的信号发生器设计本科毕业设计论文

JIANGSUUNIVERSITYOFTECHNOLOGY

FPGA技术实验报告

基于FPGA的基于DDS技术的信号发生器设计

 

学院:

电信学院

专业:

电子信息工程

班级:

11电子2班

姓名:

学号:

指导教师:

朱雷、陈海忠

设计时间:

__2014年2月16日——2014年2月28日

 

目录

1FPGA硬件系统设计

1.1功能要求

1.2FPGA硬件系统组成

1.3FPGA最小系统简介

1.4FPGA外围电路设计

1.4.1拨码开关电路设计

1.5硬件电路调试及结果分析

2基于DDS技术的信号发生器设计

2.1功能要求

2.2整体设计

2.3DDS技术的基本原理

2.4程序设计

2.4.1方波产生程序设计及仿真

2.4.2三角波产生程序设计及仿真

2.4.3正弦波产生程序设计及仿真

2.4.4锯齿波产生程序设计及仿真

2.4.5AM产生程序设计及仿真

2.4.6DSB产生程序设计及仿真

2.4.7DSB产生程序设计及仿真

2.4.8DSB产生程序设计及仿真

2.4.9DSB产生程序设计及仿真

2.4.10DSB产生程序设计及仿真

2.4.7顶层程序设计及仿真

(1)程序的功能

(2)结构图或实体图

(3)VHDL程序及注释

(4)仿真波形及分析

2.5硬件测试及结果分析

3设计分析与总结

3.1故障分析

3.2功能分析

3.3设计总结及感想

1FPGA硬件系统设计

1.1功能要求

基于FPGA的DDS技术设计正弦波、三角波、方波等波形发生器,实现波形的D/A转换,实现改变高低电平开关电路设计。

1.2FPGA硬件系统组成

FPG最小系统实现软件的写入,外围电路实现开关电路和D/A转换。

1.3FPGA最小系统简介

通过APS接口下载程序到FPGA。

1.4FPGA外围电路设计

1.4.1拨码开关电路设计

用开关控制输出高低电平。

1.4.3DAC0832电路设计

DAC0832是采用CMOS/Si-Cr工艺实现的8位D/A转换器。

该芯片包含8位输入寄存器、8位DAC寄存器、8位D/A转换器。

DAC0832中有两级锁存器,第一级即输入寄存器,第二级即DAC寄存器,可以工作在双缓冲方式下。

引脚特性:

D7~D0:

8位数据输入端

ILE:

输入寄存器锁存允许信号

CS#:

芯片选择信号

WR1#:

输入寄存器写信号

XFER#:

数据传送信号

WR2#:

DAC寄存器写信号

VREF:

基准电压,-10V~+10V

Rfb:

反馈信号输入端

IOUT1:

电流输出1端

IOUT2:

电流输出2端

VCC:

电源

AGND:

模拟地

DGND:

数字地

1.5硬件电路调试及结果分析

硬件焊接时,容易将焊点漏焊或则连接在一起。

第一次焊好是先发没有输出波形。

经过检查发现是输出插针没有与输出端口焊好。

经过重新焊接后就可以输出波形了。

2基于DDS技术的信号发生器设计

2.1功能要求

基于FPGA的DDS技术设计正弦波、三角、方波、锯齿波发生器。

2.2整体设计

2.3DDS技术的基本原理

1)频率预置与调节电路

作用:

实现频率控制量的输入;

不变量K被称为相位增量,也叫频率控制字。

2)累加器

相位累加器的组成=N位加法器+N位寄存器

相位累加器的作用:

在时钟的作用下,进行相位累加

注意:

当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。

DDS的输出频率为:

f0=fCK/2N

DDS输出的最低频率:

K=1时,fC/2N

DDS输出的最高频率:

Nyquist采样定理决定,即fC/2,

K的最大值为2N-1

结论:

只要N足够大,DDS可以得到很细的频率间隔。

要改变DDS的输出频率,只要改变频率控制字K即可。

2.4程序设计

2.4.1方波产生程序设计及仿真

通过C++做一个方波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出fangbo.exe后缀的文件将其转换为fangbo.mif,通过quarter将后缀fangbo.mif文件做成ROM后,会得到fangbo.vhd。

编译后仿真得到如下波形。

程序

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.all;

ENTITYfangboIS

PORT

address:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDfangbo;

ARCHITECTURESYNOFfangboIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(9DOWNTO0);

COMPONENTaltsyncram

GENERIC(

clock_enable_input_a:

STRING;

clock_enable_output_a:

STRING;

init_file:

STRING;

intended_device_family:

STRING;

lpm_hint:

STRING;

lpm_type:

STRING;

numwords_a:

NATURAL;

operation_mode:

STRING;

outdata_aclr_a:

STRING;

outdata_reg_a:

STRING;

widthad_a:

NATURAL;

width_a:

NATURAL;

width_byteena_a:

NATURAL

);

PORT(

clock0:

INSTD_LOGIC;

address_a:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q_a:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDCOMPONENT;

BEGIN

q<=sub_wire0(9DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

clock_enable_input_a=>"BYPASS",

clock_enable_output_a=>"BYPASS",

init_file=>"fangbo.mif",

intended_device_family=>"CycloneII",

lpm_hint=>"ENABLE_RUNTIME_MOD=NO",

lpm_type=>"altsyncram",

numwords_a=>1024,

operation_mode=>"ROM",

outdata_aclr_a=>"NONE",

outdata_reg_a=>"UNREGISTERED",

widthad_a=>10,

width_a=>10,

width_byteena_a=>1

PORTMAP(

clock0=>clock,

address_a=>address,

q_a=>sub_wire0

);

ENDSYN;

2.4.2三角波产生程序设计及仿真

通过C++做一个三角波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出sanjiao.exe后缀的文件将其转换为三角.mif,通过quarter将后缀sanjiao.mif文件做成ROM后,会得到sanjiao.vhd。

编译后仿真得到如下波形。

程序

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.all;

ENTITYsanjiaoboIS

PORT

address:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDsanjiaobo;

ARCHITECTURESYNOFsanjiaoboIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(9DOWNTO0);

COMPONENTaltsyncram

GENERIC(

clock_enable_input_a:

STRING;

clock_enable_output_a:

STRING;

init_file:

STRING;

intended_device_family:

STRING;

lpm_hint:

STRING;

lpm_type:

STRING;

numwords_a:

NATURAL;

operation_mode:

STRING;

outdata_aclr_a:

STRING;

outdata_reg_a:

STRING;

widthad_a:

NATURAL;

width_a:

NATURAL;

width_byteena_a:

NATURAL

);

PORT(

clock0:

INSTD_LOGIC;

address_a:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q_a:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDCOMPONENT;

BEGIN

q<=sub_wire0(9DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

clock_enable_input_a=>"BYPASS",

clock_enable_output_a=>"BYPASS",

init_file=>"sanjiaobo.mif",

intended_device_family=>"CycloneII",

lpm_hint=>"ENABLE_RUNTIME_MOD=NO",

lpm_type=>"altsyncram",

numwords_a=>1024,

operation_mode=>"ROM",

outdata_aclr_a=>"NONE",

outdata_reg_a=>"UNREGISTERED",

widthad_a=>10,

width_a=>10,

width_byteena_a=>1

PORTMAP(

clock0=>clock,

address_a=>address,

q_a=>sub_wire0

);

ENDSYN;

2.4.3正弦波产生程序设计及仿真

通过C++做一个正弦波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出sin.exe后缀的文件将其转换为sin.mif,通过quarter将后缀sin.mif文件做成ROM后,会得到sin.vhd。

编译后仿真得到如下波形。

程序

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.all;

ENTITYmyrom1IS

PORT

address:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDmyrom1;

ARCHITECTURESYNOFmyrom1IS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(9DOWNTO0);

COMPONENTaltsyncram

GENERIC(

clock_enable_input_a:

STRING;

clock_enable_output_a:

STRING;

init_file:

STRING;

intended_device_family:

STRING;

lpm_hint:

STRING;

lpm_type:

STRING;

numwords_a:

NATURAL;

operation_mode:

STRING;

outdata_aclr_a:

STRING;

outdata_reg_a:

STRING;

widthad_a:

NATURAL;

width_a:

NATURAL;

width_byteena_a:

NATURAL

);

PORT(

clock0:

INSTD_LOGIC;

address_a:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q_a:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDCOMPONENT;

BEGIN

q<=sub_wire0(9DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

clock_enable_input_a=>"BYPASS",

clock_enable_output_a=>"BYPASS",

init_file=>"myrom1.mif",

intended_device_family=>"CycloneII",

lpm_hint=>"ENABLE_RUNTIME_MOD=NO",

lpm_type=>"altsyncram",

numwords_a=>1024,

operation_mode=>"ROM",

outdata_aclr_a=>"NONE",

outdata_reg_a=>"UNREGISTERED",

widthad_a=>10,

width_a=>10,

width_byteena_a=>1

PORTMAP(

clock0=>clock,

address_a=>address,

q_a=>sub_wire0

);

ENDSYN;

2.4.4锯齿产生程序设计及仿真

通过C++做一个锯齿波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出juchi.exe后缀的文件将其转换为juchi.mif,通过quarter将后缀juchi.mif文件做成ROM后,会得到juchi.vhd。

编译后仿真得到如下波形。

程序

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.all;

ENTITYjuchiboIS

PORT

address:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDjuchibo;

ARCHITECTURESYNOFjuchiboIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(9DOWNTO0);

COMPONENTaltsyncram

GENERIC(

clock_enable_input_a:

STRING;

clock_enable_output_a:

STRING;

init_file:

STRING;

intended_device_family:

STRING;

lpm_hint:

STRING;

lpm_type:

STRING;

numwords_a:

NATURAL;

operation_mode:

STRING;

outdata_aclr_a:

STRING;

outdata_reg_a:

STRING;

widthad_a:

NATURAL;

width_a:

NATURAL;

width_byteena_a:

NATURAL

);

PORT(

clock0:

INSTD_LOGIC;

address_a:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q_a:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDCOMPONENT;

BEGIN

q<=sub_wire0(9DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

clock_enable_input_a=>"BYPASS",

clock_enable_output_a=>"BYPASS",

init_file=>"juchibo.mif",

intended_device_family=>"CycloneII",

lpm_hint=>"ENABLE_RUNTIME_MOD=NO",

lpm_type=>"altsyncram",

numwords_a=>1024,

operation_mode=>"ROM",

outdata_aclr_a=>"NONE",

outdata_reg_a=>"UNREGISTERED",

widthad_a=>10,

width_a=>10,

width_byteena_a=>1

PORTMAP(

clock0=>clock,

address_a=>address,

q_a=>sub_wire0

);

ENDSYN;

2.4.5AM产生程序设计及仿真

通过C++做一个方波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出AM.exe后缀的文件将其转换为AM.mif,通过quarter将后缀AM.mif文件做成ROM后,会得到AMvhd。

编译后仿真得到如下波形。

程序

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYaltera_mf;

USEaltera_mf.all;

ENTITYamIS

PORT

address:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clock:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDam;

ARCHITECTURESYNOFamIS

SIGNALsub_wire0:

STD_LOGIC_VECTOR(9DOWNTO0);

COMPONENTaltsyncram

GENERIC(

clock_enable_input_a:

STRING;

clock_enable_output_a:

STRING;

init_file:

STRING;

intended_device_family:

STRING;

lpm_hint:

STRING;

lpm_type:

STRING;

numwords_a:

NATURAL;

operation_mode:

STRING;

outdata_aclr_a:

STRING;

outdata_reg_a:

STRING;

widthad_a:

NATURAL;

width_a:

NATURAL;

width_byteena_a:

NATURAL

);

PORT(

clock0:

INSTD_LOGIC;

address_a:

INSTD_LOGIC_VECTOR(9DOWNTO0);

q_a:

OUTSTD_LOGIC_VECTOR(9DOWNTO0)

);

ENDCOMPONENT;

BEGIN

q<=sub_wire0(9DOWNTO0);

altsyncram_component:

altsyncram

GENERICMAP(

clock_enable_input_a=>"BYPASS",

clock_enable_output_a=>"BYPASS",

init_file=>"am.mif",

intended_device_family=>"CycloneII",

lpm_hint=>"ENABLE_RUNTIME_MOD=NO",

lpm_type=>"altsyncram",

numwords_a=>1024,

operation_mode=>"ROM",

outdata_aclr_a=>"NONE",

outdata_reg_a=>"UNREGISTERED",

widthad_a=>10,

width_a=>10,

width_byteena_a=>1

PORTMAP(

clock0=>clock,

address_a=>address,

q_a=>sub_wire0

);

ENDSYN;

2.4.6DSB产生程序设计及仿真

通过C++做一个方波的ROM,输入是1024个(

),输出为10位(

),编译运行后,找出DSB.exe后缀的文件将其转换为DSB.m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1