基于Verilog的UART接口电路设计

2019-08-23 10:44:06 来源:电子发烧友网
标签:

UART(UniversalAnynchrONousReceiverTransmitter,通用异步接收发送器)是广泛应用的串行数据传输协议之一,其应用范围遍及计算机外设、工控自动化等场合。虽然USB传输协议比UART协议有更高的性能,但电路复杂开发难度大,并且大多数的微处理器只集成了UART,因此UART仍然是目前数字系统之间进行串行通信的主要协议。

 

随着FPGA的广泛应用,经常需要FPGA与其他数字系统进行串行通信,专用的UART集成电路如8250,8251等是比较复杂的,因为专用的UART集成电路既要考虑异步的收发功能,又要兼容RS232接口设计,在实际应用中,往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。可以将所需要的UART功能集成到FPGA内部,实现FPGA与其他数字系统的直接通信,从而简化了整个系统电路,提高了可靠性、稳定性和灵活性。


1 UART简介

基本的UART通信只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收与发送是全双工形式,其中TXD是UART发送端,RXD是UART接收端。UART基本特点是:在信号线上有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应保持在逻辑高电平状态。发送器是通过发送起始比特而开始一个字符传送,起始比特使数据线处于逻辑0状态,提示接收器数据传输即将开始。数据位一般为8位一个字节的数(也有6位7位的情况),低位(LSB)在前,高位(MSB)在后。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。停止位在最后,用以标志UART一个字符传送的结束,它对应于逻辑1状态,UART数据帧格式如图1所示。

 

图1 UART数据帧格式

 

2 UART功能实现

UART可以分解为3个子模块:波特率发生器模块;发送模块;接收模块。UART的功能主要由VHDL硬件描述语言编程,图2是编译后生成的图元SCI,它包括了UART的最主要的部分,即发送模块和接收模块。SCI的外部口线可分为3类:

 

一是与数字系统的接口,包括数据DATA[7.0],片选CS,读写RD、WR,状态RDFULL、TDEMPTY.这部分接口完成的功能是将待发送的数据写入SCI或从SCI读出已接收到的数据。

 

二是串行通信接口2条线RXD、TXD,其中RXD是接收数据线、TXD是发送数据线,因此,SCI实现的是全双工通信的设计。

 

三是系统控制线RESET、CLK,RESET为模块复位输入,CLK为模块时钟输入,通信的波特率由CLK来决定(实际的波特率是CLK/4)。

 

图2 UART的图元模块结构

 

RDFULL、TDEMPTY为两个状态标志位,RDFULL为输入寄存器满标志,高电平表示已经接收到一个有效数据并存储到输入数据寄存器中,当CS、RD有效将数据读出后变为低电平无效。

 

TDEMPTY为输出寄存器空标志,高电平表示由CS、WR有效写入到输出寄存器的数据已经发送完毕,可以向输出寄存器写入另外待发送的数据,低电平时表示数据目前正在发送中。

 

2.1 发送模块设计

发送模块由发送控制进程、写数据进程、并/串转换进程、状态操作进程等进程构成。其中,最主要的是发送控制进程,在发送控制进程中声明了一个6比特的变量scit_v,由它的取值(状态机)状态来控制整个发送过程。scit_v被分为高四位的sh_t和低两位的sl_,tscit_v在系统复位后被赋初值28(011100B),每来一个时钟scit_v增量,每来四个时钟sh_t增量,当sh_t为0111B时发送起始位,sh_t为1000~1111B时发送8比特的数据。下面给出的是发送控制进程和发送接收数据进程的原代码:

 

-----数据发送控制进程-----

 

PROCESS(clk,reset)

variablescit_v:integerrange0to63;

variablescit_s:STd_LOGIC_vector(tdownto0);

BEGIN

IF(reset=0‘)’THEN

scit_v:=0;--“000000”

ELSIF(clkE‘VENTANDclk=1’)‘THEN

IF(scit_v<=27)THEN

IF(tdEMPTY_s=0’‘ANDwr=1’)‘THEN

scit_v:=28;--sci_v=“011100”

ELSE

scit_v:=0;

ENDIF;

ELSE

scit_v:=scit_v+1;

ENDIF;

ENDIF;

scit_s:=conv_std_logic_vector(scit_v,6);

scit<=TO_STDULOGICVECTOR(scit_s);

ENDPROCESS;

 

------数据的串行发送-----

 

PROCESS(sh_t)

BEGIN

CASEsh_tIS

WHEN“0111”=>txd<=0’;‘

WHEN“1000”=>txd<=din_latch(0);

WHEN“1001”=>txd<=din_latch(1);

WHEN“1010”=>txd<=din_latch(2);

WHEN“1011”=>txd<=din_latch(3);

WHEN“1100”=>txd<=din_latch(4);

WHEN“1101”=>txd<=din_latch(5);

WHEN“1110”=>txd<=din_latch(6);

WHEN“1111”=>txd<=din_latch(7);

WHENOTHERS=>txd<=1’;‘

ENDCASE;

ENDPROCESS;

 

图3给出的是发送数据的仿真图。当CS和WR有效时写入数据55H,同时EMPTY被置成无效状态,开始数据的发送,从图中可以看到TXD上电平的变化过程,当发送结束后EMPTY变为有效。

 

图3 发送数据的仿真波形

 

2.2 接收模块设计

UART接口模块由接收控制进程、读数据进程、接收数据串/并转换进程、状态操作进程等进程构成。

 

在接收控制进程中同样声明了一个6比特的变量scir_v,由它的取值(状态机)状态来控制整个接收过程。其控制过程同发送模块相似,这里不再赘述。下面给出的是接收数据进程的源代码:

 

----接收行数据的串/转换进程---

 

PROCESS(clk,reset)

BEGIN

IF(reset=0’)‘THEN

d_fb<=“00000000”;

ELSIF(clkE’VENTANDclk=0‘)’THEN

IF((sh_r>=“1000”)AND(sh_r<=“

1111”)AND(sl_r=“01”))THEN

d_fb(7)<=rxd;

FORiIN0TO6LOOP

d_fb(i)<=d_fb(i+1);--d_fb(0)被移

出;d_fb(7)被移空

ENDLOOP;

ENDIF;

ENDIF;

ENDPROCESS;

 

图4给出的是接收数据的仿真图。当rxd出现低电平后便启动一次接收过程,当8比特的数据接收完毕后,rxd变为高电平,同时将RDFULL信号置为高电平有效,RDFULL有效表示接收寄存器已经存储了一个刚刚接收到的数据,当CS和RD有效时将数据(实际接收到的数据是2AH)读出,同时RDFULL被置成无效状态。

 

图4 接收数据的仿真波形

 

2.3 波特率发生器模块

波特率发生器实际是一个分频器,分频器的输出连接到SCI的CLK输入端,且应为实际波特率的4倍频。因为在发送和接收控制进程中,状态机由一个6比特的寄存器(cit_v、cir_v)的高4位(sh_r、sh_t)进行控制,而高4位的状态改变需要4个CLK时钟(低2位向高4位进位)。当SCI与SCI进行通信时,通信双方波特率选择一致即可,当SCI同MCU通信时,SCI的波特率选择同MCU定时器的溢出率即可,当SCI需要同PC通信时,才将SCI的波特率定制成:1.2Kbps,2.4Kbps,4.8Kbps直到115.2Kbps,这时要求SCI的晶体振荡频率要足够高来满足波特率的匹配,或采用(11.0592或22.1184MHz)的特殊晶体来满足特率的匹配要求。

 

3 结论

将SCI下载到EPF10K10芯片中,40MHz有源晶振没有进行分频直接驱动SCI模块,用ICL57176进行RS485转换,用100m的网线进行了SCI与SCI之间全双工通信。测试结果表明波特率达到10Mbps时通信是正确的。

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
串口通信的优缺点解析,什么情况下适合用串口通信?
串口通信的优缺点解析,什么情况下适合用串口通信?

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。

选择合适的电源为5G基站组件供电

自80年代初引入模拟蜂窝网络以来,蜂窝通信已有了长足发展。如今,随着市场由4G向5G网络解决方案迁移,蜂窝通信行业正在为实现更快数据传输速度、更低延迟以及容量、用户密度和可靠性的巨大飞跃奠定基础。

5G仅仅只是英特尔图谋的一小部分
5G仅仅只是英特尔图谋的一小部分

现在每个人都把5G挂在嘴边上,大多数情况下,5G都和手机市场相关联。从这个角度上来看,英特尔是比较失意的,因为它刚刚退出了5G智能手机调制解调器业务。但是我相信,5G所带来的绝对不仅仅是对高通骁龙X50 5G智能手机调制解调器等纯5G芯片的需求。

由点到面,国产FPGA产业链的突围之路漫漫

随着AI、大数据、物联网、无人驾驶等新兴技术的发展,FPGA凭借灵活性、可重构性赢得了更多增量市场。赛灵思的营收也一路高歌,在2019财年突破了30亿美元,年度增长高达24%,而全球FPGA市场规模在50-60亿美元,仅赛灵思一家就占据了半壁江山,加上英特尔PSG和Lattice拿走的市场份额,留个国产FPGA的市场空间所剩无几。

高云半导体参加FPGA全球大会

中国广州,2019年9月6日,全球发展速度最快、最具创新性的FPGA设计公司-广东高云半导体科技股份有限公司(以下简称“高云半导体”)将参加9月17日在斯德哥尔摩举行FPGA全球大会,此会议是全球最大规模的FPGA行业年度盛会。

更多资讯
作为 FPGA 的主要玩家之一,英特尔的“暑期”表现如何?
作为 FPGA 的主要玩家之一,英特尔的“暑期”表现如何?

世界上的各大顶级体育联赛都有暑期休赛的传统。然而,这并不代表各支球队、各位球员就能轻松的出海钓鱼、享受假期。对于大多数职业球员来说,暑期正是不断训练、提升自己的绝好时机。

一文读懂 PGIA 那些事儿

数据采集系统(DAQ)在许多行业应用广泛,例如研究、分析、设计验证、制造和测试等。这些系统与各种传感器接口,从而给前端设计带来挑战。

贝克•麦坚时宣布全球破纪录创收29.2亿美元

全球顶级律所贝克•麦坚时国际律师事务所(以下简称“贝克•麦坚时”)宣布,截至2019年6月30日的2019财年(FY19)收入达到创纪录的29.2亿美元。

详解 FPGA 的静态时序分析
详解 FPGA 的静态时序分析

本文档理论适用于Actel FPGA并且采用Libero软件进行静态时序分析(寄存器到寄存器)。

英特尔出货首批10纳米Agilex™ FPGA

英特尔今天宣布开始向参与早期使用计划的客户出货第一批英特尔® Agilex™ FPGA,包括科罗拉多工程公司、Mantaro Networks、微软和Silicom。上述客户将使用Agilex FPGA为网络、5G和加速数据分析开发先进的解决方案。