半导体运动台基于dsp+fpga+ad+endac的高速数据采集FPGA设计(二)
4 系统 FPGA 程序的设计
4.1 设计方法及逻辑设计概述
4.1.1 开发环境与设计流程
Quartus II 是 Altera 公司综合开发工具,它集成了 FPGA/CPLD 开发过程中所设计的所有工具和第三方软件接口,支持多时钟分析,LogicLock 基于块的设计,片上可编程系统 SOPC, 内嵌在线逻辑分析仪 Signal TapII,功率估计器等各种高级工具。Quartus
II 具有丰富的输入方式,其中包括原理图、VHDL 、Verilog HDL 等多种形式进行逻辑程序设计设计,非常方便设计者进行 FPGA 的程序开发。逻辑锁定功能将不同的逻辑划分不同的 FPGA 区域,可以单独进行设计、实现和优化,各模块之间互不影响。如果在设计整合中出现错误,单独修改即可,不会影响到其它模块。Signal TapII 在线逻辑分析仪可以捕获和显示 FPGA 内部所有信号的实时行为。Signal Probe 可以在不影响设计中现有的布局布线情况下,将内部电路中某一特定的信号方便的引出布线的输出引脚,不需要对整个设计再进行一次全编译,节省时间,提高效率[26]。
正是因为 Quartus II 其强大的设计能力,集仿真、设计、调试、综合、测试等于一体,同时提供丰富可靠的调试手段,成为越来越多数字设计者的理想选择。
4.1.2 系统整体 FPGA 程序结构
本课题中,采用 Top_Down 设计方法,按照数据流的走向,将整个 FPGA 软件结构划分为光纤通信内核、数/模转换 DA 控制器、模/数转换 AD 控制器、EnDat 协议内核、增量式位置获取模块等各个二级子模块。其中光纤通信内核左侧表示串并转换 TLK1221
的时序控制接口,右侧则表示与系统个子模块接口逻辑。从图 4.2 可以看出,光纤通信内核是整个 FPGA 软件结构核心,它完成数据流串行到并行的数据恢复及数据流并行到串行的数据传输,是系统最核心的部分。各二级子模块在后续章节分别介绍。

4.2 模数/数模转换模块的实现
模数/数模转换模块主要实现 AD/DA 的时序控制、AD 采样触发、DA 输出控制、
DA 控制器与光纤接口。光纤及各模块接口将由应用层对应的控制命令从光纤接收缓存区中取出,然后送达 DA 控制器,来控制 AD/DA 工作:将设定值输出给 DA 物理芯片以实现模拟电压信号输出;触发 AD 采样,将模拟电压信对应的数字量存入结果寄存器。
4.2.1 AD 控制器的实现
AD 控制器由三部分构成:AD 控制器接口、各寄存器和时序控制模块,其中时序实现模块直接控制物理芯片引脚。本课题采用的 ADS8515 控制引脚为:转换控制信号
RC、片选信号 CSn 、选通信号 BYTE 和标识信号 BUSY。图 4.3 为 AD 物理芯片转换时序。

光纤及各模块接口发送出发信号以启动时序控制模块产生采样时序,然后等待转换完成标志位的到来,转换结束将数据总线上的转换结果锁存到结果寄存器;通过检测状态寄存器,转换状态也可以由应用层查询。图 4.4 为 AD 控制器结构框图。

4.2.2 DA 控制器的实现
DA 控制器由三部分构成:DA 控制器接口、各寄存器和时序控制模块,其中 DA
时序控制模块直接控制 DA 物理芯片引脚。本课题采用的 DAC8822 控制引脚为:写使能 WR、地址线 A[1:0]、控制信号 LDAC 、复位 RSn。图 4.5 为 DA 物理转换时序。
DA 控制器接口模块将传来的命令解析为相关寄存器读写时序,控制寄存器将相关寄存器的操作细分为详细的控制指令:数据输出和输出触发。DA 时序控制模块将数据输出到数据总线上,并输出如图 4.6 所示的控制引脚时序,以实现模拟输出。图 4.5 为
DA 控制器结构框图。

XX 所示为 DA 物理芯片的转换时序要求,转换时序由 DA 控制器中的时序控制模块来完成。

首先,将写使能信号 WRn 拉低一个脉冲,地址线跟数据总线要保证在这之前已经有效,此时,数据总线上的数据就被锁存在了 DAC8822 的输入寄存器中,然后再将控制信号 LDAC 拉一个高脉冲,此时输入寄存器中的数据就被转移到了 DAC 转换寄存器,经过所谓的一段转换时间,物理引脚上就输出了对应的稳定电压信号。
4.3 增量式位置获取模块的实现
增量式光栅尺采用相差 90 度电子角的系列方波脉冲信号 A 和 B 进行传输。参考点信号包括一个或多个参考脉冲 Z。此外在硬件传输时形成各自的反向信号,进行差分无噪声传输,符合 EIA 的 RS422 标准。为了能够对相差 90 度电子角的方波脉冲信号进行技术并判断超前或滞后,增量式位置获取模块必须能够检测到方波的每个沿。图 4.7 所示即为增量式光栅尺的方波脉冲信号[27]。

如图 4.8 所示,增量式位置获取模块包括了数字滤波器、四倍频模块、可逆计数器、锁存器等模块。增量式光栅尺每移动一个栅距,一个周期的相差 90 度电子角的方波 A
和 B 就会形成,通过对 A 和 B 信号的每一个上升沿和下降沿进行边沿检测,采用这种方法,不需要专用的细分模块,在 FPGA 内部即可实现四倍频。

能够能够在增量式光栅尺最大运动速度时依然可以检测到方波的每个沿,故系统采用了较高的时钟进行检测。过短的时钟周期,会将传输中的微小毛刺识别,易造成四倍频及可逆计数器的误动作,因此,设计了专门的数字滤波器,用以将传输过程中的毛刺予以剔除。
4.4 外部存储器接口 EMIF 通信接口实现
DSP 主系统与光纤通信内核之间的通信通过外部存储器接口 EMIF 来实现。EMIF
支持多种类型的异步接口,包括 SRAM,EPROM,FLASH,FPGA 和 ASIC 等。本课题中,光纤通信内核由 FPGA 来实现,因为在 FPGA 和 DSP 主系统之间没有时钟存在,故为异步类型。异步访问的速度参数通过 CLKOUT 的时钟周期个数来配置。EMIF 最高配置速度为 100 MHz。可编程参数包括建立、选通、保持三个参数。在读和写访问中,这三个参数可以独立配置。图 4.9 为 EMIF 异步写时序,其中建立、选通、保持三个参数分别设置为 2,3,2。写访问过程分为建立、选通、保持共三个阶段。建立阶段首先片选信号
CE 拉低,地址总线同步有效,数据总线最晚在一个时钟周期之后开始有效;选通阶段写使能信号 AWEn 拉低变为有效;保持阶段一开始写使能信号 AWEn 拉高失效,到保持阶段结束,地址总线和数据总线变为高阻态,片选信号拉高失效,一个完整的写周期结束[17]。

光纤通信内核中发送和接收缓存区是通过 Quartus II 提供的宏模块双口 RAM 来实现的。图 4.10 所示为 FPGA 内嵌的双口 RAM 写时序要求。

本课题中,将 EMIF 的地址总线低八位与双口 RAM 的地址总线相连,将 EMIF 的写使能信号取非运算后与双口 RAM 的写使能相连,将双口 RAM 的数据总线在地址区间正确的时候与 EMIF 的数据总线联通,其余时刻保持高阻。这样就实现了由 FPGA 内嵌的 256*32 位即 1Kb 的缓存区。
4.5 高速串行通信的协议实现
4.5.1 高速串行通信模型
本课题高速光纤串行通信参考了开放式系统互联模型 OSI 的 7 层体系架构,并且为了最大程度的减小通信冗余降低通信延时,从而有效缩短伺服控制周期,提高控制特性,采用了与 OSI 模型类似的三层体系架构,如图 4.11 所示。在这三层体系架构模型中,物理层(FC-0)规定了传输物理介质、接收器和发送器及其接口、通信带宽等物理特性。
传输层(FC-1)涉及用以限制编码最大运行长度的 8B/10B 编解码方案、维持直流平衡、提供字节边界对齐方案、传输数据帧格式及错误控制等。根据 8B/10B 编解码方案,传输字符分为两大类:数据和特殊字符,详细内容将在后续章节介绍。应用层(FC-2)处于高速串行通信模型的最高层,它决定了数据帧的含义解析、外设寄存器的定义及最高指令的收发控制。

本课题高速串行通信模型中,传输介质采用 62.5/125um MMF 光缆,MMF 线缆需交叉连接,即一端接发送端,另一端必须接接收端。激光收发器选取安捷伦公司的
HFBR53A3 完成电信号与光信号的转换。HFBR53A3 是一款多模光纤接口的光纤收发器,兼容 ANSI X3.297-1996 标准的光纤通道物理接口,支持 300m 长的 62.5/125um MMF
光缆。串并转换器采用 IEEE 802.3 千兆以太网收发器 TLK1221,用于高速全双工的点对点数据传输,支持最大 1.3Gbps 的数据速率。
在发送端,经过 8B/10B 编码的并行 10 位数据在发送参考时钟 TBC 的上升沿被锁存,然后将数据以参考时钟的 10 倍频将串行化并通过 PECL 兼容的电平差分信号进行传输;在接收端,将隐藏在串行数据流中的时钟信号提取出来。该时钟信号是从发送端的时钟信号经过相位内插调整相位关系而来,与 10 位的恢复并行数据的字节边界对齐,因此被形象的称为恢复字节时钟 RBC,如图 4.12 所示。

4.5.1 时钟恢复与接收字对齐
在串行数据传输中,接收端需恢复出正确的字边界,以实现从串行数据流中的恢复正确的字数据。故发送端在数据帧中添加特殊字符,并保证该字符与发送参考时钟的相位关系;接收端监测该特殊字符,并调整接收端时钟与特殊字符的相位关系,获取隐藏在串行数据流中的时钟相位信息,此过程被称为时钟数据恢复(CDR)。通过时钟数据恢复技术对接受到的数据进行重定时(Retiming),以消除传输过程中积累的抖动,使系统能够和发送端同步工作。时钟信号能被正确恢复,应具备以下条件:(1)恢复时钟频率必须与数据传输速率相当,即图 4.12 中 RBC 与 TBC 基于同一时钟基准产生,需调整的仅仅的两者之间的相位,而频率是一致的;(2)时钟与数据必须有一个稳定的相位关系。对应措施是在数据发送端建立一个时钟与数据的相位关系,使得时钟对数据信号进行最佳抽样(即时钟上升沿与每个比特的中点重合),从而为接收机提供最大的抖动容忍;(3)时钟的抖动必须很小。对应措施是采用精密晶振,且基准时钟由 FPGA 的
PLL 单元产生,此外,在 FPGA 设计中对时钟信号进行严格性能约束,时钟约束方法见参考文献[35]。

目前主要有四种时钟数据恢复方式,它们分别是基于 PLL、基于 DLL、基于过采样以及基于相位插值。基于 PLL 的 CDR 恢复时钟精确度比较高,但系统稳定性不佳,响应时间,频率捕获时间等较大;基于 DLL 的 CDR 通过鉴频鉴相器(PD)比较接收的数据和输入参考时钟的相位,其出恢复时钟的积累抖动一般较小,但是调节能力有限,不能处理小频率的失配;基于过采样的 CDR 采用判决算法对存储下来的样点值进行判定,从中选出最佳采样点,其性能取决与过采样算法;基于相位插值拓扑结构的 CDR
通过鉴相器检测本地时钟和输入数据的相位差,然后产生控制信号控制相位插值器获得相位正确的时钟,能快速跟踪输入数据[28-33]。
本文采用由 SerDes 硬件完成的,基于相位插值拓扑结构的 CDR,通过检测同步字符 K28.5 来调整 RBC 时钟相位。串并转换器 TLK1221 采用 IEEE 802.3 千兆以太网预定义的 10 位 K28.5 字符作为字对齐的解决方案。在接收端,时刻监测串行数据流并与某个 7 位的同步数据流对比。根据 8B/10B 编码方案,K28.5 字符编码后的结果为 0011 1110
10,7 个最高有效位(0011 111)与同步数据流相一致,因此 K28.5 字符被用来作为字边界重新对齐的特殊字符使用。当 K28.5 字符落在期望的字边界上时,说明 10 位的字边界与恢复时钟 RBC 正确对齐,不需要重新校正对齐;当 K28.5 字符横跨在期望字边界上时,需要重新校正对齐字边界。在收到 K28.5 字符后,通过重新调整恢复时钟与字边界的相位关系,当前的数据被缩短或延长,数据出现损坏,但 K28.5 字符之后的数据又重新对齐了字边界[19,31]。图 4.13 所示为字边界重新对齐的波形,最坏的情形是 K28.5 与
RBC0 从原来的上升沿对齐变差到了下降沿对齐。
4.5.3 高速串行通信协议帧的格式及类型
本课题中,高速串行通信协议由 FPGA 通过编程实现,隶属于三层体系架构模型中的传输层。数据的传输通过将数据封装成帧来进行,帧就是按一定格式组织起来的数据。
高速串行通信协议共包括三种格式的帧,他们分别是数据帧、应答帧以及远程帧。数据帧将数据从发送器传输到接收器;应答帧是接收方在收到一个数据帧之后向发送方发出的本次传输状态的反馈信息;远程帧由应用层发出,请求传感与伺服控制系统发送相应的数据帧。

1.数据帧
数据帧传输格式如图 4.14 所示,由数据帧开始标识符 SOF、数据帧结束标识符 EOF、
32 位的帧头、32 位的有效数据、字对齐字符 K28.5 及各自的校验字符组成。其中 32 位的有效数据可以通过帧头的最高 8 位数据长度由 DSP 从 1 到 255 自由配置。对每个 32
位的有效数而言,传输总是以最低 8 位开始,最高 8 位结束。校验字符由四个 8 位数据相加得到,溢出位自动忽略,因此校验字符长度也是 8 位。
其中,校验字符= Data[7:0]+Data[15:8]+Data[23:16]+Data[31:24];数据长度字节代表该帧数据中 32 位的有效数据的数目,由于用 8 位表示其长度,故最大值为 255;基地址字节代表该帧数据在数据缓存区中存放的起始地址;有效数据块之间填充字对齐字符
K28.5,K28.5 字符字边界对齐的详细内容已在上文中介绍,此处不再多说;然而,在每个 32 位的有效数据之后都要插入一个字节的校验字符,这也就意味着校验消耗了五分之一的通信链路带宽。同时,为了对齐正确的字边界,在每个校验字符后面又插入了字对齐字符 K28.5,连同校验字符一样,消耗了有效的通信链路带宽。但对于高速高可靠性的控制系统而已,这样的协议开销是值得的,也是必须的。
2.应答帧
接收方在接收完一个完整的数据帧之后, 向发送方发送表征数据接收情况的一个特殊帧,这就是应答帧。应答帧总长度固定为两个字节,第一个字节为特殊字符 ATC,第二个字节为接收方的状态信息,包括接收方的数据校验状态及校验结果。
3.远程帧
远程帧由应用层发出,请求远程传感与伺服控制子系统将当前传感器及当前运动位置数据上传,作为下一伺服周期的计算依据。远程帧的长度也是固定的,只有一个字节,即远程请求特殊字符 TTC。
三种格式的帧用到的特殊字符将在 8B/10B 高速编码方案一节详细介绍。
4.5.4 8B/10B 高速编码方案
高速光纤通信属于串行通信方式,数据通过差分线路发送和接收。未经编码的数据会产生直流偏移,这将影响在接收端的信号质量,使得时钟和数据的提取变得异常困难。
本文所述系统采用 IBM 提出的标准 8B/10B 编码方式。在图 4.15 中,发送控制器送出的
8 位并行数据在送往串并转换器 SerDes 之前必须经过 8B/10B 编码,然后将编码后的 10
位并行数据串行化发送。8B/10B 编码支持 8 位数据的 256 种编码组合,除此之外还有一些编码组合用以特殊的功能,故被称之为特殊字符。采用 8B/10B 编码的目的是提高信号在光纤信道上的传输特性。该编码方式保证了串行数据流有足够的跳变密度,从而有利于接收端的时钟恢复;最大运行长度(Run Length)即连续的 0 或者 1 的个数为 5,可以有效的抑制串行数据流的频谱范围和码间干扰(ISI, Inter-Symbol Interference);由于 0 和 1 的数量相同,故达到了直流平衡,提供足够的驱动能力[31,32,35,36,40]。

8B/10B 编码方案中,编码前的传输码由 8 位 A,B,C,D,E,F,G,H 和控制变量 Z 组成。
控制变量 Z 只有两种取值,D 和 K。D 代表数据,K 代表特殊字符。编码前传输码用
Zxx.y 的形式命名,Z 就是指控制变量,xx 代表二进制数字按 E, D, C, B, A 的顺序所表示的十进制数值,y 代表二进制数字按 H, G, F 的顺序所表示的十进制数值。比如 K28.5
所表示的编码前传输码就是 00111101。按照 8B/10B 编码规定,每个编码前传输码 Zxx.y
都将被划分为两个子块来进行编码,A,B,C,D,E 将被编码位 a,b,c,d,e,i;F,G,H 将被编码为 g,h, j。发送顺序为“a,”“b,”“c,” “d,” “e,” “i,” “f,” “g,” “h,” “j,”其中“a,”最先发送,“j,”
最后发送,而不是按照字母表顺序来发送,这一点要非常注意。
8B/10B 编码详细编码方式见参考文献[22,31-36],在此不再赘述,只列出本文中位置获取与传输系统用到的特殊字符,其余特殊字符暂作保留,待扩展使用。
4.5.5 光纤通信内核的实现
光纤通信内核包含通信的物理层和传输协议控制层两个层面,基于 FPGA 和 SerDes
的传输模块,完成数据包的传输控制,并行串行转换,编解码、时钟信号的恢复提取、字节的相位对齐等一系列核心的功能。如图 4.15 所示,通信内核包含发送与接收控制、编解码、串并转换、错误处理、及数据缓冲等模块。发送控制器由最上层控制单元 DSP
通过外部存储器接口 EMIF 进行控制,如被触发,立即将保存在发送 FIFO 中的数据,按照内核协议规定好的数据包格式进行打包,然后再经过 8B/10B 编码,最后在发送参考时钟 TBC 上节拍下,将并行的数据经过 SerDes 串行的输出到光纤通道。接收控制器则不受最上层控制单元 DSP 的直接控制,其接收逻辑由状态机实现,通过检测几个特殊字符来判断不同的接收逻辑,内核用到的特殊编码字符将在后面详细介绍。接收控制器在恢复时钟 RBC 的节拍下将串行的数据流反串行化之后正确地对齐 10 位数据的边界,然后经过 8B/10B 译码,最后将校验正确的数据保存到接收缓冲区中,同时产生应答信号,发送应答字符给对方,表示本次接收已成功完成。数据保存到接收缓冲区之后,会硬件产生数据接收中断,以告知最上层控制单元 DSP 数据接收完毕,可以读取处理。
在图 4.15 中,用不同颜色标识的两个区域,分别代表发送时钟域和接收时钟域,这两个时钟域由不同的时钟基准,因此是不相关的,信号在两个时钟域直接传递就涉及跨时钟域信号传递的问题。
应答信号由接收时钟域产生,要传递到发送时钟域。为了最大限度地减少由于亚稳态造成的设计失败,我们采用了两级同步寄存器链,同步寄存器链允许额外的时间来让亚稳态信号到达一个确定的状态,使得设计更加安全[38]。
4.5.6 接收控制器和发送控制器设计
光纤通信内核中发送和接收控制器完成传输层协议,其控制器性能将直接决定整体光纤通信内核数据传输模型特性。因此,在控制器设计方案中,须充分考虑传输协议开销,以及对数据传输过程的精确时序约束。

如图 4.16 所示,发送状态机起始处于空闲状态,时刻等待来自应用层的发送指令,一旦收到相应的指令信息,发送控制器就将存储在发送缓冲区的数据按相应的帧格式进行组帧,然后进行发送。发送过程一旦开始,状态机的跃迁只会在同步基准时钟上升沿发生,不涉及任何等待或握手,也不受更上层的影响,严格按照高速串行通信协议规定的帧格式和规范进行传输。

如图 4.17 所示,接收控制器与发送控制器的设计想类似,系统复位后,状态机处于空闲状态时刻监控接收通道信息。数据帧以 SOF 字符开始,应答帧以 ATC 字符开始,远程帧以 TTC 字符开始,因此,一旦检测到这三个字符的出现,接收控制器开始启动。
应答帧和远程帧的接收比较简单,而数据帧的接收相对复杂,因为其中涉及校验及错误控制机制。接收控制器在接收到 SOF 字符开始,便进入了接收过程,首先接收帧头及其校验,然后接收同步对齐字符,然后开始接收有效数据块,在所有的数据块接收完毕后,最后接收 EOF 字符,标识一帧数据接收完毕。在接收的整个过程中,每次状态机跃迁,都会校验相应的接收信息是否与协议帧格式及其规范相一致,一旦有违背情况发生,接收即刻终止,并报告错误信息来源及状态,准备下一帧数据的接收进程。
4.5.7 传输机制控制
数据传输的本质就是完成发送方和接收方存储缓存区的透明拷贝。本课题中采用
1.25Gbps 的光纤传输链路构建物理层,提供可靠且电气隔离的底层物理信号传输,并能有效屏蔽功率驱动设备噪声对数字控制设备影响,数据传输过程由精确硬件时序控制,上层控制器并不参与。
主动数据传输定义了一个基本的数据帧收发过程,以数据帧的方式,完成从发送
FIFO 到接收 FIFO 的透明拷贝。主动数据传输是从 DSP 到传感与伺服控制系统。
图 4.18 描述了主动数据传输的通信机制。

远程数据传输,是从传感与伺服控制系统到 DSP 主系统进行的。触发传输控制的作用是实现远程传感与伺服控制系统实时同步动作,通过远程帧将同步信息从 DSP 主系统传输到传感单元或伺服控制单元。为减少对测控实时性的损耗,要求远程帧必须具备尽可能小的协议开销;此外,远程帧传输过程及同步动作时序必须精确明晰。图 4.19
描述了远程数据传输的通信机制。
信迈提供DSP+FPGA的软硬件设计能力。