赵嘉禾,宋润泉,许惟超,王贇皓,张 旋
(上海航天电子技术研究所,上海 201109)
片上系统(System on Chip,SoC)的出现允许设计者将完整的系统集成到一块芯片上。由于系统复杂度和市场带来的压力,设计者不会独立开发完整的SoC,而是倾向于复用已设计好的功能模块或购买其他公司的知识产权(Intellectual Property,IP)核,以便于在高层级构建系统。SoC 中的IP 核通过片上总线相互连接,片上总线的性能直接影响IP 核互联效率。目前常用的片上总线标准包括高级微控制器总线结构(Advanced Microcontroller Bus Architecture,AMBA)总线、开放芯核协议(Open Core Protocol,OCP)总线等[1]。
然而,一方面SoC 集成的功能块功能的多样性使得不同功能块之间的时钟频率并不统一;另一方面,在当下的深亚微米乃至纳米级CMOS 工艺设计的集成电路中,受时序不稳定性的影响,几乎不可能做到全局时钟同步[2-3]。因此现今SoC 往往采取各种形式的全局异步本地同步的方式进行系统设计。在保证IP 核即插即用的前提下,不同频率时钟域下的IP 核在同步总线的数据交换就成为一大难题。解决这一问题的常用方案是采用若干个异步存储器,对地址或数据信息等进行缓存[4-5],但这不可避免地带来额外的硬件开销。
本文设计了一个跨时钟域的OCP-AHB 总线模型,该模型以OCP 总线作为IP 接口,在异步时钟域对一个支持OCP 的FIFO 进行读取和写入。针对OCP 的同步问题,本文重新设计了跨时钟域接口,在主从两端使用两个状态机用于系统控制信息的交互,将不同时钟域的主从设备发送的控制信息同步化并消除亚稳态。出于优化硬件开销的考虑,本文在设计中没有缓存总线的数据、地址或控制信息,而是使用有限状态机(Finite State Machine,FSM)控制信号转发,将数据、地址透明传输。同时,本文基于本文工作和已有的与OCP 兼容的AHB总线,实现了即插即用的跨时钟域片上总线。本文对设计的系统进行仿真验证,并给出系统的性能结果。
OCP 总线由开放芯核协议国际合作组织提出,目的在于实现IP 核的即插即用,只要IP 核与连接的总线(或其他模块)符合OCP,即使更换总线(或其他模块)也无需修改IP 核[6]。OCP 总线的可裁剪特性允许设计者对其进行改造,使之在满足OCP 协议的基础上更适应实际的工作需求。目前已经有许多工作对基本的OCP 总线进行改进,例如文献[7]对OCP 总线进行了多主从改造,允许判决器直接对正在工作的主机和从机进行判决,提高资源复用率;文献[8]在OCP 中引入有限状态机,从而实现更加灵活操控总线请求的目标。目前针对跨时钟域的OCP 总线接口研究较少。文献[9]中,作者使用双时钟同步先入先出(First Input First Output,FIFO)存储器和同步-异步FIFO 作为总线数据的缓冲,就跨时钟的OCP 总线进行了改进设计。然而这也意味着为了锁存数据和控制信息,会不可避免地浪费硬件资源。对于使用OCP 作为即插即用IP 核在片上总线的接口,文献[10]和文献[11]设计了与OCP 兼容的AHB 总线。该工作在AHB 总线的基础上,设计了使用OCP 协议的接口,使得连接在AHB 片上总线的IP 核不依赖于特定总线。
开放芯核协议国际合作组织提出的OCP 定义了两个实体之间的点对点通信协议,最基本的OCP 总线封装中,IP 核与片上总线作为两个通信实体通过OCP 总线相互连接。该协议设定了主机(Master)和从机(Slave)两个通信实体,由主机发送控制信号,从机进行响应,并允许两者半双工交换数据信息。IP 核的设计者根据IP 的功能,决定该核作为主、从或两者兼有,与IP 核功能相对应的OCP 封装接口用于实现该核与其连接的支持OCP的实体,即片上总线的互补,从而组成一个完整的OCP总线。
如图1 所示,本文针对OCP 的跨时钟域需求对现有的OCP 接口做出了改进。改进后的跨时钟域(Clock Domain Crossing,CDC)OCP 总线支持主从两端使用异步时钟进行通信,各自的时钟信号分别记作clk1 和clk2。为了避免异步传输数据时缓存数据造成存储资源的浪费,数据的传递由主从两端的状态机控制。主机的控制信号、从机发出的响应信号分别接入各自时钟域下的有限状态机FSM1 和FSM2 中,两个不同时钟的状态机之间的请求(Req)和确认(Ack)信号各由两级触发器进行同步[12],以消除亚稳态。主从两端对于所对应的另一侧接收到的控制信号SCmdAccept 和MRespAccept,则分别由FSM1 和FSM2 根据接收到的同步后AckSync 和ReqSync 信号进行判决。
图1 改进的CDC-OCP 总线原理图
图2 展示了图1 原理图中主、从两侧的有限状态机FSM1 和FSM2 的状态转移图。其中实线代表状态转移,虚线代表FSM1 和FSM2 两个状态机之间跨时钟域的请求-响应信息交互流。如图所示,两个状态机都属于Moore 状态机,其中,FSM1 包含4 个状态:等待命令(WaitCmd)、等待确认(WaitAck)、等待接受响应(Wait-RespAcc)和等待确认停止(WaitAckn);FSM2 包含5 个状态:等待请求(WaitReq)、等待接受指令(WaitCmdAcc)、等待响应(WaitResp)、等待请求停止(Wait-Reqn)和发送接受响应(SendRespAcc)。FSM1 和FSM2允许分别工作于clk1 和clk2 两个异步时钟下,只有在同步后的AckSync 和ReqSync 信号到达,两者才会响应异步时钟域的控制信号。
图2 改进的CDC-OCP 总线状态转换图
如图2 所示,FSM1 和FSM2 的初始状态分别处于WaitCmd 和WaitReq 状态。当主机发出MCmd1 命令时,FSM1 进入WaitAck 状态,同时向FSM2 发出Req 信号。接收到Req 信号后,FSM2 由WaitReq 状态转移到WaitCmdAcc 状态,MCmd1 在clk2 时钟域一侧的使能信号enCmd 置1,开始处理主机的命令。当从机正确接收到MCmd 后,会反馈SCmdAccept2 信号,FSM2 接收到该信号 时,FSM2 进入WaitResp 状态,并停止enCmd 使能。从机对来自主机的命令进行处理后,向主机发送SResp2反馈响应情况,接收到该信号后FSM2 进入WaitReqn 状态,并向FSM1 发出Ack 信号,表示等待主机确认。在从机进行响应的过程中,FSM1 直到收到Ack 信号为止一直保持在WaitAck 状态,之后转移到WaitRespAcc 状态,将SCmdAccept1 信号置1 并使能enResp,使在clk1 时钟域一侧的主机收到从机的响应状态。在主机根据响应SResp1 的情况进行处理后发出确认信号MRespAccept1,FSM1 接收到该信号后状态转移至WaitAckn,将Req 信号拉低以示本次请求完成。保持在WaitReqn 状态的FSM2 检测到低电平的Req 信号后转移到SendRespAcc 状态,向从机发出MRespAccept2 信号,将Ack 拉低并在下一时钟恢复初始状态。FSM1 检测到Ack 低电平后便会从WaitAckn 状态恢复初始状态。经过上述过程,图1 中CDC-OCP 总线实现了一次完整的跨时钟域通信。
AMBA 总线是ARM 公司设计开发的总线标准,已推出多个版本。它有着工艺无关、总线共享、支持突发、免费授权等特性,得到了广泛应用[13]。AMBA 标准定义了三种不同的总线,其中包括的AHB 用于高性能、高时钟频率系统模块[14-15]。
本文实现了与OCP 兼容的AHB 总线,将其作为系统总线连接多个不同时钟域的主机和从机。本文设计的系统模型如图3 所示,包含两个OCP 主机、两个作为OCP 从机的FIFO,以上四个实体通过第1.2 节实现的CDC-OCP 总线接入AHB 总线上。与OCP 兼容的AHB总线包含两个OCP 主端和OCP 从端,分别与主机和从机连接。CDC-OCP 总线作为跨时钟域的接口连接AHB总线和主机或从机,实现跨时钟域多主从通信。
图3 CDC-OCP-AHB 总线结构
图3 中的虚线表示了主机1 到从机2 建立通路的控制信息流。在传输开始时,主机1 向与之相连的CDCOCP 总线发送命令并建立主机1 到CDC-OCP 从端的数据通路,而后依次建立到AHB、到从机相连的CDC-OCP总线,和到从机2 的数据通路。通过这条数据通路,主机1 可以向从机2 发送或请求数据。
本文对CDC-OCP 总线进行了寄存器传输级建模,并通过构建一个支持OCP 的传输主机和一个作为OCP从机通信的FIFO,将处于不同时钟域的两者通过CDCOCP 总线相连接进行仿真,验证了设计方案的有效性。作为从机参与仿真过程的FIFO 会根据OCP 命令和自身数据空或满的情况决定读写操作是否进行以及反馈信号SCmdAccept 和SResp 的发出。
如图4 所示,本文对CDC-OCP 系统进行了仿真验证。设置主机时钟clk1 频率为20 MHz,从机时钟clk2频率为50 MHz,两者处于异步时钟域。在初始复位后,主机通过CDC-OCP 总线向FIFO 依序发送了写入、写入、读取、写入、写入、读取、读取、读取的操作请求,在写入过程中主机在数据总线中写入随机数。在写入、读取操作过程中,OCP 总线都可以正确存取数据。
图4 CDC-OCP 总线验证波形图
本文对图3 进行了建模,其中两个OCP 主机及两个OCP-FIFO 从机分别编号为1_1、1_2、2_1、2_2,从机1 和从机2 的十六进制地址分别设置为90000000 和10000000。系统中存在5 个时钟:总线时钟clk_bus、主机1 时钟clk1_1、主机2 时钟clk1_2、从机1 时钟clk2_1 和从机2 时钟clk2_2,分别设置频率为50 MHz、125 MHz、33.3 MHz、20 MHz、33.3 MHz。该模型中四个实体通过OCP_AHB 总线依顺序执行以下操作。操作Ⅰ:1_1 向2_1 写入数据,操作Ⅱ:1_2 向2_1 请求数据,操作Ⅲ:1_2向2_2 写入数据,操作Ⅳ:1_1 向2_2 请求数据。
图5 展示了多主从的OCP 系统通信的仿真波形图。从仿真结果可以看出,CDC-OCP-AHB 总线多主从的控制通道建立正常,可以实现跨时钟域总线数据的正确通信。这一结果证明了本文的设计成果的正确性。
图5 CDC-OCP-AHB 总线验证波形图
综上所述,本文改进设计并实现了CDC-OCP 总线。该总线支持主从两端在异步时钟域实现控制信息通信和读取写入数据。既确保了控制信息同步化,又可以最大化硬件利用率,无需缓存数据即可正确传输数据。此外,本文实现了兼容OCP 的AHB 总线,并将其与CDCOCP 总线结合作为多个支持主机和从机跨时钟域通信的片上总线进行了RTL 级仿真验证,证明了本文设计成果的可行性。本文轻量化其跨时钟域接口,使用主从两个状态机通过两级触发器消除亚稳态来相互通信,以此取代异步FIFO 在跨时钟域中的作用,从而提高了硬件利用率。