基于FPGA的数字正交下变频器设计.docx

上传人:b****5 文档编号:6442611 上传时间:2023-01-06 格式:DOCX 页数:13 大小:482.04KB
下载 相关 举报
基于FPGA的数字正交下变频器设计.docx_第1页
第1页 / 共13页
基于FPGA的数字正交下变频器设计.docx_第2页
第2页 / 共13页
基于FPGA的数字正交下变频器设计.docx_第3页
第3页 / 共13页
基于FPGA的数字正交下变频器设计.docx_第4页
第4页 / 共13页
基于FPGA的数字正交下变频器设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于FPGA的数字正交下变频器设计.docx

《基于FPGA的数字正交下变频器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字正交下变频器设计.docx(13页珍藏版)》请在冰豆网上搜索。

基于FPGA的数字正交下变频器设计.docx

基于FPGA的数字正交下变频器设计

 

综合课设报告:

基于FPGA的数字正交

下变频器设计

 

班级:

XXXXXXX

学号:

XXXXXXXX

XXXXXXXX

姓名:

XXX

XXX

指导老师:

XXX

xxxx年x月

一.课设任务

通过综合应用所学专业知识,能够利用FPGA器件设计一个基于多相滤波结构的数字正交下变频器。

掌握组合、时序逻辑电路的综合设计应用。

熟悉数字接收机中的下变频原理,以FPGA芯片为硬件平台,利用VHDL硬件描述语言,对电路进行设计描述、功能仿真、时序仿真,并能将设计结果在硬件平台上演示。

熟悉QuartusII软件、DE2硬件平台和FPGA硬件开发流程,掌握软硬件联合设计的新型电子设计方法。

提高动手能力,培养工程实践素养。

本次综合课设分两大部分:

第一部分通过两个基础实验完成对FPGA设计应用基础知识的掌握,包括对VHDL语言的掌握、DE2实验板的掌握、设计中需要用到的基础模块的设计掌握。

第二部分为综合设计,要求学生在掌握第一部分基础设计知识的前提下,通过综合运用理论分析和设计实践,利用DE2硬件开发平台,完成数字通信、信号处理领域常用的、基于多相滤波结构的数字正交下变频器设计。

二.课设设备

硬件平台:

DE2实验板

软件平台:

QuartusII仿真软件、Matlab软件

三.基础设计

(一)ROM的设计

ROM即只读存储器,主要用作存储固定的数据。

在设计ROM时,可采用数组或WHEN-ELSE语句。

我们选择采用比较直观的WHEN-ELSE语句,VHDL语言如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityromis

port(

add:

instd_logic_vector(3downto0);

cs:

instd_logic;

data:

outstd_logic_vector(7downto0)

);

endrom;

architecturebehavofromis

begin

data<="00000110"whenadd="0000"andcs='0'else

"00010101"whenadd="0001"andcs='0'else

"00010100"whenadd="0010"andcs='0'else

"00010011"whenadd="0011"andcs='0'else

"00010010"whenadd="0100"andcs='0'else

"00010001"whenadd="0101"andcs='0'else

"00010000"whenadd="0110"andcs='0'else

"00001001"whenadd="0111"andcs='0'else

"00001000"whenadd="1000"andcs='0'else

"00000111"whenadd="1001"andcs='0'else

"00000110"whenadd="1010"andcs='0'else

"00000101"whenadd="1011"andcs='0'else

"00000100"whenadd="1100"andcs='0'else

"00000011"whenadd="1101"andcs='0'else

"00000010"whenadd="1110"andcs='0'else

"00000001"whenadd="1111"andcs='0'else

"00000000";

endbehav;

当片选信号CS有效,则可根据地址信号add[3…0]读取单元内容,在输出端DATA[7…0]输出数据。

当CS无效,输出总为低电平“00000000”。

仿真波形图如下:

图1.116x8的ROM仿真波形

对源代码进行了修改,即增加了两个数码管的译码程序。

其中输入地址与输出数据对应关系如下:

地址

输出

地址

输出

地址

输出

地址

输出

00

16

04

12

08

08

0C

04

01

15

05

11

09

07

0D

03

02

14

06

10

0A

06

0E

02

03

13

07

09

0B

05

0F

01

表1.116x8的ROM内容

源代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityromis

port(

add:

instd_logic_vector(3downto0);

cs:

instd_logic;

data:

bufferstd_logic_vector(7downto0);

datah:

bufferstd_logic_vector(3downto0);

datal:

bufferstd_logic_vector(3downto0);

data_outh:

outstd_logic_vector(6downto0);

data_outl:

outstd_logic_vector(6downto0));

endrom;

architecturebehavofromis

begin

data<="00000110"whenadd="0000"andcs='0'else

"00010101"whenadd="0001"andcs='0'else

"00010100"whenadd="0010"andcs='0'else

"00010011"whenadd="0011"andcs='0'else

"00010010"whenadd="0100"andcs='0'else

"00010001"whenadd="0101"andcs='0'else

"00010000"whenadd="0110"andcs='0'else

"00001001"whenadd="0111"andcs='0'else

"00001000"whenadd="1000"andcs='0'else

"00000111"whenadd="1001"andcs='0'else

"00000110"whenadd="1010"andcs='0'else

"00000101"whenadd="1011"andcs='0'else

"00000100"whenadd="1100"andcs='0'else

"00000011"whenadd="1101"andcs='0'else

"00000010"whenadd="1110"andcs='0'else

"00000001"whenadd="1111"andcs='0'else

"00000000";

process(data)

begin

datah<=data(7downto4);

datal<=data(3downto0);

casedatahis

when"0000"=>data_outh<="1000000";--0

when"0001"=>data_outh<="1111001";--1

when"0010"=>data_outh<="0100100";--2

when"0011"=>data_outh<="0110000";--3

when"0100"=>data_outh<="0011001";--4

when"0101"=>data_outh<="0010010";--5

when"0110"=>data_outh<="0000011";--6

when"0111"=>data_outh<="1111000";--7

when"1000"=>data_outh<="0000000";--8

when"1001"=>data_outh<="0011000";--9

when"1010"=>data_outh<="0001000";--A

when"1011"=>data_outh<="0000011";--B

when"1100"=>data_outh<="0100111";--C

when"1101"=>data_outh<="0100001";--D

when"1110"=>data_outh<="0000110";--E

when"1111"=>data_outh<="0001110";--F

whenothers=>NULL;

endcase;

casedatalis

when"0000"=>data_outl<="1000000";--0

when"0001"=>data_outl<="1111001";--1

when"0010"=>data_outl<="0100100";--2

when"0011"=>data_outl<="0110000";--3

when"0100"=>data_outl<="0011001";--4

when"0101"=>data_outl<="0010010";--5

when"0110"=>data_outl<="0000011";--6

when"0111"=>data_outl<="1111000";--7

when"1000"=>data_outl<="0000000";--8

when"1001"=>data_outl<="0011000";--9

when"1010"=>data_outl<="0001000";--A

when"1011"=>data_outl<="0000011";--B

when"1100"=>data_outl<="0100111";--C

when"1101"=>data_outl<="0100001";--D

when"1110"=>data_outl<="0000110";--E

when"1111"=>data_outl<="0001110";--F

whenothers=>NULL;

endcase;

endprocess;

endbehav;

编译、仿真,锁定管脚并下载到DE2板子上的目标芯片内。

其中SW4作为片选信号CS(低平有效),SW0-SW3作为地址输入add[3…0],数码管HEX0-HEX1显示输出数据。

实验现象:

图1.2Whenadd="0001"andCS='0'

(二)基于DDS的多功能信号发生器

DDS的原理框图如图2.1所示。

图中相位累加器可在每一个时钟周期来临时将频率控制字(TUNINGWORD)所决定的相位增量M累加一次,如果记数大于

,则自动溢出,而只保留后面的N位数字于累加器中。

正弦查询表ROM用于实现从相位累加器输出的相位值到正弦幅度值的转换,然后送到DAC中将正弦幅度值的数字量转变为模拟量,最后通过滤波器输出所需正弦波信号。

图2.1DDS原理框图

由于相位累加器是N比特的模2加法器,正弦查询表ROM中存储一个周期的正弦波幅度量化数据,频率控制字是M时,每

个时钟周期输出一个周期的正弦波。

所以此时有:

式中

为输出信号的频率,

为时钟频率,

为累加器的位数。

根据前面介绍的相位累加原理,应用图形化输入,进行设计,得到FPGA实现的DDS,其顶层模块如下图所示:

图2.2用HDL设计的DDS顶层模块图

其中相位累加器累加步长为24位,用累加器输出的高8位作为ROM的地址,ROM中加载Mif文件,实现正弦输出。

Mif文件由Matlab软件编译生成,M文件如下:

clc;

clear;

myfid=fopen('dds.mif','w');

x=[0:

0.0246:

2*pi];

y=fix(127*sin(x));

leny=length(y);

fori=1:

leny

ify(i)<0

y(i)=y(i)+256;

end;

fprintf(myfid,'%d:

%d\n',i-1,y(i));

end;

fclose(myfid);

实验现象:

图2.3相位累加步长为0x010000时的DDS输出波形

图2.4相位累加步长为0x100000时的DDS输出波形

图2.5相位累加步长为0x400000时的DDS输出波形

由图可知,当M从0x100000变为0x400000时,其值增加4倍,则DDS输出信号频率也增加了4倍;M值越小,采样点数就越多,输出波形失真就越小;M值越大,采样点数越少,输出波形变得粗糙。

 

四.综合设计

基于多相滤波结构的数字正交下变频器设计

对于模拟正交变换进行数字化改造,即将ADC提前,将混频和滤波在数字域进行。

考虑对滤波后的数据要进行2抽1,为进一步减少运算冗余,根据多速率数字信号处理理论,可将抽取运算放在滤波之前,同时NCO的输出也要做相应变化,且这时的LPF变成了奇偶分离的多相结构。

经过上述一系列变换后的正交变换模型如图所示。

图3.1多相滤波结构数字正交变换

首先进行低通滤波器的设计,在QuartusII软件中应用tools选项中的MegaWizardPlug-InManager设计一个64阶的低通滤波器,其参数设置如下:

InputBitWidth:

8位

FullResolutionBitWidth:

24位

FilterType:

LowPass

WindowType:

Blackman

Coefficients:

64

SampleRate:

1.2*10^8

CutoffFreq:

2.5*10^7

源代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_signed.all;

entitych_iqis

port(

din:

instd_logic_vector(7downto0);

clk:

instd_logic;

dinlpfeven:

outstd_logic_vector(7downto0);

dinlpfodd:

outstd_logic_vector(7downto0);

clko:

outstd_logic

);

endch_iq;

architecturertlofch_iqis

signalclkd2:

std_logic:

='0';

signaltcnt:

std_logic:

='0';

signaldineven,dinodd:

std_logic_vector(7downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

clkd2<=notclkd2;

if(clkd2='0')then

dineven<=din;

else

dinodd<=din;

endif;

endif;

endprocess;

process(clkd2)

begin

if(clkd2'eventandclkd2='1')then

tcnt<=nottcnt;

if(tcnt='0')then

dinlpfeven<=dineven;

dinlpfodd<=-dinodd;

else

dinlpfeven<=-dineven;

dinlpfodd<=dinodd;

endif;

endif;

endprocess;

clko<=clkd2;

endrtl;

编译成功后生成相应的模块文件,将基础设计中的DDS正弦信号发生器模块加载进来,作为整个系统的输入信号,再将两路32阶低通滤波器加载进来。

得到整个系统的模块图如下:

 

图3.2数字正交下变频器系统模块图

实验现象:

图3.3datain=0x400000

 

图3.4datain=0x410000

时钟周期选择为20ns,采样率fs=50M,则fs/4=12.5M。

datain=0x400000,DDS信号频率为12.5M,经过低通滤波后,两路输出稳定后为直流,如图3.3所示;datain=0x410000,DDS信号频率为12.6MHz,经过低通滤波后,得到两路低频正交正弦信号,如图3.4所示。

将信号添加到ALTERA提供的嵌入式逻辑分析仪(SignalTap)中,获取系统实时运行情况。

结果如下图:

图3.5datain=48003Fh时的SignalTap输出信号

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

当前位置:首页 > 工程科技 > 能源化工

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

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