关于FPGA的全局异步局部同步四相单轨握手协议实现

电子说

1.2w人已加入

描述

异步电路所具有的低功耗、低电磁噪声辐射、高速等突出特点,使其逐渐成为当前设计的焦点。现有异步电路的实现方法往往通过定制的VLSI结构完成,或者设计独特的异步FPGA结构来实现,而现有基于常规FPGA设计的异步电路,往往难于解决其中的冒险、延迟等问题。

全局异步局部同步[1]GALS(Globally Asynchronous Locally Synchronous)系统,结合了同步设计和异步设计的优点,在解决多时钟域问题和模块更新的复用性等方面有巨大优势,其特点是在各同步模块需要处理时才工作,其余时间可以处于暂停状态,不用引入太多异步单元,较易于使用常规FPGA实现,特别是在现有SoC[2]系统中多同步模块异步互联方面有着突出优势,且其具有低功耗、高吞吐量的特点。

参考文献[3]描述的是一种全局异步局部同步的专用FPGA(GAPLA),其内部结构通过同步逻辑模块实现数据计算,在逻辑模块间由同步、异步互换接口完成异步互联,其关键技术是同步、异步互换接口和时钟暂停(Pausible clocking)电路结构,而在常规FPGA中不包含这些结构。

参考文献[4]在常规FPGA实现GALS系统,是通过信号状态转换图(STG)的方法设计接口电路,利用Petrify软件实现的一种GALS系统异步封装电路,其将接口模块同步分解成逻辑门电路,容易产生冒险。参考文献[5]则通过使用带复位端的D触发器及延迟单元来完成接口电路的设计,其接口中的延迟单元要求是FPGA内部的标准单元,而在常规FPGA中不包含此标准单元。

本文基于常规FPGA中大量的LUT结构,通过Quartus软件的逻辑锁定[6]技术将设计的C单元锁定在一定区域,保证了C单元的无冒险性,同时建立标准C单元库。使用C单元实现了GALS系统所需要的延迟电路、接口电路、时钟暂停[7]电路。利用状态机设计的计数器作为同步模块,基于四相单轨握手协议[8],完成两同步模块的异步互联。

1 点对点GALS系统

GALS系统从局部来看各同步模块独立设计;从全局来看,各模块彼此时钟独立,以各自工作频率独立运行,其互联通过设计的异步接口完成。且各同步模块时钟具有可暂停性,保证不需要数据处理时时钟不运行的效果,具有低功耗的特点。点对点GALS系统是采用单点同步模块对应单点通信的方式实现的异步电路。

整个结构由三部分组成:局部同步区域、握手区域、时钟可暂停区域。在同步区域完成的是同步模块的设计,其同步模块可更新复用;握手区域通过同步、异步互换接口及锁存器完成,由两边同步模块发送的WR、RD信号来触发握手区域进行握手;时钟可暂停区域由内部产生的时钟及握手区域输出的暂停信号(STRETCH)进行时钟的调整,确保系统的低功耗运行。其组成框图如图1所示。

同步电路

在点对点GALS系统中,设计的重点是接口电路及局部时钟可暂停模块,由于不需要引入外部时钟,所以在全局复位后,时钟可暂停模块就应当产生时钟信号,时钟信号的频率根据各同步模块需求情况设定。在同步模块的设计中,其既要有数据接收模块和数据处理模块,又要产生上级的接收信号(RD)和下级的数据处理完毕信号(WR),以确保电路接连不断地工作。

2 状态保持单元的设计

异步电路中为了避免冒险现象的发生,常需要设计一些适合异步电路的状态保持单元,通常难于设计的就是无冒险的Muller C单元,且其为异步电路的重要组成部分。Muller C标准单元(c_std)的基本功能为:当输入信号A、B同时为“1”时,输出S为“1”;当输入信号A、B同时为“0”时,输出S为“0”;

当输入信号A、B处于其他状态时,输出保持原信号。从而当输出信号为“1”时,就能指示输入信号都为“1”。输出为“0”的情况同理。

由此可以看出其信号的跳变能够指示或确认其他信号的跳变情况,这样就能够确保电路避免冒险现象的发生。而通过逻辑门设计的C单元,常因内部连线延迟以及门延迟的特性,使得其映射到FPGA内部时会出现冒险现象,因而只有通过建立查找表结构的方式设计C单元,才可使得映射到常规FPGA时避免冒险发生。

在图1的GALS系统中使用到的4种标准的C单元,采用Verilog HDL语言编写,通过编译生成.QSF文件,利用Logic-Lock技术生成网表文件,通过这三个文件即可建立常规FPGA可调用的无冒险C单元库。图2描述的是4种C单元库文件符号及c_std相应的Verilog描述。在C单元库中的c_clr_l单元具有置0功能,而c_clr_h具有置1功能。表1列出4种C单元的lut_mask值。

同步电路

参考文献[9]使用的是门电路描述的C单元,在EDA软件对其进行综合编译时,容易受到其余同步电路的影响而产生冒险。本文对基于LUT实现的C单元,需要将输出反馈回输入的一端,同时使用Quartus软件的逻辑锁定(Logic-Lock)方式,将C单元综合、布局于一定的区域内,可以避免在与其余电路综合时发生冒险,具有较高实用价值。

3 接口电路及时钟暂停电路的实现

四相单轨握手协议,广泛应用于时序假设中,通常可以使电路获得最好的性能。而在控制电路设计中,最简单的四相单轨握手电路通过一个C门和一个非门组成,即异步电路中常用的Muller流水线[10]。本文采用手工设计方式实现的握手接口电路就是基于Muller流水线的思想,如图3所示。

图3(a)实现的wport接口电路,在全局CLEAR信号为高电平时对全局电路进行复位,其输出REQ、STRETCH信号全为低电平。局部同步模块产生一个WR信号(即同步模块处理完毕)时,通过延迟取反相“与”后输出一个脉冲。当ACK信号为低电平时,左边的C单元输出为“1”,即其暂停信号(STRETCH)置为“1”,停止同步模块时钟运行,此时由于右边的C单元的输入都为“1”,则发出请求信号,完成一次请求;当ACK信号为高电平时,由于右边C单元的置0位为“1”,从而停止请求,实现了一次四相单轨通信。

图3(b)中的rport接口电路,在同步模块发出处理完成信号时,其左边的C单元置1位输入是由RD产生的脉冲信号,从而其输出STRETCH为“1”,即要求同步模块时钟停止,在其请求信号REQ为“1”时,ACK输出为“1”;当REQ为低电位时,由于左边C单元输出为低电位,则ACK输出为“0”,实现了一次四相单轨通信。

同步电路

结合两接口电路的四相单轨通信则可实现GALS系统的模块互联。对接口电路延迟单元的设计则使用单个标准C单元c_std实现,通过时序约束其延迟量可达到5.125 ns,对整个电路的设计具有较好的延迟效果,且无冒险现象。

在GALS系统中,有些同步模块可能没有自带的时钟信号,常需要系统内部产生特定频率范围的时钟信号,所以可暂停时钟的设计是必须的。实现方法是基于一个C单元及一个延迟单元,以及可随意调节的分频器组成,通过C单元设计的时钟电路可产生频率高的时钟。当CLEAR信号置高时,对电路清0,经过延迟取反后,C单元的输入为1,则输出即为1,以此类推,则产生时钟信号。

局部时钟模块的实现如图4所示。通过时序仿真,CLK在未加分频器的情况下可高达500 MHz以上。由于超过目前FPGA的最高时钟,从而其需要通过分频来达到设计要求。此时钟电路根据同步模块需求,频率可进行任意调节,具有较大实用性。

同步电路

4 GALS系统实现及测试

为了测试由FPGA实现的四相单轨握手协议电路的性能,通过状态机设计无冒险的计数器作为GALS系统两端的同步电路,采用Altera公司CycloneⅡEP2C35F6-

72C6器件作为测试器件,通过逻辑锁定技术将标准C单元模块添加进设计中,通过建立wport、rport的父区域(Parent Region)锁定模块,将子区域(Child Region)锁定的C单元添加进父区域锁定模块,保证了各自时序的独立性,确保了电路功能的实现。其时序仿真结果如图5所示。

同步电路

对结果进行分析:当全局复位信号为高电平时,对全局电路进行复位。整个握手实现过程通过同步模块的2个计数器在进位时,输出各自的进位信号作为wr和rd信号,当二者同时为高电平时发生握手,且作为接口电路rport、wport的输入信号。当req上升沿到来时,ack响应req信号变为高;

当req下降沿到来时,ack拉低。通过ack的上升沿触发锁存器传递数据,完成数据的通信,其数据主要是由计数器产生的0、1信号。而对于时钟暂停模块,当str1、str2信号为高电平时分别对两个模块的时钟进行暂停,从仿真图中可见,当两者为高电平时,将时钟置为0,保证了时钟的可暂停。

整个系统通过设计的C单元库,实现了GALS中的接口模块、时钟暂停模块,达到GALS系统同步模块间异步互联的效果,且使用的是四相单轨握手协议,具有较好的握手性能。使用Quartus软件的逻辑锁定技术,对子区域(C单元)、父区域(接口电路)进行锁定,确保了C单元在与整个电路综合中不出现冒险问题,确保了电路的可行性。对在常规FPGA中实现异步电路带来新的开发特性,特别对SoC的异步互联具有较好的实用价值。

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分