基于VHDL语言的波形发生器的设计Word文件下载.docx

上传人:b****6 文档编号:20505840 上传时间:2023-01-23 格式:DOCX 页数:11 大小:78.46KB
下载 相关 举报
基于VHDL语言的波形发生器的设计Word文件下载.docx_第1页
第1页 / 共11页
基于VHDL语言的波形发生器的设计Word文件下载.docx_第2页
第2页 / 共11页
基于VHDL语言的波形发生器的设计Word文件下载.docx_第3页
第3页 / 共11页
基于VHDL语言的波形发生器的设计Word文件下载.docx_第4页
第4页 / 共11页
基于VHDL语言的波形发生器的设计Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于VHDL语言的波形发生器的设计Word文件下载.docx

《基于VHDL语言的波形发生器的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的波形发生器的设计Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

基于VHDL语言的波形发生器的设计Word文件下载.docx

利用循环语句不断的产生幅值为255的波形的输出。

原理图如下:

三角波模块RTL图2-3

2.3u4数据选择器模块(见附录五)

利用数据选择器模块可以对三角波,正弦波,方波进行三选一得输出。

当开关d0拨通,d1,d2均闭合时q端输出的是三角波;

当开关d1拨通,d0,d2均闭合时q端输出的是方波;

当开关d2拨通,d0,d1均闭合时q端输出的是正弦波;

数据选择器模块RTL图2-4

3硬件测试

当程序下载到硬件之后,采用chipscope实现对FPGA内部信号的在线调试。

在FPGA已经下载程序的情况下,添加我们关心的信号或者接口,将选定了端口Chipscope(不妨理解为一个嵌入的系统)加入到程序后重新布局布线下载到FPGA中,此时我们就可以观察信号和接口的值了。

在对ip核的设置中设置chipscope每次对信号的抓取为2048个。

3.1对三角波的抓取

当选择信号K0置1,K1、K2置0时,信号发生器输出波形为三角波,如图3-1-1所示:

Chipscope抓三角波波形图3-1-1

利用chipscope的导出功能,得到具体的数据表。

如图3-1-2

所示:

Chipscope对三角波形的导出图3-1-2

3.2对方波的抓取

当选择信号K1置1,K0、K2置0时,信号发生器输出波形为方波,如图3-2-1所示:

Chipscope抓方波波形图3-2-1

如图3-2-2所示:

Chipscope对方波形的导出图3-2-2

3.3对正弦波的抓取

当选择信号K2置1,K0、K1置0时,信号发生器输出波形为正弦波,如图3-3-1所示:

Chipscope抓正弦波形图3-3-1

如图3-3-2所示:

Chipscope对正弦波形的导出图3-3-2

4利用MATLAB实现直观的观测数据

因为利用chipscope所导出的数据是一个一个的数组,所以无法对波形实现直观的观察。

为了方便观察实验数据,利用MATLAB软件实现对文本文件中的数据的读。

导出的每行数据可看做一个数组,每个数组第11位是波形的数据位,因此利用MATLAB只读第11列的数据。

利用MATLAB画波形时,横轴作为波形的时间轴,每间隔为1打一个点,纵轴作为波形的幅值,用polt输出将这些点链接起来,就可以直观的观测波形。

方波的MATLAB程序如下:

clc,clear

data=textread('

F:

\ISEDesign\wave_generate\实验数据\DELTA.txt'

);

%采集路径

th=data(:

11);

%数组全部采集,采集第11位

a=th'

;

%转置

t=0:

2047;

%点的个数

subplot(311)

plot(t,a);

利用gridon,和subplot语句可以实现把三个波形画在一起(MATLAB全部程序见附录六),画好后波形如图4-1:

MATLAB画出波形图4-1

5有待改进

程序中的频率和幅值都是固定的,未能实现频率和幅值的可调节,因此就没有广泛的实用性,进一步的研究应从波形发生器向信号发生器改变。

附录一

顶层设计例化语句

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

entitysigis

PORT(clk,clrn:

INSTD_LOGIC;

fb,sjb,zxb:

INSTD_LOGIC;

ou:

INOUTSTD_LOGIC_VECTOR(7DOWNTO0));

endsig;

architectureBehavioralofsigis

COMPONENTsin

PORT(clk,clrn:

q:

INOUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

COMPONENTsquare

COMPONENTdelta

COMPONENTsig_control

PORT(delta,square,sin:

d0,d1,d2:

INSTD_LOGIC_VECTOR(7DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

componentila

PORT(

CONTROL:

INOUTSTD_LOGIC_VECTOR(35DOWNTO0);

CLK:

TRIG0:

INSTD_LOGIC_VECTOR(7DOWNTO0));

endcomponent;

componenticon

CONTROL0:

INOUTSTD_LOGIC_VECTOR(35DOWNTO0));

signalCONTROL:

STD_LOGIC_VECTOR(35DOWNTO0);

signalTRIG0:

STD_LOGIC_VECTOR(7DOWNTO0);

signala:

STD_LOGIC_VECTOR(7DOWNTO0);

signalb:

signalc:

begin

squarePORTMAP(clk=>

clk,clrn=>

clrn,q=>

a);

sinPORTMAP(clk=>

b);

deltaPORTMAP(clk=>

c);

sig_controlPORTMAP(delta=>

sjb,square=>

fb,sin=>

zxb,d0=>

a,d1=>

b,d2=>

c,q=>

ou);

u5:

ilaPORTMAP(CONTROL,clk,ou);

u6:

iconportmap(CONTROL);

endBehavioral;

附录二

u1方波产生模块程序

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsquareIS

PORT(clk,clrn:

OUTSTD_LOGIC_VECTOR(7downto0));

ENDsquare;

ARCHITECTUREaOFsquareIS

SIGNALf:

STD_LOGIC;

BEGIN

PROCESS(clk,clrn)

VARIABLEtmp:

STD_LOGIC_VECTOR(7downto0);

IFclrn='

0'

THENtmp:

="

00000000"

ELSE

IFclk'

eventandclk='

1'

THEN------------------------------上升沿触发

IFtmp="

11111111"

---计数为256时置零

ELSEtmp:

=tmp+1;

ENDIF;

IFtmp<

"

10000000"

THENf<

='

------------------当计数小于128时,f为1

ELSEf<

---------------------------------------------否则f为0

ENDPROCESS;

PROCESS(clk,f)

THEN

IFf='

THENq<

-----------------------------------f为1时q为255

ELSEq<

--------------------------------------------f为0时q为0

ENDa;

附录三

sin正弦波产生模块程序

ENTITYsinIS

PORT(clk,clrn:

ENDsin;

ARCHITECTUREAOFsinIS

PROCESS(clk,clrn)

VARIABLEtmp:

INTEGERRANGE63DOWNTO0;

-------------------------对一个周期的正弦波采用64个点

IFclrn='

;

tmp:

=0;

ELSE

EVENTANDclk='

THEN-----------------------------------------------上升沿触发

IFtmp=63THENtmp:

ELSEtmp:

ENDIF;

CASEtmpIS

WHEN00=>

q<

WHEN01=>

11111110"

WHEN02=>

11111100"

WHEN03=>

11111001"

WHEN04=>

11110101"

WHEN05=>

11101111"

WHEN06=>

11101001"

WHEN07=>

11100001"

WHEN08=>

11011001"

WHEN09=>

11001111"

WHEN10=>

11000101"

WHEN11=>

10111010"

WHEN12=>

10101110"

WHEN13=>

10100010"

WHEN14=>

10010110"

WHEN15=>

10001001"

WHEN16=>

01111100"

WHEN17=>

01110000"

WHEN18=>

01100011"

WHEN19=>

01010111"

WHEN20=>

01001011"

WHEN21=>

01000000"

WHEN22=>

00110101"

WHEN23=>

00101011"

WHEN24=>

00100010"

WHEN25=>

00011010"

WHEN26=>

00010011"

WHEN27=>

00001101"

WHEN28=>

00001000"

WHEN29=>

00000100"

WHEN30=>

00000001"

WHEN31=>

WHEN32=>

WHEN33=>

WHEN34=>

WHEN35=>

WHEN36=>

WHEN37=>

WHEN38=>

WHEN39=>

WHEN40=>

WHEN41=>

WHEN42=>

WHEN43=>

WHEN44=>

WHEN45=>

WHEN46=>

WHEN47=>

WHEN48=>

WHEN49=>

WHEN50=>

WHEN51=>

WHEN52=>

WHEN53=>

WHEN54=>

WHEN55=>

WHEN56=>

WHEN57=>

WHEN58=>

WHEN59=>

WHEN60=>

WHEN61=>

WHEN62=>

WHEN63=>

WHENOTHERS=>

NULL;

ENDCASE;

ENDIF;

ENDA;

附录四

u3:

三角波产生模块程序

-------------------预先定义的操作符可以进行重载

ENTITYdeltaIS

port(clk,clrn:

ENDdelta;

ARCHITECTUREaOFdeltaIS

BEGIN

PROCESS(clk,clrn)

VARIABLEf:

STD_LOGIC;

ELSIFclk'

THEN---------------三角波的上升,到255时跳到f1

f:

ELSE-----------------三角波的下降,到0时跳到f0

IFtmp="

=tmp-1;

q<

=tmp;

ENDPROCESS;

附录五

u4:

数据选择器模块程序

ENTITYsig_controlIS

PORT(delta,square,sin:

d0,d1,d2:

ENDsig_control;

ARCHITECTUREbehaveOFsig_controlIS

SIGNALsel:

STD_LOGIC_VECTOR(2DOWNTO0);

sel<

=delta&

square&

sin;

---------------------------并置

PROCESS(sel)

CASEselIS

WHEN"

100"

=>

=d0;

010"

=d1;

001"

=d2;

ENDbehave;

附录六

利用MATLAB画波形的程序

gridon

\ISEDesign\wave_generate\实验数据\SIN.txt'

b=th'

subplot(312)

plot(t,b);

\ISEDesign\wave_generate\实验数据\SQUARE.txt'

c=th'

subplot(313)

plot(t,c);

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

当前位置:首页 > 总结汇报 > 其它

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

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