APP下载

引入SRAM 的三级缓存技术在高速通信中的应用

2012-06-06郑永秋任勇峰

关键词:高速数据低电平读数

史 赟,郑永秋,任勇峰

(中北大学电子测试技术国家重点实验室,山西太原 030051)

0 引言

在高速通信过程中,发送方和接收方之间没有握手信号,发送方不停地向接收方发送数据,而不管接收方的状态。接收方要将收到的数据通过USB电缆上传到终端计算机进行分析,需要数据缓存保证数据流中的数据不丢失,而终端计算机对其内部的USB设备是通过轮询算法检测的,每次读完USB设备中的512 Byte数据后,向USB设备发送读请求,就去检测其他设备,直到下次检测到USB设备,才会读走数据。可以看出,读数操作是不连续的,在终端计算机进程任务繁重时,对USB设备的检测周期就会延长,滞留在USB设备中的512 Byte数据不能被及时读走,就不会向接收方发送读数请求,接收方的可编程门阵列(field programmable gate array,FPGA)不断接收数据,数据在FPGA中存储,而利用FPGA内部的先进先出(first in first out,FIFO)作为缓存,其容量有限,很容易导致缓存溢出,出现丢数问题。因此,需要较大的存储介质作为数据缓存,而静态随机存储器(static random access memery,SRAM)具备读写速度快,控制简单,已广泛应用于需要快速存取数据的场合[1]。

本文在FPGA外部引入容量为1MByte的SRAM作为外部缓存,设计并实现了三级缓存结构,输入级和输出级缓存为FPGA内部的FIFO,用于实现与发送方和终端计算机的通信接口,中间级缓存为SRAM,作为核心存储,对数据进行实时缓存。利用FPGA控制数据的传输和对SRAM的读写操作,简化了硬件设计和逻辑设计[2]。

1 三级缓存基本原理

图1为三级缓存结构示意图。一级缓存为数据的输入缓存,是三级缓存结构与外部的输入接口,它是利用FPGA内部的BLOCK RAM构成的,FPGA选用XILINX公司的Spartan3系列的XC3S200芯片,选用其内部容量为2 KByte的同步双口RAM(RAMB16_S9_S9)构成一个8位数据位宽,容量为2 KByte的内部FIFO。与之对称的是三级缓存,它的构造和一级缓存一样,是数据的输出缓存,作为输出接口与外部计算机进行通信。为了不使数据在输入缓存丢数,设定输入的高速数据在输入缓存中达到10 Byte后,就会存入二级缓存,使容量更大的二级缓存作为主要的存储缓存;而只有接到读数请求后,二级缓存才会将数据写入输出缓存,输出缓存中有512 Byte数据时,数据就会上传到计算机,所以将输入和输出缓存容量设置为2 KByte,缓存容量有较大的冗余量,不会存在溢出问题。

图1 三级缓存结构Fig.1 Tri-stage buffer structure

二级缓存为FPGA外接的容量为1 MByte的SRAM。为确保不丢数,应使缓存容量足够大,本设计选用的SRAM容量为1 MByte,可以确保数据传输可靠性,保证数据不会因为缓存容量不够而丢失。二级缓存实时地存储高速数据,是高速数据存储的核心部分,数据经过一级缓存后,主要存储在二级缓存,当接到三级缓存的读取数据请求时,才把数据写入三级缓存。采用这种三级缓存结构,输入和输出缓存为FPGA内部的FIFO,便于实现FPGA对数据传输的控制,中间级缓存只需在FPGA外部连接一个SRAM即可,利用FPGA实现对SRAM的读写操作,从而简化了硬件电路。

2 硬件设计

硬件原理框图如图2所示。硬件结构主要由FPGA,SRAM芯片、RS485接口芯片、USB2.0芯片等组成。FPGA控制数据存入和读出缓存以及和计算机的USB通信过程,利用其内部资源构成三级缓存结构的输入和输出缓存。SRAM芯片连接在FPGA外部,作为三级缓存结构的中间级缓存。RS485芯片负责将差分形式的数据转换为串行形式的数据传递给FPGA。USB2.0芯片负责FPGA与计算机USB接口的数据通信过程。

图2 硬件原理框图Fig.2 Hardware Schematic block diagram

FPGA选用 XILINX公司的 Spartan3系列的XC3S200芯片,它采用多电压供电,其中内核电压为1.2 V,I/O口驱动电压为3.3 V,其他的辅助电压为2.5 V。该芯片含有4 320个逻辑资源、141个可用的I/O口。外部晶振源频率为36.864 MHz,利用FPGA内部的倍频模块对它进行倍频后作为高速数据接收的外部时钟[3]。

数据接收是以RS485标准为物理层基础,硬件设计选用RS485芯片分别实现高速数据接口和高速时钟接口。数据信号进入FPGA之前,必须经过RS485接口芯片进行电压转换。根据设计要求,高速接口最高的输出码率为7.372 8 Mbit/s,由于本通信系统只是接收数据,所以工作在单工模式。因此,RS485接口芯片选用MAX3490,它采用3.3 V单电源供电,波特率最高可达10 Mbit/s,可以支持全双工工作模式,输入电压范围为-7~+12 V,输出电压高电平为最小供电电压减去0.4 V,低电平最大为0.4 V。

SRAM芯片选用CY7C1059DV33,它的深度为1 M(1M代表106,深度代表SRAM中的位置数,一个位置8位)。宽度为8 bit,容量为1×8 Mbit,3个控制端控制SRAM的读写操作。经过RS485芯片转换的数据首先进入FPGA内部FIFO,然后进入与FPGA相连的外部SRAM,计算机下发读数请求后,才将SRAM存储的数据读出,经过FPGA内部FIFO送至USB口。

FPGA利用CY7C68013芯片通过USB接口与计算机进行通信。CY7C68013属于Cypress公司的FX2系列产品,是 Cypress公司生产的第一款USB2.0芯片。CY7C68013是一个带增强型MCS51内核和USB接口的单片机,完全遵从USB2.0协议,可提供高达480 Mbit/s的传输速率;内部集成PLL(锁相环),最高可使5l内核工作在48 MHz;对外提供2个串口,可以方便地与外部通信;片内拥有8 KByte的RAM,可完全满足系统每次传输数据的需要,无需再外接 RAM[4]。

3 逻辑设计

基于XILINX公司的XILINX7.1开发环境利用超高速集成电路硬件描述语言(VHDL)进行逻辑设计。FPGA内部模块主要包括高速写FIFO模块、SRAM控制模块和读FIFO模块。图3为三级缓存的逻辑框图。

图3 逻辑框图Fig.3 Logic block diagram

高速写FIFO模块负责将数据暂时存入内部FIFO中;SRAM控制模块的功能主要是控制SRAM的读出、写入,将一级缓存 FIFO中的数据写入SRAM,将SRAM中的数据读出写入三级缓存FIFO中。读FIFO模块主要是根据计算机下发的命令,选择读取高速FIFO,并将数据送至数据总线。

3.1 写FIFO模块设计

高速接口包括时钟和数据两个接口,高速数据接收采用同步RS485通信协议,高速时钟速率为3.686 4 MHz,与数据发送时钟同源,可以利用同步时钟实现数据接收同步。高速数据具有特定的帧格式,由标志字、ID字和数据组成,每帧容量为2 KByte。用特殊的标志字来表示数据帧的起始位置,可以识别有效的数据信息,从而实现同步[5]。标志字选用16进制数“FDB18540”,这种标志字经过大量测试表明它的独立性很好,不会和数据内容重复,可以有效避免假同步现象。高速数据进入一级缓存时,在同步高速时钟的下降沿时,检测高速数据的标志字,当检测到标志字时,就意味着有效数据的到来,将数据写入FPGA内部FIFO缓存中。写FIFO模块流程图如图4所示。

图4 写FIFO模块流程图Fig.4 Flow chart ofwriting FIFOmodule

3.2 读FIFO模块设计

读FIFO模块是通过FPGA内部集成FIFO半满信号触发CY7C68013单片机进行读数的,单片机通过与FPGA相连的PA2接口利用运行在其内的固件程序检测到FIFO半满信号后,单片机才开始从FIFO中读取数据,执行每次读操作,连续从FIFO中读取512 Byte数据,FIFO半满信号是读FIFO模块通过比较FIFO读写地址的差值而对其赋值的,当写地址与读地址之差大于512时,FIFO半满信号赋值为0,否则为1,这里设定读写地址差值为512,是由于USB设备一次只读取512 Byte数据,FIFO中缓存的数据只要大于512 Byte时,就应触发USB设备读取数据,这样可以避免多余数据在FIFO中积存引起的丢数现象。利用FIFO半满信号控制读数过程,可以有效防止空读和误读现象[6]。

3.3 SRAM控制模块设计

SRAM控制模块包括写SRAM和读SRAM两部分,写SRAM是由一级缓存FIFO的半满信号触发的,当半满信号有效时,开始写SRAM。读SRAM是通过读FIFO模块传递过来的request信号来控制的,当request信号有效时,读取SRAM中的数据,然后将它写入到三级FIFO。通过SRAM的3个控制端来控制外部的SRAM的读写操作,具体的SRAM控制模块的流程图如图5所示。

图5 SRAM控制模块的流程图Fig.5 Flow chart of SRAM controlmodule

SRAM 的访问控制由wesram,oesram,cesram 3个控制端决定,写SRAM和读SRAM时,控制线、地址线和数据线要有一定的时序先后,才能保证操作正确。设计中对写SRAM和读SRAM进行了时序仿真。图6和图7分别示意了SRAM的写时序和读时序。外部时钟速率为36.864 MHZ。

图6 SRAM写时序Fig.6 Time sequence of writing SRAM

执行写SRAM操作时,cesram保持低电平,oesram保持高电平,先将地址送到地址线上,同时wesram变为低电平,低电平状态至少要保持7 ns,才会保证数据写入SRAM,本设计中,wesram低电平保持时间约为80 ns。地址保持一个时钟周期后,将数据送到数据线上,数据写入SRAM,完成一次写SRAM过程。而后,写地址递增,以后的写SRAM操作重复此过程。

图7 SRAM读时序Fig.7 Time sequence of reading SRAM

读SRAM时,cesram保持低电平,wesram保持高电平,请求信号request为低电平。先将读地址送到地址线上,同时oesram变为低电平,在数据到来之前,oesram的低电平状态至少要保持5 ns,本设计低电平保持时间约为160 ns。地址保持两个时钟周期后,数据被读出送到数据线上,完成一次读SRAM过程。而后,读地址递增,重复此过程。

4 测试与结论

为验证三级缓存设计在高速通信应用过程中的可靠性和稳定性,进行了多次读数测试,并将接收到的结果进行分析,结果表明,运用此技术后,高速数据通信过程中没有出现丢数现象,而没有应用此技术的情形,丢数现象在测试中会随机出现。引入

SRAM作为外部缓存,结合FPGA内部FIFO设计的三级缓存结构,可以可靠地缓存高速数据,目前在高速通信中已得到了很好的应用。

[1]王鹏,伊鹏,金德鹏,等.基于三级存储阵列缓存高速数据包及性能分析[J].软件学报,2005,16(12):2181-2189.

WANG Peng,YIPeng,JIN De-peng,etal.Buffering highspeed packetswith tri-stagememortarray and its performance analysis[J].Journalof Software,2005,16(12):2181-2189.

[2] 夏金军,庄奕琪,包军林,等.一种基于FPGA的高速数据缓存的设计[J].微计算机信息,2008,24(11):226-228.

XIA Jin-jun,ZHUANG Yi-qi,BAO Jun-lin,et al.The design ofone type of high-speed data cache based on FPGA[J].Control and automation publication group,2008,24(11):226-228.

[3]张永乐,任勇峰,李圣昆.FPGA在多串口读数系统中的应用[J].电子技术,2010,2:7-8.

ZHANG Yong-le,REN Yong-feng,LI Sheng-kun.The application of FPGA on the data system with several UART[J].Electronic Technology,2010,2:7-8.

[4]林刚勇,马善农,许邦莲.CY7C68013在数据传输中的应用[J].微计算机信息,2007,23(10):76-78.

LIN Gang-yong, MA Shan-nong, XU Bang-lian.CY7C68013 at the application among data transfer[J].Control and automation publication group,2007,23(10):76-78.

[5]宫克存,黄永平.一种高效的串行通信协议及实现[J].长春科技大学学报,2000,30(1):98-101.

GONG Ke-cun,HUANG Yong-pin.A high efficient serial communication protocol and implementatio[J].Journal of changchun university of science and technology,2000,30(1):98-101.

[6] 于祥凤,刘学斌,胡炳樑,等.基于FPGA的高速数据存储系统中FIFO控制的设计[J].核电子学与探测技术,2010,30(1):59-62.

YU Xiang-feng,LIU Xue-bin,HU Bing-liang,et al.Design of FIFO in High Speed Data Storage System Based on FPGA[J].Nuclear Electronics& Detection Technology,2010,30(1):59-62.

猜你喜欢

高速数据低电平读数
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
基于AD9250的高速数据接口设计
读数
读数
读数
读数
浅谈物理电路与数字电路
15-MeV电子直线加速器的低电平系统
PCI-e高速数据采集卡的驱动与上位机软件设计
基于AD7891的浮空器高速数据采集系统设计