串行口数据传输的仿真和硬件实现试验_第1页
串行口数据传输的仿真和硬件实现试验_第2页
串行口数据传输的仿真和硬件实现试验_第3页
串行口数据传输的仿真和硬件实现试验_第4页
串行口数据传输的仿真和硬件实现试验_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、串行口数据传输的仿真及硬件实现第*组班级:*姓名:* *指导老师: *实验目的:串行口数据传输是数字系统中常用的一种数据传输方式。本次课程设计要求学生综合数字逻辑电路和串行口通信的有关知识,用硬件独立设计完成一个简单的串行口数据传输系统,并用FPGA可编程逻辑器件进行仿真。二、实验仪器1双踪示波器 1 台2直流稳压电源1台3频率计 1 台4数字万用表 1 台5面包板 1 台三、实验内容与设计:1、实验内容:一个简单的串行口数据传输系统的系统框图如下:由图可见,系统分为发送端,接收端两部分。发送端主要是同步字符、结束字符、时钟电路 和信息码发生器。接收端包括串/并转换电路、字符检测电路、控制电路

2、、锁存接收和显示电路。2、各部分功能的端口设置:(1)时钟电路:晶振的时钟输入信号、通过分频后提供系统使用的输出信号。(2)信号发生电路:时钟电路发出的时钟信号输入端、生成的序列输出端。(3)串并转换电路:时钟信号输入、串行序列输入端、并行序列输出端。(4)字符检测电路:若采用并行检测,有并行数据输入端、检测信号输出端; 若采用串行检测,有串行数据接入端、时钟信号输入端、检测信号输出端。(5)控制电路:时钟信号输如端、检测信号输入端、控制信号输出端。(6) 锁存电路:控制信号输入端、并行数据输入端、并行数据输出端。(7) 显示电路:并行数据输入端。3、各部分的逻辑设计:(1 )时钟电路设计:由

3、于晶振产生的时钟频率为 1MHz而为了显示稳定,需要的时钟频率为 2Hz以下,所 以需要分频。本次设计采用的是同步计数器来进行分频,输出端为QaQd分频系数为 2N(N为端口数)。每个74LS163最多为24=16分频,而需要的分频系数: 106- 2=5X 105 219。所以需要5块74LS163芯片用作分频。具体电路图如下:(2 )序列信号发生器设计:本次实验需要产生的序列为15位循环码“ 111100010011010”通过检验可知,此序列产生的15个4位序列不互相重复,因此可以用4个D触发器来构造序列发生器。此序列信号发生器的反馈电路可以通过“与”、“或”、“非”逻辑门或数据选择器实

4、现。本次实验中, 我们使用了数据选择器。状态表及卡诺图如下所示:Q1DQ4Q3Q21111011100110001000100010001000100110011001100110111010101010101110111011114QQQ00011110000101010101110101100101为使系统能够自启动,令0=1。使用QQ作为数据选择器的输入,有C0=IJL ,C=1, C2=1, Q=0故序列信号发生器的电路图设计如下所(3) 串并转换电路的设计因为系统需要7位并行输出,所以串并转换电路可由两块移位寄存器74LS194级UlwvAB cD卽CLRNHUEscj-fih目C-

5、QT-CLRHLMazI, j! j ! e f n.- e 11 一,丫.= a aa .-fc.a - - -J - JJT 盘KPVTsn_J3ri i .4 J 1 a i s . u u g i u t n a i e . j . ”aa n si i b . d u j - B ! 9 j :-, I, 联构成。电路图如下:(4) 串行字符检测电路的设计:串行字符检测实际就是依次对字符进行检测,符合同步码的输出1,否则输出0。但若对7位同步码都进行检测,需要的触发器较多,电路将非常复杂。通过观察发现同步码后4位1000在整个序列中是唯一的,因此实验中通过检测 1000来达 到检测同

6、步码的效果。检测电路可通过状态机来实现。状态转移图如下所示:1/00/11/01/00/00/0对 A、B、C、D进行编码:A 00,B 01,C 11,D 10X=0X=1000001011101111001100001卡诺图如下:ZX=0X=10000r 010011001010Q 2Q000111100011010000_ n+1QQ 2QD000111100000110000Z000111100010011111Qn+1由卡诺图可得:D2=q叫qDD=Qn+1=QHQ1+DZ=Q2 .躲 一;可用D触发器实现,电路图如下所示:(5) 并行字符检测电路的设计:并行字符检测,即将原序列经串

7、并转换电路后产生的并行信号与同步码1111000相比较,当与同步码相同时,即产生一个高电平。 此检测电路可通过两个比较器实现,比较时应由低位到高位依次进行。本实验采用了两个数据比较器74LS85级联的方式。电路图如下所示:74S5:(0 :A2AI4U12AESuALEIIA El il咛I;AI ill *2.AllbU心B3ALEI Etl_L. m(6) 控制电路的设计:字符检测电路若检测到同步码就会对控制电路输出一个信号,控制电路对此信号做出反应,以此来控制锁存电路的开关。检测信号通过控制电路使锁存器开启,此后检测信号对锁存器的影响就不存在了。电路图如下所示:(7) 锁存电路的设计:锁

8、存电路比较简单,只需要一块74LS273锁存芯片就可以。只要把 7个数据输入端分别连接到串并转换电路的并行输出端,再将控制电路的输出端接到锁存器的时钟输入端即可。电路如下所示:伍淘1即丁D1_ -202 3口工1nj05DG087 卜打eiK0CTA_ !D-FFIB II - 74273(8) 显示电路的设计:将锁存器的7个输出端接到数码显示管的7个管脚即可实现显示电路。要注意的是,数码管的abcdefg七个管脚分别对应数据的高位到低位。3、总电路图:(1)串行:(2)并行:四、波形仿真结果1、串行:原序列信号检测信号串并转换输出-l.Jf HI 俑1 琴祖i!l卑硼7D ia A 4 n

9、tz UL B- W -n u wL|fmeELi坤63略1Bl锻nntl2、并行:锁存器输出HDL程序代码及注释15.65 nsEndt1 0串并转换输出L_T_e_BT 31原序列信号检测信号_TL_r-LTTJ1_r51 BEkc$1 屮m S ( n ID us re S mM 31 b. ; w R 乍 x J,申 3 W -r- w0 12)TPB:3p |3 Lla 12J|J*14*|T砂14H II神科i_r_irJumiTminmvjimrjL-LjmmnirnnLHiruir_v_rvumnrJirr_ll1_rL_r-LL1_ _ _厂 I _n rj ln_rnjxi

10、njirn-nj_un_ rL_m_n_rn rnr i n m n l rLr-Lru_TLJ_LTLi-_r_r-Lnj-rLJLTLTn r-LTM_n_j_TLrZL- i ; n : rn rr iui L_rj i n_rn_TLi-L_TL-JL-TU- i n ri n r:nn._juuir n nrumniuuuuujimwiimnjuuimir _pEj 1: 片l_ 三 m.-Lr口 _L ni-rL_r-LTLrrL rLTLr1. . IL ,F _TLTi_nr-iri i1、串行代码library ieee 。use ieee.stdo gic_1164.all

11、use ieee.std_logic_ un sig ned.allen tity cxing isport(clk_in:in std_logicclk_out:buffer std_logic定义实体名为cxingc_out:out std_logic_vector(6 downto 0) end cxing 。architecture a of cxing is - 定义结构体名为 asignal tmp1:integer range 0 to 999999 。signal tmp2:integer range 0 to 14 。signal clk,f,q_out,q,cp_contr

12、ol,control:std_logic 。 type state_type is(s0,s1,s2,s3,s4) 。signal current_state,next_state:state_type 。signal tmp:std_logic_vector(6 downto 0) 。beginp1:process(clk_in)-分频器 1MHz分为 2Hzbeginif clk_inevent and clk_in=1 thenif tmp1=999999 then tmp1=0。elsetmp1=tmp1+1 。end if 。if tmp1=500000 thenclk=1 。els

13、eclk=0 。end if 。end if 。end process p1 。clk_out=clk 。p2:process(clk)-函数信号发生器 111100011011010beginif clkevent and clk=1 thenif tmp2=14 then tmp2=0。elsetmp2q_outq_outif(q_out=1)then next_state=s1 else next_stateif(q_out=1)then next_state=s2 else next_stateif(q_out=0)then next_state=s3 else next_statei

14、f(q_out=0)then next_state=s4 else next_stateif(q_out=0)then next_state=s0 else next_state=s1 。 end if 。 end case 。end process 。p5:process(clk)beginif(clkevent and clk=1) then current_statefffff=1。end case 。end process 。控制信号串并转换cp_control=clk or q 。 p7:process -beginwait until cp_control=1q=f 。end pr

15、ocess 。control=q and clk 。p8:process(clk) -beginif clkevent and clk=1 then 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 。end if 。end process 。p9:process(control) - 锁存器输出 beginif controlevent and control=1 then c_out(6)=not tmp(6)。c_out(5)=not tmp(5)

16、。c_out(4)=not tmp(4)。c_out(3)=not tmp(3)。c_out(2)=not tmp(2)。c_out(1)=not tmp(1)。c_out(0)=not tmp(0)。end if 。end process 。end a 。2、并行代码library ieee 。use ieee.std_logic_1164.all。use ieee.std_logic_unsigned.all。bxingentity bxing is - 定义实体名为 port(clk_in:in std_logic 。clk_out:buffer std_logic。c_out:out

17、std_logic_vector(6 downto 0)。end bxing 。architecture b of bxing is - 定义结构体名为 bsignal tmp1:integer range 0 to 999999 。signal tmp2:integer range 0 to 14 。signal clk,f,q_out,q,cp_control,control,a,b,c,d:std_logic 。signal tmp:std_logic_vector(7 downto 0) 。beginp1:process(clk_in)-分频器 1MHz分为 2Hzbeginif cl

18、k_inevent and clk_in=1 thenif tmp1=999999 thentmp1=0。elsetmp1=tmp1+1 。end if 。if tmp1=500000 thenclk=1 。elseclk=0 。end if 。end if 。end process p1 。clk_out=clk 。p2:process(clk)-函数信号发生器 111100011011010beginif clkevent and clk=1 thenif tmp2=14 thentmp2=0。else tmp2q_outq_out=1 。end case 。end process p3

19、。p4:process(clk) - 串并转换 beginif clkevent and clk=1 then tmp(7)=tmp(6)。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 。end if。end process 。并行检测p5:process (tmp(0),tmp(1),tmp(2),tmp(3) -beginif (tmp(0)=0) thena=1 。else a=0 。end if 。if(tmp(1)=0) thenb=1

20、。else b=0 。end if 。if(tmp(2)=0) thenc=1 。else c=0 。end if 。if(tmp(3)=1) thend=1 。else d=0 。end if 。end process 。f=a and b and c and d 。 cp_control=clk or q 。p6:process - 控制信号 beginwait until cp_control=1。q=f 。end process 。control=q and clk 。p7:process(control) - 锁存器输出 beginif controlevent and contro

21、l=0 then c_out(6)=not tmp(7)。c_out(5)=not tmp(6)。c_out(4)=not tmp(5)。c_out(3)=not tmp(4)。c_out(2)=not tmp(3)。c_out(1)=not tmp(2)c_out(0)=not tmp(1) end if 。end process 。end b 。串并行的仿真图一样,皆如下:六、选做部分:纠错电路的设计与实现错码发生器,即序列信号发生器,我们的错码序列为“111100011011010”,若使用触发器,则至少需要 6个,因此我们可以通过一个 74LS163计数器和由74LS153级联构成的

22、16选1数据选择器构成序列信号发生器。纠错电路设计的另一个关键在于,如何定位错误的码。与之前同步检测的原理类似, 我们要找到以错码为结尾并且始终没有重复的码形作为检测的目标。本次实验我们的错码为“ 111100011011010 ”,因此,以“ 0011 ”作为检测码,通过时序电路实现。状态机的设计如 下。对状态机的四个状态进行编码,A 00,B 01,C 11,D 10QnQnX=0X=1Qn+1Qn+1ZQn+1Qn+1Z0001000001110000ii11010010010001由状态表可绘出卡诺图如下所示:QnQnX000111100011010010Q2n+10111110000

23、Qn+1X、000111100000010001由卡诺图可得,Qn+1=QnX+QnQQn+1眾Z=QnQ 1 X在数字逻辑电路课上我们知道,任何数跟1异或可以得到与之相反的数,因此检测到错码后检测电路输出1,此1跟原序列该位置的码相异或,得到正确码。综上所述,错码发生电路如下所示:波形仿真:正确码15 W I|!错误码同步检测信号控制信号正确码锁存输出错码锁存输出a,丫厂10七11011M 13皿II皿15U 1*U ITa冲r r nn .TrLnrLTLn r - rjir.rLrLtr n r tni l_Tl_h iniruwiTLRrmjLTLrLrLru-u1LJ-.七、实验分析及归纳总结1、本次实验综合性较强, 既考查了数字电路知识, 也锻炼了动手操作能力, 我们从中获益良多。通过对序列信号发生器、串并转换电路、检测电路等电路的设计,我们“温故而知新”,对计数器、移位寄存器、数据选择器、比较器等中规模集成电 路的实际应用有了更深刻

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论