通用异步串行接口的VHDL实用化设计
发布时间:2008/5/28 0:00:00 访问次数:573
摘 要:通用异步串行接口(universal asynchronous receiver transmitter,uart)在通信、控制等领域得到了广泛应用。根据uart接口特点和应用需求,以提高vhdl设计的稳定性和降低功耗为目标,本文讨论了uart接口中时钟域划分、时钟分频、亚稳态、同步fifo设计等问题和解决方案。
关键词:通用异步串行接口 vhdl 亚稳态 现场可编程逻辑阵列
1引言
fpga从实现粘合逻辑逐步发展成为设计平台的核心,在电子、通信以及航空航天等领域得到了广泛应用。本人最近实现的中频软件无线电硬件平台,就以fpga为核心,实现上变频、下变频等中频数字信号处理,并且构成a/d/a、dsp和arm模块之间的通信中心。这种以fpga为核心的架构使得硬件平台结构灵活,具有可重构性,为软件无线电的各种算法分配方案提供了有力支撑。
除了和tms320c6416之间的数据流采用emif接口外,fpga的其它接口均采用uart。为了软件开发和移植的便利,uart设计要做到兼容st16c550的功能。稳定可靠则是作为软件无线电硬件平台关键接口的基本要求。考虑到嵌入式系统的特点,在设计中应尽量降低功耗。本文围绕这些目标,介绍了在uart实用化设计中所遇到的一些重要问题、解决方案以及最终结果。
2uart及st16c550概述
uart是广泛使用的串行数据传输协议,它在收发分离的串行链路上进行全双工异步通信。发送过程接收来自数据总线上的并行数据,按照低位序方式并串转换,然后根据控制寄存器的设置生成串行数据流;相应的,接收过程把串行数据流转换成并行数据,产生中断以及状态信息,并对数据传输过程中的异常进行处理。
st16c550是广泛使用的一款uart接口芯片,是ns16c550的改进版本。它收发均带有16字节的fifo,可以通过设定波特率设置寄存器来进行收发时钟的分频控制,传输速率从50bps到1.5mbps。具体内容可参见数据手册[1]。
3实用化设计的主要问题和解决方案
3.1框架设计
根据uart的功能和数据流特点,系统划分为5个模块:时钟生成模块,完成时钟分频和时钟分配;界面模块,完成uart其它模块和数据总线的交互;发送模块,缓冲接收到的数据并按照设置生成串行信号;接收模块,按照设置将接收信号串并变换并将数据送到fifo中;modem模块完成与modem信息交互和控制,功能相对简单独立。
3.2时钟域的划分
在同步电路设计中,减小时钟数量可简化设计,提高系统的稳定性。不相关的时钟域之间的数据传递不可避免的存在亚稳态问题,带来稳定性能的下降。时钟速率与功耗呈线性关系,当工艺一定时,低功耗设计要求我们降低时钟频率和信号翻转次数。下面从这些设计策略和通信效率来分析不同时钟域划分方案。
方案一:低速时钟方案。首先根据控制寄存器的设置对外部提供的时钟进行分频,生成全局唯一的时钟。这种方案的优点是系统实现简单、面积最小、功耗最低。缺点也很明显,cpu时钟远远高于芯片的工作时钟,与uart传递数据时将占用cpu过多的时间。
方案二:高速时钟方案。系统直接采用外部提供的时钟为唯一时钟,根据控制寄存器的设置生成收发模块的同步时钟使能信号,来达到分频的目的。这种方案全局只有一个时钟,设计简单。唯一缺点是功耗较大。
在实际设计中,综合考虑效率和功耗的要求,采用了两个关联时钟的方案。与cpu的接口界面直接采用外部提供的最高时钟信号,而其它模块采用由波特率设置寄存器控制的分频时钟。这样在系统中存在两个关联的时钟域,设计时需要对两个时钟域边界的逻辑进行分析和处理。
3.3时钟分频
同步数字电路设计中,时钟是整个电路中最重要的信号。时钟信号上的毛刺会引起系统的逻辑混乱,大规模的数字芯片还对时钟歪斜(clock skew)和负载提出了要求。为了适应这些需求,fpga内部一般设有数量不等的全局时钟网络。
使用同步计数器或状态机进行时钟分频是一种较好的方案。在设计中计数器或状态机应直接产生分频时钟信号,而不应该对计数器或状态机进行译码来产生时钟信号,因为译码等组合逻辑可能给时钟带来毛刺,引起系统不稳定。uart当波特率设置寄存器为0或1时,时钟信号不需要分频,故分频电路中使用了一个多路选择器。
3.4异步时钟与亚稳态
uart使用独立的时钟信号,使得cpu与uart以及uart之间的信号都处在不同的时钟域。为了减少时序上的冲突,跨时钟域的数据传递首先需要同步处理。但由于时钟频率和相位的差异,就不可避免存在亚稳态问题[2]。所谓亚稳态,是指触发器/锁存器的输入信号时序不能满足设置时间和保持时间的要求,将有可能使得触发器/锁存器的输出没有正确的锁定到逻辑0或逻辑1,处在一个未知的状态,如滞留在中间状态,或者震荡。这里以sn74abt7819的参数为例来分析
摘 要:通用异步串行接口(universal asynchronous receiver transmitter,uart)在通信、控制等领域得到了广泛应用。根据uart接口特点和应用需求,以提高vhdl设计的稳定性和降低功耗为目标,本文讨论了uart接口中时钟域划分、时钟分频、亚稳态、同步fifo设计等问题和解决方案。
关键词:通用异步串行接口 vhdl 亚稳态 现场可编程逻辑阵列
1引言
fpga从实现粘合逻辑逐步发展成为设计平台的核心,在电子、通信以及航空航天等领域得到了广泛应用。本人最近实现的中频软件无线电硬件平台,就以fpga为核心,实现上变频、下变频等中频数字信号处理,并且构成a/d/a、dsp和arm模块之间的通信中心。这种以fpga为核心的架构使得硬件平台结构灵活,具有可重构性,为软件无线电的各种算法分配方案提供了有力支撑。
除了和tms320c6416之间的数据流采用emif接口外,fpga的其它接口均采用uart。为了软件开发和移植的便利,uart设计要做到兼容st16c550的功能。稳定可靠则是作为软件无线电硬件平台关键接口的基本要求。考虑到嵌入式系统的特点,在设计中应尽量降低功耗。本文围绕这些目标,介绍了在uart实用化设计中所遇到的一些重要问题、解决方案以及最终结果。
2uart及st16c550概述
uart是广泛使用的串行数据传输协议,它在收发分离的串行链路上进行全双工异步通信。发送过程接收来自数据总线上的并行数据,按照低位序方式并串转换,然后根据控制寄存器的设置生成串行数据流;相应的,接收过程把串行数据流转换成并行数据,产生中断以及状态信息,并对数据传输过程中的异常进行处理。
st16c550是广泛使用的一款uart接口芯片,是ns16c550的改进版本。它收发均带有16字节的fifo,可以通过设定波特率设置寄存器来进行收发时钟的分频控制,传输速率从50bps到1.5mbps。具体内容可参见数据手册[1]。
3实用化设计的主要问题和解决方案
3.1框架设计
根据uart的功能和数据流特点,系统划分为5个模块:时钟生成模块,完成时钟分频和时钟分配;界面模块,完成uart其它模块和数据总线的交互;发送模块,缓冲接收到的数据并按照设置生成串行信号;接收模块,按照设置将接收信号串并变换并将数据送到fifo中;modem模块完成与modem信息交互和控制,功能相对简单独立。
3.2时钟域的划分
在同步电路设计中,减小时钟数量可简化设计,提高系统的稳定性。不相关的时钟域之间的数据传递不可避免的存在亚稳态问题,带来稳定性能的下降。时钟速率与功耗呈线性关系,当工艺一定时,低功耗设计要求我们降低时钟频率和信号翻转次数。下面从这些设计策略和通信效率来分析不同时钟域划分方案。
方案一:低速时钟方案。首先根据控制寄存器的设置对外部提供的时钟进行分频,生成全局唯一的时钟。这种方案的优点是系统实现简单、面积最小、功耗最低。缺点也很明显,cpu时钟远远高于芯片的工作时钟,与uart传递数据时将占用cpu过多的时间。
方案二:高速时钟方案。系统直接采用外部提供的时钟为唯一时钟,根据控制寄存器的设置生成收发模块的同步时钟使能信号,来达到分频的目的。这种方案全局只有一个时钟,设计简单。唯一缺点是功耗较大。
在实际设计中,综合考虑效率和功耗的要求,采用了两个关联时钟的方案。与cpu的接口界面直接采用外部提供的最高时钟信号,而其它模块采用由波特率设置寄存器控制的分频时钟。这样在系统中存在两个关联的时钟域,设计时需要对两个时钟域边界的逻辑进行分析和处理。
3.3时钟分频
同步数字电路设计中,时钟是整个电路中最重要的信号。时钟信号上的毛刺会引起系统的逻辑混乱,大规模的数字芯片还对时钟歪斜(clock skew)和负载提出了要求。为了适应这些需求,fpga内部一般设有数量不等的全局时钟网络。
使用同步计数器或状态机进行时钟分频是一种较好的方案。在设计中计数器或状态机应直接产生分频时钟信号,而不应该对计数器或状态机进行译码来产生时钟信号,因为译码等组合逻辑可能给时钟带来毛刺,引起系统不稳定。uart当波特率设置寄存器为0或1时,时钟信号不需要分频,故分频电路中使用了一个多路选择器。
3.4异步时钟与亚稳态
uart使用独立的时钟信号,使得cpu与uart以及uart之间的信号都处在不同的时钟域。为了减少时序上的冲突,跨时钟域的数据传递首先需要同步处理。但由于时钟频率和相位的差异,就不可避免存在亚稳态问题[2]。所谓亚稳态,是指触发器/锁存器的输入信号时序不能满足设置时间和保持时间的要求,将有可能使得触发器/锁存器的输出没有正确的锁定到逻辑0或逻辑1,处在一个未知的状态,如滞留在中间状态,或者震荡。这里以sn74abt7819的参数为例来分析