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

上传人:牧羊曲112 文档编号:1665868 上传时间:2022-12-13 格式:DOCX 页数:21 大小:972.72KB
返回 下载 相关 举报
串行口数据传输的仿真和硬件实现实验.docx_第1页
第1页 / 共21页
串行口数据传输的仿真和硬件实现实验.docx_第2页
第2页 / 共21页
串行口数据传输的仿真和硬件实现实验.docx_第3页
第3页 / 共21页
串行口数据传输的仿真和硬件实现实验.docx_第4页
第4页 / 共21页
串行口数据传输的仿真和硬件实现实验.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《串行口数据传输的仿真和硬件实现实验.docx》由会员分享,可在线阅读,更多相关《串行口数据传输的仿真和硬件实现实验.docx(21页珍藏版)》请在三一办公上搜索。

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

2、发送端主要是同步字符、结束字符、时钟电路和信息码发生器。 接收端包括串/并转换电路、字符检测电路、控制电路、锁存接收和显示电路。2、各部分功能的端口设置:(1) 时钟电路: 晶振的时钟输入信号、通过分频后提供系统使用的输出信号。(2) 信号发生电路:时钟电路发出的时钟信号输入端、生成的序列输出端。(3) 串并转换电路:时钟信号输入、串行序列输入端、并行序列输出端。(4) 字符检测电路:若采用并行检测,有并行数据输入端、检测信号输出端; 若采用串行检测,有串行数据接入端、时钟信号输入端、 检测信号输出端。(5) 控制电路: 时钟信号输如端、检测信号输入端、控制信号输出端。(6) 锁存电路: 控制

3、信号输入端、并行数据输入端、并行数据输出端。(7) 显示电路: 并行数据输入端。3、各部分的逻辑设计:(1)时钟电路设计:由于晶振产生的时钟频率为1MHz,而为了显示稳定,需要的时钟频率为2Hz以下,所以需要分频。本次设计采用的是同步计数器来进行分频,输出端为QaQd,分频系数为2N(N为端口数)。每个74LS163最多为24=16分频,而需要的分频系数:1062=5105219。所以需要5块74LS163芯片用作分频。具体电路图如下:所得的输出频率约为2Hz.(2)序列信号发生器设计:本次实验需要产生的序列为15位循环码“111100010011010”,通过检验可知,此序列产生的15个4位

4、序列不互相重复,因此可以用4个D触发器来构造序列发生器。此序列信号发生器的反馈电路可以通过“与”、“或”、“非”逻辑门或数据选择器实现。本次实验中,我们使用了数据选择器。状态表及卡诺图如下所示:Q4Q3Q2Q1 Q4Q3Q2Q10001111000101010101110101100101 D111101110011000100010001000100010011001100110011011101010101010111011101111为使系统能够自启动,令=1。使用Q4Q3 作为数据选择器的输入,有C0=,C1=1,C2=1,C3=0故序列信号发生器的电路图设计如下所(3)串并转换电路的

5、设计因为系统需要7位并行输出,所以串并转换电路可由两块移位寄存器74LS194级联构成。电路图如下:(4)串行字符检测电路的设计:串行字符检测实际就是依次对字符进行检测,符合同步码的输出1,否则输出0。但若对7位同步码都进行检测,需要的触发器较多,电路将非常复杂。通过观察发现同步码后4位1000在整个序列中是唯一的,因此实验中通过检测1000来达到检测同步码的效果。检测电路可通过状态机来实现。状态转移图如下所示:1/00/0AB 1/0 0/1 1/0 1/0 0/0CD 0/0对A、B、C、D进行编码: A 00,B 01,C 11,D 10X=0ZX=0X=1000001001100101

6、0X=1000001011101111001100001卡诺图如下: Q2Q1D000111 Q2Q1D000111100010011111 Q1n+1100011010000 Q2n+1 Q2Q1D000111100000110000 Z由卡诺图可得:D2=Q2n+1=Q1D1=Q1n+1=Q1+DZ=Q2可用D触发器实现,电路图如下所示:(5)并行字符检测电路的设计: 并行字符检测,即将原序列经串并转换电路后产生的并行信号与同步码1111000相比较,当与同步码相同时,即产生一个高电平。此检测电路可通过两个比较器实现,比较时应由低位到高位依次进行。本实验采用了两个数据比较器74LS85级联

7、的方式。 电路图如下所示: (6)控制电路的设计:字符检测电路若检测到同步码就会对控制电路输出一个信号,控制电路对此信号做出反应,以此来控制锁存电路的开关。检测信号通过控制电路使锁存器开启,此后检测信号对锁存器的影响就不存在了。电路图如下所示:(7) 锁存电路的设计:锁存电路比较简单,只需要一块74LS273锁存芯片就可以。只要把7个数据输入端分别连接到串并转换电路的并行输出端,再将控制电路的输出端接到锁存器的时钟输入端即可。电路如下所示:(8) 显示电路的设计:将锁存器的7个输出端接到数码显示管的7个管脚即可实现显示电路。要注意的是,数码管的abcdefg七个管脚分别对应数据的高位到低位。3

8、、总电路图:(1)串行:(2)并行:四、 波形仿真结果串并转换输出原序列信号检测信号1、 串行:检测信号串并转换输出原序列信号锁存器输出锁存器输入控制信号2、 并行:控制信号锁存器输出锁存器输入手绘示波器波形见坐标纸五、 VHDL程序代码及注释1、串行代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cxing is -定义实体名为cxingport(clk_in:in std_logic;clk_out:buffer std_logic;c_out:out std_logic_

9、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_control,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 downt

10、o 0);beginp1:process(clk_in) -分频器1MHz分为2Hzbegin if clk_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;els

11、etmp2q_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_stateif(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)begin

12、if(clkevent and clk=1) then current_statefffff=1; end case; end process; cp_control=clk or q;p7:process -控制信号begin wait until cp_control=1; q=f; end process;control=q and clk; p8:process(clk) -串并转换 begin if clkevent and clk=1 then tmp(6)=tmp(5); tmp(5)=tmp(4); tmp(4)=tmp(3); tmp(3)=tmp(2); tmp(2)=tm

13、p(1); tmp(1)=tmp(0); tmp(0)=q_out; end if;end process;p9:process(control) -锁存器输出 begin if controlevent and control=1 then c_out(6)=not tmp(6); c_out(5)=not tmp(5); 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、并行

14、代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bxing is -定义实体名为bxingport(clk_in:in std_logic;clk_out:buffer std_logic;c_out:out std_logic_vector(6 downto 0);end bxing;architecture b of bxing is -定义结构体名为bsignal tmp1:integer range 0 to 999999;signal tmp2:integer rang

15、e 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分为2Hzbegin if clk_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_

16、out=clk;p2:process(clk) -函数信号发生器111100011011010beginif clkevent and clk=1 thenif tmp2=14 thentmp2=0;elsetmp2q_outq_out=1;end case;end process p3;p4:process(clk) -串并转换 begin if 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

17、(0); tmp(0)=q_out; end if;end process;p5:process (tmp(0),tmp(1),tmp(2),tmp(3) -并行检测begin if (tmp(0)=0) then a=1; else a=0; end if; if(tmp(1)=0) then b=1; else b=0; end if; if(tmp(2)=0) then c=1; else c=0; end if; if(tmp(3)=1) then d=1; else d=0; end if;end process;f=a and b and c and d;cp_control=cl

18、k or q;p6:process -控制信号begin wait until cp_control=1; q=f; end process;control=q and clk; p7:process(control) -锁存器输出 begin if controlevent and control=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

19、(1); end if; end process; end b;串并行的仿真图一样,皆如下:六、 选做部分:纠错电路的设计与实现错码发生器,即序列信号发生器,我们的错码序列为“111100011011010”,若使用触发器,则至少需要6个,因此我们可以通过一个74LS163计数器和由74LS153级联构成的16选1数据选择器构成序列信号发生器。纠错电路设计的另一个关键在于,如何定位错误的码。与之前同步检测的原理类似,我们要找到以错码为结尾并且始终没有重复的码形作为检测的目标。本次实验我们的错码为“111100011011010”,因此,以“0011”作为检测码,通过时序电路实现。状态机的设计如

20、下。1/0BA 1/0 0/0 0/0 0/0 1/1CD 1/00/0对状态机的四个状态进行编码,A 00,B 01,C 11,D 10Q2nQ1n X=0 X=1Q2n+1Q1n+1 ZQ2n+1Q1n+1 Z00 01 0 00 0 01 11 0 00 0 11 11 0 10 0 10 01 0 00 1由状态表可绘出卡诺图如下所示:Q2nQ1nX 00 01 11 10 0 0 1 1 0 1 0 0 1 0 Q2n+1 Q2nQ1n X 00 01 11 10 0 1 1 1 1 1 0 0 0 0 Q1n+1 Q2nQ1n X 00 01 11 10 0 0 0 0 0 1 0

21、 0 0 1 Z由卡诺图可得,Q2n+1=Q1n+Q2nQ1nQ1n+1=Z=Q2nX在数字逻辑电路课上我们知道,任何数跟1异或可以得到与之相反的数,因此检测到错码后检测电路输出1,此1跟原序列该位置的码相异或,得到正确码。综上所述,错码发生电路如下所示:控制信号错误码同步检测信号正确码波形仿真:正确码锁存输出错码锁存输出七、 实验分析及总结1、 本次实验综合性较强,既考查了数字电路知识,也锻炼了动手操作能力,我们从中获益良多。通过对序列信号发生器、串并转换电路、检测电路等电路的设计,我们“温故而知新”,对计数器、移位寄存器、数据选择器、比较器等中规模集成电路的实际应用有了更深刻的理解。另外,

22、由于此次实验电路较为繁琐、芯片数量较大,我们在连接电路上花费了较多的精力,也遇到过重重困难,但我们将这些问题各个击破,并在这个过程中学到了许多东西。2、 本次实验遇到的问题较多,在此总结如下:(1) 串行电路刚刚完成时,接通电源之后数码显示管的预热阶段总是不能显示完整的“8”字,并且也不是每一次都是从“倒c”开始循环显示。后来才发现是电源线与板子接触不良,有的插孔较为稳定,有的插孔则不是。我们最后找到了一个能够使电源与板子接触良好的插孔,使得数码显示管预热阶段显示完整的“8”,并且码形从“倒c”开始。(2) 在并行电路的连接中,我们发现锁存器的输出与串行时相比延迟了一个脉冲,这是由并行检测电路

23、中使用的两个74LS85比较器级联而产生的。我们解决的方法是,将串并转换电路的输出全部向高位平移一位再接入锁存器,从而抵消了检测电路的延时。(3) 在纠错电路中,很关键的一点就是正确码与错误码的同步。我们对两个信号采用了相同的串并转换电路、同步检测电路和控制电路,但在测试时发现正确码所对应的数码管总是会发生间歇的全部熄灭,经过仔细检查后才发现,锁存器74LS273的清零端没有接高电平。经过修改后,我们实现了正确码与错误码的同步显示。(4) 连接电路的过程中有时会遇到跨线的问题,这就容易产生干扰。因此,在以后的实验学习中,我们会更加合理的安排芯片的布局与绕线,尽量减免这种干扰。3、此次实验让我们对数字电路与逻辑设计的知识,尤其是序列信号发生器以及状态机的设计,有了更进一步的了解。并且,这个实验过程也让我们认识到坚持不懈的精神、严谨求实的态度在科学工作中的重要性。我们应该继续以良好的态度,在以后的实验学习中,不断培养自己提出问题、分析问题、解决问题的能力,真正去领会科学知识中的精髓。

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号