2. 复旦大学 微电子学院,上海 201203
2. . School of Microelectronics Fudan University, Shanghai 201203, China
光芯片在光纤系统中承担着光电信号转换的任务,其性能直接决定了光通信系统的传输效率。在光纤、4G/5G等网络系统中,光芯片都是决定信息传输速度和可靠性的关键。在使用时,光芯片本身的性能和可靠性需要得到充分保障,因此在制造后需要对其各项指标进行充分测试。
自动测试设备(auto test equipment,ATE)是用于对集成电路各项性能进行测试的专用设备,而随着芯片性能的提升,测试过程中的测试向量和测试数据也随之增加。在工业生产过程中,ATE设备的使用成本与使用时间直接相关,芯片测试时间过长会导致总成本的提升。因此需要数据带宽足够高的存储传输系统,以减少测试过程中在数据传输上耗费的时间。
数据存储传输系统的研究是随着计算机系统的发展而推进的,随着应用场景的不同已经有很多架构设计可供参考。韩贺松提出了关于AM335X到DDR2存储芯片的系统架构[1],分别实现了64 Mbit/s和80 Mbit/s的读写带宽。陈韶康采用了使用虚拟仪器技术与以太网通信接口搭建的存储系统,可以实现252 Mbit/s速率的数据接收[2]。在整个存储系统中CPU与外部的接口带宽一般会影响整个系统的传输效率,因此对于数据接口的选择也有很多案例可供参考,采用千兆以太网接口配合DDR3等可以达到950 Mbit/s的数据带宽[3]。但是由于FPGA内部资源有限而以太网协议较为复杂,在FPGA中集成以太网模块会占用太多资源影响其他模块。一些使用GPMC接口设计的系统的数据速率在400 Mbit/s左右 [4-6],写数据带宽最高达到640 Mbit/s[7]。本文从光芯片测试需求出发、基于ATE设备工作时数据量大、带宽要求高的特点在GPMC接口协议的基础上改进FPGA接口电路设计了一套数据存储系统。
1 系统设计图1为ATE结构图,其中CPU为主控芯片,memory system负责ATE中数据的传输和存储,test channel为测试通道,DUT为待测芯片。
|
图 1 ATE结构框图 Figure 1 ATE structure block |
本文设计了图中阴影部分,其中包括在ARM平台开发的EDMA控制器与GPMC驱动。在FPGA平台设计的GPMC接口电路和一个MIG_controller,在MIG_controller中集成有一个xilinx公司提供的控制DDR3 SDRAM的MIG IP核。DDR3为外挂的存储颗粒。
系统中ARM平台的GPMC接口驱动与FPGA的接口电路负责完成数据传输,为了提高传输带宽,使用ARM中集成的EDMA模块搬运数据,FPGA上接口电路的设计需要考虑3个因素。
1)由于ARM与FPGA之间的信号传输距离较长,对于高速信号而言很容易出问题,因此必须在接收端提高抗干扰性能,尽可能消除数据传输中的时钟偏移和电平抖动等因素。
2)由于MIG IP核的数据位宽最大为256 bit,为了尽可能提高MIG IP核的利用率,数据读写需要以256 bit为单位进行,而GPMC接口协议中是以16 bit数据位宽以突发传输的形式完成,因此在GPMC接口电路中需要完成串并转换的功能。
3)GPMC数据传输工作在GPMC_CLK同步时钟下,而MIG_controller工作在MIG IP核提供的300 MHz时钟下,数据在经过接口向MIG 核传输时必须经过跨时钟域同步处理。
MIG IP核是由xilinx公司提供的专门用于控制SDRAM的模块[8-9],可以降低系统开发难度,MIG_controller负责GPMC接口与MIG核之间的协议转换。设计目标为完成数据在CPU与ATE测试通道之间的通信与存储,要求写数据带宽1 Gbit/s左右,读数据时由于DDR3 SDRAM返回数据存在一定延时,随着传输周期减小这段延时对带宽的影响会变大,因此读数据带宽目标为400 Mbit/s。
1.1 GPMC接口设计GPMC接口包括ARM端的EDMA+GPMC驱动和FPGA的GPMC接口电路两部分,通过EDMA模块驱动GPMC接口发送读写请求,并在FPGA中通过GPMC接口电路完成响应。
1.1.1 EDMA+GPMC驱动设计GPMC接口协议有多种外接存储器类型可选,可以自由选择外挂nor/nand flash,8/16 bit数据位宽;同步/异步传输时序等[10]。为了提升带宽,提高传输效率并避免在控制信号上浪费过多时间,本文在设计嵌入式部分驱动时选用了同步模式下的突发传输方式[11]。图3为地址/数据复用模式下GPMC同步突发写时序,启动传输时同步时钟GPMC_CLK开始工作,同时片选信号nCS使能选中FPGA,A[27:17]持续输出地址高11位,A[16:1]/D[15:0]输出地址第1位至第16位,由于每次突发发送数据位宽为2 Byte,因此最低位始终为0,FPGA自行处理即可。地址稳定后nADV使能提示FPGA接收地址信息,一个时钟周期后nADV拉高,读写使能信号拉低并开始突发传输。突发发送16次后传输结束,图2中仅展示了8次突发,完成一次完整的传输大约需20个同步时钟周期。
|
图 2 地址/数据复用模式下GPMC同步突发写时序 Figure 2 GPMC synchronous burst write timing in address/data multiplexing mode |
GPMC共有7组配置寄存器GPMC_CONFIG1~7,其中GPMC_CONFIG1控制传输模式时钟频率等,剩下6组主要配置时间参数等信息,为了将接口设置为图3中的传输模式需要设置GPMC_CONFIG1中的READ/WRITEMULTIPLE=1启动突发传输,READ/WRITETYPE=1开启同步时钟,ATTACHEDDEVICEPAGE LENGTH=2配置突发长度为16、MUXADDDATA=2选择地址/数据复用模式。
|
图 3 嵌入式系统工作流程 Figure 3 Embedded system workflow |
使用EDMA搬运数据时要配置目标地址、源地址以及数据大小[12-13],PaRAM结构体中提供了用于配置这3者的变量。目标地址和源地址在使用时根据读写需求在GPMC片选地址和数据物理地址中选择。对于一维数据在传输时aCnt表示每次搬运的字节数,bCnt、cCnt为0会识别成伪传输而不会驱动GPMC接口,所以在配置数据大小时将bCnt、cCnt置1,aCnt配置为64,每次会搬运64 Byte数据,在本设计所使用的协议下会触发两次GPMC传输。
由于芯片IO存在复用功能,打开全局时钟后首先需要配置pinmux信息启动GPMC相应引脚的功能。然后使能EDMA控制器和GPMC接口时钟并配置相应寄存器,最后在EDMA控制器中申请GPMC通道,申请成功后开始传输。由于GPMC的从设备不会主动发起传输,也就不需要采用EDMA的事件触发模式,所以采用手动触发模式启动传输。设置ESR/ESRH寄存器中通道号对应位的寄存器为1即可启动传输。嵌入式系统驱动GPMC接口流程如图3所示。
1.1.2 GPMC接口电路设计在使用同步模式传输时CPU发送与FPGA接收的时钟周期需要严格对应,对于GPMC接口而言其所接收的信号来自于AM3354开发板,因此信号从嵌入式芯片到FPGA需要经过很长的距离,数据在板间传输时很可能会受到来自各方的干扰,使用内部例化计数器的方式在理论上可以实现AM3354和FPGA的时序同步。但是当RTL代码经过布局布线生成实际电路后,在ARM与FPGA之间、FPGA中各寄存器之间的距离可能会导致时钟偏斜的产生。如图4所示,(a)中cs_sit1在时钟第二个上升沿时立刻翻转,由于此时cnt_sit1采样到的仍然是1,因此会在下一个上升沿开始计数。(b)中cs_sit2信号的翻转落后于时钟信号上升沿,cnt_sit1的计数情况与(a)相同。(c)中cs_sit2信号的翻转超前于时钟信号上升沿,这种情况会导致cnt_sit1提前开始计数,最终整个传输产生混乱。
|
图 4 FPGA中信号偏移 Figure 4 Signal offset in FPGA |
1)改进接收电路
为了在接收端消除时钟偏斜造成的影响必须调整接收电路,来自CPU的信号在进入FPGA后会经过图5所示的由两个D触发器和一个与门组成的电路,其中D1、D2采样两次输入信号将信号变化固定在时钟下降沿。同时再将两个寄存器的输出信号相与,用于消除传输过程中可能出现的电平抖动,输入与门a端的信号毛刺会被b端的输入消除,可以有效提升信号的稳定性。
|
图 5 控制信号锁存电路 Figure 5 Control signal latch circuit |
由于GPMC接口工作在同步时钟域,mcif_arbiter工作在MIG核提供的用户时钟域,逻辑电平两个不同时钟域之间直接传输会产生亚稳态,对于这种情况如果不予以消除由此产生的错误将会顺着电路一直向下传播,导致整个系统无法正常工作[14]。因此在数据缓存完成后必须同步到FPGA的工作时钟域才能使用。
2)跨时钟域同步
跨时钟域信号同步一般采用由三级触发器串联组成的电平同步器或经由异步FIFO完成[15-16],但是在多bit信号跨时钟域同步时直接使用电平同步器会导致数据出错。所以在FPGA中需要再开辟一个256 bit的存储空间。以写为例,当GPMC接口突发完成时会将数据存入这段空间内,再将写完成信号同步至FPGA的工作时钟域,arbiter接收到写完成信号后将存储空间内的数据取出并向接口模块发送握手信号示意同步完成,接口模块收到握手信号后初始化存储空间和写完成信号等待下一次传输。
3)数据位宽处理
由于AM3354发送的256 bit数据是以每次16 bit的数据位宽突发发送的,而MIG IP核的数据位宽为256 bit,二者物理位宽不匹配。尽管MIG核为用户提供了mask信号以灵活适应不同位宽,但单次读写的位宽太低会对DDR接口利用率产生很大影响,所以需要在GPMC接口中内置一个容量为256 bit的memory型寄存器缓存数据,写过程中每次突发会使接口内部指针自增,同时缓存地址向高位偏移16 bit,16次突发完成后指针清零并将数据发送至下一模块。同理,读操作中每次突发使内部指针自增,同时读缓存地址向高位偏移16 bit直至读数据完成。
控制信号经过电路消除偏移和抖动后,在片选信号cs和地址有效信号advn的作用下将地址数据拼接移位,生成的有效地址会先存入跨时钟域同步模块等待处理。此时数据在片选和读写使能信号oen/wen的作用下进入位宽转换模块,位宽转换模块会将接收到的数据由16 bit缓存至256 bit后存入跨时钟域同步模块,同步模块将控制信号、地址和数据由GPMC_CLK时钟域同步到FPGA_CLK时钟域后发送至MIG_controller。GPMC接口模块框图如图6所示。
|
图 6 GPMC接口模块框图 Figure 6 Schematic diagram of GPMC interface module |
MIG IP核是xilinx官方提供的专门用于控制DDR3 SDRAM的控制器,它可以将用户发送的读写指令转化为DDR SDRAM的控制指令,并且可以自行完成除读写外对DDR SDRAM的其他操作如自刷新、预取等。在使用MIG IP核时只需要设计逻辑控制MIG核即可完成对DDR的操作,使用者可以专注于读写操作而无需关注其他指令,大大降低了系统的设计难度。
MIG_controller采用状态机设计,DDR3 SDRAM在自刷新等操作期间不会接收读写指令,如果此时对其进行读写将会被忽略。同时读过程中从读指令发送到DDR3到返回数据存在一定的延时,所以MIG_controller工作过程中除了读、写和空闲3种状态外还需要添加1个等待状态防止错过请求导致系统状态不正常。MIG_controller工作状态如图7所示。
|
图 7 MIG_controller状态图 Figure 7 MIG_controller state diagram |
系统初始时处于IDLE状态,若接收到写请求则进入WRITE状态,这意味着此时在GPMC接口中数据已经缓存至256 bit并跨时钟域同步完成,因此直接从GPMC接口中取出数据通过MIG核发送给DDR3 SDRAM存储器。若此时DDR3 SDRAM未准备好,则进入WAIT状态等待。收到读请求时会先将储存并同步好的地址取出发送给DDR3 SDRAM并使能gpmc_wait信号与CPU一起进入WAIT状态。检测到数据有效信号后会将数据与有效信号同步给GPMC接口。读写完成后会重新回到IDLE状态等待下一次操作。
2 板级验证与分析图8为系统实现与验证平台,左边是作为CPU使用的AM3354开发板,右边为FPGA测试板,由于目前CPU和FPGA处在两块独立的板子上,使用排线连接的情况下,时钟信号会与控制信号产生耦合现象,因此二者通过杜邦线连接将时钟线与其他信号线分离。并分别通过XDS100V2仿真器与FPGA下载器与电脑连接,并使用示波器观察信号输出分析波形。
|
图 8 系统实现与验证平台 Figure 8 System implementation and verification platform |
在TI的CCS集成开发环境中启动EDMA向FPGA发送数据进行环回测试,利用vivado中集成的ILA IP核观察读写情况。
2.1 写数据功能验证在CPU的L3缓存中申请256 bit的存储空间,赋值后将其地址设置为源地址并启动EDMA。在ILA中抓出写数据波形如图9所示。
|
图 9 系统写功能验证 Figure 9 Verify the write function of the system |
图9中gpmc_advn使能后gpmc_address中存入地址,由于初始地址为0x000000,因此向高位偏移后不变,在第二次传输时地址变化为0x000020。在16个burst传输后数据存入同步模块的wr_data1寄存器,MIG控制器开始工作,state_start值变为2即进入写状态。由于此时DDR3存储器已经准备好,因此不进入等待直接使能app_wdf_wren并向DDR3中写入数据完成一次存储。因为GPMC接收和MIG控制器读写是异步工作,所以在数据写入DDR3的时候不会影响GPMC接口接收。
2.2 读数据与存储功能验证在CPU的L3缓存中申请512 k的地址空间并初始化为0,将其首地址作为目标地址,将写数据时的目标地址作为源地址启动读操作即可将写测试中写入DDR3的数据读出。图10(a)为用ILA抓取到的信号波形,图10(b)为在笔记本电脑中读取CPU内存中目标地址中数据。
|
图 10 系统读数据与存储功能验证 Figure 10 Verification of read data and storage function |
从图10(a)中可以看到地址的存储方式与写过程相同,地址有效信号去使能之后CPU不再控制gpmc_d信号,此时GPMC_AD上为无效数据。而GPMC接口接收到读信号时立刻使能wait信号挂起等待,此时state_start寄存器值变为1表示MIG控制器进入WAIT状态,待app_rd_data_valid提示返回数据有效后wait去使能,MIG_controller变回IDLE状态。GPMC接口开始向CPU发送数据,此时mcif_rd_data内存储的数据会由低位向高位突发发送。证明系统读数据功能正常。图10(b)中展示了目标地址中存储的由源地址读出的数据,与写数据时写入的数据相同,表示写数据被成功存储到DDR3 SDRAM中,证明系统数据存储功能正常。
在板级验证时选择了20组地址,分别使用4、8、163种突发长度按上述过程进行测试以验证系统准确性与鲁棒性。每种突发长度共计传输2 560 bit,即对DDR3 SDRAM执行10次读写操作。使用误码率作为测试指标。计算式为
| $ Pe=\frac{Ne}{N} $ | (1) |
式中:Ne为被传错的码元数;N为传输的总码元数。将实验结果代入式(1)得到计算结果如表1所示。
|
|
表 1 系统测试结果 Table 1 System testing results |
实验结果符合误码率标准,表明系统可以稳定运行。
2.3 带宽测量与分析为了验证数据带宽达标,用示波器抓取写过程中的片选信号波形如图11所示。
|
图 11 GPMC写片选波形 Figure 11 Waveform of GPMC writing selection signal |
图12中红色方框内为时间测量值,其中T1为左侧光标所处时间轴位置,T2为右侧光标所处时间轴位置,ΔT是T2与T1之差,表示传输周期。可以看到从一次片选信号使能到下一次使能经过了260 ns,每次传输发送256 bit数据,根据带宽计算式
|
图 12 包含等待的读片选波形 Figure 12 Waveforms of reading selection with waiting |
| $ {B}\text=\frac{{n}}{{T}} $ | (2) |
式中:B为数据带宽;n为每次传输的数据位宽;T为传输周期,将数值代入可得写数据带宽为984.6 Mbit/s。
在读数据时由于需要等待DDR3返回数据,因此带宽会因为传输周期的延长有所降低,用示波器抓取读数据时的片选波形如图12所示。
图12中下方波形为单个传输周期的片选信号,可以发现由于等待过程的加入每个读周期被延长到了617 ns,每次传输数据位宽同样为256 bit,代入式(2)可得读数据带宽为413.3 Mbit/s。
由上述测量结果得出本系统写入速率为984.6 Mbit/s,基本满足1 Gbit/s左右的写带宽需求,在读数据时等待DDR3返回数据时间约为320 ns,延长了每次读数据的传输周期,导致带宽降到了400 Mbit/s左右,符合设计预期。
3 结 论本文针对光芯片测试与ATE大数据量与高数据带宽的需求设计了一套数据存储传输系统,系统中包含了EDMA与GPMC驱动、FPGA接口与DDR3控制器。在AM3354芯片上通过EDMA模块GPMC接口向FPGA读写数据,并在GPMC接口中优化了数据传输方式以匹配MIG核的数据接口,大大减少了对DDR3接口的请求次数,提高了接口利用率,并在FPGA内完成了数据的跨时钟域同步,相对于内部集成FIFO的做法节省了大量逻辑资源。
经过上板测试,该系统可以在GPMC同步时钟下与FPGA工作时钟下完成数据的跨时钟域传输与存储。其中单通道写带宽达到984.6 Mbit/s,读带宽达到了413.3 Mbit/s。写带宽相比前文提到的的设计提升很大,但是在读带宽方面仍有提升空间,读数据时间大多消耗在等待DDR3 SDRAM返回数据上,如果能通过预取和ping-pong结构等方式减少DDR3 SDRAM的数据返回时间则读带宽也将获得很大提升。
| [1] | 韩贺松. 嵌入式打印控制器驱动程序设计及应用[D]. 西安: 西安电子科技大学, 2015. |
| [2] | 陈韶康. 无人机载雷达大容量数据存储系统设计[D]. 太原: 中北大学, 2023. |
| [3] | 洪方磊, 薛萌, 郭汉明. 基于FPGA的大数据缓存与高速传输系统设计[J]. 软件导刊, 2023, 22(8): 156–163. DOI:10.11907/rjdk.222043 |
| [4] | 吴奇轩. 高精度激光相位测距系统的FPGA实现[D]. 西安: 西安电子科技大学, 2020. |
| [5] | 张耀飞. 多功能一体机嵌入式扫描控制器设计实现[D]. 西安: 西安电子科技大学, 2022. |
| [6] | 于濮嘉. 基于Davinci视频处理芯片DM8168的发控记录装置的设计[D]. 太原: 中北大学, 2022. |
| [7] | KRYSZYN J, SMOLIK W, OLSZEWSKI T, et al. Development of electrical capacitance tomograph design in the nuclear and medical electronics division[J]. Informatyka, Automatyka, Pomiary w Gospodarce i Ochronie Środowiska, 2017, 7(1): 111–114. DOI:10.5604/01.3001.0010.4597 |
| [8] | WANG X D, SHEN L Y, JIA M. The design and optimization of DDR3 controller based on FPGA[C]//Proceedings of the 2017 International Conference on Communications, Signal Processing, and Systems. Singapore: Springer, 2019: 1744-1750. |
| [9] | YI J H, WANG M F, BAI L D. Design of DDR3 SDRAM read-write controller based on FPGA[J]. Journal of Physics:Conference Series, 2021, 1846(1): 012046. DOI:10.1088/1742-6596/1846/1/012046 |
| [10] | 白学喜. 基于Linux的FPGA通信技术研究与实现[D]. 北京: 北方工业大学, 2014. |
| [11] | 刁彦华, 贾宝青, 王晓君. FPGA与ARM的GPMC总线通信接口设计[J]. 单片机与嵌入式系统应用, 2017, 17(3): 47–50. |
| [12] | 梅熹文. 复印机嵌入式控制软件的设计与实现[D]. 西安: 西安电子科技大学, 2017. |
| [13] | 陈振娇, 徐新宇, 张猛华. EDMA数据传输方式在视频图像处理系统中的应用[J]. 电子与封装, 2015, 15(4): 28–31. DOI:10.3969/j.issn.1681-1070.2015.04.008 |
| [14] | VERMA S, DABARE A S. Understanding clock domain crossing issues[EB/OL]. [2007−12−24]. https://www.design-reuse.com/articles/17372/clock-domain-crossing.html. |
| [15] | 胡龙. 基于数字下变频的多比特数据跨时钟域设计与验证[D]. 西安: 西安电子科技大学, 2017. |
| [16] | 宋文强, 胡毅. FPGA跨时钟域信号同步设计方法研究[J]. 单片机与嵌入式系统应用, 2018, 18(9): 24–27,81. |
2024, Vol. 46
Issue (5): 31-39


