串行口数据传输的仿真和硬件实现实验Word下载.docx

上传人:b****6 文档编号:21756407 上传时间:2023-02-01 格式:DOCX 页数:23 大小:888.75KB
下载 相关 举报
串行口数据传输的仿真和硬件实现实验Word下载.docx_第1页
第1页 / 共23页
串行口数据传输的仿真和硬件实现实验Word下载.docx_第2页
第2页 / 共23页
串行口数据传输的仿真和硬件实现实验Word下载.docx_第3页
第3页 / 共23页
串行口数据传输的仿真和硬件实现实验Word下载.docx_第4页
第4页 / 共23页
串行口数据传输的仿真和硬件实现实验Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

串行口数据传输的仿真和硬件实现实验Word下载.docx

《串行口数据传输的仿真和硬件实现实验Word下载.docx》由会员分享,可在线阅读,更多相关《串行口数据传输的仿真和硬件实现实验Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

串行口数据传输的仿真和硬件实现实验Word下载.docx

假设采纳并行检测,有并行数据输入端、检测信号输出端;

假设采纳串行检测,有串行数据接入端、时钟信号输入端、

检测信号输出端。

(5)操纵电路:

时钟信号输如端、检测信号输入端、操纵信号输出端。

(6)锁存电路:

操纵信号输入端、并行数据输入端、并行数据输出端。

(7)显示电路:

并行数据输入端。

3、各部分的逻辑设计:

〔1〕时钟电路设计:

由于晶振产生的时钟频率为1MHz,而为了显示稳固,需要的时钟频率为2Hz以下,因此需要分频。

本次设计采纳的是同步计数器来进行分频,输出端为Qa~Qd,分频系数为2N〔N为端口数〕。

每个74LS163最多为24=16分频,而需要的分频系数:

106÷

2=5×

105≈219。

因此需要5块74LS163芯片用作分频。

具体电路图如下:

所得的输出频率约为2Hz.

〔2〕序列信号发生器设计:

本次实验需要产生的序列为15位循环码〝111100010011010〞,通过检验可知,此序列产生的15个4位序列不互相重复,因此能够用4个D触发器来构造序列发生器。

此序列信号发生器的反馈电路能够通过〝与〞、〝或〞、〝非〞逻辑门或数据选择器实现。

本次实验中,我们使用了数据选择器。

状态表及卡诺图如下所示:

Q4

Q3

Q2

Q1

Q4Q3

Q2Q1

00

01

11

10

φ

1

D

为使系统能够自启动,令φ=1。

使用Q4Q3作为数据选择器的输入,有

C0=

,C1=1,C2=1,C3=0

故序列信号发生器的电路图设计如下所

〔3〕串并转换电路的设计

因为系统需要7位并行输出,因此串并转换电路可由两块移位寄存器74LS194级联构成。

电路图如下:

〔4〕串行字符检测电路的设计:

串行字符检测实际确实是依次对字符进行检测,符合同步码的输出1,否那么输出0。

但假设对7位同步码都进行检测,需要的触发器较多,电路将专门复杂。

通过观看发觉同步码后4位1000在整个序列中是唯独的,因此实验中通过检测1000来达到检测同步码的成效。

检测电路可通过状态机来实现。

状态转移图如下所示:

1/0

0/11/01/00/0

0/0

对A、B、C、D进行编码:

A00,B01,C11,D10

X=0

Z

X=1

卡诺图如下:

Q2Q1

Q1n+1

Q2n+1

Z

由卡诺图可得:

D2=Q2n+1=Q1

D1=Q1n+1=

Q1+D

Z=Q2·

·

可用D触发器实现,电路图如下所示:

〔5〕并行字符检测电路的设计:

并行字符检测,立即原序列经串并转换电路后产生的并行信号与同步码1111000相比较,当与同步码相同时,即产生一个高电平。

此检测电路可通过两个比较器实现,比较时应由低位到高位依次进行。

本实验采纳了两个数据比较器74LS85级联的方式。

电路图如下所示:

〔6〕操纵电路的设计:

字符检测电路假设检测到同步码就会对操纵电路输出一个信号,操纵电路对此信号做出反应,以此来操纵锁存电路的开关。

检测信号通过操纵电路使锁存器开启,此后检测信号对锁存器的阻碍就不存在了。

电路图如下所示:

(7)锁存电路的设计:

锁存电路比较简单,只需要一块74LS273锁存芯片就能够。

只要把7个数据输入端分别连接到串并转换电路的并行输出端,再将操纵电路的输出端接到锁存器的时钟输入端即可。

电路如下所示:

(8)显示电路的设计:

将锁存器的7个输出端接到数码显示管的7个管脚即可实现显示电路。

要注意的是,数码管的abcdefg七个管脚分别对应数据的高位到低位。

3、总电路图:

〔1〕串行:

〔2〕并行:

四、波形仿真结果

1、

串行:

2、并行:

手绘示波器波形见坐标纸

五、VHDL程序代码及注释

1、串行代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycxingis--定义实体名为cxing

port(

clk_in:

instd_logic;

clk_out:

bufferstd_logic;

c_out:

outstd_logic_vector(6downto0));

endcxing;

architectureaofcxingis--定义结构体名为a

signaltmp1:

integerrange0to999999;

signaltmp2:

integerrange0to14;

signalclk,f,q_out,q,cp_control,control:

std_logic;

typestate_typeis(s0,s1,s2,s3,s4);

signalcurrent_state,next_state:

state_type;

signaltmp:

std_logic_vector(6downto0);

begin

p1:

process(clk_in)--分频器1MHz分为2Hz

ifclk_in'

eventandclk_in='

1'

then

iftmp1=999999then

tmp1<

=0;

else

=tmp1+1;

endif;

iftmp1=500000then

clk<

='

;

0'

endprocessp1;

clk_out<

=clk;

p2:

process(clk)--函数信号发生器111100*********

ifclk'

eventandclk='

iftmp2=14then

tmp2<

=tmp2+1;

endprocessp2;

p3:

process(tmp2)

casetmp2is

when4|5|6|8|9|12|14=>

q_out<

whenothers=>

endcase;

endprocessp3;

p4:

process(current_state,q_out)--串行检测

casecurrent_stateis

whens0=>

if(q_out='

)thennext_state<

=s1;

elsenext_state<

=s0;

endif;

whens1=>

=s2;

whens2=>

=s3;

whens3=>

=s4;

whens4=>

endcase;

endprocess;

p5:

process(clk)

if(clk'

)then

current_state<

=next_state;

p6:

process(current_state)

casecurrent_stateis

whens0=>

f<

whens1=>

whens2=>

whens3=>

whens4=>

endprocess;

cp_control<

=clkorq;

p7:

process--操纵信号

waituntilcp_control='

q<

=f;

control<

=qandclk;

p8:

process(clk)--串并转换

begin

ifclk'

tmp(6)<

=tmp(5);

tmp(5)<

=tmp(4);

tmp(4)<

=tmp(3);

tmp(3)<

=tmp

(2);

tmp

(2)<

=tmp

(1);

tmp

(1)<

=tmp(0);

tmp(0)<

=q_out;

p9:

process(control)--锁存器输出

ifcontrol'

eventandcontrol='

c_out(6)<

=nottmp(6);

c_out(5)<

=nottmp(5);

c_out(4)<

=nottmp(4);

c_out(3)<

=nottmp(3);

c_out

(2)<

=nottmp

(2);

c_out

(1)<

=nottmp

(1);

c_out(0)<

=nottmp(0);

enda;

2、并行代码

entitybxingis--定义实体名为bxing

endbxing;

architecturebofbxingis--定义结构体名为b

signalclk,f,q_out,q,cp_control,control,a,b,c,d:

std_logic_vector(7downto0);

tmp(7)<

=tmp(6);

process(tmp(0),tmp

(1),tmp

(2),tmp(3))--并行检测

if(tmp(0)='

a<

elsea<

if(tmp

(1)='

b<

elseb<

if(tmp

(2)='

c<

elsec<

if(tmp(3)='

d<

elsed<

=aandbandcandd;

cp_control<

ifcontrol'

=nottmp(7);

endb;

串并行的仿真图一样,皆如下:

六、选做部分:

纠错电路的设计与实现

错码发生器,即序列信号发生器,我们的错码序列为〝111100*********〞,假设使用触发器,那么至少需要6个,因此我们能够通过一个74LS163计数器和由74LS153级联构成的16选1数据选择器构成序列信号发生器。

纠错电路设计的另一个关键在于,如何定位错误的码。

与之前同步检测的原理类似,我们要找到以错码为结尾同时始终没有重复的码形作为检测的目标。

本次实验我们的错码为〝111100*********〞,因此,以〝0011〞作为检测码,通过时序电路实现。

状态机的设计如下。

0/00/0

1/1

对状态机的四个状态进行编码,A00,B01,C11,D10

Q2nQ1n

X=0

X=1

Q2n+1Q1n+1

Z

01

0

00

11

10

1

由状态表可绘出卡诺图如下所示:

X

Q2nQ1n

X

由卡诺图可得,

Q2n+1=Q1n

+Q2nQ1n

Q1n+1=

Z=Q2n

在数字逻辑电路课上我们明白,任何数跟1异或能够得到与之相反的数,因此检测到错码后检测电路输出1,此1跟原序列该位置的码相异或,得到正确码。

综上所述,错码发生电路如下所示:

波形仿真:

七、实验分析及总结

1、本次实验综合性较强,既考查了数字电路知识,也锤炼了动手操作能力,我们从中获益良多。

通过对序列信号发生器、串并转换电路、检测电路等电路的设计,我们〝温故而知新〞,对计数器、移位寄存器、数据选择器、比较器等中规模集成电路的实际应用有了更深刻的明白得。

另外,由于此次实验电路较为繁琐、芯片数量较大,我们在连接电路上花费了较多的精力,也遇到过重重困难,但我们将这些问题各个击破,并在那个过程中学到了许多东西。

2、本次实验遇到的问题较多,在此总结如下:

(1)串行电路刚刚完成时,接通电源之后数码显示管的预热时期总是不能显示完整的〝8〞字,同时也不是每一次差不多上从〝倒c〞开始循环显示。

后来才发觉是电源线与板子接触不良,有的插孔较为稳固,有的插孔那么不是。

我们最后找到了一个能够使电源与板子接触良好的插孔,使得数码显示管预热时期显示完整的〝8〞,同时码形从〝倒c〞开始。

(2)在并行电路的连接中,我们发觉锁存器的输出与串行时相比延迟了一个脉冲,这是由并行检测电路中使用的两个74LS85比较器级联而产生的。

我们解决的方法是,将串并转换电路的输出全部向高位平移一位再接入锁存器,从而抵消了检测电路的延时。

(3)在纠错电路中,专门关键的一点确实是正确码与错误码的同步。

我们对两个信号采纳了相同的串并转换电路、同步检测电路和操纵电路,但在测试时发觉正确码所对应的数码管总是会发生间歇的全部熄灭,通过认真检查后才发觉,锁存器74LS273的清零端没有接高电平。

通过修改后,我们实现了正确码与错误码的同步显示。

(4)连接电路的过程中有时会遇到跨线的问题,这就容易产生干扰。

因此,在以后的实验学习中,我们会更加合理的安排芯片的布局与绕线,尽量减免这种干扰。

3、此次实验让我们对数字电路与逻辑设计的知识,专门是序列信号发生器以及状态机的设计,有了更进一步的了解。

同时,那个实验过程也让我们认识到坚持不懈的精神、严谨求实的态度在科学工作中的重要性。

我们应该连续以良好的态度,在以后的实验学习中,不断培养自己提出问题、分析问题、解决问题的能力,真正去领会科学知识中的精髓。

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

当前位置:首页 > 高等教育 > 工学

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

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