【摘要】在现代FPGA设计中,IP核的复用越来越重要。它可以利用已经非常成熟的商业IP核,提高设计成功率,减小工作量,减小费用并缩短产品研发周期。因此,不同IP模块之间的数据通信就显得至关重要。本文就是基于PLB协议和AMBA协议中AHB子协议之间进行了研究,并且设计了信号传输的硬件电路模块。实验结果表明:可以实现高效的并行数据传输,并且传输效率高,该电路满足设计指标。
关 键 词PLB总线,AMBA总线,NAND-FLASH,协议转换
1 引言随着半导体工艺的飞速发展,片上系统(SOC,System on Chip)逐渐成为集成电路设计的主流发展趋势。然而,目前集成电路的设计能力和EDA工具能力却远远落后于半导体工艺的发展。两者之间日益加剧的差距已经成为SOC技术发展过程中一个突出的障碍。采用IP核的复用进行设计是减小这一差距唯一有效的途径[1]。
SOC的设计重用技术主要可分为基于IP核的模块级重用和基于平台的系统级重用。在基于IP核复用的SOC设计中,不同功能模块之间的数据传输就显得非常关键,本文研究了PLB总线协议和AMBA总线协议之间进行数据交换时的原理,提出了在两种协议间可以实现高效的数据传输的方法,并且通过了实验验证。 2 总线协议介绍 2.1PLB总线协议PLB(Processor Local Bus)是在集成的Core+ASIC系统中使用的高速片上总线, PLB支持主设备和从设备之间的读写数据传输。PLB总线用来实现不同IP模块之间高带宽、低迟滞的连接。其传输数据的最大宽度可达128位,并且可以实现不同数据位宽的传输(64位/32位/16位)。如图1所示,其数据传送分为两个周期:地址周期和数据周期。通过基于PLB总线的握手机制实现主从设备之间的通信,即主设备发送访问(读/写)请求信号,从设备在收到请求信号以后,发出响应信号,以表示回应主设备的访问请求。
图1 PLB地址周期和数据周期
PLB的接口均为单向接口以提高总线传送速度。接口可以兼容位宽小于总线位宽的主设备和从设备,但在传输时,传送的数据宽度与主设备或者从设备的数据宽度一致,此时总线的利用率很低。在FPGA中如何实现通用的优化PLB接口是一个技术难点。 2.2AMBA总线协议AMBA(Advanced Microcontroller Bus Architecture)总线协议是ARM公司专门为RISC处理器研发的一种总线协议,2.0版AMBA标准定义了三组总线:AHB、ASB、和APB。本文主要研究的是其中的AHB总线协议[2]。
AHB总线协议使用一个中央多路选择器互联方案。该方案所有总线主机设备输出地址和控制信号用来指示它们想执行传输的同时仲裁器决定哪一个主机能够将它的地址和控制信号连通到所有的从机。同时也需要一个译码器来控制读数据和响应多路信号选择器,多路信号选择器选中来自传输中所包含从机的适当信号。
图2 AHB总线的简单传输协议
在一次AHB传输开始之前总线主机必须被授予访问总线。被授权的总线主机通过驱动地址和控制信号来发起一次AHB传输。AHB传输包含两个截然不同的部分:地址相位,只持续单个周期;数据相位,可能需要多个周期。如图2所示,HCL K表示AMBA系统时钟, HADDR[31∶0]表示32 位地址总线,HWDATA[31∶0]表示32 位写操作时的数据总线,HREADY是AMBA 总线的读写状态信号,HRDATA[31∶0]表示读操作时的数据总线[3]。 3 转换协议的硬件电路产生本文的研究是在一个基于PowerPC处理器核的最小系统中进行的,为了增强最小系统的实用性,需要加接一个大容量的存储器,为此,选择了东芝公司的NAND-FLASH,容量为2Gbit,支持2.7V到3.3V的宽电压范围。
FLASH控制器是基于AHB协议来进行数据传输的。最小系统的数据传输是基于PLB协议的,为此,需要一个接口电路,实现PLB总线和FLASH控制器之间的通信,本模块的作用就是在满足PLB协议的要求下完成对FLASH的读写控制和数据传输。 3.1设计思路及实现方案对于要连接的NAND-FLASH,由于它是通过串行方式来传输数据的,它的一个八口双向数据接口同时担负着传输命令、传输地址以及传输数据的三重任务。
PLB协议中有一个超时等待功能,每完成一次数据传输的时间不能超过17个周期,而FLASH由于是串行传输,完成一次32bit的数据传输所需周期不止17个周期。为此,每次传输只对32bit中的高16位进行读书操作,而对其低16位直接进行赋0操作,由此可以节约将近一半的时间,使得FLASH完成一次16bit数据传输(包括发送命令、发送地址和两次读取数据)的时间小于17个时钟周期,满足要求。
由于最小系统的数据位宽是16位,所以每次只在数据线的高16位传输数据,只需要将这个数据的高16位和最小系统相连[4]。 3.2串并转换的状态机实现图3所示是状态机转换电路的状态机实现图[3]。本设计是用Verilog硬件描述语言来实现电路功能的,状态机的使用使得电路的行为结构得以简化,相应的芯片面积占用也跟着减小,有利于数据的高速传输。
转换电路内核的任务是将PLB接口转译后的指令、地址、数据按照FLASH控制器遵循的AHB传输协议送入FLASH,并将FLASH存储器的状态标志位返回给PLB接口(PLB接口再根据处理器的具体需求将状态标志返回给处理器)。设计的重点在于时序的精确控制,基于状态机的高效时序控制,本本选用状态机实现[5]。转换电路内核状态机跳转关系如图3所示。
针对系统的具体情况,为简化系统复杂度,该控制器只实现了基本的读、写操作。从功能上可以将状态划分为6大类:指令(CMD)、地址(ADDR)、读(READ)、写(WRITE)、复位(CORE_RST)以及IDLE。为了满足FLASH控制器的特定时序,指令、地址、读、写这四类状态都分配了单独的建立时间和保持时间状态来满足时序要求,实现上主要是通过计数器完成状态的跳转。在每个特定状态中将FLASH的控制信号按时序约束的具体情况进行电平处理,以满足较复杂的控制时序[6]。
图3 简化的状态机示意图 3.3硬件电路图4是转换器的硬件实现电路的顶层模块图,两边的模块分别为PLB和AHB的接口电路,中间的模块是本论文中实现协议转换的状态机,整个电路和外接IP模块共用一个全局时钟,可以实现同步电路的诸多优点,而且由于没有时钟歪斜,使得电路在具体实现时只需考虑关键路径和面积,而与具体的工艺参数或FPGA器件类型无关[7]。
图4 转换器的顶层RTL图 4 仿真结果在将硬件电路下载到FPGA中实现功能之前,为了确保逻辑上和时序上的正确性,编写了针对本转化器的test bench模块[4],并且在Modelsim上行进了仿真,仿真波形显示,可以完成将8位串行数据转换为16位并行数据并且按照时序要求输出的功能,图5是其Modelsim的仿真波形截图。