北邮数电实验报告VHDLWord下载.docx

上传人:b****4 文档编号:6542462 上传时间:2023-05-06 格式:DOCX 页数:32 大小:348.53KB
下载 相关 举报
北邮数电实验报告VHDLWord下载.docx_第1页
第1页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第2页
第2页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第3页
第3页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第4页
第4页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第5页
第5页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第6页
第6页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第7页
第7页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第8页
第8页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第9页
第9页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第10页
第10页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第11页
第11页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第12页
第12页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第13页
第13页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第14页
第14页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第15页
第15页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第16页
第16页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第17页
第17页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第18页
第18页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第19页
第19页 / 共32页
北邮数电实验报告VHDLWord下载.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北邮数电实验报告VHDLWord下载.docx

《北邮数电实验报告VHDLWord下载.docx》由会员分享,可在线阅读,更多相关《北邮数电实验报告VHDLWord下载.docx(32页珍藏版)》请在冰点文库上搜索。

北邮数电实验报告VHDLWord下载.docx

c)分频模块:

本模块主要功能是输出四个分频时钟clk_out32,clk_out,clk_1k,clk_100。

clk_out是波形的每一点的并行值输出频率,当输出2500hz波形时,其值为2500*125=312.5khz,clk_out32是clk_out的40倍频,是并串转换的频率,当输出2500hz频率时,其值为12.5Mhz,clk_1k是扫描6个数码管的频率,取1khz可以取得比较好的显示效果,clk_100是频率选择模块的频率,分频时设计一个计数变量,若4分频,则设变量为0~3,0,1时输出低电平,2,3时输出高电平。

d)数码管显示模块:

本模块是选择相应的频率时在数码管上显示相应的频率。

e)状态转换模块:

本模块功能是转换不同状态,输出不同频率波形,用一个2位的vector表示状态,由于总共只有3种频率,所以使状态0和1输出频率相同。

f)并串转换模块:

本模块将上级输入的12位并行数据信号转换为串行输出,以供TLV5638进行DA转换。

按下btn1后,系统重置,经过两次状态转换。

state0是一个等待状态,系统等待200个时钟周期之后进入state1,系统将把TLV5638的触发信号cs置成有效电平0,允许数据写入,这个状态主要用来写TLV5638的控制寄存器,将它的参考电平设为2.048V,接着系统进入state3,cs置成高电平,停止数据写入,这个状态等待4个时钟周期,因为时钟频率是clk_out的40倍频,接着进入state2,开始并串转换,输出16位串行数据后又进入state3,此时转换频道,等待4个周期再进入state2。

在TLV5638自身允许输入的状态下,依次使用DAC_A和DAC_B输出三角波和正弦波数据。

在它自身禁止输入的状态下,进程将TLV5638的触发信号置成无效电平,并不输出。

三、总体电路图

四、仿真波形及分析

1.三角波输出仿真情况

从仿真波形可以看出,输出的12位并行数据从65到130,再到195…符合设计要求。

2.正弦波输出仿真情况

从仿真波形可以看出,输出的12位并行数据从111111111111到111111111101,再到111111111101…符合设计要求。

3.并串转换输出仿真情况

从仿真波形可以看出,当输入的三角波和正弦波数据分别为000100101001和000000000010时,输出的串行数据data_out为000000000010000100101001…符合设计要求。

4.分频输出仿真情况(以输出2500hz频率为例)

从仿真波形可以看出,当state为0时,clk_out32为clk的4分频,即12.5Mhz,clk_1k,clk_100与clk_out由于和clk频率相差太大,无法从仿真波形上看出。

符合设计要求。

5.数码管扫描仿真情况(以输出2500hz为例)

从仿真波形可以看出,seg按照1101101,1011011,1111110,1111110循环变化,cat按照110111,111011,111101,111110循环变化,符合设计要求。

6.状态转换仿真情况

从仿真波形可以看出,当不断按下btn0时,state在0,1,2,3循环转换,符合设计要求。

五、源程序

convert.vhd:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYconvertIS

PORT

clk_in:

INSTD_LOGIC;

reset:

cs:

OUTSTD_LOGIC;

data_tri:

INSTD_LOGIC_VECTOR(11DOWNTO0);

--三角波

data_sin:

--正弦波

data_out:

OUTSTD_LOGIC

);

ENDconvert;

ARCHITECTUREbingoOFconvertIS

SIGNALstate:

INTEGERRANGE0TO3;

--Setreferencevoltageto2.048V

SHAREDVARIABLEcontrol:

STD_LOGIC_VECTOR(15DOWNTO0):

="

1101000000000010"

;

SIGNALflg0:

STD_LOGIC;

SIGNALflg:

SIGNALchannel:

SIGNALdata_tmp:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

begin_delay:

PROCESS(clk_in,reset)--开始延时200个时钟周期

VARIABLEdelay_count:

INTEGERRANGE0TO199;

BEGIN

IF(reset='

1'

)THEN

delay_count:

=0;

flg0<

='

0'

ELSIF(clk_in'

eventANDclk_in='

IF(state=0)THEN

IF(delay_count=199)THEN

flg0<

ELSE

delay_count:

=delay_count+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESSbegin_delay;

work_delay:

PROCESS(clk_in,reset)--工作延时4个时钟周期

VARIABLEdelay4:

delay4:

flg<

IF(state=3)THEN

IF(delay4=2)THEN

flg<

delay4:

=delay4+1;

ELSE

delay4:

flg<

ENDPROCESSwork_delay;

p:

PROCESS(clk_in,reset)

VARIABLEcs_0:

STD_LOGIC:

='

VARIABLEtemp:

INTEGERRANGE0TO15:

)THEN--初始化

cs_0:

cs<

=cs_0;

state<

channel<

temp:

casestateis

when0=>

IF(flg0='

state<

=1;

ENDIF;

when1=>

data_tmp<

=control;

cs_0:

cs<

when2=>

IF(temp=0)THEN--并串转换

IF(channel='

data_tmp<

0101"

&

data_sin;

ELSE

1100"

data_tri;

ENDIF;

cs_0:

cs<

when3=>

cs_0:

IF(flg='

=2;

endcase;

IF(cs_0='

IF(temp=0)THEN

temp:

=15;

=temp-1;

IF(state=1)THEN--输出16位串行数据

IF(temp=15)THEN

data_out<

=NOTdata_tmp(temp);

ELSE

=data_tmp(temp);

ENDIF;

IF(temp=0)THEN

state<

=3;

ELSIF(state=2)THEN--输出16位串行数据

channel<

=NOTchannel;

--转换频道

ENDPROCESSp;

ENDbingo;

delta.vhd:

ENTITYdeltaIS

OUTSTD_LOGIC_VECTOR(11DOWNTO0)

ENDdelta;

ARCHITECTUREaOFdeltaIS

p1:

PROCESS(clk_in)

VARIABLEdata:

STD_LOGIC_VECTOR(11DOWNTO0);

VARIABLEflg:

IF(clk_in'

IF(flg='

data:

=data+65;

IF(data="

111110111110"

flg:

000000000000"

data:

=data-65;

data_tri<

=data;

ENDPROCESSp1;

ENDa;

fenpin.vhd:

ENTITYfenpinIS

clk:

state:

INSTD_LOGIC_VECTOR(1DOWNTO0);

clk_out32:

--并行

clk_out:

--串行

clk_1k:

clk_100:

ENDfenpin;

ARCHITECTUREaOFfenpinIS

SIGNALclk_2500s:

--12.5M

SIGNALclk_1000s:

--5M

SIGNALclk_500s:

--2.5M

SIGNALclk_tmp:

--clk_out

SIGNALclk_1ks:

SIGNALclk_100s:

SIGNALtmp_4:

SIGNALtmp_10:

INTEGERRANGE0TO9;

SIGNALtmp_2:

INTEGERRANGE0TO1;

SIGNALtmp_40:

INTEGERRANGE0TO39;

SIGNALtmp_2500:

INTEGERRANGE0TO2499;

SIGNALtmp_10s:

PROCESS(state)

casestateis

when"

00"

=>

clk_out32<

=clk_2500s;

clk_tmp<

01"

10"

=clk_1000s;

11"

=clk_500s;

whenothers=>

clk_out32<

endcase;

ENDPROCESSP;

PROCESS(clk)

IF(clk'

eventANDclk='

IFtmp_4=3THEN

tmp_4<

=0;

=tmp_4+1;

IFtmp_4<

2THEN

clk_2500s<

p2:

IFtmp_10=9THEN

tmp_10<

=tmp_10+1;

IFtmp_10<

5THEN

clk_1000s<

ENDPROCESSp2;

p3:

PROCESS(clk_1000s)

IF(clk_1000s'

eventANDclk_1000s='

IFtmp_2=1THEN

tmp_2<

=tmp_2+1;

IFtmp_2<

1THEN

clk_500s<

ENDPROCESSp3;

p4:

PROCESS(clk_tmp)--clk_out

IF(clk_tmp'

eventANDclk_tmp='

IFtmp_40=39THEN

tmp_40<

=tmp_40+1;

IFtmp_40<

20THEN

clk_out<

ENDPROCESSp4;

p5:

PROCESS(clk_500s)

IF(clk_500s'

eventANDclk_500s='

IFtmp_2500=2499THEN

tmp_2500<

=tmp_2500+1;

IFtmp_2500<

1250THEN

clk_1k<

--1khz

clk_1ks<

ENDPROCESSp5;

p6:

PROCESS(clk_1ks)

IF(clk_1ks'

eventANDclk_1ks='

IFtmp_10s=9THEN

tmp_10s<

=tmp_10s+1;

IFtmp_10s<

clk_100<

clk_100s<

--100hz

ENDPROCESSp6;

shuma.vhd;

ENTITYshumaIS

seg:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

cat:

OUTSTD_LOGIC_VECTOR(5DOWNTO0)

ENDshuma;

ARCHITECTUREaOFshumaIS

SIGNALseg_tmp1:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALseg_tmp2:

SIGNALseg_tmp3:

SIGNALseg_tmp4:

SIGNALcount:

seg_tmp1<

1101101"

--2

seg_tmp2<

1011011"

--5

seg_tmp3<

1111110"

--0

seg_tmp4<

seg_t

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2