0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

电子工程师 来源:《电子技术应用》 作者:张景伟;李若仲;肖 2021-05-26 18:12 次阅读

异步电路所具有的低功耗、低电磁噪声辐射、高速等突出特点,使其逐渐成为当前设计的焦点。现有异步电路的实现方法往往通过定制的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所示。

o4YBAGCuHbSAKk-XAAB8h74P-fk453.png

在点对点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值。

o4YBAGCuHaCAPHtlAACvP32KJUI736.png

参考文献[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”,实现了一次四相单轨通信。

o4YBAGCuHZOABNWDAACeziWEAyU772.png

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

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

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

o4YBAGCuHYOADfWYAAAy2xPBv6c471.png

4 GALS系统实现及测试

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

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

pIYBAGCuHW2AEUeRAAIAJ-_hj2M070.png

对结果进行分析:当全局复位信号为高电平时,对全局电路进行复位。整个握手实现过程通过同步模块的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

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

    关注

    1603

    文章

    21329

    浏览量

    593299
  • soc
    soc
    +关注

    关注

    38

    文章

    3750

    浏览量

    215733
  • 同步电路
    +关注

    关注

    1

    文章

    56

    浏览量

    13138
  • CLK
    CLK
    +关注

    关注

    0

    文章

    122

    浏览量

    16912
收藏 人收藏

    评论

    相关推荐

    如何实现PTP协议的精准同步时钟?

    尊敬的技术大牛们,你们好! 现有一项目需要用到贵公司的STM32F4系列产品,由于业务场景对时钟同步精度要求很高。所以需寻求你们的技术支撑,提供关于STM32F4系列的PTP协议或IEEE1588
    发表于 03-26 07:57

    同步置数,异步置数,同步清零,异步清零的概念

    同步置数、异步置数、同步清零和异步清零是数字电路设计中常用的概念。 一、同步置数 同步置数是指在
    的头像 发表于 02-22 13:48 2031次阅读

    【芯片设计】握手协议的介绍与时序说明

    最早接触到握手协议是在校期间学习PCIe的AXI总线时,至今日虽然PCIe的结构已经忘得一干二净,但握手协议经过不断的使用还算掌握的不错。
    的头像 发表于 12-11 14:11 857次阅读
    【芯片设计】<b class='flag-5'>握手</b><b class='flag-5'>协议</b>的介绍与时序说明

    同步整流和异步整流的区别

    同步整流和异步整流的区别  同步整流和异步整流是电力系统中常用的两种整流方式,它们有着不同的工作原理和特点。本文将详细介绍同步整流和
    的头像 发表于 12-08 10:06 1407次阅读

    异步电路和同步电路区别在哪?

    部分是独立运行的,没有明确定义的时钟信号来同步它们的操作。相反,每个部分在满足特定的条件下单独启动和运行,通过相互之间的通信来完成所需的协作。异步电路通常采用握手协议来确保数据的正确传
    的头像 发表于 12-07 10:53 1212次阅读

    握手型接口的同步FIFO实现

    按照正常的思路,在前文完成前向时序优化和后向时序优化后,后面紧跟的应该是双向时序优化策略了,不过不急,需要先实现一下握手同步FIFO。
    的头像 发表于 12-04 14:03 300次阅读
    <b class='flag-5'>握手</b>型接口的<b class='flag-5'>同步</b>FIFO<b class='flag-5'>实现</b>

    同步异步通信协议介绍

    同步异步传输归结为时钟是外部的(同步)还是内部的(异步)。异步协议的一些例子包括UART、US
    发表于 11-27 15:39 628次阅读
    <b class='flag-5'>同步</b>和<b class='flag-5'>异步</b>通信<b class='flag-5'>协议</b>介绍

    信号协议同步传输和异步传输有什么区别

    在信号协议中,有非常多的种类,如UART,I2C,SPI,PCIe等等,它们有自己的一套制定规则,但是在协议制定中,一定需要在同步异步中选择其中一项作为传输规则。 所以这其中的
    的头像 发表于 11-07 14:50 505次阅读
    信号<b class='flag-5'>协议</b>中<b class='flag-5'>同步</b>传输和<b class='flag-5'>异步</b>传输有什么区别

    FPGA学习-异步复位,同步释放

    点击上方 蓝字 关注我们 系统的复位对于系统稳定工作至关重要,最佳的复位方式为:异步复位,同步释放。以下是转载博客,原文标题及链接如下: 复位最佳方式:异步复位,同步释放
    的头像 发表于 09-09 14:15 306次阅读
    <b class='flag-5'>FPGA</b>学习-<b class='flag-5'>异步</b>复位,<b class='flag-5'>同步</b>释放

    Xilinx FPGA时钟资源概述

    全局时钟和第二全局时钟资源”是FPGA同步设计的一个重要概念。合理利用该资源可以改善设计的综合和实现效果;如果使用不当,不但会影响设计的工
    发表于 07-24 11:07 710次阅读
    Xilinx <b class='flag-5'>FPGA</b>时钟资源概述

    异步复位同步释放有多个时钟域时如何处理 异步复位同步释放的策略

    对于从FPGA外部进来的信号,我们通常采用“异步复位同步释放的策略”,具体电路如下图所示。
    的头像 发表于 07-20 09:04 1292次阅读
    <b class='flag-5'>异步</b>复位<b class='flag-5'>同步</b>释放有多个时钟域时如何处理 <b class='flag-5'>异步</b>复位<b class='flag-5'>同步</b>释放的策略

    握手协议中的Valid及data打拍技巧

    AXI 协议使用的是valid-ready握手的方式去传输数据。
    发表于 06-27 16:12 854次阅读
    在<b class='flag-5'>握手</b><b class='flag-5'>协议</b>中的Valid及data打拍技巧

    static的全局变量与局部变量的使用,看完你就懂了

    时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个
    发表于 06-27 08:54

    Xilinx FPGA异步复位同步释放—同步后的复位该当作同步复位还是异步复位?

    针对异步复位、同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步复位?
    发表于 06-21 09:59 822次阅读
    Xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>异步</b>复位<b class='flag-5'>同步</b>释放—<b class='flag-5'>同步</b>后的复位该当作<b class='flag-5'>同步</b>复位还是<b class='flag-5'>异步</b>复位?

    如何区分同步复位和异步复位?

    、电路中,何时采用同步异步,取决于设计者,取决于当前设计电路的需要。一般而言:高速逻辑应该采用同步复位,低速逻辑可以采用异步复位;涉及人机交互的复位,适合
    发表于 05-22 17:33