版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京邮电大学实验报告基于VHDL的课程设计实验报告 班级: 学号: 专业: 信息工程 姓名: 王海锋(11)设计一:异步串行通信控制器一、实验目的1、熟悉异步通信信息传输格式;2、掌握状态机的原理与设计方法;3、了解异步通信的原理和特点;4、掌握异步通信接口的设计方法;二、实验内容与设计过程 本实验通过计算机辅助设计,用VHDL语言设计实现异步串行通信控制器,设计总体思路是按照实验内容要求,将整个程序设计分成三个主要模块:异步发送电路模块transmitter、接受电路模块receiver和通信控制器模块info_control。(1)异步发送电路模块发送模块主要完成的任务是将并行输入的8位数
2、据串行的输出出去。1、程序中主要用到了发送双缓冲和计数器。发送双缓冲:包括发送缓冲寄存器TB(Tx Buffer)和发送移位寄存器TS(Tx Shifter);TB用于暂时存储输入的8位数据,TS用于移位输出(并串变换)。计数器代替状态机用于状态控制计数,用来指示数据发送完成。2、实验中设置发送字长=8位,最高位是奇校验位;发送停止位至少为1位;另外,为了发送的准确性,要求发送速率由发送时钟TCLK输入确定,是TCLK频率的1/8。3、实验中需要发送缓冲器的指示位TBE(Tx Buff. Empty)=1,表示发送缓冲器空,请求下一发送数据。若允许发送中断(ETBE=1),则可产生发送中断请求
3、;现行数据发送出去之后,若TBE=0(发送缓冲器满),则把TB中的数据装入TS,把TBE置位,并开始发送。若TBE=1,则继续发送停止位,直到TBE=0。4、发送模块设计框图如下图1所示:8级发送缓存器TB(最高位作为奇校验位)8级移位寄存器TS(并串变换)计数器DATA_INRESET,TCLK,WRENCOUNTTXD(2)接收电路模块接收模块的主要任务是完成对发送模块发送的数据进行异步接收,并把数据串并变换后进行缓存,以便接收设备把它取走。这里异步就是说接收模块使用的时钟和发送模块是不同的,即收发双方各用自己的时钟来控制发送和接收。1、程序中主要用到了发送双缓冲和接收控制器。接收双缓冲,
4、包括接收移位寄存器RS(Rx Shifter)和接收缓冲器RB(Rx Buffer);它们与发送模块是对称的,因此设置RS为9级,RB为8级;RS是将接收的串行数据逐个写到RS中,并将RS不断移位,即实现串并变换;RB用于缓存接收数据。接收控制器实际上就是状态机,主要用于控制移位寄存器的移位和置初始值,控制接收缓存器的数据载入。2、接收控制器按照预定的原理工作,自动实现位同步和帧对准。其原理为:在起始位前沿(下降沿),启动接收时钟从0计数,当计到4时(差不多在信息位的中间),输出采样时钟SCLK。此后,每8个RXC,输出一个SCLK,以对接收数据RXD进行串-并变换,直到收到停止位; 若在应该
5、是停止位的地方收到逻辑0,则表示出现帧错误FE(Frame Error)。应等待下一个高电平1,把它作为停止位继续接收。这样就可以实现帧对准。3、程序中需要标志符RBF,指示接收缓冲器(RB)的状态:RBF=1,表示RB内的数据有效,0表示无效。另外,应有状态寄存器,指示FE,PE,OE,RBF等。若发生FE,则FE置1,指示起止格式错;PE是奇偶校验位,在接收字符时,接收逻辑对接收字符进行奇校验,若不合规律,则使PE置1,否则,置0;当读接收数据(re=0),可使RBF清零。4、接收模块设计框图如下图2所示: 其中,RXC是接收时钟;RXD是接收8位串行数据;LDSR是接收移位寄存器置初始值
6、的信号;SCLK是采样(移位)时钟,(它应处在RXD每位数据的中间位置);LDRB是接收缓存的装入命令,它把移位寄存器的接收数据装入到缓存;RE是接收设备的取数据命令,它是低电平有效; 5、接收控制器(状态机)的流程图如下图3所示:Reset 各表示位定义如下: RXD,SO/LDSR,LDRB,SCLK,FES0RXD=0 1,d/0,0,0,0 NS1 Y 0,d/1,0,0,0 d,d/0,0,0,0S2 d,d/0,0,0,0S3 RXD=0 N 1,d/0,0,0,0 Y 0,d/0,0,1,0S4S5 d,d/0,0,0,0S6 d,d/0,0,0,0 d,d/0,0,0,0S7S
7、8 d,d/0,0,0,0 d,d/0,0,0,0S9 d,d/0,0,0,0S100 d,d/0,0,0,0S11SO=0 N d,1/0,0,1,0S12 Y d,0/0,0,0,0RXD=0 Y 0,d/0,0,0,1 N 1,d/0,1,0,0(3)通信控制器模块控制器模块实际上是将发送和接收模块电路组合起来,并加入控制信号,构成的一个异步通信控制器。这个模块中会包含一些状态变量,发送模块和接收模块都是在状态变量处在不同的组合情况下的时候进行不同的工作。1、控制器模块设计框图如下图4所示:控制端RESETCLK1CLK2/CSA0/RD/WR接收端发送端DATA_INDATA_OUT
8、2、控制器通过 /CS,A0,/RD,/WR控制发送、接收和输出工作。具体操作功能和一些寄存器格式如下:通信控制器操作功能表:/CS A0 /RD /WR功能 1 X X XD7.0输出高阻 0 0 0 1Dout读出接收数据(RB) 0 0 1 0Din写数据到TB 0 1 0 1Dout读状态寄存器 0 1 1 0Din写命令寄存器读写数据寄存器格式:XB6B5B4B3B2B1B0 命令寄存器格式(只写寄存器):00000ERXEETBEERBF其中,ERBF=1,允许接收中断,0,不允许;ETBE=1,允许发送中断, 0,不允许;ERXE=1,若OE,PE,FE任一个是1,就产生接收错误
9、中断。状态寄存器格式(只读寄存器)000FEOEPETBERBF 其中,上电后,FE,OE,PE,RBF为0,TBE=1;写数据寄存器使TBE=0,装载TS(Load Tx Shifter)使TBE=1;读数据寄存器使RBF=0,装载RB使RBF=1;读状态寄存器命令后,使FE,OE,PE清零,置位条件已如上述。三、输入原文件(带注释VHDL源程序)(1)异步发送模块VHDL源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY transmitter IS -定义发送模块实体,实体
10、名transmitterPORT( RESET: IN STD_LOGIC; -复位信号 TCLK: IN STD_LOGIC; -发送时钟 WR: IN STD_LOGIC; -写数据信号,高位有效 DATA_IN: IN STD_LOGIC_VECTOR(6 DOWNTO 0); -数据输入,7位 TXD: OUT STD_LOGIC; -输出数据序列 TBE: OUT STD_LOGIC);-发送缓冲器指示位信号END transmitter;ARCHITECTURE A OF transmitter ISSIGNAL TB: STD_LOGIC_VECTOR(7 DOWNTO 0);-
11、发送缓冲寄存器,8位SIGNAL TS: STD_LOGIC_VECTOR(8 DOWNTO 0);-发送移位寄存器,9位SIGNAL EN: STD_LOGIC; -移位使能信号SIGNAL COUNT: INTEGER RANGE 0 TO 9; -计数器控制信号SIGNAL TBE1: STD_LOGIC; SIGNAL TE: STD_LOGIC; -发送移位寄存器TS置初始值信号,低位有效BEGINP1:PROCESS(RESET,TCLK) -数据装入TB进程BEGIN IF RESET=1 THEN -初始化 TBE1=1; -发送缓冲器空 ELSIF (TCLKEVENT AN
12、D TCLK=1) THEN IF (TBE1=1 AND WR=0)THEN TB(6 DOWNTO 0)=DATA_IN; -装载数据 IF (TB(0) XOR TB(1) XOR TB(2) XOR TB(3) XOR TB(4) XOR TB(5) XOR TB(6)=0) THEN -奇偶校验 TB(7)=1; -最高位(奇校验位) ELSE TB(7)=0; END IF; EN=1; TBE1=0; -发送缓冲器满 ELSIF EN=1 then EN=0; TBE1=1; ELSIF COUNT=9 THEN TBE1=1; END IF; END IF; TBE=TBE1;
13、END PROCESS P1;P2:PROCESS(RESET,TCLK) -移位进程BEGIN IF RESET=1 THEN -初始化 TXD=1;TS=; TE=0; ELSIF (TCLKEVENT AND TCLK=1) THEN IF (TE=0) THEN TXD=1;TS=; TE=1; ELSIF EN=1 THEN TS(8 DOWNTO 1)=TB; -将TB写入TS TS(0)=0; -最低位,置为0,作为发送数据起始位 COUNT=0; -计数器为0 ELSE IF COUNT=9 THEN COUNT=0; ELSE COUNT=COUNT+1; END IF; T
14、XD=TS(0); -将0位输出 TS(7 DOWNTO 0)=TS(8 DOWNTO 1);-移位 TS(8)=1; -最后位,置1作为发送数据停止位 END IF; END IF;END PROCESS P2;END A;(2)接收模块VHDL源代码: 1、实验先设计接收控制器,编译通过,并把他变成逻辑符号备用。其VHDL代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY control IS -定义接收控制器(状态机)模块实体,实体名controlPORT ( RESET
15、:IN STD_LOGIC; RXD:IN STD_LOGIC; SO: IN STD_LOGIC; RXC:IN STD_LOGIC; SCLK:OUT STD_LOGIC; LDSR:OUT STD_LOGIC; FE:OUT STD_LOGIC; LDRB:OUT STD_LOGIC);END control;ARCHITECTURE A OF control ISTYPE state_type IS (S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12);SIGNAL STATE:state_type;BEGIN PROCESS( RESET,RXC)
16、BEGIN IF RESET=1 THEN STATE IF RXD=1 THEN STATE=S0;LDSR=0;LDRB=0;SCLK=0;FE=0; ELSE STATE=S1;LDSR=1;LDRB=0;SCLK=0;FE STATE=S2;LDSR=0;LDRB=0;SCLK=0;FE STATE=S3;LDSR=0;LDRB=0;SCLK=0;FE IF RXD=0 THEN STATE=S4;LDSR=0;LDRB=0;SCLK=1;FE=0; ELSE STATE=S0;LDSR=0;LDRB=0;SCLK=0;FE STATE=S5;LDSR=0;LDRB=0;SCLK=0;
17、FE STATE=S6;LDSR=0;LDRB=0;SCLK=0;FE STATE=S7;LDSR=0;LDRB=0;SCLK=0;FE STATE=S8;LDSR=0;LDRB=0;SCLK=0;FE STATE=S9;LDSR=0;LDRB=0;SCLK=0;FE STATE=S10;LDSR=0;LDRB=0;SCLK=0;FE STATE=S11;LDSR=0;LDRB=0;SCLK=0;FE IF SO=0 THEN STATE=S12;LDSR=0;LDRB=0;SCLK=0;FE=0; ELSE STATE=S4;LDSR=0;LDRB=0;SCLK=1;FE IF RXD=0
18、THEN STATE=S12;LDSR=0;LDRB=0;SCLK=0;FE=1; ELSE STATE=S0;LDSR=0;LDRB=1;SCLK=0;FE=0; END IF; END CASE; END IF; END PROCESS;END A; 2、然后设计数据通路并与接收控制器合在一起,构成异步接收器模块。其VHDL代码如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity receiver is -定义接收模块实体,实体名receiverport(reset: in s
19、td_logic; -置位信号 rxc: in std_logic; -接收时钟 rxd: in std_logic; -接收数据序列 re: in std_logic; -读接收数据信号 restate: in std_logic; -读状态寄存器信号,置1后使oe,pe,fe清零 fe: out std_logic; -帧错误信号 pe: out std_logic; -奇偶校验信号 oe: out std_logic; -接收字符丢失信号 rbf: out std_logic; -接收缓冲器指示位信号 dout:out std_logic_vector(7 downto 0);-输出8位
20、并行数据end receiver;architecture b of receiver iscomponent control -接收控制器(状态机)模块 PORT ( RESET:IN STD_LOGIC; RXD:IN STD_LOGIC; SO: IN STD_LOGIC; RXC:IN STD_LOGIC; SCLK:OUT STD_LOGIC; LDSR:OUT STD_LOGIC; FE:OUT STD_LOGIC; LDRB:OUT STD_LOGIC);end component;signal sclk: std_logic; -采样时钟信号signal ldsr: std_l
21、ogic; -rs置初始值信号signal ldrb: std_logic; -接收缓存器载入信号,把rs的接收数据载入到rbsignal rs:std_logic_vector(8 downto 0); -接收移位寄存器9位signal rb:std_logic_vector(7 downto 0); -接收缓存器8位signal rbf1,fe_s:std_logic;beginu1: control port map(reset,rxd,rs(0),rxc,sclk,ldsr,fe_s,ldrb);p1:process(reset,sclk) -移位寄存器接收数据进程beginif(re
22、set=1)then rs=;elsif(ldsr=1)then rs=;elsif(sclkevent and sclk=0)then rs(0)=rs(1); rs(1)=rs(2); rs(2)=rs(3); rs(3)=rs(4); rs(4)=rs(5); rs(5)=rs(6); rs(6)=rs(7); rs(7)=rs(8); rs(8)=rxd;end if;end process p1;p2:process(rxc) -接收缓存器(rb)进程beginif(rxcevent and rxc=1)then if(ldrb=1)then rb=rs(8 downto 1); r
23、bf1=1; -表示rb内数据有效 elsif(re=0)then -收到读接收数据信号(re)后,读出rb的数据 dout=rb; rbf1=0; -读接收数据后,rbf清零 end if;end if;rbf=rbf1;end process p2;p3:process(reset,rxc) -奇偶校验进程beginif(reset=1)then pe=0;elsif(rxcevent and rxc=1)then if(ldrb=1)then if(rs(1)xor rs(2) xor rs(3) xor rs(4) xor rs(5) xor rs(6) xor rs(7) xor r
24、s(8)=0) then-若奇偶校验错,pe置1; pe=1 ; else pe=0; end if; elsif(restate=1)then pe=0; end if;end if;end process p3;p4:process(reset,rxc) -判断接收字符是否丢失进程begin if(reset=1)then oe=0;elsif(rxcevent and rxc=0)then if(ldrb=1and rbf1=1)then oe=1; -表示接收字符丢失 elsif(restate=1)then oe=0; end if;end if;end process p4;p5:
25、process(reset,rxc) -起止格式判断进程beginif(reset=1)then fe=0;elsif(rxcevent and rxc=1)then if(fe_s=1)then fe=1; -指示起止格式错 elsif(fe_s=0)then fe=0; elsif(restate=1)then fe=0; end if;end if;end process p5;end b;(3)通信控制器模块VHDL源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY in
26、fo_control IS -定义通信控制器模块实体,实体名info_controlPORT( CS,A0,RD,WR: IN STD_LOGIC; -控制信号CS,A0,RD,WR RESET: IN STD_LOGIC; -复位信号, CLK1,CLK2:IN STD_LOGIC;-发送和接收时钟 DATA_IN: IN STD_LOGIC_VECTOR(6 DOWNTO 0);-输入数据,7位 DATA_OUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-输出数据,8位(加上奇校验位) INTERUPT: OUT STD_LOGIC_VECTOR(2 DOWNT
27、O 0);-中断信号输出END info_control;ARCHITECTURE C OF info_control ISCOMPONENT transmitter - 发送模块声明PORT( RESET: IN STD_LOGIC; TCLK: IN STD_LOGIC; WR: IN STD_LOGIC; DATA_IN: IN STD_LOGIC_VECTOR(6 DOWNTO 0); TXD: OUT STD_LOGIC; TBE: OUT STD_LOGIC); END COMPONENT;COMPONENT receiver -接收模块声明PORT( reset: in std_
28、logic; rxc: in std_logic; rxd: in std_logic; re: in std_logic; restate: in std_logic; fe: out std_logic; pe: out std_logic; oe: out std_logic; rbf: out std_logic; dout:out std_logic_vector(7 downto 0);END COMPONENT;SIGNAL COMMAND_RAM: STD_LOGIC_VECTOR(7 DOWNTO 0); -命令寄存器0,0,0,0,0,ERXE,ETBE,ERBFSIGNA
29、L STATE_RAM: STD_LOGIC_VECTOR(7 DOWNTO 0); -状态寄存器信号0,0,0,FE,OE,PE,TBE,RBFSIGNAL DATA_OUT1: STD_LOGIC_VECTOR(7 DOWNTO 0); -读数据寄存器信号SIGNAL DATA_IN1: STD_LOGIC_VECTOR(6 DOWNTO 0); -写数据寄存器信号SIGNAL XD_S: STD_LOGIC; -传输数据序列寄存信号SIGNAL WR_S: STD_LOGIC; -控制发送写入信号SIGNAL FE,OE,PE,TBE,RBF: STD_LOGIC; -状态信号SIGNA
30、L RE_S: STD_LOGIC; -状态寄存器复位信号SIGNAL ERXE,ETBE,ERBF: STD_LOGIC; -中断信号BEGINU1: transmitter PORT MAP(RESET,CLK1,WR_S,DATA_IN1,XD_S,TBE);-调用发送模块U2: receiver PORT MAP(RESET,CLK2,XD_S,RD,RE_S,FE,PE,OE,RBF,DATA_OUT1);-调用接收模块P1:PROCESS(RESET,CLK1)-组合命令 控制发送和接收进程BEGIN IF RESET=1 THEN -初始化,DATA_OUT输出为全1,写入信号置
31、1 DATA_OUT=;WR_S=1; ELSIF CLK1EVENT AND CLK1=1 THEN -始终在上升沿,按照命令列表判断执行命令 IF CS=1 THEN -命令1XXX,输出高阻 DATA_OUT=;WR_S=1; ELSIF CS=0 THEN IF A0=0 THEN IF (RD=0 AND WR=1) THEN -命令0001,读出接收数据(RB) DATA_OUT=DATA_OUT1;WR_S=1; ELSIF (RD=1 AND WR=0) THEN -命令0010,写数据到TB DATA_IN1=DATA_IN;WR_S=0; ELSE WR_S=1; END
32、IF; ELSIF A0=1 THEN WR_S=1; IF (RD=0 AND WR=1) THEN -命令0101,读状态寄存器 STATE_RAM(7)=0; STATE_RAM(6)=0; STATE_RAM(5)=0; STATE_RAM(4)=FE; STATE_RAM(3)=OE; STATE_RAM(2)=PE; STATE_RAM(1)=TBE; STATE_RAM(0)=RBF; DATA_OUT=STATE_RAM; RE_S=1; ELSIF (RD=1 AND WR=0) THEN -命令0110,写命令寄存器 COMMAND_RAM(7)=0; COMMAND_RA
33、M(6)=0; COMMAND_RAM(5)=0; COMMAND_RAM(4)=0; COMMAND_RAM(3)=0; COMMAND_RAM(2)=DATA_IN(2); COMMAND_RAM(1)=DATA_IN(1); COMMAND_RAM(0)=DATA_IN(0); ERXE=DATA_IN(2); ETBE=DATA_IN(1); ERBF=DATA_IN(0); END IF; END IF; END IF; END IF;END PROCESS P1;P2:PROCESS(CLK1)-中断命令进程BEGIN IF RESET=1 THEN-初始化 INTERUPT=00
34、0; ELSE IF (ERBF=1 AND RBF=1) THEN-接收中断 INTERUPT(0)=1; ELSE INTERUPT(0)=0; END IF; IF (ETBE=1 AND TBE=1) THEN-发送中断 INTERUPT(1)=1; ELSE INTERUPT(1)=0; END IF; IF ERXE=1 THEN -接收错误中断 IF (OE=1OR PE=1OR FE=1 ) THEN INTERUPT(2)=1; ELSE INTERUPT(2)=0; END IF; ELSE INTERUPT(2)=0; END IF; END IF;END PROCESS
35、 P2;END C;异步通信控制器的仿真需要输入的是:不同组合的控制信号 CS,A0,RD,WR;复位信号RESET; 发送时钟 CLK1,接收时钟 CLK2;7位输入数据 DATA_IN。四、仿真结果及分析(1)异步发送模块仿真波形图 0 0 0 1 0 1 0 0 1 1分析:在第一个时钟上沿,WR=0,有效,将输入数据写入TB,并写入奇校验位,因为序列中1的个数为偶数,所以采用奇校验时最高位加1,则TB=,同时置EN=1有效,TBE=0表示发送缓冲器满;在第二个时钟上沿,因为EN有效,将TB中数据写入TS的高8位,TS最低位写入起始位0, TS= 10010 1000,同时置EN=0无效
36、;在第三个时钟上沿,开始将数据发送出去,先发送低位,后发送高位,输出数据序列如上图RXD所示,依次为 ,其中最后发送的是终止位1;移位寄存器TS向右依次移位,最高位补1作终止位;显然发送端仿真结果正确。(2)异步接收模块仿真波形图 1、接收控制器(状态机)模块仿真图分析:初始化后,状态机STATE为S0状态,在第一个时钟上沿检测发送数据序列RXD的值,RXD=0,表明准备接收字符,进入S1状态同时给LDSR赋值1; 状态机实现了同步原理,在起始位前沿启动接收时钟RXC从0计数,即状态机S0,当计到4时,输出采样时钟SCLK,此后,每8个RXC输出一个SCLK,直到停止位;如图所示,显然仿真结果
37、与接收控制器流程图是吻合的。2、异步接收模块接收数据过程仿真图 0 1 0 0 1 1 0 1(本图右侧的部分接在下面)分析:图中rxd为接收数据序列,开始接收到的是起始位0,之后依次从低位到高位的接收数据是;图中LDSR为接收移位寄存器rs置初始值信号,由状态机控制为1时,有效,将rs置为全1;SCLK是采样时钟,由状态机控制,高位1有效时,在其下降沿,接收移位寄存器向右移位,最高位存接收数据,图中绿框所示; 1 分析:接收数据完全存入rs后,rs=;由状态机控制检测终止位RXD,RXD=0,表示接收数据帧错误,输出FE=1;继续检测RXD,直到某个时钟沿终止位为1,有效,状态机赋值LDRB
38、为1有效,在下一个时钟上沿将rs高8位数据赋值给接收缓存器rb中,同时置fe=0,如图中蓝色所示rb=;然后在下一个时钟上沿,re=0有效,读出接收数据dout=,显然接收仿真结果是正确的。图中没有接收字符丢失,所以oe为0,显然也是正确的。 3、奇校验仿真图分析:第一次接收到字符数据,奇校验有奇数个1,复合规律,pe为1;第三次接收到字符数据,奇校验有偶数个1,不符合规律,pe为0;如上图所示,仿真结果正确。(3)通信控制器总模块仿真波形图 分析:1、图中红色所示,控制信号为/CS,A0,/RD,/WR=0010,DATA_IN写数据到TB,并加入奇校验位;TB=; 2、图中绿色所示,控制信
39、号为0001,DATA_OUT读出接收数据rb,DATA_OUT=; 3、图中蓝色所示,控制信号为 0101,DATA_OUT读状态寄存器STATE_RAM,DATA_OUT=; 4、图中紫色所示,控制信号为1000,输出高阻,DATA_OUT=; 5、图中橙色所示,控制信号为 0110,写命令寄存器,ERXE=0,ETBE=1,ERBF=0; 6、图中黑色所示,由于命令寄存器中ETBE=1,同时状态寄存器中TBE=1,所以允许发送中断,INTERUPT=010;显然仿真正确。(4)接收模块改变RXC的频率后,分析仿真图形,总结异步接收的优点1、原始RXC为1us,由上面的(2).2可知,读出
40、接收数据正确,dout=。2、改变RXC为0.95us,接收数据正确,dout=;如下:3、改变RXC为0.9us,接收发生错误,dout=,不再是,如下: 4、改变RXC为1.05us,接收数据正确,dout=;如下: 4、改变RXC为1.1us,接收发生错误,dout=,不再是,如下:异步接收优点:接收端不需要与发送端时钟同步;收发双方用各自的时钟来接收和发送,使发送端和接收端控制灵活,同时简化了设备复杂度;发送端发送数据和接收端接收数据完全独立,发送端可以间隔发送数据也可连续发送数据。即使发送端和接收端频率稍有偏差也不会出现接收错误,所以可靠性较高。五、思考题1、如何实现从发送缓冲器到发
41、送移存器的正确传送?你是怎么实现的? 发送缓冲器是一个8位的并行寄存器,发送移存器是一个9位的寄存器,多出来的一位是用来存储数据的起始位0的。实验中,设置移位使能信号EN,在数据装入发送缓冲器TB后,EN就置1,当下一个时钟到来时在上升沿检测到EN为1,就将TB中8位数据装入到发送移存器TS的高8位,TS最低位添起始位0。程序主要是通过赋值来实现正确传送的。2、如何实现数据从接收移存器 到接收缓冲器的正确传送的?你是怎么考虑的? 这个传送过程实际上是发送端从发送缓冲器到发送移存器的反过程。实验中,设置有接收缓存器载入信号LDRB,LDRB信号为1,表示可以将RS中的数据传输到RB中,LDRB是
42、由接收控制器产生的。因此,程序当RS接收完毕接收数据序列时,当下一个时钟到来时在上升沿检测LDRB信号的值,LDRN=1,就将RS中的高8位数据传送到RB中。同样的利用赋值实现数据从接收移存器RS到接收缓冲器RB的正确传输。3、对PE,OE,FE怎样管理才能达到实验的要求?为什么要这样要求?PE: 为奇偶校验信号。本实验采用的是奇校验,当接收到8位数据后,对其进行异或运算,如果8位数据中有偶数个1时,异或结果为0,表述,发生奇校验错误,将PE置1。这样要求可以防止出现8位数据全1的情况。OE: 为接收字符丢失信号。当RB接收到第一次的8位数据时,如果没有RE信号,将RB中的信号读出到DOUT中,则RBF=1,那么当下一次产生LDRB时,RBF为1,则产生OE=1,表示接收字符丢失。FE: 为帧错误信号。每一次数据需要起始位0和结束位1来标志其开始和结束。如果传输一个数据过程中,当8位数据结束后没有结束位1就开始下次数据的起始位0,那么则称该情况为帧错误。发生帧错误的时候就将FE置1。这样要求可以再发现错误时及时通知发送器出现帧错误,让发送器重发当前数据和之后的数据。实验中用这3位信号可以随时显示传输和接收过程中发生的3种错误,对系统起到很好的实时监控效果,保证系统正常运行。 4、若要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025ESMO Asia肺癌靶向免疫治疗进展
- 中学教师考核评价制度
- 养老院入住老人突发疾病应急处理制度
- 企业员工培训与素质发展路径制度
- 企业内部沟通与协调制度
- 2026河南濮阳市市直机关遴选公务员15人参考题库附答案
- 2026年及未来5年市场数据中国水晶蜡烛灯行业发展运行现状及发展趋势预测报告
- 2026湖北恩施州恩施市城市社区党组织书记实行事业岗位管理专项招聘2人备考题库附答案
- 2026福建南平市医疗类储备人才引进10人考试备考题库附答案
- 2026福建海峡人才网络资讯有限公司前端开发人员招聘1人考试备考题库附答案
- 吉林省户用光伏施工方案
- 工程部物业消防知识培训课件
- 江西省婺源县联考2026届数学七年级第一学期期末学业水平测试试题含解析
- 2025至2030水蛭素产品行业发展研究与产业战略规划分析评估报告
- 非煤矿山安全员题库及答案解析
- 餐饮连锁加盟店标准运营手册
- 军人翻墙导致的危害课件
- 园区运营年终汇报
- 数据中心设备采购管理实施计划
- (2025年标准)公司基地农户协议书
- 2025时事政治必考题50题(含答案)
评论
0/150
提交评论