在高级综合中提取系统架构转让专利

申请号 : CN201580029707.8

文献号 : CN106462431B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 韩国凌S·A·诺伊恩多夫

申请人 : 赛灵思公司

摘要 :

在高级综合中提取系统架构包括确定高级编程语言描述的第一函数和高级编程描述的控制流构造中包含的第二函数(210、215、220)。第二函数被确定为第一函数的数据消费函数(225)。在电路设计中,自动生成包括本地存储器的端口(240)。该端口在电路设计中将实施第一函数的第一电路模块和实施第二函数的第二电路模块相耦接。

权利要求 :

1.一种数据处理方法,其特征在于,该方法包括:

确定高级编程语言描述的第一函数和所述高级编程语言描述的控制流构造中包含的第二函数;

确定所述第二函数是所述第一函数的数据消费函数,所述数据消费函数是指接收由另一个函数生成或输出的数据作为输入的描述的函数;

在电路设计中并且使用处理器,自动生成包括本地存储器的端口,

其中,所述端口在所述电路设计中将实施所述第一函数的第一电路模块和实施所述第二函数的第二电路模块相耦接;以及在所述电路设计中,自动生成作为非自同步端口的控制电路,其通过在所述第一电路模块和所述第二电路模块之间执行握手通信来控制所述第二电路模块的运行,其中,所述控制电路实施控制所述第二电路模块的控制流构造。

2.根据权利要求1所述的方法,其特征在于,该方法还包括:

生成用于在实施所述控制流构造时相互通信的启动控制电路和结束控制电路,其中所述启动控制电路从所述第一电路模块接收用于所述控制流构造的结束条件,并且将所述结束条件提供给所述结束控制电路,所述启动控制电路对所述第二电路模块的执行的启动进行计数,所述结束控制电路对所述第二电路模块的执行的结束进行计数,以及响应于来自于所述启动控制电路的执行的启动的数量达到所述结束条件并且执行的结束的数量达到所述结束条件,所述结束控制电路与所述第二电路模块的电路模块消费单元执行握手通信,指示数据能够用于消费。

3.根据权利要求1所述的方法,其特征在于,自动生成控制电路的步骤包括:生成用于在实施所述控制流构造时相互通信的启动控制电路和结束控制电路,其中所述启动控制电路从所述第一电路模块接收用于所述控制流构造的结束条件,对所述第二电路模块的执行的启动进行计数,并且当执行的启动的数量达到所述结束条件通知所述结束控制电路,以及其中,响应于来自于所述启动控制电路的通知以及确定所述第二电路模块的执行的结束的数量达到由所述启动控制电路提供的所述结束条件,所述结束控制电路与所述第二电路模块的电路模块消费单元执行握手通信,指示数据能够用于消费。

4.根据权利要求1所述的方法,其特征在于,自动生成控制电路的步骤包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,根据所述控制流构造的一个条件输出启动控制信号至所述第二电路模块或第三电路模块;以及生成结束控制电路,所述结束控制电路响应于从所述第二电路模块或所述第三电路模块接收完成控制信号,向第四电路模块提供启动控制信号,其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数;以及其中,所述第四电路模块是由一个函数生成的,该函数是所述第二函数或所述第三函数的数据消费函数。

5.根据权利要求1所述的方法,其特征在于,自动生成控制电路的步骤包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,根据所述控制流构造的一个条件输出启动控制信号至所述第二电路模块;以及生成结束控制电路,所述结束控制电路响应于从所述第二电路模块接收完成控制信号,向第三电路模块提供启动控制信号,其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数。

6.根据权利要求1所述的方法,其特征在于,自动生成控制电路的步骤包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,输出启动控制信号至所述第二电路模块;以及生成结束控制电路,所述结束控制电路响应于确定所述控制流构造的结束条件被满足,向第三电路模块提供启动控制信号;

其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数。

7.根据权利要求6所述的方法,其特征在于,所述启动控制电路向所述结束控制电路传递所述控制流构造的结束条件。

8.根据权利要求7所述的方法,其特征在于,所述结束控制电路响应于所述启动控制电路和所述结束控制电路都检测到所述结束条件,向所述第三电路模块提供所述启动控制信号。

9.一种数据处理系统,其特征在于,该系统包括

处理器,其被编程以启动可执行操作,包括:

确定高级编程语言描述的第一函数和所述高级编程语言描述的控制流构造中包含的第二函数;

确定所述第二函数是所述第一函数的数据消费函数,所述数据消费函数是指接收由另一个函数生成或输出的数据作为输入的描述的函数;

在电路设计中自动生成包括本地存储器的端口,

其中,所述端口在所述电路设计中将实施所述第一函数的第一电路模块和实施所述第二函数的第二电路模块相耦接;以及在所述电路设计中,自动生成作为非自同步端口的控制电路,其通过在所述第一电路模块和所述第二电路模块之间执行握手通信来控制所述第二电路模块的运行,其中,所述控制电路实施控制所述第二电路模块的控制流构造。

10.根据权利要求9所述的系统,其特征在于,所述处理器还启动包括下述操作的可执行操作:生成用于在实施所述控制流构造时相互通信的启动控制电路和结束控制电路,其中所述启动控制电路从所述第一电路模块接收用于所述控制流构造的结束条件,并且将所述结束条件提供给所述结束控制电路,所述启动控制电路对所述第二电路模块的执行的启动进行计数,所述结束控制电路对所述第二电路模块的执行的结束进行计数,以及响应于来自于所述启动控制电路的执行的启动的数量达到所述结束条件并且执行的结束的数量达到所述结束条件,所述结束控制电路与所述第二电路模块的电路模块消费单元执行握手通信,指示数据能够用于消费。

11.根据权利要求9所述的系统,其特征在于,自动生成控制电路的操作包括:生成用于在实施所述控制流构造时相互通信的启动控制电路和结束控制电路,其中所述启动控制电路从所述第一电路模块接收用于所述控制流构造的结束条件,对所述第二电路模块的执行的启动进行计数,并且当执行的启动的数量达到所述结束条件通知所述结束控制电路,以及其中,响应于来自于所述启动控制电路的通知以及确定所述第二电路模块的执行的结束的数量达到由所述启动控制电路提供的所述结束条件,所述结束控制电路与所述第二电路模块的电路模块消费单元执行握手通信,指示数据能够用于消费。

12.根据权利要求9所述的系统,其特征在于,自动生成控制电路的操作包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,根据所述控制流构造的一个条件输出启动控制信号至所述第二电路模块或第三电路模块;以及生成结束控制电路,所述启动控制电路响应于从所述第二电路模块或所述第三电路模块接收完成控制信号,向第四电路模块提供启动控制信号,其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数;以及其中,所述第四电路模块是由一个函数生成的,该函数是所述第二函数或所述第三函数的数据消费函数。

13.根据权利要求9所述的系统,其特征在于,自动生成控制电路的操作包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,根据所述控制流构造的一个条件输出启动控制信号至所述第二电路模块;以及生成结束控制电路,所述结束控制电路响应于从所述第二电路模块接收完成控制信号,向第三电路模块提供启动控制信号,其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数。

14.根据权利要求9所述的系统,其特征在于,自动生成控制电路的操作包括:生成启动控制电路,所述启动控制电路响应于从所述第一电路模块接收完成控制信号,输出启动控制信号至所述第二电路模块;以及生成结束控制电路,所述结束控制电路响应于确定所述控制流构造的结束条件被满足,向第三电路模块提供启动控制信号;

其中,所述第三电路模块是由第三函数生成的,所述第三函数是所述第二函数的数据消费函数。

15.根据权利要求14所述的系统,其特征在于,所述启动控制电路向所述结束控制电路传递所述控制流构造的所述结束条件;以及所述结束控制电路响应于所述启动控制电路和所述结束控制电路都检测到所述结束条件,向所述第三电路模块提供所述启动控制信号。

说明书 :

在高级综合中提取系统架构

技术领域

[0001] 本公开的实施例大体涉及集成电路(IC),更具体地说,涉及在高级综合过程中提取用于电路设计的系统架构。

背景技术

[0002] 高级综合是一种自动化设计过程,其根据电子系统的高级编程语言描述创建电路设计。电子系统的高级编程语言描述是一种算法描述。高级编程语言的例子包括但不限于C、C++、SystemC等。电子设计自动化(EDA)工具对高级编程语言描述进行操作,并生成电路设计。电路设计可以是使用硬件描述语言(HDL)说明的电子系统的寄存器传输级硬件描述。
[0003] 在高级综合的过程中,一个目的是识别可能引入并行的高级编程语言描述中的顺序部分。当被包含在电路设计中时,并行在得到的电路中提供了更高的资源利用效率和更好的系统性能。很多高级编程语言描述在本质上是迭代的,并利用复杂的编程语言构造,比如循环、数组等。从具有这些复杂构造的高级编程语言描述中提取数据流架构很困难,并且一般不会使用。

发明内容

[0004] 一种方法包括确定高级编程语言描述的第一函数和高级编程描述的控制流构造中包含的第二函数,确定第二函数是第一函数的数据消费函数(data  consuming function),以及在电路设计中并且使用处理器,自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接至实施第二函数的第二电路模块。
[0005] 一种系统,包括被编程以启动可执行操作的处理器。该可执行操作包括确定高级编程语言描述的第一函数和高级编程描述的控制流构造中包含的第二函数,确定第二函数是第一函数的数据消费函数,以及在电路设计中自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接至实施第二函数的第二电路模块。
[0006] 一种非瞬态计算机可读存储媒介包括储存在其中的指令。该指令在被处理器执行时,实施一种方法。该方法包括确定高级编程语言描述的第一函数和高级编程描述的控制流构造中包含的第二函数,确定第二函数是第一函数的数据消费函数,以及在电路设计中使用处理器,自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接至实施第二函数的第二电路模块。
[0007] 通过参考以下具体实施方式和权利要求书,可以认识本发明的其它特征。

附图说明

[0008] 图1是说明了一种示例性数据处理系统的框图;
[0009] 图2是说明了一种根据一种电子系统的高级编程语言描述(以下简称“描述”)创建电路设计的示例性方法的流程图;
[0010] 图3-1和3-2是说明了根据一种电子系统的描述自动创建一种电路设计的框图;
[0011] 图4-1和4-2是说明了根据一种电子系统的描述自动创建另一种电路设计的框图;
[0012] 图5是说明了根据一种电子系统的描述自动创建另一种电路设计的框图;
[0013] 图6是说明了根据一种电子系统的描述自动创建另一种电路设计的框图;
[0014] 图7是说明了一种使用自同步端口(self-synchronized port)的电子系统的一种示例性描述;
[0015] 图8是说明了一种使用自同步端口的电子系统的另一种示例性描述;
[0016] 图9是用于集成电路的一种示例性架构。

具体实施方式

[0017] 尽管定义了新特征的权利要求书总结了本公开,可以相信本公开中描述的各种特征可以通过参考与附图相关的描述得到更好的理解。这里描述的过程、机器、制造以及其它任何变化以说明目的被提供。本公开中描述的特定的结构性和功能性的细节不应被理解为限制,而只是作为权利要求书的基础,以及作为教导本领域技术人员以各种方式在几乎任何适当的具体结构中实施描述的特征的代表性的基础。进一步地,本公开中使用的术语和词汇不应理解为限定性的,而是提供所描述特征的一种可理解的描述。
[0018] 本公开涉及集成电路(IC),并且更具体地,涉及在高级综合的过程中提取用于电路设计的系统架构。依照本公开中描述的创造性设置,电子系统的高级编程语言描述被处理以生成用于该电子系统的电路设计。高级编程语言描述是一种算法描述,其可以包括各种控制流构造中的任一种构造,比如非嵌套循环、数组、调节控制结构等。通过引入有助于数据依赖的时间行为(data-dependent timing behavior)的控制电路,控制流构造被处理。电路设计的数据依赖的时间行为在各种电路模块中控制和/或综合,这些电路模块通过使用可以由控制电路生成的控制信号生成。
[0019] 得到的电路设计是电子系统的硬件描述。电路设计可以使用硬件描述语言说明。进一步地,电路设计支持电子系统的原始高级编程语言描述的程序代码主体部分多个且同时地执行。
[0020] 在一方面,这里描述的创造性设置可以被作为数据处理系统执行的方法或过程实施。在另一方面,这些创造性设置可以作为数据处理系统实施,其具有被编程以执行或启动生成这里所述的电路设计的可执行操作的处理器。又一个方面,这些创造性设置可以被作为储存程序代码的非瞬态计算机可读存储媒介,这些程序代码当被执行时使处理器和/或系统实施方法或过程。
[0021] 下面给出在整个文件中应用的一些定义。这里所定义的术语“自动地”表示是没有用户干预。这里所定义的术语“用户”表示人类。
[0022] 这里定义的术语“高级编程语言”表示用来描述一个数据处理系统的一组指令,例如,一个电子系统,其中的指令往往是对所描述系统的细节进行了很强的抽象。高级编程语言可以隐藏所描述系统的操作的一些方面,比如存储器管理或机器指令,并且可以使用高级编程语言写出的程序转换为各种系统。当使用高级编程语言时,用户可以但不需要明确地描述程序所要生成的系统的寄存器、存储器地址、机器指令等。高级编程语言的例子包括但不限于C、C++、SystemC等。在一些例子中,特定数据处理系统的指令集可以被认为是一种“高级编程语言”,当它被转换为替换的或不同的数据处理系统的指令集中表示的程序时。
[0023] 这里定义的术语“控制流构造”表示高级编程语言的一个或多个声明(statement)或指令,其被执行以导致对遵循两个或更多数据流路径中的哪些数据流路径进行选择。控制流构造与函数不同。控制流构造的一个例子是条件分支。条件分支指只有当条件满足时才执行声明,或执行声明直到条件满足的情况。条件分支包括循环构造、for-next构造、do-until构造、if-then构造、if-then-else构造等。
[0024] 这里定义的术语“硬件描述语言”是有助于数字系统的文档、设计以及实施的计算机语言。数字系统的实施可以包括从数字系统到一组用于IC制造的掩膜的转换、可编程IC比如现场可编程门阵列(FPGA)的编程等。例如,通过使用HDL,用户可以设计并指定电子电路,描述电路的操作,并创建测试以检验电路的操作。HDL包括设计的数字系统的空间和暂时结构以及行为的标准的基于文本的表达。HDL语法和语义包括明确的引用以表达数字系统中同时进行的操作,以及同步同时进行操作的进程以实现特定的组合行为。在许多电路中,这种同步是基于一种全局可见的称为“时钟”的信号。然而,应当理解,用于在电路的不同部分间同步的其它机制也可以被提供。
[0025] 正如这里定义的,术语“握手”或“握手通信”表示一种控制通信,其可以包括建立同步或通过交换特定特征配置和/或信号在发送和接收设备(例如电路)之间提供通知。握手可以使用一组与时钟信号相关的信号实施,或者可以使用一组独立于时钟信号的信号实施(例如,“二相握手”),或者可以通过组合一组更原始的同步和通信的协议使用数据包或消息交换来实施。
[0026] 为了说明的简洁和清楚考虑,附图中所示的元件不一定按照比例画出。例如,一些元件的尺寸相比其它元件被放大了,以更清楚地表示。此外,在适当的情况下,在附图之间参考编号重复出现以表示相应的、类似的或相似的特征。
[0027] 图1是说明了一个示例性的数据处理系统(系统)100的框图。系统100包括至少一个处理器(例如中央处理器)105,其通过系统总线115或其它适合的电路耦接至存储器元件110。系统100在存储器元件110中储存程序代码。处理器105执行通过系统总线115访问存储器元件110得到的程序代码。然而,应当了解,系统100可以以任何能够执行本说明书所述功能的,包括处理器和存储器的系统形式实施。
[0028] 存储器元件110包括一个或多个物理存储器件,比如,本地存储器120和一个或多个大容量存储设备125。本地存储器120指在执行程序代码时通常使用的随机存取存储器(RAM)或其它非持久性存储设备。大容量存储设备125可以由硬盘驱动器(HDD)、固态驱动器(SSD)或其它持久性数据存储器件实现。系统100还可以包括一个或多个高速缓存(没有示出),其为至少一些程序代码提供临时存储,以减少在执行过程中程序代码必须从大容量存储设备125中取出的次数。
[0029] 输入/输出(I/O)设备比如键盘130、显示设备135以及指点设备140可以有选择地耦接到系统100。I/O设备可以直接或者通过中间I/O控制器耦接到系统100。网络适配器145也可以被耦接到系统100,以使系统100可以通过中间专用或公用网络耦接到其它系统、计算机系统、远程打印机和/或远程存储设备。调制解调器、电缆调制解调器、以太网卡和无线收发机是系统100可以使用的不同种类的网络适配器145的例子。
[0030] 如图1所示,存储器元件110储存电子设计自动化(EDA)应用150。以可执行程序代码的形式实施的EDA应用150可以被系统100执行。这样,EDA应用150被认为是系统100的一个组成部分。EDA应用150根据收到的需要开发的电子系统的高级编程语言描述155运行。为方便澄清和讨论,高级编程语言描述155被简称为“描述”155或电子系统的“描述”。使用高级编程语言说明的描述155是对电子系统的算法描述。描述155没有说明需要使用的特定硬件。
[0031] EDA应用150对算法描述155进行操作,并生成用于该电子系统的电路设计160。电路设计160是被描述155说明的电子系统的硬件描述。电路设计160可以由用HDL写出或指定的寄存器传输级硬件描述说明。
[0032] 包括描述155和/或电路设计160的EDA应用150以及任意数据项,当其被用为系统100的一部分或被进一步处理以实现在IC(无论是可编程IC、应用专用IC、部分可编程IC还是不可编程的IC)中时,都是传递功能的功能性数据结构。
[0033] 图2是说明了一种由一个电子系统的描述创建电路设计的示例性方法200的流程图。方法200可以用一个系统,比如图1的系统100执行。为了说明的目的,方法200被描述为处理一种控制流构造。然而,应当了解,方法200可以被迭代地实施以处理描述中所识别的更多控制流构造,或被调整以处理描述中所识别的多个控制流构造。
[0034] 在模块205中,系统接收电子系统的描述以进行处理。该描述用高级编程语言说明。另外,该描述包括控制流构造。在模块210中,系统确认描述中识别的函数。
[0035] 在模块215中,系统识别描述中的控制流构造。在模块220中,系统依照情况,确定哪种或哪些函数包含在控制流构造中。在本说明书中,控制流构造中包含的函数被称为“目标函数”。当控制流构造的执行确定该目标函数是否被执行和/或目标函数是否被执行一定次数的(迭代)时,一个函数被包含在控制流构造中。
[0036] 在模块225中,系统确定描述的哪些函数,包括任意目标函数,是数据生成函数(data generating function),以及哪些函数是数据消费函数(data consuming functions)。这里定义的术语“数据生成函数”表示生成或输出数据的描述的函数,该数据被另一函数(可能是也可能不是目标函数)作为输入使用。这里定义的术语“数据消费函数”表示作为输入接收由另一个函数(可能是也可能不是目标函数)生成或输出的数据的描述的函数。系统识别数据生成函数和数据消费函数间的关系。一个给定的函数相对于一个函数可以被当做数据生成函数运行,相对于另一个不同的函数也可以当做数据消费函数运行。
[0037] 在模块230中,系统评估描述的数据生成和数据消费函数间的数据交换。例如,系统评估目标函数和为目标函数提供输入的数据生成函数之间的数据交换。系统还可以评估目标函数和接收目标函数的输出的数据消费函数间的数据交换。
[0038] 因为每个函数被转换为一个电路模块,因此得到的电路模块用端口耦接。这里定义的术语“端口”指耦接两个或更多的电路模块从而使这些电路模块能够交换信号和/数据的电路或电路的硬件描述,这些电路例如导线、存储器、接口等。用于耦接为数据生成函数创建的电路模块和为数据消费函数创建的电路模块的端口的类型可以通过评估数据生成函数和数据消费函数间发生的数据交换来确定。
[0039] 系统可以确定数据交换的一个或多个属性。在一方面,系统可以检测电子系统的描述中包括的编译指令(compiler directive),其指示一个函数和目标函数间执行的一种数据交换。例如,在描述中,可以找到与说明一种数据交换的特定函数相关联的“pragma”或“#pragma”指令。一个指令,例如当其被检测到与目标函数相关联时,可以指示在创建电路设计时将会用到的一种端口。数据交换的属性也可以包括一种按描述的高级编程语言中定义的方式交换的数据。
[0040] 在另一方面,系统可以分析函数的输入、函数的输出,和/或确定输入数据项处理和/或输出数据项生成的顺序。系统可以确定例如数据生成函数生成的数据是否被数据消费函数以和数据生成函数的生成顺序相同的顺序消费。类似地,系统可以确定数据生成函数生成的数据是否被数据消费函数以和数据生成函数的生成顺序不同的顺序消费。
[0041] 在模块235中,系统根据数据生成和数据消费函数间数据交换的评估确定端口的类型。在一个或多个方面,系统可以根据检测的编译指令或交换的数据类型确定端口类型。在另一方面,系统根据数据交换以及更具体地,数据生成的顺序相比于数据随后消费的顺序,确定端口的类型。
[0042] 例如,当数据的消费顺序与生成顺序相同时,端口可以使用先进先出(FIFO)存储器实施。使用FIFO存储器意味着端口被作为自同步端口实施。数据的消费顺序与生成顺序不同的情况下,数据交换可以使用自同步(self-synchronized)端口或非自同步(non-self-synchronized)端口实施。然而,当数据消费顺序与生成顺序不同时,不能使用FIFO存储器。相反,使用本地存储器实施该端口。
[0043] 为方便解释和澄清,为函数而生成的电路模块、电路装置或电路使用相似的术语指代。例如,为数据生成器生成函数而生成的电路模块可以被称为数据生成电路模块。为目标函数生成的电路模块可以被称为目标电路模块。相似地,为数据消费函数而生成的电路模块可以被称为数据消费电路模块。
[0044] 总的来说,无论是自同步端口还是非自同步端口,这些端口都使用模块级握手。自同步端口允许数据在数据消费模块开始处理后到达数据消费电路模块。这个能力要求除模块级握手通信之外额外的握手通信。数据消费电路模块可以完成模块级的启动握手(start handshake)并在例如存储器包含数据前开始处理一部分数据。随着额外数据生成并被放入存储器,数据消费电路模块可以完成额外的握手通信,以从存储器移除该数据并处理数据。相似地,数据生成电路模块可以完成握手通信,以在完成处理前将数据放入存储器。数据生成电路模块可以随后完成模块级完成握手(done handshake)。
[0045] 一个自同步端口的例子是数据流接口(streaming interface)。数据流接口的一个例子是高级可扩展接口(AXI)协议,符合协议的数据流接口有时被称为“AXI-stream”。在一方面,数据流接口包括FIFO存储器。在这种情况下,自同步端口遵循FIFO数据传输方案。在另一方面,数据流接口可以包括本地存储器,在本地存储器的情况下,自同步端口可以不按顺序,例如不按FIFO顺序,访问数据,或遵循FIFO数据传输方案。然而,在任意一种情况下,自同步端口包括模块级握手通信之外的握手通信,该模块级握手通信比如在数据消费和/或数据生成电路模块间执行的握手通信,以及包括被使用的特定存储器。
[0046] 如前所述,非自同步端口使用模块级握手通信。模块级握手通信表示数据消费和/或数据生成电路模块在彼此之间执行握手通信,而不使用数据传输涉及的特定存储器执行握手通信。数据消费电路模块可以完成模块级启动握手并访问本地存储器中的数据,而不完成额外的握手通信,例如与存储器进行握手通信。数据生成电路模块可以访问本地存储器中的数据而不完成握手通信,然后执行模块级完成握手通信。在非自同步端口的情况下,所有将被提供给数据消费电路模块的数据必须在数据消费电路模块开始处理之前准备好并可以被数据消费电路模块使用。
[0047] 非自同步端口包括具有地址和数据信号的本地存储器。该电路结构允许数据被以不同于储存的顺序读取。可用于实施自同步端口或非自同步端口的示例性的本地存储器包括但不限于查询表(LUT)随机存取存储器、随机存取存储器模块、触发器等。电子系统将被被实施于其中的IC外部的存储器也被用作“本地存储器”。
[0048] 在模块240中,系统在电路设计中自动生成端口,每个端口耦接一个数据生成电路模块和一个数据消费电路模块,并以模块235确定的类型实施。因此,每个端口包括合适的存储器种类。在电路设计中生成电路模块或端口意味着系统依情形生成HDL模块以说明电路模块、电路或端口,并在电路设计中包括HDL。硬件描述模块集合在一起组成了用于电子系统的电路设计。因此,在本公开中,术语“硬件描述模块”、“电路”、“电路模块”、“端口”和/或“电路装置”可以不时互换使用。
[0049] 在模块245中,系统在电路设计中自动生成控制电路。控制电路而已包括启动控制电路和结束控制电路。控制电路实际上在硬件层面实施了算法描述的控制流构造。
[0050] 根据将数据生成函数和数据消费函数连接到目标函数的端口是否是自同步的,控制电路被配置为生成必要的控制信号,以实现符合控制流构造的数据生成、目标以及数据消费模块间的数据流动。选择或确定实施的端口的种类和检测到的控制流构造的种类,至少部分地决定控制信号的程度。
[0051] 在一方面,在电路设计中生成端口包括自动生成用于数据传输的存储器。例如,在确定数据被消费的顺序与生成的顺序不同的情况下,系统自动嵌入可寻址存储器,其协助数据从数据生成电路模块传输到目标电路模块。系统还可以在相似的情况下,例如数据生成顺序与数据消费顺序不同的情况下,自动嵌入寻址存储器以协助数据从目标电路模块传输到数据消费电路模块。在一些情况下,这些存储器可以是分段式存储器(segmented memory)(例如乒乓存储器(ping-pong memory)),其包括多个可以独立读写的独立区域。
[0052] 在另一个实施例中,在确定目标电路模块消费数据的顺序与数据生成电子模块生成数据的顺序相同的情况下,系统自动嵌入FIFO存储器以协助数据从数据生成电路模块传输到目标电路模块。在相似的情况下,系统还可以自动嵌入FIFO存储器以协助数据从目标电路模块传输到数据消费电路模块。
[0053] 在模块250中,系统为描述的每个函数自动生成电路模块。在模块255中,系统输出得到的电路设计。例如,该系统在存储器(比如持久性存储设备等)中储存电路设计。
[0054] 图3-1和3-2是说明了根据一个电子系统的描述自动创建电路设计的框图。图3-1和3-2中说明的过程可以用图1中说明的系统实施。
[0055] 图3-1示出了一个电子系统的描述305,其中使用非自同步端口实施电路设计。描述305包括三个函数,分别被称为函数A、函数B和函数C。在这个实施例中,描述305包括一个循环型的控制流构造。如图所示,函数B包含在控制流构造中,并且是目标函数。如前所述,控制流构造中包含的函数是一种函数,该函数的执行,不管是执行条件和/或执行的次数,直接被控制流构造控制。
[0056] 系统生成了电路设计310。电路设计310以图形的方式表示。函数A、B和C中的每一个都在电路设计310中画出,分别表示为具有标签A、B和C的模块或电路模块。除了将函数A、B和C转换为电路模块之外,系统还自动地嵌入控制电路315。总的来说,控制电路315是描述305中识别的控制流构造的硬件实施。控制电路315包括启动控制电路320和结束控制电路
325。
[0057] 如前面讨论的,系统确定了函数A和函数B之间的数据交换作为非自同步端口实施。系统嵌入了存储器330以实现从电路模块A到电路模块B的数据传输。存储器330是RAM。系统还嵌入了存储器335,以实现从电路模块B到电路模块C的数据传输。存储器335是RAM。
在一方面,算法描述305中说明的任意数组都被转换为两个或更多的可被特定电路模块访问的本地存储器,例如RAM比如是330和335。分别访问每个本地存储器,例如330和335至少部分地被控制电路315执行的握手通信控制或限制。
[0058] 在图3至图6中,数据信号通路用实线说明;并且,控制信号用点线或虚线表示。例如,从电路模块A到存储器330、到电路模块B、到存储器335以及到电路模块C的实线箭头代表提到的电路模块间的数据流动。数据信号通路还存在于电路模块A和启动控制电路320之间,以及存在于启动控制电路320和结束控制电路325之间。算法描述305中控制流构造的检测导致控制电路315的生成,其允许电路设计310同时执行大量的任务。电路设计310允许电路模块A、B和C以流水线的方式同时操作。
[0059] 在电路设计310中,循环控制可以被以如下方式实施。在一方面,电路模块A向启动控制电路320设置(assert)完成控制信号(done control signal)生效,以启动包括电路模块B的循环处理的迭代。电路模块A通过数据通路传递(communicate)循环的结束条件(例如,循环边界(loop bound))到启动控制电路320,其反过来通过数据通路把结束条件传递到结束控制电路325。
[0060] 每次开始执行循环主体例如循环模块B,启动控制电路320可以与电路模块B执行握手通信。因此,启动控制电路320可以计数启动执行循环主体的次数。启动控制电路320还可以把计数传递至结束控制电路325,或当执行启动的次数达到结束条件时通知结束控制电路325。在每次结束循环主体的执行时,结束控制电路325还可以与电路模块B执行握手通信。结束控制电路325可以计数结束执行循环主体的次数,并且确定何时结束执行的次数达到结束条件。
[0061] 在开始执行计数以及在结束执行计数达到循环边界时,结束控制电路325都与电路模块C执行握手通信。例如,在启动控制电路320和结束控制电路325都达到循环边界或结束条件时,结束控制电路325可以向电路模块C设置启动控制信号生效,以结束或完成包括电路模块B的循环。
[0062] 关于数据流,在空间可用时,例如电路模块A生成的数据被推送至存储器330中。根据电路设计310的实施,数据流的握手通信可以是前面作为分开或额外线路所描述或实施的控制握手通信的一部分。
[0063] 在循环的每次迭代中,电路模块B从存储器330中读取数据。电路模块B利用的数据被保留在存储器330中,直到电路模块B为循环的最后一次执行最后一次读取数据。在一方面,启动控制电路320和结束控制电路325可以与电路模块B执行握手通信,指示电路模块B可以在完成所有循环主体的启动执行后,清除存储器330中不再需要的数据。在其它例子中,系统可以更早地允许这样的握手通信,如果系统确定存储器330中储存的数据不再被电路模块B需要。
[0064] 结束控制电路325也必须在电路模块B和电路模块C之间执行握手通信,以指示电路模块C可以消费或读取电路模块B输出至存储器335的数据。在完成所有上述循环主体的执行时,执行用来通知电路模块C数据可用的握手通信。
[0065] 可以使用多种已知物理存储器件中的任意种类,实施存储器330和存储器335。例如,存储器330和存储器335可以使用查询表(LUT)RAM、RAM模块、触发器、实施电路设计310的IC之外的存储器等实施。此外,存储器330和335中存储位置的数量或尺寸会根据描述305的要求而变化。
[0066] 在另一个可替代的实施例中,启动控制电路320和结束控制电路325可以对循环的每次迭代执行握手通信。循环的最后一次迭代可以由从启动控制电路320到结束控制电路325的单独信号指示。在来自启动控制电路320的该信号指示循环完成时,结束控制电路325可以与电路模块C执行必要的握手通信。
[0067] 图3-2示出了自同步端口被用来实施电路设计的例子。在图3-2所示的例子中,自同步端口350被实施以从电路模块A向电路模块B传递数据。自同步端口355被实施以从电路模块B向电路模块C传递数据。在一方面,自同步端口350和自同步端口355使用FIFO存储器实施。在另一方面,自同步端口350和自同步端口355使用本地存储器实施。在另一方面,自同步端口350和355中的一个可以使用FIFO存储器实施而自同步端口350和355中的另一个使用本地存储器实施。
[0068] 图4-1和4-2是说明了根据一个电子系统的描述自动创建另一个电路设计的框图。图4-1和4-2描述的过程可以用图1中的系统实施。
[0069] 图4-1示出了一个电子系统的描述305,其中非自同步端口被用于实施该电路设计。图4说明了一个替代性的实施例,其中描述305被转换为电路设计410。电路设计410与图3-1的电路设计310大体相似,除了函数B由多个电路模块B1、B2和B3实施以协助额外的流水线之外。因此,启动控制电路420与电路模块B1执行握手通信。结束控制电路425与电路模块B3执行握手通信。握手通信还在电路模块B1和B2之间以及B2和B3之间执行。
[0070] 图4-2示出了使用自同步端口实施电路设计的一个例子。在图4-2所示的例子中,自同步端口450被实施以从电路模块A向电路模块B1传递数据。自同步端口455被实施以从电路模块B3向电路模块C传递数据。在一个方面中,自同步端口450和自同步端口455使用FIFO存储器实施。在另一个方面中,自同步端口450和自同步端口455使用本地存储器实施。在另一个方面中,自同步端口450和455中的一个可以使用FIFO存储器实施而自同步端口
450和455中的另一个使用本地存储器实施。
[0071] 图5是说明了根据一个电子系统的描述创建另一个电路设计的框图。图5中说明的过程可以由图1中的系统实施。图5示出了一个电子系统的描述505。描述505包括四个函数,分别叫函数A、函数B1、函数B2和函数C。在这个实施例中,算法描述505包括一个“if-then-else”类型的控制流构造。如图所示,函数B1和B2作为相互排他的执行选项都被包含在控制流构造中。
[0072] 系统生成了电路设计510。电路设计510用图说明。函数A、B1、B2和C中的每一个都在电路设计510中画出,作为电路或电路模块分别被标记为A、B1、B2和C。系统自动嵌入控制电路515。控制电路515是描述505中识别的“if-then-else”控制流构造的硬件实施。控制电路515包括启动控制电路520和结束控制电路525。
[0073] 在图5的实施例中,系统生成非自同步端口。系统还嵌入了存储器530,以实现从电路模块A到电路模块B1或B2的传输。系统还嵌入了存储器535以实现数据从电路模块B1或B2到电路模块C的传输。控制电路515执行的握手通信控制或限制对各个本地存储器的访问,例如对存储器530和535的访问。存储器530和535是RAM类型的存储器。
[0074] 例如,启动控制电路520可以从电路模块A接收完成信号。响应于完成信号,启动控制电路520可以根据从电路模块A向启动控制电路520传递控制流构造的一个条件,向电路模块B1或电路模块B2设置启动控制信号生效或输出启动控制信号。结束控制电路525可以依照情形,从电路模块B1或B2接收完成控制信号,并且响应于完成控制信号,向电路模块C设置启动控制信号生效或输出启动控制信号。
[0075] 图6是说明了由一个电子系统的描述自动创建另一个电路设计的框图。图6中说明的过程可以由图1的系统实施。图6展示了更具体的说明,其中,系统由描述605生成了电路设计610,并使用了非自同步端口。
[0076] 在电路设计610中,系统确定函数的每个输入和输出都作为存储器实施。如图所示,电路设计610包括对应outputA的输出A存储器、对应outputB1的输出B1存储器、对应outputB2的输出B2存储器。向电路模块A提供数据并从电路模块C接收数据的存储器没有被示出以简化说明。
[0077] 在图6的实施例中,输出A存储器、输出B1存储器和输出B2存储器中的每一个都可以用乒乓存储器实施,或具有至少两个独立存储区域以协助电路模块对不同数据组的并行或同时执行的存储器实施。例如,当电路模块A完成操作时,其结果可以被储存在输出A存储器的第一存储器区域中。因为函数B接收“outputA”作为输入,所以电路模块A向启动控制电路620设置完成控制信号生效。来自电路模块A的完成控制信号启动了包括电路模块B1和B2的循环的执行。电路模块A可以开始对下一个数据组进行操作,而结果则被储存在输出A存储器的第二区域。这样,在电路模块A向输出A存储器的第二区域写入数据时,电路模块B1可以继续访问输出A存储器的第一区域。
[0078] 启动控制电路620通过向电路模块B1设置控制信号有效,开始循环的执行。启动控制电路620可以继续启动循环的新的迭代,直到循环退出条件被确定为真。当电路模块B1完成操作时,结果数据被储存在输出B1存储器的第一区域中。电路模块B1还向电路模块B2设置启动控制信号有效。电路模块B2开始对输出B1存储器第一区域中储存的数据进行操作。同时,电路模块B1可以开始为下一次迭代进行运算。如果这是循环的最后一次迭代,那么启动控制逻辑可以开始一个新的循环启动,并且模块B1可以通过从输出A存储器的第二区域中取出下一个数据组开始运算。电路模块B1生成的数据被储存在输出B1存储器的第二区域中。
[0079] 当电路模块B1和电路模块B2结束循环的所有迭代时,结束控制电路625向电路模块C设置启动控制信号有效。响应于来自结束控制电路625的启动控制信号,电路模块C从输出B2存储器中获取数据以进行处理。
[0080] 图7说明了一个使用自同步端口的电子系统的一个示例性的描述705。如描述705中声明的,函数A、B1、B2和C之间的数据交换通过流数据类型传达。系统评估描述705,并且由描述自身以及使用的流数据的类型确定这些自同步端口可以被用在电路设计中。
[0081] 图8描述了一个使用自同步端口的电子系统的另一个示例性的描述805。在描述805的例子中,系统分析了生产者函数,并且发现数据以索引0到N-1的顺序生成。系统还分析了消费者函数,并且确定生产者函数生成的数据以和生产者函数生成同样的顺序被消费。系统使用FIFO存储器,这是因为系统可以证明或确定数据的生成顺序和消费顺序是相同的。在一个方面,当系统不能确定或证明数据以和生成相同的顺序被消费时,系统评估这种情况等同于确定数据被消费的顺序与生成的顺序不相同。
[0082] 图9是说明了根据本说明书中公开的一个实施例的一个示例性IC架构的框图。架构900可以在例如现场可编程门阵列(FPGA)型的IC中实施。本说明书中描述的各种电路设计还可以被处理(例如转换为配置比特流),并被加载到使用架构900的IC中。
[0083] 如图所示,架构900包括多个不同种类的可编程电路(例如逻辑)模块。例如,架构900可以包括大量不同的可编程单元,包括千兆收发器(MGT)901、可配置逻辑模块(CLB)
902、随机存取存储器模块(BRAM)903、输入/输出模块(IOB)904、配置和时钟逻辑(CONFIG/CLOCKS)905、电子信号处理模块(DSP)906、专用输入/输出模块907(例如配置端口和时钟端口)以及其它可编程逻辑908,比如数字时钟管理器、模数转换器、系统监控逻辑等。
[0084] 在一些IC中,每个可编程单元包括可编程互连元件(INT)911,其标准化连接到以及连接自每个相邻单元中对应的INT 911。因此,这些INT 911合在一起实施了被说明的IC的可编程互连结构。每个INT 911还连接到和连接自同一单元中的可编程逻辑元件,如图9顶部包括的实施例所示。
[0085] 例如,CLB 902可以包括可配置逻辑元件(CLE)912,其加上单个INT 911可以被编程以实施用户逻辑。BRAM 903除了一个或多个INT 911之外还可以包括BRAM逻辑元件(BRL)913。通常,一个单元中包括的INT 911的数量取决于该单元的高度。在如图所示的实施例中,BRAM单元具有与5个CLB相同的高度,但其它数字(例如,4)也可以被使用。DSP单元906除了合适数量的INT 911之外可以包括DSP逻辑元件(DSPL)914。IOB 904除INT 911之外还可以包括,例如,两个I/O逻辑元件(IOL)915的实例。本领域技术人员应当清楚,实际的例如连接到IOL 915的I/O焊盘,通常不被限制在IOL 915的区域中。
[0086] 在图9所示的实施例中,举例来说由区域905、907和908组成的接近裸片中央的列区域可以被用于配置、时钟和其它控制逻辑。从该栏延伸的水平区域909可以被用于在可编程IC的宽度上分配时钟和配置信号。
[0087] 一些使用图9中说明的架构的IC包括额外的逻辑模块用来打断构成IC很大一部分的常规的列结构。额外的逻辑模块可以是可编程模块和/或专用电路。例如,被表示为PROC 910的处理器模块跨越了多列的CLB和BRAM。
[0088] 在一个方面,PROC 910被实施为专用电路,例如,硬线处理器(hard-wired processor),其被作为实施IC中可编程电路的裸片的一部分而制造。PROC 910可以代表任意的各不同种类处理器和/或系统,其复杂度的范围可以从独立的处理器(例如可以执行程序代码的单核)到包括一个或多个核、模块、协处理器、接口等的整个处理器系统。
[0089] 在另一个方面,PROC 910从架构900中省去并被替换为一个或多个其它各种所述可编程模块。此外,这些模块可以被用来组成“软处理器”,这样各种可编程电路模块可以被用来组成如PROC 910一样能够执行程序代码的处理器。
[0090] 短语“可编程电路”可以指IC中的可编程电路元件,例如,这里所述的各种可编程或可配置电路模块或单元,以及根据加载到IC中的配置数据选择性耦接各种电路模块、单元和/或元件的互连电路。例如,图9中所示的PROC 910之外的部分比如CLB 902和BRAM 903可以被认为是IC的可编程电路。
[0091] 总的来说,可编程电路的功能直到配置数据被加载到IC中才确立。一组配置比特可以被用来编程IC的可编程电路,比如FPGA。配置比特通常被称为“配置比特流”。总的来说,可编程电路只有先将配置比特流加载到IC中才可以操作或发挥功能。配置比特流有效地在可编程电路中实施或实例化特定的电路设计。例如,电路设计指定了可编程电路模块的功能性的方面和各种可编程电路模块间的物理连接。
[0092] “硬线的”或“硬化的”(harden)电路(例如,非可编程的)被作为IC的一部分而制造。与可编程电路不同,硬线电路或电路模块不是在IC制造后通过加载配置比特流实施的。硬线电路一般被认为具有专用电路模块和互连,举例来说,它们不需要先加载配置比特流到IC中就具有功能,例如PROC 910。
[0093] 在一些例子中,硬线电路可以具有一个或多个可选择模式,可以根据注册设置或储存在IC中的一个或多个存储器元件中的数值设置或选择。例如,可选模式可以通过加载配置比特流到IC中设置。尽管有这样的特点,但是硬线电路不被认为是可编程电路,因为硬线电路在作为IC的一部分被制造时就是可操作的并具有特定功能。
[0094] 图9被用来说明可被用于实施包括可编程电路(例如,可编程结构)的IC示例性架构。例如,一列中逻辑模块的数量、列的相对宽度、列的数量和顺序、列中包括的逻辑模块的种类、逻辑模块的相对尺寸,图9顶部包括的互连/逻辑实施都完全是示例性的。例如,在实际的IC中无论CLB在什么位置,通常都有不止一个列与CLB邻接,以协助用户电路设计的有效实施。然而,邻接CLB列的数量可以随着IC的总体尺寸而变化。进一步地,IC中如PROC 910这样的模块的尺寸和位置,只是用作说明目的,而不用于限制本说明书中公开的一个或多个实施例。
[0095] 根据这里公开的创造性的安排,一个电子系统的描述可以被评估以识别控制流构造。在由描述生成电路设计时,控制电路被嵌入到实施控制流构造的功能的电路设计中。控制电路运行例如握手通信的函数以增加并行度,从而有效地使用资源并且增加得到的电路设计。
[0096] 出于解释的目的,特定的术语被提出以提供对这里公开的各种创造性构思的透彻理解。然而,这里使用的术语只是出于描述创造性安排的特定方面的目的,而不用于限定。
[0097] 这里使用的术语“一种”和“一个”被定义为一个或不止一个。这里使用的术语“多个”被定义为两个或多于两个。这里使用的术语“另一个”被定义为至少第二个或更多。这里使用的术语“耦接”除非另有说明,被定义为连接,不管是没有任何中间元件的直接连接还是用一个或多个中间元件间接连接。除非另有说明,两个元件也可以机械地、电气地或通过通信信道、通路、网络或系统通信地耦接。
[0098] 这里使用的术语“和/或”指代并包括一个或多个相关列出的项目的任何以及所有可能的组合。还应当理解,本公开中使用的术语“包括”指代出现所述的特征、整数、步骤、操作、元件和/或部件,但不排除出现一个或多个其它特征、整数、步骤、操作、元件、部件和/或它们的集合。还应当理解,尽管这里可能使用术语第一、第二等描述各种元素,这些元素不应当被这些术语限制,因为这些用语只是用来将一个元素与另一个区别开。
[0099] 术语“如果”可以根据上下文被理解为“当”或“一旦”或“响应于确定”或“响应于检测到”。
[0100] 类似地,短语“如果确定”或“如果(所述条件或事件)被检测到”可以根据上下文被理解为“一旦确定”或“响应于确定”或“一旦检测到(所述条件或事件)”或“响应于检测到(所述条件或事件)”。
[0101] 在本公开中,相同的参考标记被用来指代终端、信号线、线路和它们对应的信号。出于这样的考虑,术语“信号”、“线路”、“连接”、“终端”和“引脚”可以在本公开中被不时地互换使用。还应当理解,术语“信号”、“线路”等可以代表一个或多个信号,例如单个比特通过一条线路的传输或者多个并行的比特通过多条并行线路的传输。此外,每个线路或信号可以根据情况,代表通过信号或线路连接的两个或更多部件间的双向通信。
[0102] 本公开描述的一个或多个方面可以使用硬件或者硬件与软件的结合实现。一个或多个方面可以在一个系统中以集中的方式实现,也可以以不同元件分散在多个互连的系统中的分散的方式实现。任何一种数据处理系统或其它被采用以实现这里描述的方法的至少一部分的装置都是合适的。
[0103] 一个或多个方面还可以被体现在计算机程序产品中,其包括所有使这里描述的方法能够实施的特征。计算机程序产品包括计算机可读数据存储介质。这里定义的术语“计算机可读数据存储介质”意思是包含或储存供指令执行系统、装置或设备使用或与指令执行系统、装置或设备关联的程序代码的存储介质。计算机可读存储介质是非瞬态的,这样其本身不是瞬态传播信号。计算机可读存储介质的例子可以包括但不限于光介质、磁介质、磁光介质、计算机存储器例如随机存取存储器、大容量存储设备(例如硬盘)等。
[0104] 附图中的流程图和框图说明了根据这里公开的创造性安排的各个方面的系统、方法和计算机程序产品可能的实施例的架构、功能和操作。在这点上,流程图和框图中的每个模块可以代表代码的模块、片段或部分,该代码包括一个或多个可执行的指令以实施指定的逻辑函数。应当注意,在一些替代性的实施例中,模块中提到的函数可能以不同于图中所示的顺序实现。例如,所示两个连续的模块可以被基本同时执行,或者这些模块有时可以以相反的顺序执行,这取决于设计的功能。还需要注意的是,框图和/或流程图中说明的每个模块以及框图和/或流程图中说明的模块的组合,可以用执行指定函数或行为的特定目的的基于硬件的系统实施,或者用特定目的的硬件和计算机指令的组合实施。
[0105] 这样,在整个公开中,使用比如“处理”或“运算”或“计算”或“确定”或“显示”等术语的叙述指代数据处理系统(例如,计算机系统或类似的电子计算器件)的动作或处理,其操作并将计算机系统的寄存器和/或存储器中用物理(电子)量表示的数据转换为计算机系统的存储器和/或寄存器或其它这样的信息存储、传输或显示设备中用物理量类似地表示的其它数据。
[0106] 对应的结构、材料、步骤以及权利要求书中全部方法或步骤加上功能元素(function element)应当包括任何用来根据特定的要求执行与其它要求的元素结合的函数的结构、材料或步骤。
[0107] 一种方法包括确定高级编程语言描述的第一函数和包含在高级编程语言描述的控制流构造中的第二函数,确定第二函数是第一函数的数据消费函数,在电路设计中并且使用处理器自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接至实施第二函数的第二电路模块。
[0108] 该方法可以包括在电路设计中自动生成作为非自同步端口的控制电路,通过在第一电路模块和第二电路模块之间执行握手通信控制第二电路模块的运行。
[0109] 在一个方面,自动生成控制电路可以包括生成实施流控制构造的启动控制电路和结束控制电路。
[0110] 在另一个方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收到完成控制信号,根据控制流构造的一个条件输出启动控制信号到第二电路模块或第三电路模块。可以生成结束控制电路,其响应于从第二电路模块或第三电路模块接收到完成控制信号,向第四电路模块提供启动控制信号。第四电路模块是由一个函数生成的,该函数是第二函数或第三函数的数据消费函数。
[0111] 在另一方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收到完成控制信号,根据控制流构造的一个条件输出启动控制信号到第二电路模块。可以生成结束控制电路,其响应于从第二电路模块接收到完成控制信号,向第三电路模块提供启动控制信号。第三电路模块是由第三函数生成的,其是第二函数的数据消费函数。
[0112] 在又一个方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收到完成控制信号,输出启动控制信号至第二电路模块。可以生成结束控制电路,其响应于确定控制流构造的结束条件被满足,向第三电路模块提供启动控制信号。第三电路模块是由第三函数生成的,其是第二函数的数据消费函数。
[0113] 启动控制电路可以向结束控制电路传递流控制构造的结束条件。另外,结束控制电路响应于启动控制电路和结束控制电路都检测到结束条件,可以向第三电路模块提供启动控制信号。
[0114] 一种系统包括被编程为启动可执行操作的处理器。可执行操作包括确定高级编程语言描述的第一函数以及高级编程语言的控制流构造中包含的第二函数,确定第二函数是第一函数的数据消费函数,并且在电路设计中自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接到实施第二函数的第二电路模块。
[0115] 可执行操作可以包括在电路设计中自动生成作为非自同步端口的控制电路,其通过在第一电路模块和第二电路模块之间执行握手通信控制第二电路模块的运行。
[0116] 在一个方面,自动生成控制电路可以包括生成实施流控制构造的启动控制电路和结束控制电路。
[0117] 在另一个方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收完成控制信号,根据控制流构造的条件输出启动控制信号至第二电路模块或第三电路模块。可以生成结束控制电路,其响应于从第二电路模块或第三电路模块接收完成控制信号,向第四电路模块提供启动控制信号。第四电路模块是由一个函数生成的,该函数是第二函数或第三函数的数据消费函数。
[0118] 在另一个方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收完成控制信号,根据控制流构造的条件输出启动控制信号至第二电路模块。可以生成结束控制电路,其响应于从第二电路模块接收完成控制信号,向第三电路模块提供启动控制信号。第三电路模块是由第三函数生成的,其是第二函数的数据消费函数。
[0119] 在又一个方面,自动生成控制电路可以包括生成启动控制电路,其响应于从第一电路模块接收完成控制信号,输出启动控制信号至第二电路模块。可以生成结束控制电路,其响应于确定控制流构造的结束条件被满足,向第三电路模块提供启动控制信号。第三电路模块是由第三函数生成的,其是第二函数的数据消费函数。
[0120] 启动控制电路可以向结束控制电路传递流控制构造的结束条件。另外,结束控制电路响应启动控制电路和结束控制电路都检测到结束条件,可以向第三电路模块提供启动控制信号。
[0121] 一种非瞬态计算机可读存储媒介包括其中储存的指令。这些指令在被处理器执行时,实施一种方法。该方法包括确定高级编程语言描述的第一函数和包含在高级编程语言描述的控制流构造中的第二函数,确定第二函数是第一函数的数据消费函数,并在电路设计中使用处理器自动生成包括本地存储器的端口。该端口在电路设计中将实施第一函数的第一电路模块耦接至实施第二函数的第二电路模块。
[0122] 该方法可以包括在电路设计中自动生成作为非自同步端口的控制电路,通过在第一电路模块和第二电路模块之间执行握手通信控制第二电路模块的运行。
[0123] 在一个方面,自动生成控制电路可以包括生成实施流控制构造的启动控制电路和结束控制电路。
[0124] 启动控制电路可以向结束控制电路传递流控制构造的结束条件。
[0125] 本公开中描述的特征可以被体现在其它形式中,只要不偏离本公开的精神和必要的属性。因此,应当按照权利要求书而不是前面的其它公开确认这些特征和实施例的范围。