您的位置 首页 FPGA

用FPGA器材完成UART中心功用的一种办法

串行外设都会用到RS232-C异步串行接口,传统上采用专用的集成电路即UART实现,如TI、EXAR、EPIC的550、452等系列,但是我们一般不需要使用完整的UART的功能,而且对于多串口的设备或

串行外设都会用到RS232-C异步串行接口,传统上选用专用的集成电路即UART完结,如TI、EXAR、EPIC的550、452等系列,可是咱们一般不需求运用完好的UART的功用,并且关于多串口的设备或需求加密通讯的场合运用UART也不是最合适的。假如规划上用到了FPGA/CPLD器材,那么就能够将所需求的UART功用集成到FPGA内部,自己最近在用XILINX的XCS30做一个规划的时分,就运用VHDL将UADT的中心功用集成了,从而使整个规划愈加紧凑,更细巧、安稳、牢靠,下面就谈谈规划办法。

—- 剖析UART的结构,能够看出UART主要由数据总线接口、操控逻辑和状况接口、波特率发生器、发送和承受等部分组成,各部分间联系如图一。

—- 了解了UART的各部分组成结构后,下面临各部分的功用进行具体的剖析。咱们假定所要规划的UART为:数据位为7位、8位可选,波特率可选,效验办法为奇、偶、无等效验办法,下面的剖析都是在这个假定的基础上进行。

一、波特率发生部分

—- 从图一能够看出,UART的接纳和发送是依照相同的波特率进行收发的(当然也能够完结成对的不同波特率进行收发),波特率是能够经过CPU的总线接口设置的。UART收发的每一个数据宽度都是波特率发生器输出的时钟周期的16倍,即假定当时依照9600bps进行收发,那么波特率发生器输出的时钟频率应为9600*16Hz,当然这也是能够改动的,咱们仅仅依照UART的办法进行规划。

—- 咱们假定供给的时钟为1.8432MHz,那么能够很简单地用CPU写入不同的数值到波特率坚持寄存器,然后用计数器的办法生成所需求的各种波特率,这个值的核算准则便是1843200/(16*所期望的波特率),假如期望输出9600Hz的波特率,那么这个值便是1843200/(16*9600)=12(0CH)。

二、 发送部分

—- 这儿应要点剖析几个问题:首先是何时CPU能够往发送坚持寄存器(THR)写人数据?也便是说CPU要写数据到THR时有必要判一个状况,当时是否可写?很明显假如不判这个条件,发送的数据会犯错,除非CPU写入THR的频率低于当时传输的波特率,而这种状况是很少呈现的。其次是CPU写入数据到THR后,何时THR的数据传送到发送移位寄存器(TSR)并何时移位?即如何处理THR和TSR的联系?再次是数据位有7、8位两种,校验位有三种方法,这样发送一个字节可能有9、10、11位三种串行长度,所以咱们有必要依照所设置的传输状况进行处理。数据位、效验办法能够经过CPU写一个端口来设置,发送和承受都依据这个设置进行,因为这部分很简单,所以我就不给出程序了。

—- 依据上面的剖析,引进了几个信号:

—- bigin1、begin2:引进两个附加移位,意图是为送出开端位、中止位而参加串行长度。

—- txdone7、txdone8:别离表明7、8位的完毕标志。Txdone=txdone8 when“8bit”else txdone7;

—- Paritycycle7、paritycycle8:别离表明7、8位下的校验位。Parity=parity8 when“8 bit”else parity7;

—- Writerdy:为0时表明CPU不能将数据写入THR,为1时能够写入。

—- 这样就能够得到以下信息:在移位时钟的上升沿检测到txdone和writerdy都为高电平时,进入LOAD状况行将THR的数据LOAD到TSR,鄙人一个时钟就进入移位状况。在移位中一起进行校验位的运算,在需求送出校验位的时分将运算好的校验位送出,txdone=1的时分将高电平送出,其它时分移位输出。

—- 最终还有一个小程序,那便是写出writerdy的状况,很明显没数据写入时为高,而当txdone为低时为低,留意这儿也有必要一起同步。图二给出了一个奇效验8bit数据的发送时序图。

三、 承受部分

—- 关于接纳相同存在9、10、11位三种串行数据长度的问题,有必要依据所设置的状况而将数据完好地取下来。接纳还有一个特别的状况,那便是它的移位的时钟不是一向存在的,这个时钟有必要在承受到开端位的中心开端发生,到中止位的中心完毕。承受到中止位后,有必要给出中止,并供给相应的校验犯错、FRAME错以及溢出等状况。

—- 这样需引进hunt和idle两个信号,其间hunt为高表明捕捉到开端位,idle为高表明不在移位状况,使用这两个信号就能够生成接纳所需求的移位时钟。

—- 下面还有一个小程序,便是如何将接纳的状况和标志表明出来。溢出标志很简单,那便是在idle从低变高,也便是说在接纳到一个完好的串行序列后,去判一下当时的中止是否有用?(高有用,数据没有被读走)假如为高那么溢出,不然没有。在移位的时分,一起对接纳的数据进行校验,这样就能够判别接纳的数据是否有错,在接纳完结时判一下当时的RX是否为高电平就能够知道FRAME是否有错,图三是一个8bit奇校验的接纳时序图(假定接纳正确,所以没有给出校验、溢出、帧犯错信号)。

—- 总结:我在用FPGA做一个规划的时分,因为还有资源并且正好用到UART,所以就依据对UART的知道进行了规划,悉数用VHDL进行描绘,用SPEEDWAVE进行言语级的仿真,用XILINX的F2.1进行顶层仿真,最终和PC的仿真终端进行联机,功用一切正常,整个UART所需求的触发器为80个左右,一般的PLD都能够完结。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/193019.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部