精华内容
下载资源
问答
  • Serdes 高速串行接口

    2021-11-08 15:47:53
    在SerDes流行之前,芯片之间的互联通过系统同步或者源同步的并行接口传输数据,图1.1演示了系统和源同步并行接口。 随着接口频率的提高,在系统同步接口方式中,有几个因素限制了有效数据窗口宽度的继续增加。 a)...

    一、SERDES的作用

    1.1并行总线接口

      在SerDes流行之前,芯片之间的互联通过系统同步或者源同步的并行接口传输数据,图1.1演示了系统和源同步并行接口。

     

      随着接口频率的提高,在系统同步接口方式中,有几个因素限制了有效数据窗口宽度的继续增加。

    a)、时钟到达两个芯片的传播延时不相等(clock skew)

    b)、并行数据各个bit的传播延时不相等(data skew)

    c)、时钟的传播延时和数据的传播延时不一致(skew between data and clock)

      虽然可以通过在目的芯片(chip #2)内用PLL补偿时钟延时差(clock skew),但是PVT变化时,时钟延时的变化量和数据延时的变化量是不一样的。这又进一步恶化了数据窗口。

      源同步接口方式中,发送侧Tx把时钟伴随数据一起发送出去, 限制了clock skew对有效数据窗口的危害。通常在发送侧芯片内部,源同步接口把时钟信号和数据信号作一样的处理,也就是让它和数据信号经过相同的路径,保持相同的延时。这样PVT变化时,时钟和数据会朝着同一个方向增大或者减小相同的量,对skew最有利。

    我们来做一些合理的典型假设,假设一个32bit数据的并行总线,  

    a)、发送端的数据skew = 50 ps                        —很高的要求

    b)、pcb走线引入的skew = 50ps                      —很高的要求

    c)、时钟的周期抖动jitter = +/-50 ps               —很高的要求

    d)、接收端触发器采样窗口 = 250 ps             —Xilinx V7高端器件的IO触发器

      可以大致估计出并行接口的最高时钟 = 1/(50+50+100+250) = 2.2GHz (DDR)或者1.1GHz (SDR)。

      利用源同步接口,数据的有效窗口可以提高很多。通常频率都在1GHz以下。在实际应用中可以见到如SPI4.2接口的时钟可以高达DDR 700MHz x 16bits位宽。DDR Memory接口也算一种源同步接口,如DDR3在FPGA中可以做到大约800MHz的时钟。

          要提高接口的传输带宽有两种方式,一种是提高时钟频率,一种是加大数据位宽。那么是不是可以无限制的增加数据的位宽呢?这就要牵涉到另外一个非常重要的问题—–同步开关噪声(SSN)。

      这里不讨论SSN的原理,直接给出SSN的公式: SSN = L *N* di/dt

          L是芯片封装电感,N是数据宽度,di/dt是电流变化的斜率。

      随着频率的提高,数据位款的增加,SSN成为提高传输带宽的主要瓶颈。图1.2是一个DDR3串扰的例子。图中低电平的理论值在0V,由于SSN的影响,低电平表现为震荡,震荡噪声的最大值达610mV,因此噪声余量只有1.5V/2-610mV=140mV。

     

    Figure 1.2  DDR3串扰演示

      因此也不可能靠无限的提高数据位宽来继续增加带宽。一种解决SSN的办法是使用差分信号替代单端信号,使用差分信号可以很好的解决SSN问题,代价是使用更多的芯片引脚。使用差分信号仍然解决不了数据skew的问题,很大位宽的差分信号再加上严格的时序限制,给并行接口带来了很大的挑战。

    1.2 SerDes接口

      源同步接口的时钟频率已经遇到瓶颈,由于信道的非理想(channel)特性,再继续提高频率,信号会被严重损伤,就需要采用均衡和数据时钟相位检测等技术。这也就是SerDes所采用的技术。SerDes(Serializer-Deserializer)是串行器和解串器的简称。串行器(Serializer)也称为SerDes发送端(Tx),(Deserializer)也称为接收端Rx。Figure1.3是一个N对SerDes收发通道的互连演示,一般N小于4。

      可以看到,SerDes不传送时钟信号,这也是SerDes最特别的地方,SerDes在接收端集成了CDR(Clock Data Recovery)电路,利用CDR从数据的边沿信息中抽取时钟,并找到最优的采样位置。

          SerDes采用差分方式传送数据。一般会有多个通道的数据放在一个group中以共享PLL资源,每个通道仍然是相互独立工作的。

          SerDes需要参考时钟(Reference Clock),一般也是差分的形式以降低噪声。接收端Rx和发送端Tx的参考时钟可以允许几百个ppm的频差(plesio-synchronous system),也可以是同频的时钟,但是对相位差没有要求。

      作个简单的比较,一个SerDes通道(channel)使用4个引脚(Tx+/-,Rx+/-), 目前的FPGA可以做到高达28Gbps。而一个16bits的DDR3-1600的线速率为1.6Gbps*16 = 25Gbps,却需要50个引脚。此对比可以看出SerDes在传输带宽上的优势。

      相比源同步接口,SerDes的主要特点包括:

    SerDes在数据线中时钟内嵌,不需要传送时钟信号。

    SerDes通过加重/均衡技术可以实现高速长距离传输,如背板。

    SerDes 使用了较少的芯片引脚

    1.3 中间类型

      也存在一些介于SerDes和并行接口之间的接口类型,相对源同步接口而言,这些中间类型的接口也使用串行器(Serializer)解串器(Deserializer),同时也传送用于同步的时钟信号。这类接口如视频显示接口7:1 LVDS等。

    二、 SerDes结构(architecture)

            SerDes的主要构成可以分为三部分,PLL模块,发送模块Tx,接收模块Rx。为了方便维护和测试,还会包括控制和状态寄存器,环回测试,PRBS测试等功能。见图2.1。

     

    Figure 2.1 Basic Blocks of a typical SerDes

       图中蓝色背景子模块为PCS层,是标准的可综合CMOS数字逻辑,可以硬逻辑实现,也可以使用FPGA软逻辑实现,相对比较容易被理解。褐色背景的子模块是PMA层,是数模混合CML/CMOS电路,是理解SerDes区别于并行接口的关键,也是本文要讨论的内容。

       发送方向(Tx)信号的流向: FPGA软逻辑(fabric)送过来的并行信号,通过接口FIFO(Interface FIFO),送给8B/10B编码器(8B/10B encoder)或扰码器(scambler),以避免数据含有过长连零或者连1。之后送给串行器(Serializer)进行 并->串 转换。串行数据经过均衡器(equalizer)调理,有驱动器(driver)发送出去。

       接收方向(Rx)信号的流向, 外部串行信号由线性均衡器(Linear Equalizer)或DFE (Decision Feedback Equalizer判决反馈均衡)结构均衡器调理,去除一部分确定性抖动(Deterministic jitter)。CDR从数据中恢复出采样时钟,经解串器变为对齐的并行信号。8B/10B解码器(8B/10B decoder)或解扰器(de-scambler)完成解码或者解扰。如果是异步时钟系统(plesio-synchronous system),在用户FIFO之前还应该有弹性FIFO来补偿频差。

    补充:均衡器

    在通信系统的基带或中频部分插入的,能够减少码间干扰, 起到补偿作用的滤波器。分为频域均衡器和时域均衡器。

    频域均衡器

    频域均衡器利用可调滤波器的频率特性来弥补实际信道的幅频特性和群延时特性,使包括均衡器在内的整个系统的总频率特性满足无码间干扰传输条件。

    时域均衡器

    时域均衡器是直接从时间响应角度考虑,使包括均衡器在内的整个传输系统的冲激响应满足无码间干扰条件。频域均衡满足奈奎斯特整形定理的要求,仅在判决点满足无码间干扰的条件相对宽松一些。所以,在数字通信中一般时域均衡器使用较多。

        时域均衡器可以分两大类:线性均衡器和非线性均衡器。如果接收机中判决的结果经过反馈用于均衡器的参数调整,则为非线性均衡器;反之,则为线性均衡器。在线性均衡器中,最常用的均衡器结构是线性横向均衡器,它由若干个抽头延迟线组成,延时时间间隔等于码元间隔。非线性均衡器的种类较多,包括判决反馈均衡器(DFE)、最大似然(ML)符号检测器和最大似然序列估计等。

            PLL负责产生SerDes各个模块所需要的时钟信号,并管理这些时钟之间的相位关系。以图中线速率10Gbps为例,参考时钟频率250MHz。Serializer/Deserializer至少需要5GHz 0相位时钟和5GHz 90度相位时钟,1GHz(10bit并行)/1.25GHz(8bit并行)时钟等。

       一个SerDes通常还要具调试能力。例如伪随机码流产生和比对,各种环回测试,控制状态寄存器以及访问接口,LOS检测, 眼图测试等。

    2.1串行器解串器(Serializer/Deserializer)

       串行器Serializer把并行信号转化为串行信号。Deserializer把串行信号转化为并行信号。一般地,并行信号为8 /10bit或者16/20bit宽度,串行信号为1bit宽度(也可以分阶段串行化,如8bit->4bit->2bit->equalizer->1bit以降低equalizer的工作频率)。采用扰码(scrambled)的协议如SDH/SONET, SMPTE SDI使用8/16bit的并行宽度,采用8B/10B编码的协议如PCIExpress,GbE使用10bits/20bits宽度。

       一个4:1的串行器如图所示。8:1或16:1的串行器采用类似的实现。实现时,为了降低均衡器的工作频率,串行器会先把并行数据变为2bits,送给均衡器equalizer滤波,最后一步再作2:1串行化,本文后面部分都按1bit串行信号解释。

     

        一个1:4的解串器如图2.3所示,8:1或16:1的解串器采用类似的实现。实现时,为了降低均衡器(DFE based Equalizer)的工作频率,DFE工作在DDR模式下,解串器的输入是2bit或者更宽,本文后面部分都按1bit串行信号解释。

     

              Serializer/Deserializer的实现采用双沿(DDR)的工作方式,利用面积换速度的策略,降低了电路中高频率电路的比例,从而降低了电路的噪声。

       接收方向除了Deserializer之外,一般带有还有对齐功能逻辑(Aligner)。相对SerDes发送端,SerDes接收端起始工作的时刻是任意的,接收器正确接收的第一个 bit可能是发送并行数据的任意bit位置。因此需要对齐逻辑来判断从什么bit位置开始,以组成正确的并行数据。对齐逻辑通过在串行数据流中搜索特征码字(Alignment Code)来决定串并转换的起始位置。比如8B/10B编码的协议通常用K28.5(正码10’b1110000011,负码10’b0001111100)来作为对齐字。图2.4为一个对齐逻辑的演示。通过滑窗,逐bit比对,以找到对齐码(Align-Code)的位置,经过多次在相同的位置找到对齐码之后,状态机锁定位置并选择相应的位置输出对齐数据。

     

    2.2发送端均衡器( Tx Equalizer)

            SerDes信号从发送芯片到达接收芯片所经过的路径称为信道(channel),包括芯片封装,pcb走线,过孔,电缆,连接器等元件。从频域看,信道可以简化为一个低通滤波器(LPF)模型,如果SerDes的速率大于信道(channel)的截止频率,就会一定程度上损伤(distort)信号。均衡器的作用就是补偿信道对信号的损伤。

       发送端的均衡器采用FFE(Feed forward equalizers)结构,发送端的equalizer也称作加重器(emphasis)。加重(Emphasis)分为去加重(de-emphasis)和预加重(pre-emphasis)。De-emphasis降低差分信号的摆幅(swing)。Pre-emphasis增加差分信号的摆幅。FPGA大部分使用de-emphasis的方式,加重越强,信号的平均幅度会越小。

    发送侧均衡器设计为一个高通滤波器(HPF),大致为信道频响H(f)的反函数H-1(f),FFE的目标是让到达接收端的信号为一个干净的信号。FFE的实现方式有很多,一个典型的例子如图2.5所示。

     

       调节滤波器的系数可以改变滤波器的频响,以补偿不同的信道特性,一般可以动态配置。以10Gbps线速率为例,图2.5为DFE频率响应演示。可以看到,对于C0=0,C1=1.0,C2=-0.25的配置,5GHz处高频增益比低频区域高出4dB,从而补偿信道对高频频谱的衰减。

     

       采样时钟的频率限制了这种FFE最高只能补偿到Fs/2(例子中Fs/2=5GHz)。根据采样定理,串行数据里的信息都包含在5GHz以内,从这个角度看也就足够了。如果要补偿Fs/2以上的频率,就要求FFE高于Fs的工作时钟,或者连续时间域滤波器(Continuous Time FFE)。

       图2.7为DFE时域滤波效果的演示,以10Gbps线速率为例,一个UI=0.1 nS=100ps。演示的串行数据码流为二进制[00000000100001111011110000]。

     

    2.3接收端均衡器( Rx Equalizer) 

    2.3.1 线形均衡器(Linear Equalizer)

            接收端均衡器的目标和发送均衡器是一致的。对于低速(<5Gbps)SerDes,通常采用连续时间域,线性均衡器实现如尖峰放大器(peaking amplifier), 均衡器对高频分量的增益大于对低频分量的增益。图2.8为一个线性均衡器的频域特性。通常工厂会对均衡特性封装为数种级别,可以动态设置,以适应不同的信道特性,如High/Med/Low等。

    Figure 2.8 Frequency Response of A peaking Amplifier based Rx Equalizer

    2.3.2 DFE均衡器(Decision Feedback Equalizer)

       对于高速(>5Gbps)SerDes,由于信号的抖动(如ISI相关的确定性抖动)可能会超过或接近一个符号间隔(UI, Unit Interval), 单单使用线性均衡器不再适用。线性均衡器对噪声和信号一起放大,并没有改善SNR或者说BER。对于高速SerDes,采用一种称作DFE (Decision Feedback Equalizer裁决反馈均衡器)的非线性均衡器。DFE通过跟踪过去多个UI的数据(history bits)来预测当前bit的采样门限。DFE只对信号放大,不对噪声放大,可以有效改善SNR。

    补充:

    Unit Interval 单位时间间隔:通常在通信信号的抖动测试中用来表示抖动幅度的单位。表示一个等步信号的两个相邻的有效瞬时之间的标称时间差

       图2.9演示了一个典型的5阶DFE。接收的串行数据由比较器(slicer)来判决0或者1,然后数据流由一个滤波器来预测码间干扰(ISI),再从输入的原始信号中减掉码间干扰(ISI),从而的到一个干净的信号。为了让DFE均衡器的电路工作在电路线形范围内,串行信号先经过VGA自动控制进入DFE的信号幅度。

          为了理解DFE的工作原理,先来看一个10Gbps背板的脉冲响应,这个背板模型是matlab给出的一个基于实测的模型,具有典型特性。

        图2.10中,一横格代表一个UI的时间。可以看出,一个UI( 0.1nS = 1/10GHz )的脉冲信号,通过背板后,泄漏到前后多个相邻的UI里面,从而对其他UI的数据产生干扰。采样点后面的干扰叫做post-cursor干扰,采样点前面的叫做pre-cursor干扰。DFE的第一个系数 h1(此例中0.175)矫正第一个post-cursor, 第二个系数 h2(此例中0.075)矫正第二个post-cursor。DFE的阶数越多,能够校正的post-cursor也越多。

     

            用上述的背板传输一个11011的码流,由于post-cursor和pre-cursor的泄漏,如果没有均衡,将会导致’0’不能识别,见图2.11。假定有一个2阶的DFE, 那么‘0’bit处的幅度应该减去第一个’1’bit的h2, 第二个’1’bit的h1, 得到0.35-0.075-0.175 =0.1, 足够被识别为0。

            可见,DFE计算历史bits的post-cursor干扰,在当前bit中把干扰减去,从而得到干净的信号。由于DFE只能能够校正post-cursor ISI, 所以DFE前面一般会带有LE。只要DFE的系数接近信道(channel)的脉冲相应,就可以到的比较理想的结果。但是信道是一个时变的媒介,比如温度电压工艺的慢变化等因素会改变信道channel的特性。因此DFE的系数需要自适应算法,自动扑获和跟随信道的变化。DFE系数自适应算法非常学术,每个厂商的算法都是保密的,不对外公布。对于NRZ码,典型的算法准则是基于sign-error驱动的算法。Sign-error是均衡后信号的幅度和期望值的误差,算法以sign-error均方差最小为优化目标,逐次优化h1/h2/h3…。因为sign-error和采样位置是耦合在一起相互影响,因此也可以sign-error和眼图宽度两个准则为目标进行DFE系数的预测。也因此,采用DFE结构的SerDes通常都会带有内嵌眼图测试电路,如图2.9所示。眼图测试电路通过垂直方向上平移信号的幅度,水平方向上平移采样位置,计算每一个平移位置上的误码率BER,从而得到每一个偏移位置与误码率关系的”眼图”,见图2.12。

    Figure 2.12 SerDes Embedded Eye-Diagram Test Function

    2.4时钟数据恢复(CDR)

            CDR的目标是找到最佳的采样时刻,这需要数据有丰富的跳变。CDR有一个指标叫做最长连0或连1长度容忍(Max Run Length或者Consecutive Identical Digits)能力。如果数据长时间没有跳变,CDR就无法得到精确的训练,CDR采样时刻就会漂移,可能采到比真实数据更多的1或者0。而且当数据重新恢复跳变的时,有可能出现错误的采样。比如有的CDR采用PLL实现,如果数据长时间停止跳变,PLL的输出频率就会漂移。实际上,SerDes上传输的数据要么利用加扰,要么利用编码的方法来保证Max Run Length在一定的范围内。

    8B/10B编码的方法可以保证Max Run Length不超过5个UI。

    64B/66B编码的方法可以保证Max Run Length不超过66个UI

    SONET/SDH加扰得方法可以保证Max Run Length不超过80个UI(BER<10^-12)

       在点到点的连接中,大部分SerDes协议采用连续模式(continuous-mode),线路上数据流是持续而没有中断的。在点到多点的连接中,往往采用突发模式(burst-mode)如PON。很显然Burst-Mode对SerDes锁定时间有苛刻的要求。

              Continuous-Mode的协议如SONET/SDH则要求容忍较长的连0, 而且对CDR的抖动传输性能也有严格的要求(因为loop timing)。

       如果收(Rx)发(Tx)是异步模式(asynchronous mode),或者频谱扩展(SSC)应用中,则要求CDR有较宽的相位跟踪范围以跟踪Rx/Tx频率差。

       根据应用场景的不同需求,CDR的实现也有非常多种架构。FPGA SerDes常常采用的基于数字PLL的CDR,和基于相位插值器的CDR。这两种CDR在环路中采用数字滤波器,相对模拟charge pump加模拟滤波器的结构更节省面积。

       图2.13是基于相位插值器的CDR。鉴相器阵列对输入的串行数据与M个等相位间隔的时钟在多个UI的跨度上进行相位比较,得到多个UI跨度上的相位误差信号。相位误差信号的频率很高,宽度也很宽,经过抽取器降速并平滑后,送给数字滤波器。数字滤波器的性能会影响环路的带宽,稳定性,反应速度等。经数字滤波器平滑后的误差信号送给相位插值器(phase rotators)修正时钟相位。最终环路锁定时,理论上相位误差为零,90度偏移的时钟作为恢复时钟采样串行输入。

       图2.14是基于DPLL的CDR, 分为两个环路,对数据锁相的环路(phase tracking loop)和图2.13的CDR工作原理类似。鉴相器阵列对输入的串行数据与M个等相位间隔的时钟进行相位比较(也可能是在多个UI的跨度上),得到相位误差信号。相位误差信号送给数字滤波器。数字滤波器的性能会影响环路的带宽,稳定性,反应速度等。经数字滤波器平滑后的误差信号送给VCO修正时钟相位。最终环路锁定时,理论上相位误差为零,90度偏移的时钟作为恢复时钟采样串行输入。

       基于DPLL的CDR多了一个频率跟踪环路(Frequency Tracking Loop)。这是为了减小CDR的锁定时间,减少对环路滤波器的设计约束。只有当频率跟踪环路 锁定后,才会切换到数据相位跟踪环路。相位跟踪环路失锁时,再自动切换到频率跟踪环路。N倍参考时钟(Reference Clock)频率 和线路速率接近相等,因此两个环路的VCO稳态控制电压是接近相等的。借助 频率跟踪环路,减小了 相位跟踪环路 的捕获时间。

              相位跟踪环路锁定时,频率跟踪环路不会影响相位环路。因此SerDes接收侧对参考时钟的抖动没有很高的要求。

    基于相位插值器的CDR的参考时钟可以是收发公用的PLL,也可以是每个通道独立的PLL。这种结构的参考时钟抖动会直接影响恢复时钟的抖动以及接收误码率。

    2.4.1 鉴相器(PD)

       鉴相器用来比较相位误差,相位误差以UP或者DN的信号表示, UP/DN持续的时间正比于相位误差。一个bang-bang结构鉴相器的例子如图2.15。例子中只用了四个相位的恢复时钟作为例子。

    2.4.2抽取器和滤波器

       抽取器是为了让滤波器在较低的频率下工作。抽取的步长,平滑的方法都会影响环路的性能。数字滤波器有比例分支(Proportion)和积分分支(Integral)构成,分别跟踪相位误差和频率误差。另外数字滤波器的处理延时也不能太大,如果处理延时过大,就会导致环路不能跟踪相位和频率的快速变化,导致误码。

            CDR的结构不限于以上两种,还有其他很多变种。基本上都是一个锁相环路。环路的跟随性能,稳定性(STABILITY),带宽(bandwidth)/增益(gain)性能分析是一个非常学术的问题,用小信号线形模型分析,有非常多的书籍和资料解释了环路的量化性能。CDR环路有一些的特点总结如下:

    2.4.3 环路带宽

    1.频率低于环路带宽的相位抖动会透过CDR转移到恢复时钟上。换句话说,频率低于环路带宽的抖动可以被CDR跟踪,不会引起误码。高频的抖动分量根据抖动幅度的大小,可能会引起误码。

    2.环路带宽越大,锁定时间越短,恢复时钟的抖动也越大。反之则锁定时间越长,恢复时钟的抖动也越小。作为CDR,我们希望环路带宽大一点,这样可以有更大的抖动容忍能力,但是对于loop timing的应用如SONET/SDH对恢复时钟的抖动有限制,又不能太大。

    3. 开关电源的开关频率一般小于环路带宽,可以被CDR跟踪。但是,一方面开关电源耦合到VCO(Digital to Multi-Phase Convertor)上的噪声不能被环路跟踪,低成本Ring VCO尤其对电源噪声敏感。另一方面开关电源的谐波可能超出环路带宽。

    一些协议提供了CDR增益模板,如SDH/SONET。兼容这些协议需要计算输入和输出的抖动预算。

    2.5  公用锁相环(PLL)

             SerDes需要一个工作在数据波特率上的内部时钟,或者1/2数据波特率的内部时钟,工作在DDR模式。片外提供给SerDes的参考时钟频率远远低于数据波特率,PLL用来倍频产生内部高频时钟。FPGA的SerDes PLL一般有8x,16x,10x,20x,40x模式,以支持常用的SerDes接口协议。比如PCIExpress工作在5Gbps, 在40x模式下需要提供125MHz的片外参考时钟,20x模式下需要提供250MHz的片外参考时钟。

      一个三阶PLL电路如图2.17,输入信号的相位和VCO反馈信号的相位由鉴相器比较,相位误差有charge pump转化为电压或电流信号,经过Loop Filter平滑后产生控制电压,修正VCO的相位,最终使相位误差趋于零。

     

    Figure 2.17 A 3-order Type II PLL

                PLL的工作过程分为入锁过程和跟踪过程。在入锁过程,环路的模型可以用一个非线性微分方程表示,可以评估捕获时间,捕获带宽等指标。入锁后,在小信号范围内,PLL的模型是一个常系数线性方程,可以在拉普拉斯变换域研究PLL的带宽,增益,稳定性等性能, 图2.18是小信号数学模型。

            PLL以传输函数极点(分母的根)个数命名环路的阶数。VCO对相位有积分作用(Kvco/s),因此不带滤波器的环路称为一阶环。带一阶滤波器的环路称为二阶环。一阶环和二阶环是无条件的稳定系统。然而高阶环路有更多的极点和零点可以独立的调整带款,增益,稳定性,捕获带,捕捉时间等性能。

            PLL的频域传输函数特性主要有环路滤波器F(s)|s=jw决定, 一个通用的PLL频域传输曲线如图2.19所示。有两个重要特征,环路带款和jitter peaking。过大的peaking会放大jitter, 大的阻尼系数(damping factor)可以限制peaking, 但是会增加环路的如锁时间, 影响滚降的速度和固有频率(natural frequency)。

    当环路锁定后,固定相位差:

            Kdc为环路的直流开环增益,Δω为VCO中心频率和受控频率的差。对于charge pump + passive filter结构的PLL相位误差为零。

    当环路锁定后,只有固定相位差,两个输入信号频率相等。

              fr/M = fo/N

      对于输入端的噪声,环路是一个低通滤波器,可以抑制高于环路截止频率的噪声或干扰。作为SerDes的PLL, 希望带宽的小一些,以抑制参考时钟上的干扰和噪声。

      对于VCO噪声,环路是一个高通滤波器的作用。只有低于环路截止频率的VCO噪声得到了抑制。过量的VCO高频噪声会恶化时钟的抖动。低速SerDes(<5Gbps)的VCO出于成本考虑采用Ring结构的VCO,噪声大且对电源敏感。高速SerDes的VCO采用噪声小较小的LC结构VCO

    三、 抖动和信号集成( Jitter, SI )

    抖动是指信号的跳边时刻偏离其理想(ideal)或者预定(expected)时刻的现象。噪声,非理想的信道,非理想的电路都是产生抖动的原因。

    3.1 时钟的抖动(clock jitter)

    Figure 3.1  Clock Jitter

       对于时钟信号,根据应用场景的不同,对抖动的定义也不一样。比如数字逻辑计算时序余量的时候,关心的是周期抖动。而时钟设计人员更喜欢相位抖动,因为可以利用频谱评估相位抖动,并可以用频谱来评估具体的干扰对总相位抖动的贡献。

    参考图3.1,介绍一下几种抖动的定义。

    相位抖动(phase jitter)

    Jphase(n)= tn – n*T。理想时钟的每个周期T都是相等的,没有抖动。真实时钟的跳边沿相对于理想时钟的偏离称作相位抖动。

    周期抖动(period jitter)

     Jperiod(n)= (tn- tn-1)– T。周期抖动是实际时钟的周期相对于理想周期的偏离(deviation)。显然Jperiod(n) = Jphase(n) - Jphase(n-1)。

    l  Cycle-to-Cycle jitter

    Jcycle(n) = (tn- tn-1) - (tn-1- tn-2)。前后相邻的两个周期的偏差是Cycle-Cycle抖动。显然Jcycle(n)= Jperiod(n) – Jperiod(n-1)。

    假设相位抖动的最大值为 +/-Jp, 而且抖动的频率fjitter = 0.5fclock = 0.5/T,也就是,

    tn-2时刻的相位抖动为最大值+Jp ,tn-1时刻的相位抖动为最小值-Jp

    tn时刻的相位抖动为最大值+Jp , tn+1时刻的相位抖动为最小值-Jp

    那么,周期抖动最大值        Jperiod=+/- 2* Jp

    那么,Cycle-Cycle抖动最大值  Jcycle  =+/- 4* Jp

    3.2. 数据的抖动(data jitter)

       在高速SerDes领域每个人都在说抖动,因为抖动直接和误码率(BER)相关。

             SerDes发送端的一个重要要求是抖动(jitter generation)—-针对特定的码型(pattern),速率和负载情况下,发送端所生成的抖动。

             信号经过信道(channel)到达接收端时,又会进一步放大抖动,不同的码型(pattern)包含的频率成分也不一样,信道对不同频率成分的传输延时也不一样(非线性相位), 产生和数据pattern相关的确定性抖动。阻抗不连续产生的反射,相邻信号的串扰和噪声都会引起数据抖动。

            SerDes接收端的一个重要指标是抖动容忍能力(Jitter Tolerance)—-针对特定的码型和误码率要求(BER<10-12),SerDes接收端能够容忍的抖动大小。对抖动评估时,会使用眼图(eye-diagram),浴缸曲线(bath curve),抖动分布柱状图(PDF),抖动频谱(jitter spectrum)等图形手段。

       有一点需要说明,在谈论高速SerDes的数据抖动时(Tj,Rj,Dj etc.),是不包括低频率抖动的。这是因为低频率的抖动被认为是一种wander,可以被CDR跟踪,不会引起误码。在用示波器(SDA)测量数据抖动的时候,可以设置示波器内嵌的CDR环路带宽,示波器测量的抖动数据已经滤掉了低频抖动。

       根据抖动产生的原因和概率密度函数,常常将抖动分为几类。对抖动进行分类的意义在于某些类型的抖动可以被校正,而其他类型的不能被校正。经典的,总抖动Tj(Total Jitter)被分类为确定性抖动Dj (deterministic jitter)和随机抖动Rj (random jitter)。抖动以UI或者ps为单位,可以是均方根值,或者峰峰值。

    3.2.1 Dj

         Dj被进一步细分:

         DCD(Duty cycle distortion)   占空比失真抖动。差分信号的正端负端的偏置电压不一致,或者上升沿和下降沿时间不一致会导致占空比失真。因为DCD和数据pattern相关,是可以被校正的抖动。

         DDJ(Data dependent jitter)   数据码型相关的抖动,也称 码间干扰ISI(intersymbol interference)。DDJ是由于不理想的信道导致。是可以被均衡器校正的抖动。

         Pj(Periodic jitter)   周期性抖动。Pj由电路上周期性干扰源导致。比如开关电源的开关频率,时钟信号的串扰等。虽然电源的开关频率一般在CDR的跟踪范围内,但是低次谐波成分可能会落在环路带宽外,或者jitter peaking区域, 更重要的是电源谐波对CDR内VCO的干扰是不能被抑制和跟踪的,所以对于基于Ring VCO的CDR一定要尽可能的使用LDO供电。Pj不能被均衡器校正.

         BUJ(Bounded uncorrelated jitter)   BUJ由非时钟的干扰源引起。如果干扰源aggressor和victim是异步的,抖动的概率分布为有界的高斯分布,此时也称作CBGJ(Correlated Bounded Gaussian Jitter)。BUJ/CBGJ不能被校正。

    3.2.2 Rj

            Rj有半导体本身的噪声引起,一个重要特征就是Rj的概率密度函数是高斯分布的,没有边界,且和数据pattern无关。只有在一定误码率约束下,才可以被认为是有界的。

    3.2.3 Tj

       数学意义上,抖动的概率分布函数可以近视为高斯分布和双底拉克分布的卷积。

       对高斯分布有贡献的抖动为:

    n  Rj为高斯分布

    n  大量Pj叠加的效果也为高斯分布

    n  部分BUJ也为高斯分布

       对双底拉克分布有贡献的抖动为:

    n  DCD被近视为双底拉克概率分布

       高斯分布和双底拉克分布的卷积:

      其中,W被认为是确定性抖动的峰峰值,δ是高斯分布的均方差。见图3.2, 可以看到,随着确定性抖动W的增加,概率密度分布曲线的顶部出现了双峰。一般来讲顶部曲线反映了确定性抖动的大小程度。

    Figure 3.2 PDF of Tj with different Dj and Rj

       把一个UI内的两个跳变沿处(0 UI处和1UI处)的概率分布函数放在一张图中,就是抖动的浴缸曲线(bathtub curve)。因为对数的宽动态范围,Y坐标以对数显示。图3.3为确定性抖动W=0.05UI, 高斯抖动方差0.05UI的浴缸曲线。

    Figure 3.3  Bathtub Curve of Tj with 0.05 Dj peak and 0.05 Rj RMS

        浴缸曲线还会标出对应的误码率BER坐标,比如图中BER=10^-12的峰峰值抖动为Tj(p-p)=0.373*2 = 0.746 UI。曲线下面的面积占总面积的比率就是误码率。比如图中,

     浴缸曲线的顶部主要为确定性抖动Dj的贡献,越靠近底部,高斯抖动的贡献越大,并以高斯曲线的斜率衰减,也因此常利用高斯分布的特性进行估算。下表为高斯分布 

    和均方差关系。      

        在规定的BER内,利用该表可以快速估算均方差值和峰峰值之间的关系。比如高斯抖动的均方根0.05UI,误码率要求为10^-12 BER,查表可知Q=7,那么高斯抖动的峰峰值要求是0.05UI*7*2 = 0.7UI。

        如前所述,W=0.05UI,Rj=0.05UI计算出的总抖动Tj=0.746UI;

               利用高斯特性估算的高斯抖动为0.7UI。

               如果按Tj = Rj(0.7UI)+Dj(0.05UI)计算得到0.75U,基本是一致的,差异是因为画图程序有量化误差。

    四、 信号集成(SI)及仿真

    4.1信道channel

            SerDes信道关注的频率范围是0Hz到奈奎斯特频率,也就是2倍的信号基频。信号的基频是信号线速率的一半,也就是说信号的奈奎斯特频率就是线速率。信道对信号的损伤包括插入损失(insertion loss),反射 (reflection),串扰(crosstalk)等。这些损伤可以用S-parameter信道模型来表达。S-parameter可以有矢量网络分析仪测量(Vector Network Analyzer)得到。信道不是一个纯阻性网络,还包括容性和感性。这样对不同频率里成分的时延也不一样,从而产生和data pattern相关的抖动。

      信道上的每一个不连续阻抗点都会产生反射,根据反位置的不同,反射信号会以不同的相位叠加在原始信号上,增加或者减小信号的幅度。

          SerDes信号为差分形式,对共模干扰有较强的抑制。如果在+/-端上的干扰有差异,就会引入串扰。通常外部PCB可以保证SerDes数据和干扰源保持足够的距离,但是芯片内部由于考虑到经济性,很难保证SerDes信号和干扰源足够的隔离距离,尤其是一个通道自己的发送信号干扰自己的接收信号。

    4.2 芯片封装Package

         封装package也是信道的一部分。芯片外部的信道可以通过VNA测量的到,而封装的S-parameter通常有芯片制造商提供,仿真时可以把两者级联起来。封装package由于距离较短,insertion loss通常不是主要问题,主要考虑的是阻抗匹配问题。

    4.3 SI仿真

            信号集成性(SI)仿真可以通过把SerDes发送端SPICE模型,封装和信道的S-parameter模型,接收端SPICE模型级联起来搭建仿真平台,利用仿真工具对不同的激励在不同的测试条件作电路仿真。通过测量SerDes接收端的眼图来评估是否满足设计需求。也可以通过实测接收端眼图,检验是否满足接收端的眼图模板,或者协议规定的眼图模板。图4.1为一个实测的3.125Gbps信号的眼图及模板,同时也包含了浴缸曲线和统计图。

        Figure 4.1 Rx-end Eye-diagram of A 3.125Gbps SerDes

       对于高速SerDes(>5Gbps),这种传统的电路仿真方法已经不能满足设计的需求。首先,过量的码间干扰ISI导致接收端眼图完全闭合,但是通过芯片内的DFE均衡后,眼图可能是很好的。其次,电路仿真(SPICE)的速度非常慢,即使是有办法把DFE均衡加入仿真,由于DFE仿真需要足够长时间的bits来训练,此时,电路仿真的仿真时间是不可接受的。

       对于高速SerDes的仿真需要借助统计分析 (statistical analysis) 的方法。统计分析的方法把发送端-信道-接收端的连接近视为线性系统,计算系统脉冲响应h(t),加入噪声源来模拟抖动,然后用激励对脉冲响应进行卷积,得到接收端的信号,这种方法可以把厂家私有的FFE,DFE自适应算法加入仿真。

    统计分析 (statistical analysis)方法不能仿真电路的非线性和时变特性,所以高速SerDes往往要两者结合起来仿真SI。更多关于统计分析 (statistical analysis)方法可以参考。

    五、 结尾

    有人讲过,现在的汽车是如此复杂,以至于虽然每一个零件都有人懂,但是合起来作为整车却没人能够全懂。近些年来,FPGA变的越来越复杂,对工程师的要求也越来越高。要成为一个合格的FPGA应用工程师,不仅要擅长数字电路的设计,还要懂得高速SerDes, 信号集成SI, DSP算法, 多核CPU, 嵌入式操作系统等。每一项技术背后都是一个专业领域,一个人不会在每一个领域内都是专家,只要比别人多学习一点,关键时候就会突出你的价值。本篇主要介绍了SerDes的基本结构和用好SerDes需要掌握一些的知识,希望对你的工作有所帮助
     

    转载:SerDes知识详解_Next_FSE的博客-CSDN博客_dfe是什么单位

    展开全文
  • 摘要: 基于现有的Linux普通方式传输的串口驱动,提出了通过利用DMA的高速串口驱动,根据传输时的实时数据量,利用DMA方式和普通方式相结合的方式进行数据传输,大大提高了传输速率,同时降低了系统的开销,减少了CPU...

    摘要: 基于现有的Linux普通方式传输的串口驱动,提出了通过利用DMA的高速串口驱动,根据传输时的实时数据量,利用DMA方式和普通方式相结合的方式进行数据传输,大大提高了传输速率,同时降低了系统的开销,减少了CPU的使用。在双核移动终端中进行验证,两芯片通过串口进行芯片间通信,实验结果证明了设计的高速串口驱动具有较好的可靠性和可行性。

    关键词: DMA方式;Linux高速串口驱动;芯片间通信

    中图分类号: TP36.2文献标识码: A

    Linux High Speed Serial Driver Design

    Qiao Mingchuang, Peng Daqin, Huang Yifeng

    Chongqing Key Lab of Mobile Communications,Chongqing University of Posts and Telecommunications,Chongqing 400065,China

    Abstract: This paper proposed high speed serial port driver using DMA is based on Linux serial port driver working in normal mode. According to the volume of data in realtime transmission,we decided to combine DMA mode with normal mode to transfer, greatly improving the transmission rate. In the same time it also reduces the overhead of the system and reduces the CPU utilization. In dualcore mobile terminal, two chips communicate with serial port. The results of implementation show that this method has high efficiency and good reliability in serial port driver design.

    Key words: DMA mode; Linux high speed serial port driver; inter-processor communication

    引言

    本文讨论的双核终端硬件以AP(Application Processor,应用处理器)+CP(Cell phone Processor,基带处理器)的架构构建,CP运行TD/GSM双模协议栈,AP运行Android软件。两个芯片间通过串口进行IPC(InterProcessor Communication,芯片间通信)通信,像短信、电话等AT指令以及PS业务等均通过串口实现AP和CP的通信。当3G的网络环境对数据传输速率要求较高时,普通串口驱动已经满足不了这样的要求,因此需要用基于DMA方式的串口驱动,来支持高波特率的数据传输。AP侧为Android平台,CP的协议栈软件基于Nucleus平台[1]。AP与CP串口通信结构图如图1所示。

    65001658_1.gif

    图1 AP与CP通信的UART通道

    2 高速串口驱动设计原则

    2.1 DMA的工作原理

    目前应用比较广泛的串口驱动都是采用普通传输方式,在实现发送功能时,是CPU将发送缓冲区(上层应用将要发送的数据写到circ_buf中)中的数据逐个送入串口的发送FIFO,从而将数据发送出去。在接收时,将接收FIFO中的数据送入TTY层,供上层的应用读取。在串口的传输速度较低时,这种方式可以很稳定地工作;而当波特率设置得很高时,将会导致CPU来不及取走数据,导致串口的FIFO溢出,从而造成丢数,针对上述问题,提出了基于DMA(Direct Memory Access)方式的串口传输方式。

    DMA是一种无需CPU参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发地执行其他任务。当DMA传输结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后处理。内存中用于与外设交互数据的一块区域被称作DMA缓冲区,DMA缓冲区必须是物理上连续的[23]。

    将DMA用于串口驱动时,在接收时需要申请一片和外设接收FIFO进行直接交互的缓冲区,通过void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)来实现,DMA负责将接收FIFO中的数据送到申请的缓冲区中,然后CPU负责将缓冲区中的数据推至TTY层。发送时需要将发送缓冲区映射出其总线地址才能和外设发送FIFO进行交互,通过dma_addr_t dma_map_single(struct device *dev ,void *buffer,size_t size,enum dma_data_dircetion direction)来实现。

    1.2 申请的DMA缓冲区交替接收机制

    在用DMA方式接收时,并不直接将接收FIFO中的数据送到TTY层,而是申请了一片2 KB大小的DMA缓冲区,并将其分成两个1 KB的缓冲区,用来交替从接收FIFO中接收数据,将2 KB大小的缓冲区分成为大小为1 KB的rx_buf[0]和rx_buf[1],在串口的设备节点被打开时,把这两个缓冲区排队到DMA buf队列中。这里利用申请的两个缓冲区交替从FIFO中接收数据,以提高传输效率。流程大致如下:

    ① 启动DMA,等待接收FIFO中的数据达到触发值,产生中断来进行DMA传输,将接收FIFO中的数据送到rx_buf中。

    ② 当其中一个rx_buf接收数据满时,将其数据送到上层之后排队到DMA buf队列中。

    ③ 而此时另外一块之前已经排队的rx_buf已经开始接收数据,等待接收满时,执行步骤②,两块rx_buf如此交替从接收FIFO中接收数据,当接收满时排队到DMA buf队列中去,等待下次继续从接收FIFO中接收数据。

    2 高速串口驱动设计流程

    2.1 相应的数据结构

    下面的结构体用来描述DMA来负责接收时,申请的一片DMA缓冲区的信息,此缓冲区用来暂存从接收FIFO中接收来的数据。

    struct uart_dma_buffer{

    unsigned char *area;//缓冲区的虚拟地址的首地址

    unsigned char *pos;//缓冲区虚拟地址当前的位移

    dma_addr_t dma_addr_rx; //缓冲区的物理地址size_t

    bytes;//申请缓冲区的大小

    unsigned int state;//缓冲区当前的状态

    }

    下面的结构体用来在uart_port基础上增加一些DMA方式需要的成员变量。

    struct uart_dma_port{

    struct uart_port uport;//封装uart_port结构体

    int dma_channel_tx;//DMA发送通道

    int dma_channel_rx;//DMA接收通道

    dma_addr_t dma_addr_tx; //发送缓冲区映射出来的物理地址

    int tx_count;//DMA方式发送的count

    int tx_countp;//DMA方式发送的countp

    struct uart_dma_buffer rx_buffer[2];//申请的接收缓冲区

    struct uart_dma_buffer *pending; //指向需要向TTY’层推送数据的缓冲区

    int rx_count;

    int rx_countp;

    int curr;

    dma_addr_t dma_dest;

    struct tasklet_struct rx_tlet;

    struct tasklet_struct tx_tlet;

    }

    2.2 发送流程设计

    为了提高发送效率,在发送前首先会判断发送缓冲区中的数据个数,只有数据量较大时,才会用DMA方式进行发送,当数据较少时直接用普通方式进行发送,这样可以提高效率。DMA方式发送流程设计如图2所示,图中n的值可自由配置,本设计中n=32。

    65001658_2.gif

    图2 发送流程图

    发送流程大致如下:

    ① 首先将发送缓冲区映射出其总线地址以供DMA方式使用,配置DMA通道的各个寄存器以及传输方式,并设置DMA传输完成的回调函数。

    ② 当上层调用write系统调用时,将向circ_buf缓冲区中写入数据,首先调用start tx发送数据,并根据缓冲区数据的多少确定发送的方式。

    ③ 缓冲区中的数据个数小于预定值时使用普通方式进行传输,当大于这个值时使用DMA方式进行发送(DMA控制器会根据设置的源地址和目的地址,将缓冲区中的数据搬送到发送FIFO中,DMA传输完毕后,调用之前注册的DMA完成的回调函数,此时更新缓冲区的尾指针以及其他数据)。

    ④ 当发送FIFO中的数据个数小于设定的个数时,产生中断然后重复步骤③。

    2.3 接收流程设计

    考虑到接收时,接收FIFO中的数据个数达不到设定的值时不会触发中断,这样容易造成在FIFO中遗留数据,所以使能超时中断。当接收FIFO在设定时间内没有收到数据时会产生超时中断,此时用普通方式将接收FIFO中的数据送到TTY层。但是这样操作前要确保申请的DMA缓冲区中的数据都被送到了TTY层,否则会造成数据乱序。接收流程图如图3所示。

    65001658_3.gif

    图3 接收流程图

    接收流程大致如下:

    ① 首先申请2 KB的DMA缓冲区,分成两个接收rx_buf,配置DMA的各个寄存器,将2个rx_buf均排队到DMA buffer队列,启动DMA。

    ② 当接收FIFO中的数据达到设定值时,串口会送给DMA一个中断。由于此时DMA已经是启动状态,所以开始DMA传输,传送完一个countp(DMA控制器周期传输长度寄存器的值)时,每来一个中断,传输一个countp,直到count(DMA控制器传输长度寄存器的值)减小到0时执行DMA完成的回调函数。

    ③ 在DMA的回调函数中将会更新DMA buf队列中的缓冲区,将下一个排队中的缓冲区作为接收数据的缓冲区。同时count为0时,说明当前接收buf中的数据已满,开始将rx_buf中的数据推向上层。推向上层之后,排队到DMA buffer队列,为下次接收数据作准备。

    ④ 在count寄存器中的值减小为0时,调用DMA的回调函数,使正在排队的另一块申请的rx_buf开始从接收FIFO中接收数据,直到接收到count减小到0时,再执行步骤③。

    ⑤ 当一定时间内接收FIFO中未接收到数据,则此时产生超时中断,这时需要先将rx_buf中的数据先推到TTY层,然后再用普通方式将接收FIFO中的数据送入TTY层。

    3 实验结果

    AP芯片运行Android4.0操作系统(其中内核版本为Linux 3.0),在串口波特率设置为3 Mbps时,通过回环测试,查看串口的实际传输速率,测试结果如表1所列。

    表1 两种传输方式数据传输速度

    65001658_4.gif

    通过测试结果可以看出,当波特率设置为3 Mbps时,普通传输方式的实际速度只能达到1.8 Mbps,满足不了数据的高速率传输要求,并且由于对系统的资源消耗较大,对CPU的占用率为12%。而用DMA方式相对较普通方式传输可以提高传输速率,并且系统开销很低,CPU占用率为 8%。可以看出使用DMA方式可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而降低系统的开销。

    通过在3G环境中的实验,使用DMA方式的高速串口驱动可以正常使用PS业务,可以享有高速率的数据下载业务。而普通方式在3G上网环境下的高速传输数据,

    由于FIFO溢出,导致重传,从而效率较低,数据下载速度较低。

    结语

    通过将串口驱动普通传输方式改写为基于DMA的工作方式,可以提高传输速率,同时降低系统的开销,满足在3G网络环境下高速上网的需求。本文提出的基于DMA方式的串口驱动对其他需要利用串口高速传输数据的应用也具有借鉴意义。

    参考文献

    [1] 王海霞. TD/GSM双模手机软件架构的研究与实现 [D]. 南京:南京邮电大学, 2010.

    [2] 谭钦红,张际生,李文杰,等. Linux系统中PCI设备DMA数据传输实现[J]. 重庆邮电大学学报:自然科学版, 2012(2).

    [3] 谭平, 王小平. ARM Linux下DMA数据同步传输机制及实现[J]. 无线互联科技,2013(2).

    [4] 赵同样. 嵌入式Linux系统驱动研究与开发[D]. 哈尔滨:中国地震局工程力学研究所,2012.

    [5] 李宇丽. 基于ARM的嵌入式Linux系统的研究及应用[D]. 西安: 西安电子科技大学, 2007.

    乔明闯(硕士)、彭大芹(正高级工程师、硕士生导师),研究方向为移动通信;黄一峰 (硕士),研究方向为嵌入式Linux终端设备开发。

    (责任编辑:高珍 收稿日期:2013-05-22)

    展开全文
  • 该芯片将PC总线上的并行数据(单字节或多字节)分割成以比特为单位的串行数据流,从而实现在串口线缆中的数据传输。 现在几乎所有的PC机都带有16550UART用以实现并行数据和串行数据的格式转换,它的最大数据吞吐量为...

    DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。

    正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。

    在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通信,例如DSP与DSP间数据通信,DSP与PC机间数据通信等。如何能够快速、准确的完成通信是每个硬件工程师所关心的问题。由于DSP的工作频率较高,如TMS320C6201时钟频率为200MHz,ADSP21060时钟频率为40MHz,故其数据读写周期很短,然而PC机串口读写速度较低,最大数据吞吐量约为115kbps,尽管DSP在与这些慢速外设进行数据交换时可以加入额外的等待周期,但是在实时性要求苛刻,算法复杂的场合,将DSP从这些冗长的等待周期中解放出来,将其时间重点放在处理关键的实时任务中去,有着重要的实际意义。故DSP与PC机之间串口通信的速度匹配是保证快速、准确通信的关键。

    PC机一般带有一个或两个内置串口,每个端口的机箱背后有一个9针或25针的公插口。串口是以bit来传输数据的,传输速率取决于UART芯片。该芯片将PC总线上的并行数据(单字节或多字节)分割成以比特为单位的串行数据流,从而实现在串口线缆中的数据传输。

    现在几乎所有的PC机都带有16550UART用以实现并行数据和串行数据的格式转换,它的最大数据吞吐量为115kbps,这已经能够满足大多数串行设备的需要了。

    PC16550是国家半导体公司生产的通用异步接收/发送器(UART)芯片,它不仅能把从CPU接收的数据进行并-串转换,还能够把从外围设备或MODEM接收到的数据进行串-并转换。

    该UART包括一个可编程的波特率产生器,可将输入的时钟信号进行分频,并可产生16倍的时钟来驱动内部的传输逻辑单元。同时它内部集成了中断逻辑,另外通过对其内部的寄存器的设置可以完成相应功能,这些寄存器主要有:线路控制寄存器、FIFO控制寄存器、中断使能寄存器、MODEM控制寄存器、线路状态寄存器等。因而它可以与大多数的CPU实现无缝接口,使用很方便。PC16550的功能主要包括:

    * 工作在FIFO模式时,接收器/发送器自带16字节的FIFO存储器,减少了中断CPU的次数;

    * 串行数据位数可编程,起始位、停止位的长度,奇偶校验位的有无可以分别控制;

    * 可分别产生数据的接收/发送、线路状态等中断,各中断的优先级可设定;

    * 可编程波特率产生器;

    * 芯片全部工作状态报告功能;

    * 内部自诊断功能;

    其典型应用电路如图1所示。

    DSP与PC机间串口通信的实现在许多DSP的应用中需要与PC机进行数据交换,使用户通过PC机上友好的程序界面来控制DSP系统的工作、显示DSP的运行结果等。在数据传输过程中,传输的速度的快慢、误码率的大小、效率的高低等都影响到整个系统的性能指标,因此如何高速高效的进行数据传输是不容小视的。前面已经叙述了由于DSP工作频率较高,它的读写时钟的脉宽较窄,使数据在总线上的锁存时间较短。我们开始是使用8251芯片来完成与ADI公司的ADSP21060串行通信,但在实际应用中测得数据传输误码率较高,系统工作可靠性大受影响。主要是因为8251的响应时间较长,不能保证在DSP的读写周期内准确的将数据进行锁存。后来改用PC16550芯片,就能很好的与DSP匹配,问题得到了彻底解决。另外该芯片内置FIFO(First-In, First-Out,先进先出),能存储一定量的数据后再给DSP中断,从而节省了DSP中断服务程序的时间,提高了DSP的工作效率。具体电路如图2。

    DSP通过外存选择信号/MS00来片选PC16550,通过信号对其进行读写操作,PC16550占用DSP的外部存储器空间。其它一些信号,如cs0,cs1,rd,wr等可根据典型应用电路所示的连接方式进行连接。与MODEM通信的引脚在本系统中没有使用,故相应引脚悬空即可。在DSP与PC机串口通信时先要对16550进行设置,见下面DSP的汇编程序。

    .segment/dm ms0data; /*串口UART*/

    .var okdata[512]; /*okdata起始地址为0主00000*/

    .endseg;

    ………

    main:

    ………

    /*将line control register的DLABwulf1*/

    r0=0x80;b6=okdata;m6=3;l6=0;

    dm(m6,i6)=r0;

    /*设置波特率为9600*/

    r0=0xc;b6=okdata;m6=1;l6=0;

    dm(i6,m6)=r0;

    /*设置line control register,数据8位,停止位1,其他无*/

    r0=0x3;b6=okdata;m6=3;l6=0;

    dm(m6,i6)=r0;

    /*设置FIFO control register,接收4Bytes数据后产生中断,将接收/发送FIFO清零*/

    r0=0x47;b6=okdata;m6=2;l6=0;

    dm(m6,i6)=r0;

    /*中断允许*/

    r0=0xl;b6=okdata;m6=1;l6=0;

    dm(m6,i6)=r0;

    /*向UART写一个数据0X光5*/

    r0=0x55;b6=okdata;m6=0;l6=0;

    dm(i6,m6)=r0;

    ………

    本电路硬件和汇编程序都调试通过,并成功地应用于某毫米波侦察雷达信号处理机中。总之,PC16550能够方便、灵活并且高效的完成DSP与PC机间串口的数据通信,而且可使用户实现与标准MODEM之间接口,实行数据远传。

    展开全文
  • 所以就制作一个不附带多余功能,专注高速连续发送指令的串口发送调试器。 直接附上程序图(图方便的话想要源程序工程文件可以点击我的主页资源中找到下载) 到这一步软件就完全做好了,当然我工作时候用的...

    工作原因需要检测硬件的RS485,TTL232协议功能快速收发情况。要求是串口调试软件需要每秒1000帧的速度发送数据,但找了很多常用的串口软件,要么是没有达到这个速度,要么是发送数据时间间隔忽大忽小。所以就制作一个不附带多余功能,专注高速连续发送指令的串口发送调试器。

    直接附上程序图(图方便的话想要源程序工程文件可以点击我的主页资源中找到下载)

     

     

    到这一步软件就完全做好了,当然我工作时候用的测试软件在此基础上又做了一些改进,接下来也一同分享一下。

    (后续附带测试演示,如果身边没有硬件可供测试的话可以下载一个虚拟串口软件和别的串口调试软件模拟双机通讯,虚拟串口软件:Configure Virtual Serial Port Driver)

     如图,功能拓展版本相比原版额外增加了一个连续发送区,并且在每个发送区右边添加了一个指示灯,只要有发送,指示灯就会点亮,依据此来判断发送数据情况。

    两个发送区的功能是,每发送1000帧就切换到另一个连续发送区发送数据。目前两个连续发送区发送的数据代表速度20和速度0。如果设置每1ms发送1帧的话,可以看见电机会运行1秒停止1秒循环。

    如果硬件设计中不支持1ms间隔发送数据,那么硬件可能会死机或者发送数据丢失,导致电机运转不正常的结果。

     

                                                             

                                           

      

     

    展开全文
  • RocketIO高速串行接口

    2021-04-17 11:10:31
    基于RocketIO GTP/GTX协议数据流接收处理:RocketIO GTP/GTX RXN/RXP -->... FIFO接口输出 数据流发送处理:FIFO接口输入 --> 发送数据处理(增加SOF和EOF,协议桢产生,插入IDLE符号或时钟校正序列)-->...
  • 基于XILINX FPGA芯片高速串行接口GTX学习笔记
  • 高速Serdes串行接口

    2021-11-08 09:00:04
    外界环境中比如EMI的各种影响会引起时钟发生抖动,在高速采样恢复的过程中,这就没办法使用该时钟信号恢复数据,这里就用到了高速Serdes串行接口的恢复办法,将数据和时钟都通过高速线上传输,然后接受端通过PLL从...
  • 同理,解串行化模块(Deserializer)是串行化模块的逆过程,就是将串行差分线接收的串行数据经过串并转换(SIPO)模块转换为并行数据,之后经过解码,解扰,等操作后的并行数据,交给用户接口,用户进行对该并行...
  • 与PCRS-232的通讯,分析三种具体的接口电路和软件设计方法,实现高速DSP与低速设备的通讯:①通过TMS320VC33的通用I/O口实现通信;②通过TMS320VC33中可设置为通用I/O的串行引脚实现通信;③直接利用TMS320VC33的...
  • 数据包和吉比特串行接口有什么联系呢? 大多数在千兆串行链路上传输的数据都嵌入在某种数据包中。SERDES需要一种方法将传入的数据流对齐成字,这是非常自然的。如果系统需要时钟校正,就必须发送这种特殊的位序列或...
  • 中间区域:由高速数字信号接口标准定义的眼图的大小和形状。 底部区域:最小期望值。低于此值的电压将失败! 一般而言,眼睛睁开的越大,越不易压模板,传输系统中的接收器将逻辑“1”误认为逻辑“0”的可能性就越...
  • 一种STM32单片机与Linux系统高速串口抗干扰通讯方法,其特征在于:它包括一个STM32单片机数据读写步骤和一个Linux系统数据读写步骤,所述的STM32单片机数据读写步骤包括以下步骤:\n\t\tS101:STM32单片机进入工作...
  • 目录一. 问题描述二....因为下传数据的链路是上位机串口发送——下位机串口接收——下位机修改参数——下位机上传新的参数——上位机接收——上位机显示新的参数,迷茫的我一直以为是上位机写的出了问题
  • 原标题:16路4-20ma0-5v转rs485232高速串口数字传感器 0-10v转485智能数据采集16路模拟信号4-20ma转rs485232串口数字传感器 校准模块精度数据采集模块的发展趋势作为利用现代化智能手段采集所需数据实用电子技术,...
  • 《嵌入式高速串行并行技术——基于FPGA实现与应用(张锋著)》 看了一下前言、目录、自序、以及他本书创作过程中的随笔 (小编就决定把这本书分享出来,也不知道这样做好不好。所以,在这里有个小请求,大家尽量...
  • 性能指标标准PC/104总线接口2~4路独立RS232/RS422/RS485,全双工或半双工通讯传输协议、波特率、数据位长度、停止位长度、奇偶校验方式可设每路RS232/RS422/RS485软件可设RS232波特率最大可达230.4KbpsRS422/RS485...
  • 串口软件Vofa+,超好用。可用于直观化显示数据动态
  • 物理层还通过一个串行接口(Serial Interface)与串行收发器(Serial Transceivers)相连。 2.4 寄存器空间 RapidIO的寄存器空间如下表所示 能力寄存器空间(Capability Register Space) 能力寄存器空间的寄存器是...
  • 摘要:本发明公开了一种STM32单片机与Linux系统高速串口抗干扰通讯方法,通过STM32单片机对现场数据进行采集,并根据Linux系统下发指令对采集到的数据进行读写操作,并将写好的数据放入上发Linux系统任务队列,每隔1s就...
  • 亚册SDLC-PCIE多协议串口通信卡,提供2、4路高速同异步串口,支持HDLC协议,可通过软件配置为RS-232、RS-422、RS485接口。支持PCI-Express x1总线标准,驱动完善,支持全系列主流操作系统。?特点?2、4路同异步串口,...
  • 至于预加重技术,毫无疑问,是高速串行技术的必然选择,这是因为在高速链路中处于过渡阶段的bit会受到ISI的影响等。 可能对于数字工程师来说,本文过于硬件化,过于物理化,应该是一般硬件工程师应该关注的内容,但...
  • 串口通信波特率

    千次阅读 2021-05-25 08:42:42
    波特率的定义 波特率表示每秒钟传送的码元(符号)的个数,单位是波特(Baud,symbol/s)。 与比特率的关系 通过不同的调制方式,可以...串口模式下,若波特率是9600,1秒种只能传送9600/10=960Byte数据,而不是9600/8=12.
  • 1,高速串口不需要传时钟来同步数据流,没有时钟周期性的沿变,频谱不会集中,所以噪声干扰少很多。以PCIE和SATA为例,时钟信息通过8b/10b编码已经集成在数据流里面,数据本身经过加扰,绝对不可能有多于5个0或者5个...
  • 有时,需要移动的数据量超出一个串行链路所能容纳的范围。在这些情况下,并行使用多个链路来传输数据。完成此操作后,输入流必须对齐。此过程通常称为通道绑定
  • 如表所示,该芯片可以实现双通道14位高速高精度数据采集,最大采样速率可达250MSPS。它结合了高动态性能和低功耗在一个紧凑的64-QFN封装中,这使得它非常适合多载波、宽带通信应用。 表 ADS62P49主要参数 主要...
  • 下图为串口实测波形,设置为8N1格式,即8bit数据位,1bit停止位,无奇偶校验。 绿色代表起始位,橙色代表停止位,绿色和橙色中间的是8个数据位,也就是一个字节。所以8N1格式传输一个字节需要发送10bit。 要根据波形...
  • 串口设备节点/dev/tty* 的区别

    千次阅读 2021-09-07 10:04:50
    主要是:/dev/tty、/dev/ttyn、/dev/ttySn、/dev/ttyUSB*区别。 1、/dev/tty 当前控制终端Terminal 2、/dev/ttyn 和 /dev/...3、/dev/ttySn(一般为/dev/ttyS0) 串行端口终端,接串口线使用的端口设备 4、/dev...
  • 在linux与windows间进行简单的串行数据的发送接收操作.linux下的程序源码如下,windows用使用串口调试程序收发数据.结果linux发往windows的数据能正常接收,但windows发往linux的数据linux方却无法接收,最奇怪的事是:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,013
精华内容 18,405
关键字:

高速串口