轻量级数据流与低功耗硬件设计

使用轻量级数据流的硬件设计方法及其与低功耗技术的结合

摘要

计算的数据流模型能够为硬件和软件组件及系统提供高层描述,有助于实现高效的系统级设计流程。数据流表示的模块化和并行性使其适用于设计探索与优化的关键方面,例如高效调度、任务同步、内存和功耗管理。轻量级数据流(LWDF)编程方法论提供了一种抽象编程模型,支持基于数据流的信号处理硬件和软件组件及系统的设 计。由于该方法论基于抽象应用程序编程接口进行构建,因此可以与多种面向仿真和实现的语言集成,并适用于不同平台,使工程师能够相对容易地将数据流建模方法融入现有设计流程中。以往关于LWDF技术的研究主要强调其在数字信号处理软件实现中的应用(例如通过与C语言和CUDA集成)。本文则将LWDF方法论高效地与硬件描述语言(HDL)相结合,并将这种集成了HDL的形式应用于开发低功耗DSP硬件实现的有效方法。所提出的基于LWDF的硬件设计方法的有效性通过一个用于车辆分类的深度神经网络应用的案例研究得到验证。

1. 引言

计算的数据流模型非常适合描述数字信号处理(DSP)应用的功能。在数据流图中,节点表示称为执行单元的计算组件,边则表示执行单元之间点对点通信的通道。当一个执行单元在其输入端口有足够的数据且在其输出端口有足够的空闲空间时,便可执行。

数据流模型具有内在的模块化特性,便于计算组件的组合和可移植性(例如,参见[1,2]),在不同平台之间设计流程的可重定向性方面也十分有效(例如,参见[3])。此外,数据流模型有助于探索各种优化技术以实现高效实现的数字信号处理系统(例如,参见[4–6])。

轻量级数据流(LWDF)是一种编程方法论,它允许设计人员在现有设计流程的背景下系统地集成和尝试数据流建模方法[1]。LWDF的“轻量级”体现在其编程模型对现有的设计方法学和流程具有最小的侵入性,并且对专用工具或库的依赖极小。

关于LWDF技术的前期研究主要强调其在数字信号处理软件实现中的应用(例如,通过与C语言和CUDA集成,如[7,8]中所述)。据我们所知,在[9]中,我们首次提出了将LWDF技术深度集成到硬件描述语言(HDL)编程中的研究,并提供了涉及基于LWDF的数字硬件设计与优化的复杂应用研究。

存在多种基于模型的设计方法及相关工具,用于数字硬件实现。例如,[10]中介绍了用于从Kahn进程网络(KPNs)生成硬件描述语言(HDL)代码的Compaan和Laura工具。CAL编程语言及Orcc工具集为在硬件中实现数据流程序提供了一个新颖的环境[11,12]。CAPH语言和框架代表了从数据流语言生成HDL的另一项近期努力[13]。[14]中提出了一种针对流水线数据流图结构的硬件合成方法,以实现面向硬件的高级数据流图优化。Nézan等人[15]提出了一种集成化设计流程及相应工具,可自动优化数据流规范以生成HDL设计。多数据流合成器(MDC)工具是一个用于自动生成多功能可重构平台的框架,能够进行完整的设计空间探索,评估资源使用、功耗和工作频率之间的权衡[16]。

一些相关研究探索了将多时钟域和时钟门控技术与基于数据流的数字硬件实现相结合的部署方法:Brunet等提出了一种设计方法,用于将流式应用划分到多时钟域架构上[17];Xronos是一种面向现场可编程门阵列(FPGA)平台的高级综合工具,采用粗粒度时钟门控策略[18]。MDC工具能够识别分离的逻辑区域,并自动对这些区域应用粗粒度时钟和电源门控技术[19,20]。

一般来说,这些方法和工具受限于用于描述所采用的数据流的编程语言或生成的硬件描述语言(HDL),而这些语言可能是目标相关的。此外,这些工具支持现有设计优化技术的便捷应用,而非新优化技术的快速原型实现。自动适配新的语言、平台或设计优化技术可能需要在图分析和代码生成功能的开发与维护上投入大量精力。对于相对成熟的设 计模型和方法,这种投入有时是合理的。然而,对于实验性方法或高度针对特定应用的方法,这种投入成本较高。

LWDF通过提供一组简洁的应用程序接口(API),帮助填补这一空白,使得能够以无需开发和维护自动化工具的方式融入先进的数据流技术。LWDF的设计重点不在于自动化,而是帮助设计人员构建高效的数据流实现,并对其进行迭代实验。这一能力在本文所报告的研究工作中非常有用,因为它使我们能够在系统化的基于数据流的设计方法框架内,快速地融入并实验先进的功耗优化技术。

同时,由于LWDF应用程序接口(API)基于形式化数据流原理,基于LWDF的实现非常适合作为自动综合和代码生成工具的目标。例如,DIF‐GPU工具已将面向CUDA和C语言的LWDF应用程序接口(API)作为目标,用于混合CPU/GPU实现的自动综合[21]。事实上,为本文介绍的模型和方法开发自动化支持是未来工作的一个有益方向。

总之,本文的工作重点在于面向DSP的数据流方法在紧凑且可重定向的API方面的应用,同时强调了在所提出的API中严格集成电源管理。尽管本文中开发的设计技术是在Verilog硬件描述语言的背景下具体演示的,但通过以抽象的LWDF方法的硬件扩展形式进行表述,这些技术可以轻松地重定向到其他硬件描述语言(HDL),例如VHDL和SystemC。

一个初步版本的本文已在[9]中发表。本文在[9]所提出的贡献基础上进一步优化数据流边模块(DEM)设计,并为深度神经网络(DNN)应用提供一种改进的时钟门控机制,该机制不仅应用于执行单元,还应用于同步先进先出(FIFO)通道。这些扩展的详细信息在第4节中给出,在第5节中,基于新DEM设计和新的时钟门控应用设计,更新了四种DNN设计的仿真结果(与[9]中的相应结果相比)。此外,我们还扩展了DNN案例研究的介绍,增加了硬件行为体分析的细节,从而进一步揭示了不同低功耗解决方案的特性。

本文其余部分组织如下。第2节介绍了数据流计算模型的背景。在第3节中,我们描述了LWDF‐V方法及其在轻量级数据流环境(LIDE)中的实现。在第4节中,我们提出了将低功耗技术与LWDF‐V方法相结合的方案。在第5节中,我们展示了一个使用这种新型低功耗LWDF‐V设计和优化的车辆分类DNN应用。

2. 背景

在嵌入式信号处理的计算数据流模型中,数字信号处理系统被建模为有向图,该有向图由表示计算功能的节点(执行单元)和表示执行单元之间通信信道的边组成(例如见[4])。每个执行单元以一系列离散的计算单元形式执行,称为激发。在每次激发过程中,执行单元根据所采用的数据流模型,从其输入边消耗一个或多个数据令牌,执行与该次激发相关的计算,并在其输出边产生一个或多个数据令牌。边以先进先出(FIFO)的方式缓冲数据。当数据令牌从一个执行单元的输出边传递到另一个执行单元的输入边时,一定量的封装数据包含在该令牌中。执行单元能够激发的条件被称为该执行单元的激发规则(例如见[22])。

不同类型的数据流通常在执行单元所采用的激发规则类别上有所不同。

2.1. 数据流模型的概述

使能‐调用数据流(EIDF)是一种通用的数据流计算模型,支持在执行单元[23]中实现动态数据流行为。在EIDF中,每个执行单元被划分为一组模式,其中每个模式在执行时具有静态数据流速率——即,每个模式对每个输入和输出端口分别具有固定的消耗率和生产率。通过在同一个执行单元的不同模式之间切换(这些模式在相同端口上关联有不同的数据流(生产或消耗)速率),可以实现动态数据流行为。特定EIDF执行单元的触发规则取决于该执行单元的当前模式M。直观地说,这种模式依赖的激发规则是:执行单元的输入缓冲区中必须有足够的数据(由M所关联的固定消耗率决定),并且执行单元的输出缓冲区中必须有足够的可用空间(由M所关联的生产率决定)。有关EIDF语义的更多细节,我们建议读者参考[23]。

EIDF执行者的规范包含一个称为启用方法的方法,该方法用于检查执行单元的输入端口上是否有足够的可用数据以及其输出端口上是否有足够的可用数据,以在当前模式下触发该执行单元。当上述可用性条件满足时,启用方法返回一个值为真的布尔结果。每个EIDF执行单元还具有一个调用方法,用于执行执行单元操作。

核心功能数据流(CFDF)是LWDF编程方法的基础,它是EIDF模型的一个特例。在CFDF中,执行单元的允许的下一模式集合恰好只有一个元素。换句话说,调用方法仅返回一个有效的执行模式,这意味着执行的执行单元模式序列沿着单一的确定性路径进行。

EIDF和CFDF的一个关键特征是使能与调用功能的清晰分离。一旦调用功能被使能,即假设有足够的数据可用于执行与当前模式相关的执行单元操作——触发条件已被相应的使能功能通过适当的编译时分析或某种组合方式(例如,使用准静态调度分析)预先检查。这一特性提高了执行单元触发的可预测性,并有助于实现高效调度技术。该建模方法仅对数据流执行单元的结构和接口施加限制(“数据流设计规则”),而不对其执行单元实现细节进行约束,从而促进了采用该方法开发的执行单元的可重定向性。

2.2. 基于软件的执行单元实现方法使用 LWDF

在软件实现中,LWDF参与者被实现为一个具有四个接口函数的抽象数据类型,这四个函数分别称为构造、使能、调用和终止函数。构造函数和终止函数可分别视为面向对象中的构造器和析构器,用于执行单元的实例化和移除。LWDF中的使能和调用函数提供了具体的机制,用于在软件中实现与抽象CFDF语义中同名函数相对应的功能。LWDF启用函数返回一个布尔值;当满足以下两个条件时,返回值为true:(1)该执行单元的输入边上有足够的数据以执行当前模式;(2)该执行单元的输出边具有足够的空闲空间,能够容纳在下一个模式执行时所产生的数据。由于CFDF语义限制了在给定模式下指定端口上的数据流速率是恒定的,因此该表述在LWDF中是合理的。

LWDF参与者a的invoke函数会根据其当前模式执行一次a的触发;确定a的下一个模式;并在返回前将a的当前模式更改为新确定的下一个模式。

使能和调用函数为实现调度器提供了接口,用于协调基于LWDF实现的数据流图的执行。通过这些接口可以实现多种类型的调度器,包括各种静态、准静态和动态调度器(例如参见[24,25])。静态调度在编译时生成,并指定执行单元触发的固定序列,因此静态调度器可以直接调用执行单元,而无需使用使能功能检查触发条件。准静态调度在编译时生成,但可能包含在运行时执行某些与数据相关的调度计算的代码。

动态调度器以涉及大量运行时决策的方式对动态数据流应用进行调度。一个动态调度器的简单示例如下[24]。一个规范的CFDF调度器S调用使能函数以轮询方式按一定顺序访问执行单元。每当调度器S调用执行器A的使能功能且该功能返回“true”时,立即执行A的调用功能。这种访问并有条件地调用执行单元的过程将重复进行,直到没有执行单元被使能,或满足应用程序的其他终止条件为止。

2.3. LWDF FIFO实现

与执行单元设计类似,LWDF提供了一套简洁的接口,用于实现对应于数据流图边的FIFO缓冲区。这些接口提供了标准函数,供基于LWDF的执行单元和调度器在操作FIFO时使用。其实现细节未作明确规定,以便设计人员能够灵活地在不同应用或同一应用的不同部分开发和采用不同的FIFO,以在参与者间通信性能方面实现期望的权衡(例如,通过将数据流边映射到不同类型的存储器中)。LWDF的设计旨在对FIFO、执行单元和调度器的实现进行正交化,从而使得对FIFO实现的修改或替换无需更改与该FIFO通信的执行单元或协调图执行的调度逻辑。关于正交化在系统级设计中的效用的一般背景信息,请参见[26]。为FIFO定义的LWDF接口函数包括:创建与终止函数(类似于执行单元);从FIFO读取令牌;向FIFO写入令牌;以及检查其令牌数量和可用空闲空间的函数。

3. 用于数字硬件实现的轻量级数据流编程模型

如第1节所述,LWDF主要面向DSP软件实现。在本节中,我们将通用的LWDF方法扩展到高效的数字硬件实现。作为此扩展的一部分,我们根据硬件描述语言(HDL)编码风格来调整LWDF方法。特别是,我们依据模块定义方面的HDL设计构造标准规范来调整该方法——例如,与面向软件实现的语言中常用的类、方法和函数等程序构造单元不同。

本节中开发的设计技术在Verilog硬件描述语言的背景下进行了具体表述。我们将LWDF与Verilog的这种集成称为LWDF‐V。

LWDF‐V背后的设计概念可以适配到其他硬件描述语言(HDL),因为它们不依赖于Verilog语言中的特殊特性(即在其他常见HDL中没有自然对应的部分)。将LWDF适配用于其他HDL是未来工作的一个有益方向。

在LWDF‐V中,执行单元的使能、调用和调度功能被实现为三个相互关联的Verilog模块,我们分别将其称为执行器使能模块(AEM)、执行器调用模块(AIM)和执行器调度模块(ASM)。数据流边被实现为数据流边模块(DEMs),以提供执行单元之间连接的通信信道。由于DEMs通过先进先出协议缓冲数据,因此我们也简单地将其称为FIFO。图1展示了一个LWDF‐V执行单元的示意图。

在本节的其余部分,我们将详细介绍LWDF‐V中核心模块类型——AIM、AEM、ASM和DEM——的设计与接口规范。

3.1. 执行单元调用模块

回想一下LWDF对组件设计施加了最少的限制,而对AIM的唯一要求是标准AIM的操作状态和接口(如下所述)得以保持。此外,我们允许将AIM分解为任意的子模块层次结构,并使用任何Verilog编码风格进行描述,包括行为级、结构级或混合的行为级/结构级编码。

LWDF‐V增强了模块的可重用性和可重定向性,并支持渐进式设计,其中与不同子系统相关联的子模块设计可随着目标实现的更多细节逐步明确而不断优化。

AIM的高级操作需要具有两种状态:执行单元空闲状态和执行单元触发状态,这两种状态称为相关参与者的AIM操作状态。AIM的接口要求基于这两种状态进行定义。AIM所需的接口端口分为以下四组。

  • 与数据流相关的输入端口 :该组端口包含一个对应于关联的CFDF执行单元A的每个输入端口X的输入端口,以及一个名为invoke的布尔输入端口,用于在执行单元当前处于空闲状态时,在下一个时钟周期启动执行单元的下一次触发。在图1中,发送到该组内端口的信号示例包括in_AX和invoke_A。
  • 数据流相关输出端口 :该组端口包含一个对应于每个执行单元输出端口Y的输出端口,一个对应于每个输出端口的布尔型写使能端口(用于向输出边提交写请求),以及一个对应于每个输入端口X的布尔型读使能端口(用于向输入边提交读请求)。在图1中,从此组端口发送的信号示例包括out_AY、wr_en_AY和rd_en_AX。
  • 与平台相关的输入端口 :该组端口包含一个时钟输入端口,用于与接口电路进行相关同步,以及一个同步布尔复位输入端口,用于在下一个时钟周期将执行单元置为空闲状态。图1中发送到该组端口的信号示例包括clk_A和rst_A。
  • 控制相关输入端口 :对于给定的执行单元A,该组包含一个称为mode的端口,用于提供该执行单元当前的CFDF模式。在图1中,发送到该端口的信号示例包括mode_A和FC_A。
  • 与控制相关的输出端口 :对于给定的执行单元A,该组包含一个称为next_mode的端口,用于提供执行单元的下一个可能的CFDF模式,以及一个称为FC的端口,FC代表触发完成,用于发送一个布尔信号,以指示在当前时钟周期内执行单元A的触发是否完成。在图1中,从这些端口发送的信号示例包括next_mode_A和FC_A。

示意图0

图2提供了具有三种模式的AIM的有限状态机控制流示例。AIM保持在当前模式x,直到与该模式相关的触发完成。当此触发完成后,FC信号被拉高,并建议下一个_模式。在每种模式中,一个子有限状态机控制执行;AIM在空闲状态等待,直到调用信号为高,然后状态更新为触发状态,此时AIM根据当前模式消耗输入数据、执行执行单元操作并产生输出数据。

示意图1

3.2. 执行单元使能模块

为了为第2节中描述的基于CFDF(核心功能数据流)的使能功能提供一个标准接口,LWDF‐V执行单元的AEM模块包含以下必需的接口端口。

  • 人口与空闲空间端口 :对于关联的CFDF执行单元A的每个输入端口X,AEM都有一个用于访问缓冲区状态信息的输入端口。该端口提供与端口X相连的FIFO I的当前缓冲区数量(输入缓冲区中的令牌数量)。类似地,对于连接到输出端口Y的每个输出FIFO O,AEM都有一个输入端口,用于提供空闲空间级别(输出层缓冲区容量减去数量)。这些输入端口根据相关联的FIFO名称分别命名为pop_fifoI和fs_fifoO。

示意图2

图3展示了两个参与者间通信的示例。在第一个示例中,两个执行器A和B通过两个FIFO进行数据交换。执行器A具有三个端口用于访问缓冲区状态:pop_fifo1提供连接到输入1的FIFO1的数量,fs_fifo2和fs_fifo3分别提供连接到输出端口输出1和输出2的FIFO2和FIFO3的空闲空间级别。在第二个示例中,参与者C通过两个FIFO通道FIFO5和FIFO6将输出数据发送给参与者D和E。对于每个输出FIFO,C有一个空闲空间输入信号——这些信号标记为fs_fifo5和fs_fifo6。

  • 模式端口 :该输入端口用于指定CFDF模式(相对于外围参与者A),AEM将基于该模式执行下一次可触发性测试操作(即判断是否有足够的数据和可用的空闲空间以允许执行单元触发的操作)。该端口以外围参与者A来命名,即模式_A。图4展示了针对三种不同模式mode x的三个不同触发条件{C x}的示例。当触发条件为真时,使能信号被置为高电平。
  • 使能端口 :该输出端口由检查外围执行单元A在AEM模式端口指定模式下的可触发性所产生的布尔结果驱动。该端口根据外围执行器A命名为enable_A。

AEM可以使用组合逻辑或时序逻辑实现。当涉及大量端口,并且希望在可触发性检查过程中的比较操作之间共享硬件资源时,可能更倾向于采用后一种形式。然而,对于许多实际的执行单元和实现场景,输入数量相对较少,因此组合型AEM实现是一个合理的设计选择。因此,在本文其余部分中,我们假设采用组合型AEM实现。LWDF‐V中使用了一组额外的标准端口来支持时序型AEM实现;关于其实现的更多细节不在本文讨论范围内。

示意图3

3.3. 执行单元调度模块

ASM是一个参与者级子系统,它在执行单元触发完成后确定相关参与者的下一个模式,并在该执行单元再次被使能后调用参与者触发。

与第2节中讨论的调度器相比,ASM控制的是参与者组(即与特定设计子系统或整个使能相关的子系统)。对于正在开发的数字系统,ASM可用于实现完全分布式的调度方法。在这种方法中,当一个执行单元处于空闲状态且其使能条件满足时,该执行单元将被调度以开始一次新的触发。ASM的使用也可以与第2节中讨论的各类调度器相结合。通过此类混合策略,可以选择部分执行单元以分布式方式调度(使用ASM),而其他执行单元的执行则通过集中式机制进行协调。ASM支持一种特定的调度策略,可用于实现LIDE‐V系统。但使用ASM并非强制要求;如上所述,也可采用或组合使用实现其他类型调度策略的模块。

ASM的接口端口列举如下。对于与特定执行单元A相关联的ASM,这些端口在此处相对于同一执行单元A的AIM和AEM进行描述。

  • 与数据流相关的输入端口 :该组端口包含一个连接到AIM的输出端口FC的布尔输入端口,一个连接到AEM的输出端口enable的布尔输入端口,以及一个连接到AIM的输出端口next_mode的输入端口。
  • Platform-related input端口 :该组端口与第3.1节中介绍的平台相关输入Section 3.1相同。
  • 与控制相关的输出端口 :该组包含一个名为mode的输出端口,以及一个连接到AIM输入端口invoke的输出端口。ASM负责确定当前执行单元模式,并通过输出端口mode将生成的模式信号发送给AEM和AIM。因此,ASM负责在激发完成之后执行执行单元的模式转换。通常情况下,ASM可以将执行单元模式设置为从next_mode输入端口接收到的下一个模式信号,也可以忽略该下一个模式信号,并根据集成在ASM中的用户定义逻辑来设置模式。此外,在前一次触发完成后且执行单元再次被使能时,ASM还会启动下一次执行单元触发。

图5展示了一个控制ASM的有限状态机示例。该ASM在WAIT_EN状态下等待使能信号变为高电平。当使能信号= 1时,ASM调用AIM(invoke =1)。然后ASM在WAIT_FC状态等待触发完成(FC = 1),并设置下一个执行单元的模式。

示意图4

图6中的示例说明了使能、调用和FC信号之间的时序关系。在使能信号变为高电平后,ASM会提升调用信号。随后AIM执行其操作,ASM等待触发完成信号FC。

这里,如图6所示,我们定义T ei为执行单元变为使能的时刻到相应触发被调用之间的经过时间。类似地,T ic为调用到触发完成时间,T ci为一次触发完成到下一次调用开始之间的时间。最后,T ec为使能到触发完成时间,T ii为两次连续调用之间的经过时间。例如,可以在给定执行过程中对执行单元的所有激发测量这些时序特性的平均值。

示意图5

3.4. 数据流边模块

DEM在LWDF‐V中用于实现数据流边。所需的接口端口包括以下内容。

  • 使能端口 :这两个布尔型输入端口提供读使能和写使能信号rd_en和wr_en,用于访问FIFO存储器。
  • Data输入/输出端口 :这些端口,名为in和out,分别用于FIFO在启动读取或写入操作时读取输入数据和发送输出数据。输出层,分别当读取或写入操作被启动时使用。
  • population端口 :该输出信号,命名为pop,其值为非负整数,表示当前存储在FIFO中的令牌数量。
  • Free space port :该输出信号fs提供缓冲区的容量c与数量p当前值(c − p),其中c和p分别为缓冲区的容量和数量。

示意图6

图7展示了基于LWDF‐V的同步FIFO设计的概览。当使能FIFO的读或写操作时,rd_addr或wr_addr模块将相应地更新读指针或写指针。数量pop和空闲空间fs信号也将随之更新。在本文中,我们通过进一步简化在[9]中开发的设计,对同步FIFO设计进行了优化。该优化后的FIFO在实现与原始FIFO设计相同功能的同时,使用了更少的寄存器。关于两种FIFO设计资源利用率的更多细节将在第4.5节中介绍。

与AIM类似,DEM也有时钟和复位端口,分别命名为clk和rst。为了支持异步DEM集成,提供了两个独立的时钟输入——读时钟rd_clk和写时钟wr_clk。有关使用LWDF‐V进行异步设计的更多内容将在第3.5和第4节中讨论。

3.5. LIDE-V

轻量级数据流环境(LIDE)提供了支持LWDF编程方法的应用程序接口(API)、图元素(执行单元和边)库以及其他工具(参见[1,27])。我们开发了LIDE的一个扩展版本,称为LIDE‐V,它为抽象的LWDF‐V方法论提供了具体的实现支持。

作为LIDE‐V的一部分,我们提供了两种DEM实现——一种用于同步FIFO实现,另一种用于异步实现。这些可选的实现在LWDF‐V中为正交性支持提供了重要示例(第2节),并可用于集成不同的执行单元和边实现。关于这些可选DEM实现的详细信息,以及它们在LIDE‐V中应用于同步、异步和GALS(全局异步,局部同步)实现和低功耗DSP系统设计的情况,将在第4节中讨论。

4. 针对LWDF‐V的低功耗技术

我们使用LIDE‐V所针对的基于数据流的信号处理应用类别涵盖了执行单元可能表现出复杂度显著变化的复杂系统。当将数据流技术应用于应用层面,而非局限于数字滤波器和FFT计算等标准信号处理模块层面时,这种复杂度变化十分常见。在本节中,我们展示了LIDE‐V中的功能,这些功能有助于应对处理具有任意复杂度变化的执行单元所带来的挑战,并讨论了这些功能在低功耗信号处理中的相关性。特别是,我们提出了一种基于LIDE‐V的异步且面向GALS(全局异步,局部同步)的设计方法,用于实现异构复杂度和低功耗。具体而言,我们提出的方法包括:(1) 执行单元之间采用异步通信并利用多时钟域,其中瓶颈执行单元以较高的时钟频率运行,其他执行单元则以较低的时钟频率运行;(2) 采用时钟门控技术,将空闲执行单元“关闭”,以降低动态功耗。

该开发的创新性主要在于将异步设计、GALS(全局异步,局部同步)以及时钟门控技术与轻量级数据流编程接口及其底层的CFDF计算模型进行系统性集成。这种与CFDF的集成尤为显著,因为CFDF可作为处理各种专用和异构形式的数据流的基础(例如见[24])。此外,CFDF组件之间的正交性为异步设计奠定了重要基础,而我们提出的时钟门控技术则充分利用了CFDF中的使能/调用语义。

4.1. 异步 LIDE-V 设计

我们定义一个数据流时钟域(或当上下文明确时简称为“时钟域”,数据流上下文可从语境中理解)为一个最大由同一时钟信号驱动的执行单元组成的最小集合。在异步LIDE‐V设计中,数据流图的不同部分可以由不同的时钟信号驱动,从而形成多时钟域。这使得“较慢”的执行单元可以被放置在高频时钟域中,从而在不线性增加整个设计功耗的情况下实现加速;同时,“较快”的执行单元可以被放置在相对低频的时钟域中,以减少“较快”与“较慢”执行单元之间的空闲时间。

示意图7

图8展示了一个具有两个时钟域的LIDE‐V设计示例,其中执行器A由clk_1驱动,执行器B和C由clk_2驱动。同一时钟域内执行单元之间的通信信道称为同步FIFO。这些FIFO构成了整体GALS设计中的“同步孤岛”。同步孤岛之间的数据传递问题通过第3节中介绍的异步DEM实现来解决。我们也将异步DEMs称为时钟域交叉(CDC)FIFO。在图8中,FIFO3是同步FIFO,而FIFO2是CDC‐FIFO。

示意图8

图9展示了LIDE‐V中采用的CDC FIFO设计,该设计基于[28]中提出的Cummings的设计。CDC FIFO由两个不同的时钟信号驱动,一个用于读操作(rd_clk),另一个用于写操作(wr_clk)。我们对Cummings的设计进行了一些修改,以使其与LIDE‐V框架保持一致。例如,Cummings的设计仅在wr_addr和rd_addr模块内部提供空和满信号。为了生成所需的数量pop和空闲空间fs信号,我们修改了wr_addr和rd_addr模块,通过计算写指针和读指针之间的偏移来得到这些信号。

为了支持FIFO内的时钟门控,我们相较于Cummings的设计进行了另一项修改。此处的目标是,当rd_clk或wr_clk关闭时,允许属于相应时钟域的所有逻辑单元被关闭。例如,在图9中,当rd_clk信号关闭时,灰色模块将被禁用。这种行为在Cummings的设计中并未考虑,如果在该设计中同步电路被关闭,则读指针和写指针将不会被发送到wr_addr和rd_addr模块。为了确保数量pop和空闲空间fs的更新能够正确执行,sync_r2w和sync_w2r模块均配备了多路复用器,分别负责在一个或两个时钟被禁用时发送读指针和写指针。

4.2. 时钟门控

在LIDE‐V中,时钟门控应用于执行单元级,以关闭数据流图中的空闲组件。图10展示了采用时钟门控的LIDE‐V设计的总体结构。执行器级的时钟门控是LIDE‐V设计技术的自然副产品,系统化地实现,从而使得设计人员能够更有效地应用时钟门控。

示意图9

彻底且更可靠地进行。我们通过在图1所示的原始LIDE‐V行为体设计中添加时钟门控模块CGM_A,将时钟门控应用于LIDE‐V行为体。

基于LIDE‐V的时钟门控技术利用了由使能信号enable_A和触发完成信号FC_A提供的图执行信息。图11说明了这些信号之间的关系:当来自AEM_A的enable_A为高电平时,CGM_A被使能当时钟(en_clk为高电平)开启,并且在执行单元完成其计算时——即当来自AIM_A的FC_A信号为高电平时,关闭时钟。

从技术角度来看,时钟的禁用方式根据目标技术的不同而有所区别。在ASIC设计中,可以通过利用一些自定义逻辑(例如,使用一个简单的与门来禁用时钟信号)来修改时钟;而在FPGA中,则必须使用专用模块(BUFGCEs)来关闭时钟。CGM_A还将enable_A信号延迟两个时钟周期,以便在发生关到开转换后,AIM能够在接收到调度器发出的invoke_A信号之前有足够的时间进入激活状态。

示意图10

4.3. 异步设计中数据流边模块的时钟门控

上述介绍的时钟门控技术可应用于同步设计和异步设计。此外,在异步设计中,如第4.1节所述,时钟门控技术不仅可以应用于执行单元模块,还可以应用于CDC FIFO模块。当一个执行单元处于空闲状态时,它不会从其输入/输出FIFO读取或写入数据,因此可以禁用其输入FIFO的读时钟和输出层的写时钟,以进一步节省功耗。随后,CDC FIFO将如第4.1节所述关闭相应的逻辑单元。

为了确保正确更新输出信号pop和fs,从CGM向CDC FIFO模块发送一个称为en_sync的额外信号,以指示rd_clk和wr_clk中的一个或两个已被禁用。

4.4. 同步数据流边模块的时钟门控设计

在同步设计中,无法将时钟门控技术应用于第3.4节介绍的同步FIFO设计,因为执行读写操作的相关模块由相同的时钟信号驱动。

在同步设计中实现DEMs时钟门控的一种方法是,用第4.3节中提到的CDC FIFO替换同步FIFO。然而,与同步FIFO相比,CDC FIFO需要更多的硬件资源并消耗更多功耗。因此,通过关闭未使用的逻辑单元所节省的功耗可能会被额外资源引入的功耗开销所抵消。基于这一原因,我们设计了一种新的FIFO,其中wr_addr和rd_addr模块分别同步到不同的时钟信号,并且开发了双时钟FIFO存储器。这种新型FIFO设计我们称为伪CDC FIFO,如图12所示。与CDC FIFO设计相比,伪CDC FIFO设计不包含同步或格雷编码电路,因为wr_clk和rd_clk时钟信号始终连接到主时钟。与CDC FIFO类似,可以通过时钟门控技术关闭伪CDC FIFO中未使用的逻辑单元,以进一步节省功耗。

示意图11

FIFO类型 LUTs REGs BRAM
FIFO 同步 73 22 2
CDC FIFO 异步 199 88 2
伪CDC FIFO伪异步 73 22 2
[9] FIFO 同步 90 105 2

表1 所实现的FIFO资源利用率

4.5. FIFO比较

表1比较了本文提出的同步、异步(异步时钟域)和伪异步(伪异步时钟域)FIFO设计与我们在[9]中提出的同步FIFO的资源利用率。数据来源于这四个FIFO的实现后报告,它们的容量均为768,位宽为64。

从表1可以看出,与其他FIFO设计相比,CDC FIFO需要更多的资源。这是由于CDC FIFO中增加了同步和格雷编码电路。此外,伪CDC FIFO与同步FIFO具有相同的资源利用率,但经过调整以支持同步设计中的时钟门控。

通过比较本文设计的同步FIFO与[9]中的同步FIFO,我们得出结论:前者比后者需要更少的资源。这是因为在后者的设中,数量和空闲空间信号是两个计数器,每次读/写操作后都需要更新;而在前者的设中,这些信号是作为偏移量计算的通过组合电路实现写和读指针。此外,在之前的FIFO设计中已移除旁路电路。

5. 案例研究:深度神经网络应用

在本节中,我们通过一个深度神经网络(DNN)应用来展示LIDE‐V的能力。本案例研究中采用的DNN系统基于文献[29]中提出的一种神经网络,旨在自动将车辆分为四种类型——公共汽车、卡车、面包车和轿车。有关该DNN算法方面的细节,请参见文献[29]。

该深度神经网络架构如表2所示,包含五个层:两个卷积层CONV1和CONV2,后接两个全连接层DENSE1和DENSE2,以及一个输出层OUTPUT。第一个卷积层将尺寸为96 × 96的输入图像的红、绿、蓝(RGB)通道映射为32个独立的48 × 48特征图。第二个卷积层将第一层生成的32个特征图重新映射为32个24 × 24特征图。第三层和第四层是全连接层,每层包含100个特征节点。这两个全连接密集层的结果被送入输出层,输出层返回一个包含四个元素的向量,每个元素表示输入图像中的车辆属于四种车辆类型之一的概率。

超参数 选定值
卷积层数量 2
全连接层数量 2
输入图像尺寸 96 × 96
所有卷积层中的卷积核大小 5 × 5
特征图数量 32

表2 深度神经网络超参数

乘法 加法 (双精度格式) 数据传输
CONV1 22,118,400 23,003,136 103,776
CONV2 58,982,400 61,341,696 117,760
DENSE1 1,843,200 1,843,200 1,868,900
DENSE2 10,000 10,000 10,200
输出层 400 400 504

表3 每个深度神经网络层的计算复杂度和数据传输量

各层的计算复杂度和所需数据传输量汇总于表3。从该表可以看出,卷积层相比其他层需要更多的计算,但所需的数据传输量显著更少。因此,我们选择其中一个卷积层——第一层——进行硬件加速。相应的数据流子图以一个w × h的RGB图像作为输入,并输出一个(w/2 × h/2)的特征图,同时以三个a × b的卷积核作为参数。整个输出32个特征图的层可以通过使用不同的卷积核反复触发该子图来实现加速。

5.1. LWDF-V实现深度学习神经网络应用

示意图12

图13展示了使用LIDE‐V实现的深度神经网络数据流子图的概览。执行端口旁边的注释表示相应的生产与消费速率。卷积执行单元conv_r、conv_b和conv_g各自具有三种CFDF模式,各模式之间的数据速率不同。符号w表示图像宽度。

在图13中,去交错执行单元将输入图像的RGB值分离,生成三个对应的图像。然后卷积执行器对每个单色图像执行矩阵卷积,生成一组与输入图像尺寸相同的卷积后的图像。这些卷积后的图像随后由求和执行单元相加。最后,maxpool&relu单元将特征图下采样至48 × 48分辨率。为了实现该下采样,maxpool&relu单元将特征图划分为若干子区域;对于每个子区域,该执行单元选择其中的最大元素作为该子区域的代表,并将所选元素中的负值钳制为零,从而生成最终的输出特征图。

通过在LWDF‐V中应用CFDF语义的模块化分解,我们将DNN子图中的每个执行单元实现为三个耦合的Verilog模块(AEM、AIM和ASM);执行单元之间通过DEMs进行通信。DEM使用关于其维度的信息进行参数化;通过适当地更改参数,我们可以在子图中复用同一模块。此外,AEM使用关于执行单元模式和生产/消费速率的信息进行参数化,因此可以在所有执行单元中复用。此外,本案例研究采用静态调度技术,ASM设计在所有执行单元中复用。在我们的设计中,只需为DNN加速器子系统中的不同执行单元开发定制化的AIM实现。

以我们的DNN加速器中的AIM实现为例,我们在图14中展示了卷积执行单元的AIM结构。该DNN加速器应用了三个此类执行单元实例。该执行单元的主要组件包括一个足够大的图像缓冲区以容纳六行图像数据、一个核系数存储器以及一个浮点融合乘加器(FMA)。初始化后,执行单元进入第一模式,消耗3行数据并与核进行卷积以生成单行输出。然后,它在第二模式下逐行遍历图像,每次触发产生和消耗一行数据。最后,执行单元过渡到第三模式,在不消耗任何输入token的情况下生成输出图像的最后一行。

示意图13

t total Z ic Z ei Z ec 激发 T A_ T ic T A_ T ic %
深度神经网络_1fm 232,831 – – – – – –
去交错 3 1 4 9216 27,648
卷积 2402 1 2403 96 230,592
Sum 107 1 108 96 10,272
最大池化和ReLU 195 1 196 48 9360

表4 各执行单元以时钟周期为单位的执行时间。tt otal:生成DNN_1fm所需的总时间。Zic:调用至触发完成时间。Zei:从使能到调用的时间。Zec:使能到触发完成时间。# firings:生成DNN_1fm过程中的触发次数。TA_ Tic=(Zic) ×(# firings)。TA_ Tic %=(TA_ Tic/tt otal) × 100。

Z ic Z ci Z ii Z ii / Z ic
去交错 3 2 5
卷积 2402 2 2404
Sum 107 2297 2404
Maxpool_relu 195 4613 4808

表5 每个执行单元的等待时间(时钟周期)。Zic:调用至触发完成时间。Zci:触发完成至下一次调用。Zii= Z ic+ Zci。

5.2. 硬件性能分析

在本节中,我们使用赛灵思 Zynq‐7 ZC706平台实现了第5.1节中介绍的DNN应用,并提取了每种执行单元的执行时间数据。该硬件性能分析数据为进一步了解第4节中提到的不同低功耗技术之间的选择提供了深入见解。

表4描述了用于生成32个特征图之一(DNN_1fm)的DNN子图(如图13所示)的执行时间(以时钟周期为单位),以及每种类型执行单元的平均执行时间。其中,形式为Zxy的每个符号表示在整个生成DNN_1fm过程中Txy的平均值(Txy符号的定义见第3.3节)。例如,Zei表示Tei的平均值。

此外,# firings表示在生成DNN_1fm期间执行单元被触发的次数。TA_ Tic是执行单元的总执行时间,等于(Zic) ×(# firings)。TA_ Tic %是TA_ Tic与ttotal的比值(以百分比表示),其中ttotal是生成DNN_1fm所需的总时间。为了进一步了解这些量及其相关信号之间的关系,我们引导读者参考图6,该图是基于解交织单元的使能、调用和FC信号绘制的。

根据本实验得出的TA_ Tic %数据,卷积执行单元在总执行时间的99.04%内处于活动状态,因此对这类执行单元应用时钟门控将不会带来收益。另一方面,对去交错、求和以及最大池化和ReLU执行单元应用时钟门控有潜力节省大量功耗。

表5展示了更多与执行单元等待时间相关的数据,这些数据来源于硬件性能分析。同样,Zxy值是相应Txy值的平均版本,如上所述。Zii与Zic之间的比值衡量了执行单元空闲程度。

这有助于我们更深入地了解多时钟域的形成以及各个时钟域的时钟频率选择。此处可以看到,去交错和卷积执行单元的空闲程度要小得多——两者在触发完成与下一次调用之间仅等待两个时钟周期(Zci)。因此,这两个执行单元可以被划分到一个以较高时钟频率运行的区域,而求和和maxpool&relu单元由于其Zci值大得多,可以放置在以较低时钟频率运行的区域。特别是,表中关于Zii / Zic的数据表明,较慢时钟频率可能约为较快时钟频率的1/20。

5.3. 低功耗技术的应用

基于第5.2节中提供的DNN应用的硬件性能分析数据,我们采用第4节所述的针对LIDE‐V的异步和低功耗设计技术,为基于LWDF‐V的DNN子图实现了四种不同的设计方案。这些设计可视为实现图13所示结构的不同方式,具体取决于实例化的DEMs以及是否应用了时钟门控或多时钟域。这四种实现方案描述如下。

  • DNN_a :一种异步DNN设计。我们根据表5中的分析数据分配了两个时钟域:一个快速时钟域,即时钟域1,用于输入/输出接口、去交错和卷积执行单元;另一个较慢的时钟域,即时钟域2,其时钟信号慢20倍,用于其余的执行单元。时钟域1对应图13中的区域1,时钟域2对应区域2。不同时钟域中的执行单元通过CDC FIFO连接。
  • DNN_cg :集成了时钟门控的基准DNN设计。根据表4所示数据,除卷积执行单元外,所有其他执行单元均采用了时钟门控技术。通过性能分析实验我们发现,卷积执行单元在总执行时间中活跃度高达99.04%,而其他执行单元的活跃度最高仅为总执行时间的11.91%。由于卷积执行单元几乎持续工作,对其实施时钟门控策略所带来的功耗节省十分有限,反而需要额外的逻辑开销来实现该策略。
  • DNN_acg :集成时钟门控的异步DNN设计。此处,我们采用与DNN_a中相同的异步设计。然而,在此设计中还应用了时钟门控。具体而言,除卷积执行单元外的所有执行单元均应用了时钟门控(如DNN_cg所示),并且CDC FIFO也应用了时钟门控。
  • DNN_f acg :集成了时钟门控的DNN设计,其中所有FIFO均被第4.4节中提到的伪CDC FIFO所替代。时钟门控应用于除卷积执行单元外的所有执行单元(与DNN_cg相同),同时也应用于所有伪CDC FIFO。

除了上述设计外,我们还实现了一个进一步的设计:

  • DNN_auto :这是通过启用Xilinx Vivado工具执行的自动功耗优化来综合和实现的基准DNN设计。当启用此选项时,在实现阶段,Vivado会检查在每个时钟周期内未对结果产生贡献的源寄存器的输出逻辑,然后生成细粒度时钟门控和/或逻辑门控信号,以消除不必要的开关活动。
时钟资源 CG 快速时钟 执行单元 慢速时钟 执行单元 同步 FIFO 跨时钟域 FIFO Pseudo‐CDC FIFO
DNN 1 0 7 0 10
深度神经网络_a_ 2 0 4 3 6
深度神经网络_cg 1 4 7 0 10
深度神经网络_acg 2 4 4 3 6
深度神经网络_f acg 1 4 7 0 0

表6 四种设计的组合情况,并列出了各设计中的数量信息

LUTs (%) REGs (%) BUFGs (%) BRAMs (%) DSPs (%)
可用 218,600 437,200 32 545
DNN 9764 (4.47) 6121 (1.40) 1 (3.13) 22 (4.04) 53 (5.89)
深度神经网络_a_ 9983 (4.56) 6338 (1.45) 2 (6.25) 22 (4.04) 53 (5.89)
深度神经网络_cg 9776 (4.47) 6149 (1.41) 5 (15.63) 22 (4.04) 53 (5.89)
深度神经网络 _ acg 10,086 (4.61) 6357 (1.45) 6 (18.75) 22 (4.04) 53 (5.89)
深度神经网络 _ facg 9795 (4.48) 6149 (1.41) 5 (15.63) 22 (4.04) 53 (5.89)
深度神经网络_auto 9808 (4.49) 6121 (1.40) 1 (3.13) 22 (4.04) 53 (5.89)

表7 资源利用率。括号中的数字表示相对于板上可用资源的利用率百分比。

动态功耗 [ W] 时钟资源 切片 BRAM DSPs 总计 ( %)
DNN 0.039 0.081 0.031 0.028 0.271
深度神经网络_a_5 __ 0.027 0.062 0.025 0.024 0.212 (− 21.77)
深度神经网络 _ cg 0.027 0.063 0.025 0.024 0.214 (− 21.03)
深度神经网络 _ acg_100 0.029 0.063 0.024 0.024 0.215 (− 20.66)
深度神经网络 _ acg_ 5 0.027 0.062 0.025 0.024 0.209 (− 22.88)
深度神经网络_facg 0.026 0.063 0.024 0.024 0.212 (− 21.77)
深度神经网络_auto _ 0.036 0.079 0.031 0.028 0.265 (− 2.21)

表8 动态功耗。% 表示与基准DNN设计相比的功耗差异。

使用的时钟资源、带有时钟门控(CG)的执行单元、属于快慢时钟域的执行单元,以及同步FIFO、CDC FIFO和伪CDC FIFO的数量。

表7展示了使用上述Zynq开发板,通过Xilinx Vivado工具生成的布局布线后报告所收集的资源利用率数据。异步设计DNN_a和DNN_acg在LUT和寄存器方面开销最大,这是由于CDC FIFO带来的额外开销所致。五个设计之间的BUFGs数量差异显著,原因有两个关键区别:与基准DNN相比,DNN_a需要一个额外的BUFG来控制第二个时钟域的时钟信号,而DNN_cg和DNN_facg需要四个额外的BUFGs,每个门控时钟执行单元各一个。DNN_acg需要五个额外的BUFGs,每个时钟域各一个,以及每个门控时钟执行单元各一个。DNN_auto设计则表现出可忽略的开销。

对于每一个已实现的设计,开关活动文件由实现后仿真生成,然后由Vivado进行反标以提取功耗数据。该提取出的功耗数据在表8中进行了汇总。

同步设计的时钟频率以及异步设计中时钟域1的时钟频率均统一设置为100兆赫兹,这是可能达到的最高频率。对于异步设计中的时钟域2,根据我们的性能分析结果,其频率设置为5兆赫兹,即较快时钟域时钟频率的1/20。为了完整性,我们还展示了当两个时钟域的频率均设为100兆赫兹时DNN_acg的结果。时钟域2的频率在表8中以“_num”后缀表示,其中num代表以兆赫兹为单位的频率值。

执行时间 ns 功耗 [ W] 能量 μJ
DNN 2,329,165 0.271
深度神经网络_a_5__ 2,407,300(+ 3.355) 0.212
深度神经网络_cg 2,329,245(+ 0.003) 0.214
深度神经网络_acg_100 2,329,245(+ 0.003) 0.215
深度神经网络_acg_5 2,408,100(+ 3.389) 0.209
深度神经网络_facg 2,329,245(+ 0.003) 0.212
深度神经网络_auto_ 2,329,165(+ 0.0 0 0) 0.265

表9 执行时间、功耗和能耗。%s 分别表示与基准DNN设计相比,总图执行时间和能耗的差异。

根据表8,DNN_a_5和DNN_facg在降低功耗方面具有相同的能力,均可将总动态功耗降低21.77%,而DNN_cg的功耗节省略低,为21.03%。DNN_acg_5是功耗效率最高的设计,功耗节省达到22.88%,而DNN_acg_100是(在比较的设计中)最不具优势的,功耗节省为20.66%。

通过对均采用频率为100 MHz时钟域的DNN_cg、DNN_acg_100和DNN_facg进行比较,我们得出结论:DNN_acg_100相比DNN_cg节省的功耗更少,因为前者使用了更多的BUFGs,而且关闭未使用的CDC FIFO部分所节省的功耗无法抵消额外逻辑带来的功耗开销。此外,尽管DNN_facg的资源利用率高于DNN_cg,但DNN_facg能够关闭所有伪CDC FIFO的空闲部分,因此实际上相较于DNN_cg更具优势。

通过比较采用两个时钟域(频率分别为100兆赫兹(时钟域1)和5兆赫兹(时钟域2))的DNN_acg_5与DNN_a_5,我们发现前者采用时钟门控的设计相比后者能够节省更多功耗。这是因为即使属于时钟域2的执行单元在较长时间内处于活动状态,仍可通过时钟门控将其关闭以节省功耗。此外,根据表4,属于时钟域1的解交织单元在总执行时间中几乎有90%的时间可以被关闭。DNN_auto是功耗节省最少的设计,仅能节省2.21%的总动态功耗。

表9总结了五种设计的执行时间、功耗和能耗。所有采用时钟门控的设计仅使执行时间增加了0.003%,而采用5兆赫兹低频的异步设计执行时间增加不到4%。参考图13,FIFO_r_out和FIFO_g_out的同步电路在启用sum_1执行单元时引入了延迟。执行单元sum_1的Zec和sum_2的Zic受到较低时钟频率的影响,分别导致了sum_2和maxpool&relu执行单元启用的延迟。在此初始延迟之后,maxpool&relu执行单元的触发速率接近原始速率,使其计算每48000纳秒完成一次,相较于原始的每48080纳秒完成一次。DNN_auto是唯一未增加执行时间的低功耗实现,但由于其节电效果较差,无法显著节省能量,仅节省了2.21%。

由于不同设计之间的执行时间存在差异,能耗是评估设计效率的更好指标,而非功耗。具体而言,DNN_acg_5相比DNN_a_5仍然节省更多能量(20.26% 对比 19.15%),但在能耗方面并非最高效的设计。相反,DNN_cg、DNN_facg和DNN_acg_100的执行时间仅增加0.003%,其能耗更低。

这些对比展示了不同低功耗设计技术相关的成本与效益之间的复杂关系。LIDE‐V框架的轻量级和模块化架构使设计人员能够高效且系统地对这些关系进行实验。从同一个LWDF‐V模型出发,可以通过集成不同的DEM实现或应用时钟门控策略来实现多种替代设计方案,而无需修改AIM和AEM实现。通过在LIDE‐V的基于模型的框架中以这种方式开展实验,设计人员可以获得针对其特定应用和目标平台的低功耗信号处理权衡的定量洞察。

6. 结论

本文提出了一套紧凑的可重定向应用程序接口(API),其特点在于具有标准接口,用于基于轻量级数据流(LWDF)的设计与实现,并采用硬件描述语言(HDL)。我们的方法强调了在所提出的应用程序接口(API)中自然集成功耗管理。

我们还介绍了LIDE‐V,它是轻量级数据流环境(LIDE)的一个扩展,为基于Verilog的LWDF应用程序接口(API)实现提供了支持,并包含了相关的数据流执行单元和边实现的库。LIDE‐V有助于设计和试验给定LWDF‐V模型的不同实现方案,从而揭示系统级权衡的重要见解,并进行多维设计优化。尽管本文以Verilog硬件描述语言为基础具体开发了该方法,但通过抽象数据流语义的严谨表述,提升了其可重定向性,可适用于VHDL及其他硬件描述语言(HDL)。

我们已经展示了如何通过分析LIDE‐V执行单元的执行时间以及触发完成与下一次触发开始之间的等待时间,系统地识别出最能从时钟门控中受益的执行单元,以及能够以不同时钟频率更高效

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值