摘要:同步辐射光源硅像素探测器是面向北京先进光源对x 射线探测的重大技术需求所研发的新型仪器。该探测器处于辐射环境中,且多个前端电子学读出板被放置在密封的冷却容器中。为在不打开冷却容器的情况下,脱离专用的usb-jtag (universal serial bus - joint test action group)下载电缆对现场可编程门阵列(field programmable gate array, fpga)进行远端升级,本文提出了一种基于xvc (xilinx visual cable)协议,通过以太网,利用arm 微控制器控制fpga 的jtag 接口对其进行远程更新与调试的方法。该方案附加电路少,易于拓展,同时也提高了更新可靠性。
前端探测器包含6 个前端模块,每个模块对应一个传感器以及8 个读出asic 芯片,芯片输出信号通过电平转换送到前端数据处理现场可编程门阵列(field programmable gate array, fpga)。fpga 对信号进行缓冲验证,汇总处理后通过光纤传输到后端daq (data acquisition)系统。图1 为前端数据处理框图。
图1 前端数据处理框图
由于整个前端探测器模块放置在密封的冷却容器中,而且整个探测器处在辐射环境中,方便可靠的fpga 远程更新与调试方案成为电子学系统设计的重要方面。显然传统的基于usb-jtag (universalserial bus - joint test action group)更新fpga 的方式已不再适用。
目前国内外出现的fpga 远程更新的方案基本分为两大类[2]:一类是针对早期的内部没有专用远程升级电路的fpga 器件,采用单片机cpld(complex programmable logic device)、dsp (digital signal processor)、arm (acorn risc machine)等作为辅助配置器件[3],配合外部flash 和以太网芯片来实现,这些方案灵活性高但设计复杂且提高了成本;另一类是针对最新推出的fpga 器件,其自带了远程升级内核或逻辑块,只要结合外部数据配置通道,即可实现远程更新,该方案附加电路少,节省硬件资源,但却占用了fpga 的内部逻辑资源,而且只适用特定型号的fpga。另外,上述两类方案均无法实现对fpga 的远程调试,还需要在pc 端开发用于远程更新的tcp/ip 软件,增加了设计复杂度。考虑到基于jtag 的下载方式在fpga 配置、flash prom 配置、软/硬件调试以及硬件测试方面的重要用途,本文设计了一种基于xvc (xilinx visual cable)协议,通过以太网,使用单芯片arm微控制器控制fpga 的jtag 接口进行远程更新调试的方案。该方案操作简单,无需额外开发tcp/ip软件,基于网络的通信能够保证足够远距离的灵活的可靠数据传输。还能对fpga 进行远程chipscope调试。同时,通过简单的jtag 链路连接,可以同时完成多片fpga 的升级与调试[4]。
1 硬件系统实现
在本设计中,arm 微控制器通过模拟jtag 接口的时序对fpga 进行配置。针对多片fpga 进行远程更新的系统框图如图2。
图2 系统模块框图
系统硬件电路主要由arm 微控制器、jtag 链路模块、lvds (low-voltage differential signaling)模块组成。arm 选择wiznet 公司的w7200 开发板作为配置控制器,一端通过网络与pc 建立连接,另一端通过外设的gpio (general purpose input output)传输jtag 配置时序。lvds 模块负责将jtag 单端信号转换为低压差分对信号,一对一发送给待更新的fpga。多片待更新fpga 的jtag 链通过另外一块fpga 开发板上的主控fpga 芯片xc6slx45的内部逻辑来实现,板上用9 个接插件引出fpga的9 组i/o,分别连接w7200 和8 个lvds 模块。其中, lvds 模块和主控fpga 开发板以子母板的形式连接。
远程更新时,pc 端使用impact 将包含配置的指令通过网络发送给w7200,w7200 根据xvc 协议接收指令并模拟产生jtag 时序,主控fpga 接收该时序并通过jtag 链路送入待配置fpga,完成最终配置。
w7200 是wiznet 公司推出的一款单芯片集成了硬件tcp/ip 协议栈的arm cortex-m3 微处理器[5]。内有20 kb 的sram 和128 kb 的flash 以及32 kb 的以太网rx/tx 缓存,具有最高72 mhz的工作频率,有足够的能力进行数据处理。硬件tcp/ip 协议支持 tcp、udp、ipv4、icmp、arp、igmp、pppoe 和以太网,这些协议在各种应用领域已经得到多年的验证。其结构如图3 所示。
图3 w7200 结构框图
w7200 的内核采用32 位的stm32f103cb,通过spi 与w5200 连接,外部拓展40 个引脚,负责提供该系统的gpio、i2c、spi、usb 以及usart接口,集成度高却具有很低的功耗。w5200 为该公司推出的全硬件tcp/ip 芯片,负责为该系统提供各类硬件tcp/ip 协议、mac 以及phy,支持8 个独立的socket 同时工作。使用该芯片的优势是通过简单的socket 编程,用户便可以轻松实现所需的以太网通信,而不必要处理复杂tcp/ip 协议栈控制。
2 软件设计
2.1 jtag 工作方式
jtag是符合ieee 1149.1 标准的国际标准测试协议[6],主要用于各类芯片的内部测试和配置。现在大多数高级器件(包括fpga、mcu、dsp 以及cpu 等)都支持jtag 协议。标准的jtag 接口是4 线接口:模式选择(tms)、时钟(tck)、数据输入(tdi)以及数据输出(tdo)信号线。
jtag 工作原理是在器件内部定义一个tap(test access port)测试访问端口,外部控制器通过tap 可以访问芯片提供的所有数据寄存器和指令寄存器。使用jtag 方式配置fpga 时,通过tck 和tms 的值,选定一个需要访问的数据/指令寄存器,将其连接到tdi 和tdo 之间。然后由tck 驱动,通过tdi,把需要的数据/指令输入到选定的数据/指令寄存器中,同时把对应的寄存器中的值通过tdo 读出来。jtag 接口在线编程和调试的特征改变了传统生产流程,配置效率高,是项目研发阶段必不可少的配置模式。
2.2 xvc 协议
xvc 协议是xilinx 公司推出的一款基于tcp/ip 的虚拟线缆协议[7],它可发挥类似于 jtag线缆的作用,允许用户无需使用usb 线缆而是通过网络访问xilinx fpga 的jtag 接口并对其进行高效率的远程更新与调试。该协议还具有扩展性,可进行安全连接,允许用户通过编程将其实现于不同的平台。
xvc 协议内容简单,使用方便,其基本内容可总结为如下三条指令:
1) getinfo:
该指令用于获取xvc 服务的版本。当接收到“getinfo:”指令时,该服务将会返回如下的字符串:“ xvcserver_v1.0; ”, 其中,代表了该协议一次能移位发送的字节向量的最大长度。
2) shift:[num bits][tms vector][tdi vector]
该指令表示分别以字节向量tms vector 和tdi vector 的形式发送num_bits 个二进制数据。其中,num_bits 是一个小端格式的整数,tms vector和 tdi vector 代表所要发送的tms 和tdi 的二进制数据。发送过程中,0 字节的0 比特位首先被发送出去,字节向量的长度会根据num_bits 的值向上补齐成最接近的字节数。该指令最终应该返回与tms vector 向量同样长度的字节向量tdo vector,代表从jtag 接口返回的所有的tdo。同样也是0字节的0 比特位首先被接收回来。
3) settck:[period in ns]
该指令表示将该协议通信的时钟周期设置为period 纳秒。period 同样是一个小端格式的整数值。使用该指令最终应该返回实际的周期值。
impact 和chipscope 通过网络访问fpga 的jtag 接口的基本原理就是基于xvc 协议发送shift指令,实现jtag-client 的功能[8]。因此只要arm微控制器根据shift 指令格式分析数据,便能成功模拟jtag 时序,实现类似于jtag-server 的功能。jtag-server 与jtag-client 的结构如图4。
图4 jtag 服务器与客户端
2.3 fpga 软件设计
在本设计中,主控fpga 负责实现8 片待更新fpga 的jtag 链路。一组i/o 口用于接收w7200的配置时序,另外8 组i/o 口分别连接8 个lvds模块的输入。一个4 位的拨码开关用来控制接入jtag 链的fpga 的个数。
2.4 arm 软件设计
本方案使用基于jtag 的配置方式,w7200 作为配置控制器,其通用i/o 引脚pb12、pb13、pb14、pb15 分别作为jtag 接口的tms、tck、tdo 和tdi。w7200 的工作流程如图5 所示。其应用程序用c 语言开发生成,keil mdk 进行编译调试。主要包括w7200 初始化和指令处理两部分。
首先,w720 初始化的内容包括:设置系统工作时钟、中断、gpio/spi、接收与发送缓存大小以及网络设置。由于impact 软件每次发送shift 指令的最大长度为2 256 byte,故设置接收缓存区rx_buf 大小为2 256,而发送缓存区tx_buf 大小为1178。网络设置包括选择打开socket0 进行网络通信,并设置其通信协议为tcp,端口号为5000,并为其分配ip 地址和mac 地址。初始化完成后,w7200 会作为tcp server 打开socket0 监听网络上的连接请求。
图5 更新流程
w7200 处理指令的过程为:从 socket0 的接收数据缓冲区接收6 个字节,若与字符串shift:对比相同,则继续读取4 字节的内容作为num_bits,通过计算将其转换为字节数nr_bytes。接着按该字节数分别读取tms vector 和 tdi vector 到接收缓存区rx_buf,然后通过for 循环分别将tms vector 和tdi vector 的每一位赋值给tms 和tdi 引脚,同时产生周期性的tck 信号。该for 循环同时将tdo引脚上检测到的输入信号写入发送缓冲区tx_buf,循环结束后以tdo vector 发送给pc。pc 验证收到的tdo 数据无误,继续通过shift 指令发送下一个数据包。由此便实现了一个完整的jtag数据链路,从而实现了通过网络将配置数据经由jtag 接口配置给fpga 的过程。
3 远程更新
利用impact 进行远程更新时的软件设置如图6 所示。首先打开impact 软件,在边界扫描模式下选择菜单栏的output、cable setup,选择打开xilinx_xvc 插件,更改连接对象的ip 地址与端口号,发送连接请求给w7200。
待成功建立socket 连接后,初始化jtag 链,选择待配置fpga 和配置文件并双击program,pc端便按照shift 指令的格式发送配置指令和数据给w7200。配置结果如图7 所示。经过验证,为一片fpga 成功配置大小为630 kb 的.bit 文件所需时间为21 s,配置1.41mb 的.bit 文件所需时间为48 s,配置速率均为240 kb·s−1。在相同环境下,配置不同大小的文件速率基本一致。该方案使电子学系统的远程更新和调试变得简单灵活。
图6 impact 下载线设置
图7 成功更新fpga
4 结语
本方案中,基于xilinx 的xvc 协议,利用pc机与arm 通过以太网通信,成功实现了基于jtag接口的fpga 的远程更新与调试。该方案实际只需要一个arm 单芯片,无需其它额外的附加电路。在其他系统中应用时,可直接将w7200 芯片固化在电路板上,方便可靠。随着互联网的发展推进,通过网络进行硬件程序的更新将变得更加普遍。
刀开关有哪些型号_刀开关的型号规格
远程控制器怎么绑定多台开关?
华为手机70%芯片来自麒麟:海思成亚洲第一大芯片设计企业
Vishay 推出直接水冷绕线电阻DCRF 提供9000W的超高功率消耗
北京移动公司实现了望京SOHO商业楼宇基于5G LampSite的5G全面覆盖
基于XVC网络协议实现了基于JTAG接口的FPGA 的远程更新与调试
三坐标测量仪应用领域
协方差矩阵怎么算 协方差矩阵和方差的关系
制约高通放弃恩智浦的5大因素
从ChatGPT等大模型的兴起,看未来计算芯片的发展趋势
MS5803-01BA压力传感器在医疗中的应用
华为努力提升自研芯片使用率
英飞特发布了2020年三季度报告
英特尔为什么迟迟不推10nm处理器
富士康也来造呼吸机?
人工智能技术将引领全球智慧手机时代
苹果公司的新专利曝光,让用户可以通过手腕动作控制他们的Apple Watch
清洗半导体晶片的方法说明
华为P10和三星S8哪个更受欢迎?看完真相了
移动芯片变革趋势及设计注意事项