原创 【博客大赛】高速uart设计及验证之关键点分析-附参考代码

2014-11-7 21:20 1073 13 13 分类: FPGA/CPLD

UART设计及关键点和难点分析

 

20141106223204737.jpg

UART:设计架构

1bus_interface中定义一些寄存器,如控制寄存器(control_reg),包括波特率的设置、奇偶校验位设置,bits数目的设置,停止位的设置等;状态寄存器(status_reg)包括奇偶校验错误状态,中断状态,发送接收fifo空满状态,CRC错误状态等;数据寄存器(data_reg)包括发送数据和接收数据。

2uart_tx_fifo用于缓存待发送的数据,关于它的大小,要根据发送端的吞吐率和uart的速率进行计算,然后给出一个比较合理的值;例如fifo深度为Depth*Width,那么你可以设计成当fifo不满的状态反馈到状态寄存器,接口那边检测到不满就可以继续往里面写,uart_tx_rsm检测到fifo不空时就可以继续发送数据;但是这样需要接口那边频繁来检测状态(如果接口那边是cpu的话,则会使cpu频繁访问uart寄存器,使其不能够很好的做其他工作),所以可以设计成将fifo填满(或者达到某个阈值),然后uart_tx_rsm发送数据,当fifo中的数据发送完毕后产生中断,通知接口那边继续填满fifo,这种采用中断的方式可以使接口另一端的设备不至于频繁访问寄存器。

3uart_divxy用于根据波特率寄存器及系统时钟产生uart_clk;

4uart_rx_fifo用于缓存uart_rx接收的的数据,关于它的大小,要根据接收端的吞吐率和uart的速率进行计算,然后给出一个比较合理的值;例如fifo深度为Depth*Width,那么你可以设计成当fifo不空的状态反馈到状态寄存器,接口那边检测到不空就可以继续从里面读取,uart_rx_rsm检测到fifo不满时就可以继续接收数据;但是这样需要接口那边频繁来检测状态(如果接口那边是cpu的话,则会使cpu频繁访问uart寄存器,使其不能够很好的做其他工作),所以可以设计成将fifo填满(或者达到某个阈值),然后产生中断,通知接口来读取,这种采用中断的方式可以使接口另一端的设备不至于频繁访问寄存器。

5uart_tx_rsm用于从uart_tx_fifo中取一个字节,然后按照格式{开始位,数据位(位数可变),奇偶校验位,停止位}(有些位可以选择),在uart_baud的控制下一个一个bit的发送出去。

6uart_baud用于控制uart_tx_rsmuart_rx_rsm

7uart_rx_rsm接收一个一个bit(关于uart_rx_rsm采样bit采用16倍波特率的速率,然后取中间值),然后剥去起始位,奇偶校验位停止位,组成一个字节,然后存入uart_rx_fifo

8uart_interruput产生中断,通知接口,然后接口接收到中断后,读取相应的中断寄存器,查看是何种类型的中断。

9uart_modem产生流控制信号,大致是表明uart当前是否可以用于传输。

10、关于接口部分,由于uart的速率较低,可以采用APB总线协议实现,方面后面的系统集成和IP复用。

20141106223234157.jpg

 

Cpu通过总线发送一组数据到uart_dut,同时将这组数据送到scoreboard,数据经过总线及uart_dut后被uart_driver接收至数组(或者其它存储结构)中,然后这组数据被送到scoreboardcpu送出的数进行比对;同理,uart_dut通过uart_dut发送一组数据到cpu(也可以理解为cpu读取数据,因为cpu相当于masteruartslave),同时将这组数据送到scoreboard,数据经过总线后被cpu接收至数组(或者其它存储结构)中,然后这组数据被送到scoreboarduart_dut送出的数进行比对。其中上图中的中断信号输入到cpu的中断控制器中,cpu根据中断的情况进行相应的处理。

注意:uart是如何确保数据传输的正确性的呢??

1)在数据位的两端添加了起始位,奇偶校验位,停止位等用于进行数据的同步和纠错;

2)接收端用16倍波特率对数据进行采样,取采样中间点的值,这样可以很大程度上确保采样数据的正确性。

3)通过流控制信号(如上面的uart_rts,uart_cts信号)确保数据传输的正确性,不会发生underrunoverrun

文章评论0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
我要评论
0
13
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条