uart的hdl设计详解

上一篇 / 下一篇  2006-08-20 08:28:42 / 天气: 晴朗 / 心情: 高兴 / 个人分类:Backup

摘 要:UART是广泛使用的串行数据通讯电路。本设计包含UART发送器、接收器和波特率发生器。设计应用EDA技术,基于FPGA/CPLD器件设计与实现UART。
| ~kQ6~_J^0关键词:FPGA/CPLD;UART;VHDL

---UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。
{-_9Fr[p0]0D3|~:y5j0---串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

一 UART简介EDA中国门户网站(P:ie t#T:_GY
1 UART结构EDA中国门户网站 @0dDh M.N*E D*tA
---UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。EDA中国门户网站j`!`0PWPb
---功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。EDA中国门户网站'pF_$p+X
---图1是UART的典型应用。EDA中国门户网站:XH&ri9\*d
2 UART的帧格式
7Xa i6d t7N }0---UART的帧格式如图2所示。EDA中国门户网站Q#q A Y3Du c
EDA中国门户网站5o"{`|][VuoQ u0d


A6P1Y0]Z0---包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。
z`.F/~e4Lj)?0---这种格式是由起始位和停止位来实现字符的同步。EDA中国门户网站8W%y D:h8p7v'L gB
---UART内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2)等设置。

二 UART的设计与实现EDA中国门户网站~-p+x I:t.N5j7L7B(E
1 UART发送器
|1}\(Q^ |SOG0---发送器每隔16个CLK16时钟周期输出1位,次序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。
@ h`-Y2pGX+WK0---CPU何时可以往发送缓冲器tbr写入数据,也就是说CPU要写数据到tbr时必须判断当前是否可写,如果不判这个条件,发送的数据会出错。EDA中国门户网站X @7R:}F
---数据的发送是由微处理器控制,微处理器给出wen信号,发送器根据此信号将并行数据din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存器tsr[7..0]发送串行数据至串行数据输出端dout。在数据发送过程中用输出信号tre作为标志信号,当一帧数据发送完毕时,tre信号为1,通知CPU在下个时钟装入新数据。EDA中国门户网站+|oV;gf6T vK6[K
---发送器端口信号如图3所示。
0t(Jz_8b;z3jD0
A!ayMNY0---引入发送字符长度和发送次序计数器length_no,实现的部分VHDL程序如下。
+RI3hH$A[k0---if std_logic_vector(length_no) = “0001” thenEDA中国门户网站~s-Hl,^v;q t
---tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr
aGj k P|)]|P(U0---tre <= '0' ; --发送移位寄存器空标志置“0”EDA中国门户网站9XAn:k$?Ge[.|
---elsif std_logic_vector(length_no) = “0010” then
fhCUvH G5W.K6c0---dout <= '0' ; --发送起始位信号“0”
_3n+Xu e+oOx0---elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” thenEDA中国门户网站`pGX2l0} B
---tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端doutEDA中国门户网站1W `*y^.kSr
---dout <= tsr(0) ;
L5Z4w S!S&EM0---parity <= parity xor tsr(0) ; --奇偶校验
ps[wR?g@8yP0---elsif std_logic_vector(length_no) = “1011” thenEDA中国门户网站3ae b] SX{ k
---dout <= parity ; 校验位输出
;Wq-`6O7E+S%~0---elsif std_logic_vector(length_no) = “1100” then
'B:K}jT$Y:V0---dout <= '1' ; --停止位输出
*~,LV.p+a$p0---tre <= '1' ; --发送完毕标志置“1”EDA中国门户网站.c r(xI|;y[f{y
---end if ;
SVH;E,M H6J F0---发送器仿真波形如图4所示。EDA中国门户网站!v5G"w&V1_yP

EDA中国门户网站|+N b[JN7]*W
2 UART接收器
$k$Z?,N'A0---串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个CLK16时钟周期,才是正常的起始位,然后在每隔16个CLK16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。EDA中国门户网站"rDmj"K3p ^)wN
---接收器的端口信号如图5所示。
;?c*H nVk)\.SE2|D0---实现的部分VHDL程序如下。
u \S2H"oS o.i0---elsif clk1x'event and clk1x = '1' then
n J } ^(\ HQ(b,o;j_0---if std_logic_vector(length_no) >= “0001” and std_logic_vector(length_no) <= “1001” thenEDA中国门户网站 L3^4M0INB1{!c
-----数据帧数据由接收串行数据端移位入接收移位寄存器
I3_QE@n8Df1C0---rsr(0) <= rxda ;
n:oDJ(D(V9M!^)H y `0---rsr(7 downto 1) <= rsr(6 downto 0) ;
GD6S t M0WW0---parity <= parity xor rsr(7) ;
5B CI1Gq SxL0---elsif std_logic_vector(length_no) = “1010” thenEDA中国门户网站1Va%^7V7Fe$dx
---rbr <= rsr ; --接收移位寄存器数据进入接收缓冲器
2E't-@)@+rD0---......EDA中国门户网站]ep)@%Fq8f!|)MR
---end if ;EDA中国门户网站 OT%iZF(TL
---接收器仿真波形如图6所示。EDA中国门户网站es"vwcYC1a

u rw)?[W03 波特率发生器EDA中国门户网站yn&X pni%w
---UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。
E5n/@5n^F?#K0---根据给定的晶振时钟和要求的波特率算出波特率分频数。
Im-U6[4oH6{z7c0---波特率发生器仿真波形如图7所示。

三 小结
1j'O'rK+nM8R5t0---通过波特率发生器、发送器和接收器模块的设计与仿真,能较容易地实现通用异步收发器总模块,对于收发的数据帧和发生的波特率时钟频率能较灵活地改变,而且硬件实现不需要很多资源,尤其能较灵活地嵌入到FPGA/CPLD的开发中。在EDA技术平台上进行设计、仿真与实现具有较好的优越性。


FPGA/CPLD器件价格查询

TAG: BUS

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 9927
  • 日志数: 96
  • 建立时间: 2006-08-07
  • 更新时间: 2007-06-30

RSS订阅

Open Toolbar