基于FPGA的高速ZBT控制器设计

时间:2023-09-16 15:10:06 来源:网友投稿

刘百超

(信阳师范学院 物理电子工程学院,河南 信阳 464000)

随着现代科技的发展,人们的要求也越来越高,如看视频的清晰度、监控的实施性等,这些都可以通过数字化来实现,这些数字化信息产生了大量的数据,如是对数据的存储速度要求越来越高[1]。高速存储成为了研究热点[2,3]。目前,快速存储方案可以分为两个大类,分别是算法级方案和电路系统级方案,而后者无疑是最快速的方案。电路系统级方案又可以分为板级方案、ASIC(专用集成电路)方案和FPGA方案。其中,FPGA方案具有开发成本低、灵活性高、投放市场快的优点,因而受到更多研究者的青睐。

FPGA(Field-Programmable Gate Array)是现场可编程门阵列的英文简称,它内部包含了大量的可编程资源,主要包括查找表LUT、寄存器、存储器、硬件乘法器、PLL等。FPGA芯片内部的可编程资源可以实现并行工作,因而具有极其强大的处理能力,其运算能力可达传统CPU的数百倍甚至更高[4]。也正因此,在许多信号处理平台中,FPGA承担着运算与调度核心的功能,其主要开发手段则依赖于硬件描述语言(以下简称HDL)[5]。由于FPGA片内存储资源有限,必须为其配置大容量外存储器[6]。在众多类型的外部存储器中,静态存储器SRAM具有功耗低、速度快、无需动态刷新等优点,因而被经常用于拓展FGPA存储空间。近十年来,许多研发人员围绕这个问题开展了大量的研发工作,取得了一些突破性进展。其中,比较有影响的代表性工作有两个:第一个是在2018年, Rodríguez-Olivares等利用一种SRAM(NAND Flash Memory), 在RAID 6系统框架下将读写速度提高到58.24MHz[7];
第二个是在2020年,Muhammad Irfan等利用三元内容可编址SRAM,与FGPA芯片组合,实现一种可重构低功耗FPGA存储器扩展系统,将读写速度提高到128.76MHz[8]。

读写速度的瓶颈在于SRAM的总线架构。为了进一步提高FPGA读写SRAM的速度,一个最重要的手段就是采用高速SRAM,而ZBT(Zero-Bus-Turnaround) SRAM则是高速SRAM的高性能产品。它消除了传统SRAM的总线等待周期,在读写状态下总线利用率均可以达到100%。目前,ZBT SRAM的典型存储容量可达72Mbit,访问速度最高可达250MHz。如果能够将FPGA与ZBT有效组织起来,无疑是实现高速存储的有效途径。但迄今为止,没有发现研发人员开展这项研究的成果。

本文旨在开展这项研究,设计一款基于FPGA的高速ZBT控制器,实现大数据的高速存储。该控制器从4个方面来确保ZBT读写的时序稳定度并提高工作频率:(1)采用动态相位连续可调技术实时调整时钟相位;
(2)通过施加合理严密的时序约束确保充裕的建立保持时间;
(3)通过FPGA的高级可编程输入输出延时器使各I/O端口延时基本一致;
(4)插入多级流水线以改善最高工作频率。通过4个方面的设计,增大数据吞吐量,实现了数据的稳定读写;
FPGA的输入输出延时使得IOB输入输出一致;
多级流水线策略提高了时序性能。从而实现了基于FPGA的高速存储,使得FPGA+ZBT SRAM存储读写速度可以达到200MHz以上。该设计已在硬件电路中成功验证,并通过高低温环境试验验证,证实了设计的正确性和有效性。

系统针对使用FPGA+ZBT SRAM或其它同类存储器的信号处理系统,通过多种策略的综合应用,解决了超高速频率下FPGA读写访问的时序不稳定、HDL代码修改带来的时序参数变化以及产品高低温环境下的时序变化导致读写错误等技术难题。经在实际电路中验证,可以达到200MHz以上的数据稳定读写[9]。

本系统采用可综合HDL语言为主要设计手段,可适用于目前市场上的所有主流FPGA器件,如Xilinx公司的Virtex6、7、Kintex7系列、Altera公司的StratixII~V系列等。本设计整体框图如图1所示,其中虚框内即为在FPGA器件内实现的ZBT读写控制器,下方为2片ZBT SRAM芯片组成乒乓缓冲系统,右方为ZBT读写控制器对外接口,其中读端口与写端口分开,可实现双口RAM读写操作功能。

图1 ZBT SRAM读写控制器整体框图

该控制器的主要工作流程可概括如下:

(1)系统上电后,产生全局复位信号,复位所有寄存器和状态机;

(2)禁用ZBT SRAM输出使能,置ZBT SRAM写使能有效,初始化伪随机数种子,并将伪随机数产生器输出数据连续写入ZBT SRAM中的每一个地址;

(3)禁用ZBT SRAM写使能,并置ZBT SRAM输出使能有效,开始回读ZBT数据,同时再次初始化伪随机数种子,将每一个地址回读得到的ZBT数据与伪随机数产生器输出数据比较;

(4)如果二者比较数据不完全相同,证明读写ZBT SRAM中发生了时序违反情况进而导致读写错误,由时钟相位调整模块对ZBT工作时钟进行相位调整,每次相位调整步进约10~20度即可,步进过大则难以保证找到最佳时序裕度位置,过小则会使相位调整耗费过长时间才能找出最佳位置;

(5)如果二者比较数据完全相同,证明上一轮ZBT读写时序正常,但仍不能保证当前的时序余量已足以保证高低温下的走线延时变化,因此还需要继续进行相位调整,并继续测试读写是否有误。在连续6次以上调整ZBT工作时钟相位均读写无误时,证实已经找出覆盖整个合法时序裕量窗口的位置,再将输出时钟相位反相调整3次,即可使时钟沿恰好出现在总线及控制信号变化的中间位置,从而得到最大的建立保持时间裕量。

(6)在时钟相位调整完毕后,即可开始正常的ZBT读写操作。由于采用了2片ZBT芯片,因而可以组成乒乓缓冲系统,对FPGA的其余模块相当于实现了双口RAM操作功能,对任意地址的读操作和写操作可以同时完成,吞吐量改善了一倍。

系统依据ZBT的特征进行设计。ZBT的主要特点是其数据总线相对地址总线和读写控制信号有2个时钟周期的延迟,即在进入数据写入时,先给出写地址和写使能,然后在经过2个时钟周期后,再给出该地址的写数据完成数据写入。同样地,如果要进行数据读操作,在给出读地址和读使能信号后,也要再经过2个时钟周期后才能从数据总线上得到数据。总体上,ZBT SRAM的基本读写时序如图2所示。以下介绍各内部模块设计技术。

图2 ZBT SRAM读写基本时序图

2.1 时钟设计

时钟是现代高速数字电路的核心,由于本设计的工作速度很高,而FPGA由于先天架构的特点,无法实现各I/O的精准延时处理,甚至同一个I/O端口信号在不同工作温度下的延时特性也常常会有5ns以上的延时变化。传统的ZBT SRAM控制器由于工作频率较低(通常不超过100MHz),器件I/O延时特性的变化尚不足以违反建立保持时间时序要求,然而对于超过100MHz甚至200MHz以上的超高频率应用,I/O端口延时特性变化将会带来显著的时序影响。

本设计共使用了3个独立的时钟管理器,每一个时钟管理器内部均包括一个锁相环电路PLL,通过反馈通路实现输出时钟与输入时钟的频率相位严格对齐,整个时钟树如3图所示:

图3 ZBT SRAM读写控制器时钟设计策略

可以看到,外部输入时钟经过FPGA专用全局时钟引脚进入时钟管理器1,并输出4路时钟信号,其中1路直接输出供FPGA内部逻辑使用,还有1路用于实现PLL时钟反馈,剩余2路时钟则各自经过一个独立的时钟管理器(图3中的时钟管理器2和3)然后输出至FPGA引脚,并经过PCB走线送至2片ZBT的CLK端。但是与时钟管理器1不同,时钟管理器2和3的输出相位均具有相位调整功能,即可以通过控制端口使其输出时钟相对输入时钟的相位超前或滞后,该技术称作动态相移控制,可以实现输出时钟的任意相位调整。本设计正是通过该功能达到了无论与ZBT SRAM接口的控制及总线信号何时变化,总可以通过调整时钟输出相位实现稳定的数据读写功能。

2.2 时钟相位调整模块

该模块用于调整时钟管理器2和3的输出时钟相位,对外接口信号分别是工作时钟PSCLK、时钟相位调整功能使能信号PSEN以及用于代表是减少还是增加相位步进的PSINCDEC。目前主流FPGA器件的时钟管理模块动态相位调整功能的调整步进可达其内核PLL周期的1/56,而PLL周期一般在1ns左右,因此单次动态相位调整对应的时间延迟可控制在20ps以下。如此高的相位调整精度已大大超过系统需要。因此在实际设计中,可以通过多次置PSEN信号有效的方式增加调整步进至10~20度。

2.3 复位设计

时钟和复位信号是FPGA设计中最为关键的两个信号,复位信号本设计中用于系统上电时将所有寄存器和状态机复位至确知状态。由于复位信号来源于外部端口输入,对FPGA内部工作时钟是一个典型的异步信号,因此必须对其进行同步化处理。本设计通过级联3级寄存器实现复位信号的同步化,然后经过全局走线资源成为所有寄存器的复位信号,实现了同步复位、同步释放的效果。

2.4 伪随机数产生器及读写测试模块

伪随机数产生器用于产生ZBT读写测试数据。由于ZBT存储器容量很大,采用事先在FPGA内部存储测试向量的做法并不可行,因此采用了基于M序列的伪随机数发生器,仅使用32个寄存器及一系列反馈线,即可生成循环长度高度高达2Λ32-1的伪随机数,循环长度已超过目前市场上容量最大的ZBT芯片CY7C1470的存储深度。此外,该产生器的随机种子可以动态变化以得到更好的随机特性。

读写测试模块则用于读写错误统计。在读写测试阶段,每次开始写ZBT芯片及回读数据时,均需对随机种子进行初始化,然后开始连续地址读写测试,先写入长度达2^21-1的伪随机数,然后再逐一回读。只有当全部写入数据和全部回读数据完全相同时才认为当前读写操作成功。并将测试结果(0代表无误,1代表有错误)记录至6位宽的向量err_array的最低位,同时err_array左移一位,该向量初始值为全1,因此只有在连续6次检测到读写成功后,err_array变量才会变成零值,这代表已经找出最佳读写时序窗口。然后,由主控状态机控制时钟相位调整模块反相调整3个步进即可置ZBT工作时钟为最佳相位。在正常工作阶段,伪随机数产生器及读写测试模块可处于禁用阶段以降低动态功耗。

2.5 ZBT读接口控制器

该控制器的主要功能是将外部模块输入的读使能及读地址进行多级寄存,即插入多级流水线,同时将ZBT芯片输出的数据寄存至FPGA工作时钟域并向外部模块输出。

该模块的设计关键是必须考虑到FPGA实际物理引脚的输入输出走线延时。具体的主要延时路径包括:ZBT读地址及输出使能信号从FPGA内部至FPGA引脚处的输出延时(典型值可达5~7ns,在不同引脚分布、FPGA占用资源及工作温度等不同条件下略有差异),ZBT数据总线经过FPGA输入引脚进入内部寄存器的输入延时(典型值约6~8ns,在不同引脚分布、FPGA占用资源及工作温度等不同条件下略有差异)。

此外,还必须要考虑到从FPGA引脚输出地址总线数据到ZBT芯片通过自己的工作时钟上升沿识别出该地址的时间,该时间的长短与地址总线数据变化时刻和ZBT芯片CLK信号时钟沿之间的时间长度有关,最长可接近1个时钟周期,最短可能只有1ns左右。对于传统的ZBT控制器设计策略,这一部分时间根本无法精确估计,然而,由于采用了时钟相位自动动态调整策略,无论FPGA输出引脚延时信息如何变化,总可以保证ZBT工作时钟沿出现在地址及控制信号变化的中间位置,即二者相差半个时钟周期。对200MHz工作频率的ZBT芯片,该时间约为2.5ns。

理想情况下,ZBT芯片在当前时钟沿检测到读地址和读有效后,可在经过1个时钟周期+3ns后通过双向数据总线输出有效数据。因此,考虑到各种延时信息后,如果是在200MHz工作频率下,从FPGA给出地址总线信息,到ZBT芯片送出数据,至少需要经过5+2.5+5+3=15.5ns时间,而该数据进入FPGA内部又至少需要6ns,因此,总体延时时间已经高达21.5ns,超过了4个时钟周期,也即FPGA需要经过5个时钟周期才能检测到正确数据。而FPGA内部为了提高工作频率,还必须要对所有输入输出信号进行寄存后再输入输出,最终,从ZBT读写控制器接收到外部模块给出的ZBT读地址开始,必须要等待1+5+1=7个时钟周期后才能得到正确数据。其中第一个时钟周期是由于寄存读地址造成,中间5个时钟周期是由于输入输出引脚延时造成,最后一个时钟周期则是由于对输入数据进行寄存造成。需要说明的是,虽然该ZBT读写控制器从读地址到输出数据的延时长达7个时钟周期,但该延时实为流水延时,并不会真正降低ZBT的读写效率,仍然可以实现100%状态下的总线利用。

2.6 ZBT写接口控制器

与ZBT读接口控制器相比,写接口控制器比较简单,只需要把外部模块输入的写地址、写使能、写数据经寄存一级后再输出至ZBT芯片即可。由于此前的ZBT读写测试功能已经确保ZBT工作时钟恰好出现在其所有输入数据变化时刻的中间位置,因此不会带来任何时序违反问题[10]。

2.7 输入输出延时控制

如前所述,FPGA的引脚延时不可事先预估。但是需要强调的是,在设计代码基本定型及引脚绑定完成后,由于布局布线策略的效果已经趋于固定,各引脚的输入输出延时信息也已经基本稳定,不会再发生显著变化。此时如果某些总线或信号的延时信息与其它信号有明显差异,则会使该信号的建立保持时序裕量大大减少,因此需要调整其延时分布,使所有信号延时信息尽可能一致[11][12]。

许多传统FPGA设计使用手动插入多级反相器来达到延时效果,然而这种方式不可避免会带来一系列问题:一是延时效果无法精确控制且不稳定,二是输出信号的相位噪声大大恶化。不仅如此,同样的代码在不同的综合工具下优化效果不同,还会导致不同的时序延时效果。因此,这种策略并不适合在高速场合下使用。

为此,采用了FPGA中的高级可编程I/O资源IDELAYCTRL和IODEALY,其中前者是后者的控制中枢,输入工作时钟可选200MHz或300MHz,后者则用于完成精确的输入输出延时调整,在200MHz下,延时单位步进为78ps,在300MHz下,延时单位步进可达52ps。更重要的是,IODEALY是专用于IOB引脚的输入输出延时控制模块,它不占用任何寄存器及LUT资源,也不会降低输出信号质量,高低温上的延时参数保持不变,十分适合在高速高频场合下采用。而IDELAYCTRL工作时钟为200MHz,IODELAY最大延时量为32个单位步进,因此最大延时量为2.5 ns,但事实上,还要考虑到接入IODELAY带来的额外走线延时(约1~2ns),因此实际上IODELAY延时量可超过4 ns,这样的延时控制已足以补偿由于布局布线造成的IOB输入输出不一致性[13]。

2.8 主状态机控制

该模块是所有其余子模块的控制中枢,它采用了一个复杂的同步状态机实现,共分成以下10个状态:

IDLE:系统复位及上电后的初始状态,解除复位后即自动跳至INIT_REG状态;

INIT_REG:该状态用于初始化伪随机数产生种子,初始化完成后即跳至WRITE_ZBT状态;

WRITE_ZBT:用于完成对ZBT所有地址的伪随机数据写入,写入完毕后跳至CLR_CNT状态;

CLR_CNT:用于清除ZBT读写计数器值,为回读作准备,清零完成后跳至READBACK_ZBT状态,同时该状态再次初始化伪随机数产生种子;

READBACK_ZBT:用于回读所有地址的ZBT数据,并与伪随机数产生器的输出数据进行比较,统计是否完全一致,统计完成后进入PS_MODIFY状态;

PS_MODIFY:该状态由时钟相位调整模块对时钟管理器2和3的输出时钟相位进行调整,每次相位调整步进10~20度,然后跳转至WAIT_PSDONE状态;

WAIT_PSDONE:在该状态,等待PSDONE信号置高,以表明时钟管理器2和3输出时钟相位调整已经完毕,然后检测最近6次的错误统计结果是否均无误,若是则进入SET_OPT_VALUE状态,否则转至INIT_REG状态,继续新的时钟相位下的读写测试;

SET_OPT_VALUE:在该状态,将由时钟相位调整模块对时钟管理器2和3的输出时钟相位进行反向调整3次,以使ZBT工作时钟的上升沿出现在总线及控制信号变化的中间时刻,从而达到最大的时序裕量,调整完毕后跳至WAIT_PSDONE2状态;

WAIT_PSDONE:同样地,在该状态,等待PSDONE信号置高,以表明时钟管理器2和3输出时钟相位调整已经完毕,调整完毕后,判断当前是否是第一次进入该状态,若是代表此时ZBT1芯片时序调整已经完成,但ZBT2还未进行,因此需要跳转INIT_REG状态,对ZBT2重复ZBT1芯片调整的所有工作,若已经是第二次进入该状态,则证明所有ZBT芯片已经调整完毕,可跳转至INIT_DONE状态;

INIT_DONE:该状态为时序调整完成后的正常工作状态,此时外部模块可以通过其读写数据端口完成对ZBT芯片的同时数据读写,达到乒乓缓冲效果。

2.9 时序约束策略

FPGA的输入输出端口布局布线延时虽然无法事先得到,然而仍可以通过用户约束文件使布局布线后的器件最坏走线延时不超过约束值。需要注意的是,该约束值必须考虑到实际接口电平形式及芯片速度、工作温度等参数,否则即使施加约束也无法成功完成布局布线。

具体到本设计中,施加的约束共有3种,第一种是周期约束,用于约束FPGA的最高工作频率;
第二种约束是输出约束,即clk to output约束,利用该约束控制ZBT读写控制器所有输出信号的最大延时;
第三种约束为输入约束,即对输入信号的建立和保持时间约束。后两种约束也称为偏移约束(OFFSET约束)。

由于本设计内部采用了多级流水线策略寄存中间数据,因此大大提高了时序性能,在Vetex6平台上,最高工作频率可达250MHz,已超过目前市面上所有ZBT芯片的工作频率。输入和输出约束则主要用于分析IOB引脚的延时分布,如果某些引脚延时与其它信号相比离散性较大,则可以使用输入输出延时控制功能微调其延时,最终达到所有信号的延时信息基本一致的效果。

该系统以以下器件和模式验证。选择目前速度最快、容量最大的Cypress公司的CY7C1470为ZBT SRAM器件代表,以Xilinx公司中端器件Virtex6 LX130为FPGA器件典型代表。整个设计采用2片CY7C1470组成乒乓缓冲系统,从而可实现数据流的连续读写,进一步提高数据吞吐量。工作频率设定为160MHz。

CY7C1470的容量为2M*36bit,是典型的流水模式ZBT SRAM,最高工作频率超过200MHz,其主要对外接口信号介绍如下:

A0~A20:21位地址总线,输入端口;

D0~D35:36位数据总线,双向端口;

WE_N:写使能,低电平代表写操作,高电平代表读操作,输入端口;

CLK:工作时钟,所有信号变化均与该信号的上升沿同步,输入端口;

OE_N:输出使能信号,只有在该信号为低电平时,数据总线D0~D35才能对外输出数据,否则总线处于高阻态,输入端口。

按照CY7C1470产品数据手册,所有输入信号相对于CLK上升沿的建立时间要求是不小于1.4ns,保持时间要求不小于0.4ns。而输出信号D0~D35相对于CLK上升沿的延迟时间不超过3ns。

对FPGA器件,不同制造工艺、不同档次、不同驱动电平的芯片引脚输入输出延时均有所不同,详细的参数可参见FPGA器件的数据手册。以Virtex6器件和LVTTL电平为例,在低温下,输入信号从引脚至FPGA内部寄存器的走线延时一般不超过2ns,然而在高温下,走线延时可以上升至7ns甚至更高。同样地,输出信号的走线延时变化范围也可达5ns左右。

针对上述延时估计,可将160MHz下ZBT输入输出偏移约束设置为:

TIMEGRP "zbt1_abus" OFFSET = out 7 ns AFTER "FPGA_CLK" ;

TIMEGRP "zbt1_dbus" OFFSET = out 7 ns AFTER "FPGA_CLK";

TIMEGRP "zbt1_ctr" OFFSET = out 7 ns AFTER "FPGA_CLK";

TIMEGRP "zbt2_abus" OFFSET = out 7 ns AFTER "FPGA_CLK";

TIMEGRP "zbt2_dbus" OFFSET = out 7 ns AFTER "FPGA_CLK";

TIMEGRP "zbt2_ctr" OFFSET = out 7 ns AFTER "FPGA_CLK";

TIMEGRP "zbt1_dbus" OFFSET = in 7ns BEFORE "FPGA_CLK";

TIMEGRP "zbt2_dbus" OFFSET = in 7ns BEFORE "FPGA_CLK";

其中,abus代表地址总线,dbus代表数据总线,ctr代表读写使能、输出使能等控制信号。

在160MHz下,按照与2.5类似的时序分析过程,可以计算出从FPGA给出地址总线信息,到FPGA内部寄存器可以稳定寄存ZBT输出数据的总路径延时约22ns,大于3个时钟周期而小于4个时钟周期。因此该情况下从ZBT读写控制器接收到外部模块给出的ZBT读地址开始,需要等待1+4+1=6个时钟周期后得到正确数据,与200MHz下的结果相比,相当于读数据减少了一个时钟周期。在其它工作频率下的延时分析仍可基于相同机理分析,此处不再赘述。

整个设计经过ISE13.4软件完成布局布线后,报告所有静态时序报告均合法,同时该控制器仅占用432个寄存器和232个查找表。具有较好的资源经济性。

该设计已在硬件电路中验证成功,并通过高低温环境试验验证,证实了设计的正确性和有效性。

该系统对传统的基于FPGA的ZBT控制器进行了多方面改进:利用M序列发生器构建伪随机数发生器,并以此为测试数据源,为控制器增加了随机读写测试功能;
使能了FPGA内部时钟管理模块的动态相位高速功能,通过遍历所有相位的方式,找出最佳的数据采样时刻,进而保证了ZBT读写时序的稳定性,而且不再受代码调试、修改以及高低温变化的影响,总可以确保数据读写正确;
为了降低FPGA引脚延时分布离散性带来的影响,通过施加合理的OFFSET约束控制IOB引脚延时,并通过IODELAY高级可编程资源进一步补偿各引脚的延时分布,达到了所有信号延时分布基本一致的良好效果。

采用本设计后,可以确保ZBT读写时序稳定,FPGA开发工程师可以将主要精力放在产品的功能调试上,而不必再通过费时费力的增量编译、手工布局布线、区域反标注、盲目调整输出时钟相位方式等技巧实现。此外,本设计主要采用HDL代码和时序约束,并不局限于具体器件,虽然前述策略主要以Virtex6为实现器件,但目前市面上在售的所有主流FPGA器件均具有动态相位调整和可编程输入输出延时功能,因此本设计同样可以在这些产品中成功运用,具有很好的通用性。

猜你喜欢时序延时时钟基于Sentinel-2时序NDVI的麦冬识别研究中国农业信息(2021年3期)2021-11-22别样的“时钟”数学小灵通·3-4年级(2021年9期)2021-10-12基于级联步进延时的顺序等效采样方法及实现自动化仪表(2020年10期)2020-11-13古代的时钟小学生学习指导(低年级)(2020年10期)2020-11-09基于FPGA 的时序信号光纤传输系统电子制作(2017年13期)2017-12-15有趣的时钟数学大王·中高年级(2017年2期)2017-02-08一种毫米波放大器时序直流电源的设计电子制作(2016年15期)2017-01-15时钟会开“花”学苑创造·A版(2016年4期)2016-04-16Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration船舶力学(2015年6期)2015-12-12桑塔纳车发动机延时熄火汽车维护与修理(2014年10期)2014-02-28

推荐访问:控制器 设计 FPGA