资源描述
串行口数据传输的仿真及硬件实现学院:信息与通信工程学院专业:通信工程班级:2008211110姓名:潘东阳、王澎涛序号:12总体方案框图时钟电路一串/弁转换.同步字符.结束字符发生器.信息码.字苻检测 电路.显 示 电 路-锁存接收控制电 路电路总体分为7个模块:时钟电路模块、字符发生器模 块、串/并转换模块、字符检测电路模块、控制电路模块、 锁存显示模块和显示电路模块。各模块间的输入输出数据流 如图所示。各部分电路的数字逻辑设计过程和结果1. 时钟电路模块:实验室所提供的晶振的时钟频率为1MHz,若直接使用 人眼将无法正常观测出实验结果。所以需要设计分频模块, 将1MHz的时钟频率通过分频器降低到约 2Hz,这样才可以 正确显下结果。本次实验使用74LS163四位同步计数器级联实现分频 功能。每个74LS163最多为2八4=16分频。为了实现本实验 分频的要求,分频系数应该达到:10八6 + 2=5X 10八5 2八19。 所以需要5块74LS163芯片级联实现分频,所得频率为1MHz/2八19=1.9Hz.具体电路图如下:311f 一一RI日肝 L-Rh输出时冲信号-r fc - f - - - - _s*r_MX M力:o2. 字符发生器模块:本次试验要求发送端产生信息码为111100010011010这个15位循环码。字符发生模块使用由 D触发器构成移位 寄存器的序列信号发生器。由于循环码为15位,2八315 v, L i -=、+,*. , 1, ,- F .尸EL.二5-i-ir -1-T- -当检测到字符1111000时,输出一个高电平,作为控制电路的时钟信号5. 控制电路模块:控制电路完成的功能比较复杂。首先,控制电路要保证 在检测到同步码之前,锁存器关闭,没有任何输出;其次, 在检测到同步码之后,字符检测电路不能对后级有任何影响, 而是由控制电路控制每个7位输出一次。对于第一个功能可以使用一块 D触发器74LS74接受字符检测电路的信号,再通过组合逻辑电路使接收到同步码产生的高电平后此部分电路输出恒定,对锁存电路没有影响; 对于第二个功能,可以由一个7进制计数器实现,这里选用 同步置位的计数器74LS163具体如下:6. 锁存显示模块:锁存电路比较简单,只需要一块74LS273锁存芯片就可以。只要把数据的七个输入端分别连到串并转换的并行输出端,在把控制电路输出的控制电路接到时钟输入端即可。具体电路图如下:742737.显示电路模块:只要把锁存器的七个输出端接到数码管相对应的ag管脚就可以。8.串行字符检测模块:串行字符检测需要一位一位检测,然后每位都符合才输 出信号。若每位都检测,将会使用较多触发器,使电路复杂 化。经过观察,同步码1111000中后四位1000在整个序列 111100010011010中是唯一的,所以检测1000四位即可。 当连续有4位与1000相应匹配时,则输出信号。状态转移图如下:0/00/1对A、B、C、D分别编码为00、01、11、10,则状态转移表为:D=0D=1000001011101111000100000输出为:ZD=0D=10000010011001010卡诺图分别如下:000111100011010000纠错模块应该包含错码发生器、检错模块和纠错模块实验中错码发生器产生的错码为:111100000011010,通过类似序列发生器设计中的方法可以设计出其电路,此处所以,由卡诺图可得:Z=9. 纠错模块:由此可得到电路图:1D1Q2cl倡 MIDW4D20 H启+ECLfih 42U使用同步计数器与数据选择器构成的信号发生器。检错模块通过D触发器加逻辑门电路可以检测出是否 有错码,若有,则输出1。纠错部分接收到检测部分输出的1后,与原信号同一位 进行异或运算,可以将其改为正确码。此部分电路的难点是同步问题。由于各部分之间的延时 不一定相同,所以最终修改的码的位置不一定就是错码的位 置。这种问题只能在具体连接电路时通过加门电路来不断尝 试来取得同步。具体电路原理图如下:理二二:二二二:二.二:二二;::一二二二二二二.二:二:二二:一二二二二二;二二:二.二;于可 ;0错码发生器纠错部分总体电路原理图 *:*二范 Y 四、 用坐标纸画出下列波形(见坐标纸)五、VHDL程序代码及注释串行检测:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chuan isport(vcc,clk:in std_logic;output:out std_logic_vector(6 downto 0);end chuan;architecture tao of chuan issignal signalout: std_logic;signal signalcomposer :integer range 0 to 14;signal signalaccept :std_logic_vector(6 downto 0);signal tmp:integer range 0 to 4999999;signal signaltest: std_logic;signal os: std_logic;signal testout:std_logic;signal controlcout:std_logic;signal finalout :std_logic_vector(6 downto 0);type state_type is (s0,s1,s2,s3,s4);signal state: state_type;- signal test: std_logic_vector(6 downto 0);beginp0:process(clk)beginif clkevent and clk=1 thenif tmp=4999999 then tmp=0;elsetmp=tmp+1;end if;end if;end process p0; p7:process(tmp) beginif tmp=4999999 then os=1;else os=0;end if;end process p7;- -p0 and p7 shi fenpin mokuaip1:process(os)beginif osevent and os=1 thenif signalcomposer=14 thensignalcomposer=0;elsesignalcomposersignaloutsignalout=1;end case;end process p1;- -you jishiqi shixian de xulie fashengqip2:process(signalout)beginif osevent and os=1 thensignalaccept(6)=signalaccept(5);signalaccept(5)=signalaccept(4);signalaccept(4)=signalaccept(3);signalaccept(3)=signalaccept(2);signalaccept(2)=signalaccept(1);signalaccept(1)=signalaccept(0);signalaccept(0)=signalout;end if;end process p2;- -yicunqi shixian chuanbing zhuanhuanp3:process(signalaccept)begin-if clkevent and clk=1 then finalout=signalaccept;-end if;end process p3;-shuchup4:process(signalaccept)beginif testout=1 thensignaltest=vcc;controlcoutif(signalout=1) then state=s1;else state=s0; end if;testoutif(signalout=1) then state=s2;else state=s0; end if;testoutif(signalout=0) then state=s3;else state=s2; end if;testoutif(signalout=0) then state=s4;else state=s2; end if;testoutif(signalout=0) then state=s0;else state=s2; end if;testout=1;end case;end if;end process p6;- -chuanxin jiance 11000p5 :process(signaltest,signalaccept) beginif(signaltest=1) then outputtestouttestout=0;- - end case;- -end process p6;end tao;并行检测:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bing isport(vcc,clk:in std_logic;- -clear:in std_logic;- - signalout: out std_logic;- -testout: out std_logic;- - signaltest: out std_logic;- - testout,controlcout :out std_logic;-finalout:out std_logic_vector(6 downto 0);output:out std_logic_vector(6 downto 0);end bing;architecture pan of bing issignal signalout: std_logic;signal signalcomposer :integer range 0 to 14;signal signalaccept :std_logic_vector(6 downto 0);signal tmp:integer range 0 to 5499999;signal signaltest: std_logic;signal os: std_logic;signal testout:std_logic;signal controlcout:std_logic;signal finalout :std_logic_vector(6 downto 0);type state_type is (s0,s1,s2,s3,s4);signal state: state_type;- signal test: std_logic_vector(6 downto 0);beginp0:process(clk)beginif clkevent and clk=1 thenif tmp=5499999 thentmp=0;elsetmp=tmp+1;end if;end if;end process p0;p7:process(tmp)beginif tmp=5499999 thenos=1;else os=0;end if;end process p7;- -fenpin mokuaip1:process(os)beginif osevent and os=1 thenif signalcomposer=14 then signalcomposer=0;elsesignalcomposersignaloutsignalout=1;end case;end process p1;- -xulie fashengqip2:process(signalout)beginif osevent and os=1 thensignalaccept(6)=signalaccept(5);signalaccept(5)=signalaccept(4);signalaccept(4)=signalaccept(3);signalaccept(3)=signalaccept(2);signalaccept(2)=signalaccept(1);signalaccept(1)=signalaccept(0);signalaccept(0)=signalout;end if;end process p2;- -yicunqi shixian chuanbing zhuanhuanp3:process(signalaccept)begin- -if clkevent and clk=1 then finalouttestouttestout=0;end case;end process p5;- -bingxinjiancetongbumap4:process(testout)beginif testout=1 thensignaltest=vcc;controlcout=vcc;end if;end process p4;- -kongzhi shuchup6:process(signaltest,signalaccept)beginif(signaltest=1) thenoutput=not signalaccept;end if;end process p6;- -jiucuoend pan;六、 实验分析及总结通过本次实验,我加深了对数字电路的硬件连接及VHDL语言的理解,进一步了解了组合电路和时序电路的工作特点,并且初步掌握了实际电路的设计思路方法,提高了独立设计电路和验证实验的能力。具体说有以下几点:(1) 我领会到了电路仿真这种研究方法的重要性。 虽然仿真并不能够完全与实际切合,但是它能在一定程度上方便我们在较少误差下设计电路, 并且能够在检查电路故障时候提供便利。(2) 我理解到实验所需要的严谨性。例如布线,布线方式不正确会对实验产生干扰,引起误差。(3) 实验培养了我的耐心和细心。 连接电路需要足够的耐心和细心,一个小小的错误可能就会导致无法正常输出波形,甚至烧毁器件。而查错十分枯燥,一定要耐住性子。不能着急,盲目改电路,应该分析造成原因后再改进。(4) 实验中深刻体会到了同步在电路设计中的重要地位。 本次试验中的纠错电路,其难点其实就是正确码和错码的同步问题。这些问题只能通过添加与非门在实践中不断调试来消除。(5) 实验中设计电路时培养了自己自顶向下逐层分解的设计思想,通过模块化设计,简化了问题,找到了设计思路。通过本次实验, 提高了我的动手能力以及独立思考、 独立解决问题的能力, 加深了我对电子电路的理解, 培养了我对电子电路学习的兴趣。最后真心感谢老师这些天耐心的指导!
展开阅读全文