CN113302616A - 从映射到电路实现的源代码构造生成同步数字电路 - Google Patents
从映射到电路实现的源代码构造生成同步数字电路 Download PDFInfo
- Publication number
- CN113302616A CN113302616A CN201980088920.4A CN201980088920A CN113302616A CN 113302616 A CN113302616 A CN 113302616A CN 201980088920 A CN201980088920 A CN 201980088920A CN 113302616 A CN113302616 A CN 113302616A
- Authority
- CN
- China
- Prior art keywords
- circuit
- computer
- implemented method
- hardware pipeline
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000001360 synchronised effect Effects 0.000 title claims abstract description 24
- 238000000034 method Methods 0.000 claims description 60
- 230000008569 process Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 16
- 238000004891 communication Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 238000000844 transformation Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 102000015779 HDL Lipoproteins Human genes 0.000 description 2
- 108010010234 HDL Lipoproteins Proteins 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 239000003990 capacitor Substances 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 239000000344 soap Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/327—Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/343—Logical level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/314—Parallel programming languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
多线程命令式编程语言包括映射到电路实现的语言构造。构造包括条件语句,该条件语句使流水线中的线程能够等待指定条件发生,标识将被原子地执行的源代码指令的部分的开始和结束,或指示将被原子地执行的读‑修改‑写存储器操作。包括映射到电路实现的一个或多个构造的源代码可以被编译,以生成电路说明。例如,使用硬件描述语言(HDL),电路说明可以被表达。电路说明转而可以被用以生成包括电路实现的同步数字电路。例如,HDL可以被利用,以生成FPGA镜像或比特流,该FPGA镜像或比特流可以被利用以对包括与语言构造相关联的电路实现的FPGA编程。
Description
背景技术
硬件描述语言(“HDL”)是由硬件工程师使用来描述电子电路的结构和行为的建模语言,该电子电路的大部分通常是数字逻辑电路。HDL的示例包括超高速集成电路(“VHSIC”)HDL和VERILOG。
HDL通常需要许多代码行以模拟数字逻辑电路。即使对于非常熟悉HDL的硬件工程师,创造这种代码也是非常耗时间的。此外设计中存在越多的代码行,设计越可能包括错误或执行得较差。
此外,因为HDL通常利用与命令式编程语言不同的编程范式,不非常熟悉HDL的软件工程师通常很难利用这些语言。作为结果,由软件工程师创建的、从HDL生成的电子电路也可能包括错误或执行得较差。
本文呈现的是本公开所做出的关于这些和其他技术挑战。
发明内容
所公开的技术是用于从有效映射到电路实现的源代码构造生成同步数字电路(“SDC”)的技术。通过所公开的技术的实现,硬件工程师可以通过减少实现一些类型的SDC所需的HDL代码行的数量、并且通过消除整类常见的设计错误来实现显著的生产力增益,同时没有牺牲性能。针对具有一些或者没有利用HDL来设计SDC经验的软件工程师,所公开的技术提供了熟悉的编程范式,该范式可以被用以快速地并且容易地生成高性能的电路设计。通过所公开的主题的实现,本文中未具体提及的其他技术优势也可以被实现。
为了实现上面简要提到的技术优势,程序源代码以多线程命令式编程语言生成并且被存储。所公开的语言是命令式的,因为程序语句是依次执行的,并且是多线程的,因为多个执行线程可以并行执行。线程指的是局部变量的集合。当局部变量由硬件电路处理时,线程被执行。
本文所描述的线程类似于软件线程,但不同于软件线程。软件线程维持一个包含局部变量的调用堆栈,并且在存储器中执行代码,本文描述的线程是在硬件电路中移动的局部变量的集合。软件线程具有由指令指针在可执行代码中确定的位置,而所公开的线程在给定的时间点处具有SDC上的物理位置。此外,本文所描述的语言构造映射到保证线程顺序的电路实现(即,线程将以他们输入的顺序退出电路实现)。
本文中所公开的多线程命令式编程语言包括映射到电路实现的语言构造(或“构造”)。语言构造是可以由一个或多个词汇标记形成的程序的句法上允许的部分。电路实现可以在现场可编程门阵列(“FPGA”)、门阵列、专用集成电路(“ASIC”)或其他类型的合适器件中被实现为SDC。另一硬件组件,诸如网络接口卡(“NIC”),可以被配置有FPGA、门阵列或ASIC,以实现期望的功能性。
在一个配置中,构造包括条件语句,该条件语句使流水线中的线程能够等待指定条件发生。例如,条件可能被表达为“wait_for(x>global_variable)”。在该配置中,构造映射到包括硬件流水线(或“流水线”)的电路实现,该硬件流水线实现在条件语句之前由源代码指令限定的功能性。该电路实现还包括第二硬件流水线,该硬件流水线实现在条件语句之后由源代码指令限定的功能性。第一硬件流水线输出到队列。第二流水线从队列获取其输入。
在该配置中,仅当由条件语句限定的条件被评价为真时(例如,在上面示例中当x>global_variable时),第二硬件流水线才处理来自队列的值。在一些配置中,通过将队列中获得的值与存储在寄存器或另一类型的片上存储器(诸如,静态随机存储器(“SRAM”))中的值进行比较,第二流水线中的条件被评价。例如,存储在寄存器中的值可以由第三流水线生成。队列中的值(例如,在以上给出的示例中的x)与局部变量对应。
在另一配置中,构造标识将被原子地执行的源代码指令的部分的开始和结束。如本文所使用的,术语“原子地”和“原子”指的是一次只允许一个线程被执行的电路实现。在该配置中,电路实现包括用于实现将被原子地执行的指令的单个硬件流水线阶段。单个硬件流水线阶段在单个时钟周期中执行。单个硬件流水线阶段可以接收来自一个或多个输入寄存器的输入,并且将值输出到一个或多个输出寄存器。该构造通过映射到一次仅允许一个线程在原子区域内的电路实现,来实现线程同步。
在另一配置中,构造指示将被原子地执行的读-修改-写存储器操作。该构造通过映射到与片上存储器执行同步的读-修改-写操作的电路实现来实现线程同步。在没有性能降低的情况下,这确保了读-写-修改操作的问题被避免。
在这种配置中,电路实现包括存储器和至少一个第一硬件流水线阶段。第一硬件流水线阶段可以加载来自片上存储器的值。第一硬件流水线阶段向第二流水线阶段提供从存储器读取的值。
第二硬件流水线阶段将加载的值的存储器地址和与最近(例如,前一次)存储器存储操作相关联的一个或多个地址进行比较。如果地址匹配,则从最近的存储器加载的值被丢弃,并且在最近存储操作期间存储在寄存器中的值按照以下所描述的方式被修改。如果地址不匹配,则由最近加载操作从存储器加载的值随后按照以下所描述的方式被修改。
第二硬件流水线阶段对最近加载的值或来自先前存储操作的值执行用户指定的计算,以生成修改后的值。由读-修改-写构造指定的操作可以是任意复杂的。例如,并且不限于,如果构造指定了形式为“memory[x]=(memory[x]+y)*2”的操作,则“+y”和“*2”指令原子地发生在修改值的同一流水线阶段中,如果加载地址与针对最近存储的加载地址匹配。
第二流水线阶段在寄存器中存储修改后的值,用于在下一读-修改-写操作期间使用。第二流水线阶段也在寄存器中存储地址,也用于在下一读-修改写操作期间使用。
一个或多个第三硬件流水线阶段在第二硬件流水线阶段之后。一个或多个第三硬件流水线阶段被配置为从第二流水线阶段接收修改后的值并且将值存储在片上存储器中的存储器地址处。
一旦程序资源代码已经被限定具有映射到电路实现的构造,源代码(包括构造)就可以被编译以生成电路说明。例如,电路说明可以使用HDL被表达。电路说明转而可以被用以生成包括电路实现的SDC。例如,HDL可以被用以生成包括由构造限定的电路实现的FPGA镜像或比特流。FPGA镜像或比特流转而可以被利用以对包括电路实现的FPGA进行编程。
如上所简要讨论的,本文所公开的技术的实现使得硬件工程师和软件工程师可以同样地使用映射到SDC实现的编程构造来容易地并且快速地生成一些能良好、可靠的SDC实现方式。本文中未明确标识的其他技术效果,也可以通过所公开的技术实现被实施。
应当理解,上述主题可以被实现为计算机控制的装置、计算机实施的方法、计算设备、或者诸如计算机可读介质的产品的制品。通过阅读以下具体实现并且查看相关联的附图,这些和各种其他特征将是明显的。
提供本发明内容以便以简化的形式引入将在以下具体实现中进一步描述的所公开的技术的一些方面的简要描述。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在将本发明内容用于限制所要求保护的主题的范围。此外,所要求保护的主题不限于解决在本公开的任何部分中提到的任何或所有缺点的实施。
附图说明
图1是示出了本文所公开的用于基于程序源代码生成同步数字电路的系统的各方面的计算架构图,该程序源代码包括映射到同步数字电路的编程构造;
图2是示出了说明性的示例同步数字电路的方面的硬件架构图,该同步数字电路包括若干硬件流水线,每个具有多个流水线阶段的硬件流水线,以及可以使用所公开的技术来限定和实现的计算单元;
图3是示出了映射到电路实现用于使流水线中线程能够等待指定条件发生的语言构造的方面的硬件架构图;
图4是示出了映射到电路实现用于在硬件中原子地实现源代码指令的语言构造的方面的硬件架构图;
图5是示出了映射到电路实现用于原子地执行读-修改-写存储操作的语言构造的方面的硬件架构图;
图6是示出了例程的流程图,该例程图示了用于从有效映射到电路实现的源代码构造生成同步数字电路、参考图1-图5所描述的技术的操作的方面;
图7是示出了针对可以实现本文所呈现的技术的方面的计算设备的说明性计算机硬件和软件架构的计算机架构图;以及
图8是图示了其中可以实现所公开的技术的方面的分布式计算环境的网络图。
具体实施方式
以下具体实施方式是指用于从有效地映射到电路实现的源代码构造生成SDC的技术。如所简要讨论的,本文所公开的技术的实现使得在迭代多线程编程中使用编程构造能够创建高性能并且可靠的SDC实现,该迭代多线程编程语言有效地映射到SDC实现。通过所公开的主题的实现,本文中未具体提及的其他技术优势也可以被实现。
虽然本文所描述的主题被呈现在执行编译器的计算系统一般上下文中,但是该编译器被配置为编译映射到电路实现的源代码语言构造。本领域技术人员将认识到,可以结合其他类型的计算系统和模块来执行其他实现。本领域的技术人员还将理解,本文所描述的主题可以利用其他计算机系统配置来实践,包括手持式设备、多处理器系统、基于微处理器或可编程的消费电子产品、嵌入在设备中的计算或处理系统(诸如可穿戴计算设备、汽车、家庭自动化等)、小型机、大型计算机等。
在下面的具体实现中,参考了构成本文的部分的附图,并且这些附图是通过说明特定配置或示例的方式示出的。现在参考附图,其中相同的数字在若干图中表示相同的元素,用于从有效映射到电路实现的源代码构造生成SDC的各种技术的方面将被描述。
图1是示出了本文所公开的用于基于程序源代码102限定和生成同步数字电路(“SDC”)112的说明性系统100的方面的计算架构图,该程序源代码102包括映射到SDC 112的编程构造。SDC可以由门阵列、现场可编程门阵列(“FPGA”)、专用集成电路(“ASIC”)和其他类型的电路设备实现。尽管主要在FPGA中实现的SDC 112的上下文中描述了所公开的主题,但是应当理解,可以利用本文所公开的技术以限定使用其他类型的设备来实现的SDC112。
如图1所图示的,说明性系统100包括编译器104,编译器104编译程序源代码102以生成硬件描述语言(“HDL”)代码或者电路的低级表示(诸如,网络表)。如上述简要讨论的,HDL是由硬件工程师使用来描述电子电路的结构和行为的建模语言,该电子电路的大部分通常是数字逻辑电路。HDL的示例包括VHSIC HDL和VERILOG。
如将在以下详细描述的,程序源代码102是使用设计成以SDC112为目标的多线程命令式编程语言来表达的。所公开的语言提供了诸如‘C’和‘JAVA’语言的许多特征,诸如函数调用、for-loop、算术运算符和条件语句。然而,所公开的语言包括直接映射到底层SDC112硬件实现的构造。这使得硬件和软件工程师两者能够推理性能,并且在优化他们的设计方面是有效的。如上所述,这还可以使软件工程师熟悉该语言,并且使硬件工程师免于处理在HDL中编码时出现的各类错误。
所公开的多线程命令式编程语言是命令式的,因为程序语句依次执行,并且是多线程的,因为多个执行线程被可以被并行执行。如上所述,线程是局部变量的集合。在硬件电路处理局部变量时线程被执行。
本文所描述的线程类似于软件线程,但与软件线程不同。虽然软件线程维持包含局部变量的调用栈并且执行存储器中的代码,本文描述的线程是通过硬件电路移动的局部变量的集合。虽然软件线程在可执行代码中具有由指令指针确定的位置,但是所公开的线程在给定时间点在SDC上具有物理位置。SDC可以执行数百、数千、甚至数百万个线程,并且SDC执行可以被流水线化的,即不同线程可以在电路的不同阶段内同时执行。
如下将更详细描述的,语言构造可以被限定在映射到电路实现的程序源代码102中。语言构造是程序的句法上允许的部分,它可以由来自一个或多个词法标记形成。本文所描述的语言构造映射到保证线程排序的电路实现中(即,线程将以与它们进入的相同顺序退出电路实现)。
如下还将更详细描述的,由本文公开的构造生成的电路实现可以被实现为FPGA、门阵列、ASIC或另一类型的合适设备中的SDC。诸如NIC的另一硬件组件可以配置具有FPGA、门阵列或ASIC,以便实现所期望的功能性。
如图1所示,编译器104可以将包括本文所公开的语言构造中的一个或多个语言构造的程序源代码102编译到电路说明、该示例中是HDL代码106。该HDL代码106可以被提供给HDL合成工具108,该HDL合成工具108转而可以生成比特流110,该比特流110可以被利用以对SDC 112编程,诸如例如在FPGA上。当以ASIC为目标时,HDL代码106可以被给ASIC制造方提供用于工厂中生产。
图2是示出了说明性的示例SDC 112的方面的硬件架构图,该说明性的示例SDC112包括若干硬件流水线200A-200C(或者“流水线”),可以使用所公开的技术来限定和实现硬件流水线200A-200C。每个硬件流水线具有多个流水线阶段206,每个流水线阶段206具有计算单元208。如图2所示,程序源代码102可以被编译到硬件计算单元208的流水线200A-200C中。
流水线200A-200C可以通过先进先出(“FIFO”)队列连接(本文也可以称为“多个FIFO”或“队列”)。流水线200A-200C实现由程序源代码102限定的功能性。FIFO 202存储数据值、将输入提供到流水线200以及存储由流水线200生成的输出。例如,SDC 112包括将它的输出馈送到FIFO 202A的流水线200A。流水线200B转而从FIFO 202A获取它的输入,并且将它的输出提供给向FIFO 202B。流水线200C从FIFO 202B获取它的输入。
在一些配置中,流水线200实现策略电路210,该策略电路210确定何时从FIFO 202中取回下一(多个)值。例如,策略电路210可以要求在从输入FIFO(例如,FIFO 202A)中取回值用于处理之前,输入FIFO(例如,在流水线200B情况下为FIFO 202A)不为空并且输出FIFO(例如,FIFO 202B)未满。
如图2所示,流水线200可以由一个或多个流水线阶段206A-206B组成。通过同时执行流水线200的不同阶段206中的不同线程来使执行流水线化。阶段的结果可以存储在寄存器204中,并且提供到针对下一时钟周期的持续时间的下一阶段206。
每个流水线阶段206可以包括诸如加法器208A和查找表(“LUT”)208B的一个或多个计算单元208B。在图示的示例中,加法器208A可以执行基本运算,例如加法、减法、乘法。计算单元也可以实现布尔运算符(例如,“OR”、“NOR”、“XOR”等)或者由SDC制造方提供的其他定制逻辑。
计算单元也可以由用户可编程的查找表208B实现。图示的LUT 208B描绘了将两个输入位映射到单个输出位的两输入真值表。LUT 208B可以被配置为支持不同数量的输入位。为了生成更复杂的输出值,例如字符或8位整数,可以使用多个LUT 208B,每个LUT连接到输入变量的不同位。
计算单元可以暂时将结果存储在寄存器204中(或者“触发器”)。这种寄存器的内容可以被提供给相同或不同流水线200中的其他计算单元。寄存器204可以在连接的数字时钟从0转变到1时捕获输入处的值,并且在输出处提供该值直到下一时钟周期结束(即,直到时钟再次从0转变到1)。寄存器还可以包括启动线。如果启动线被设置为假,则寄存器将不执行上述操作,在多个时钟周期上维持当前输出值。
应当理解,为了讨论的目的,图2中所示的流水线架构已经被简化。本文所描述的编程语言构造可以被利用以实现更复杂的SDC 112,该SDC 112具有包括比图2所示的更多组件。
图3是示出了映射到电路实现300用于使流水线200中线程能够等待指定条件发生的语言构造的方面的硬件架构图。在该配置中,语言构造限定要求流水线中的线程等待指定条件发生的条件语句304。程序源代码102中的条件语句304可以被表达为“wait_for(x>global_variable)”,例如其中“x>global_variable”是流水线必须等待的条件。其他形式的语法在其他配置中可以被使用。
在该配置中,语言构造映射到包括硬件流水线200A的电路实现300,硬件流水线200A实现由位于条件语句304之前的源代码102中的指令302A限定的功能性。该配置中的电路实现300还包括第二硬件流水线200B,其实现由位于条件语句304之后的源代码102中的指令302B指定的功能性。第一硬件流水线向队列202A输出200A值306A。第二流水线200B从队列202A获得输入值306A。
在操作中,第二硬件流水线200B处理来自队列202A的值306A,仅当它评价由程序源代码102中的条件语句304限定的条件为真(例如,当x>global_variable)在上面的示例中)。在一些配置中,通过将从队列202A获得的值306A与存储在寄存器204A中的值306B比较,指定条件被评估在第二流水线200B中。例如,存储在寄存器204A中的值306B由第三流水线200C生成。值306B对应于程序源代码102中的全局变量(例如,上面给定示例中的x)。
图4是示出了映射到电路实现400用于在硬件中原子地实现源代码指令的语言构造402的方面的硬件架构图;如上所讨论的,术语“原子地”和“原子”指的是一次只允许一个线程被执行的电路实现。相对于其他操作,原子操作也在单个步骤(例如,时钟周期)内完成。
在该配置中,构造402标识将被原子地执行在硬件中的源代码102中的指令序列的开始和结束。例如,构造402可以被表达为“原子{}”,其中花括号涵盖将要在硬件中原子地执行的指令302C。其他形式的语法可能被使用在其他配置中。该构造通过映射到一次仅允许一个线程在原子区域内的电路实现来实现线程同步。
构造402映射到电路实现400,该电路实现400包括用于实现将被原子地执行的指令302C的单个硬件流水线阶段206A。单个硬件流水线阶段206A在单个时钟周期中执行。如图4所示,单个硬件流水线阶段206A可以从寄存器204C接收输入并且将值输出到另一寄存器204D。
图5是示出了映射到电路实现500用于原子地执行读-修改-写存储操作的语言构造502的方面的硬件架构图;构造500可以限定任意复杂的指令集,用于在读-修改-写操作期间修改指定变量。如上所讨论的,构造502通过映射到与片上存储器执行同步的读-修改-写操作的电路实现500实现线程同步。在没有性能降低的情况下,这确保了由于为未同步线程执行的读-写-修改操作的问题被避免。
在该配置中,电路实现500包括存储器504和一个或多个第一硬件流水线阶段206B。在说明性的示例中,第一硬件流水线阶段206B加载来自片上存储器504的值506。值506从存储器504的地址503被加载。第一硬件流水线阶段206B向第二流水线阶段206C提供从存储器504读取的值506。
第二硬件流水线阶段206将地址503和与最近(例如,前一次)存储操作相关联的一个或多个地址505比较。如果地址匹配,则从最近的存储器504加载的值506被丢弃,并且在最近存储操作期间存储在寄存器204E中的值507按照以下所描述的方式被修改。如果地址不匹配,从存储器504加载的值506随后按照以下所描述的方式被修改。
第二硬件流水线阶段206C对值506或来自先前存储操作的值507执行用户指定的计算,以生成修改后的值508。由读-修改-写构造指定的操作可以是任意复杂的。例如,并且不限于,如果构造502指定了形式为“存储器[x]=(存储器[x]+y)*2”的操作,则“+y”和“*2”指令原子地发生在修改值506的同一流水线阶段206C中,如果加载地址503与针对最近存储的加载地址匹配。
第二流水线阶段206C在寄存器204E中存储修改后的值508,用于在下一读-修改-写操作期间使用。第二流水线阶段206C也在寄存器204F中存储地址503,也用于在下一读-修改写操作期间使用。
一个或多个第三硬件流水线阶段206D在第二硬件流水线阶段206C之后。一个或多个第三硬件流水线阶段被配置为从第二流水线阶段206C接收修改后的值508并且将值508存储在片上存储器504中的存储器地址503处。
如上所述,一旦程序资源代码102已经被限定并且被存储具有映射到电路实现的构造(诸如,上面所讨论的那些),源代码102(包括构造)可以被编译以生成电路说明,诸如上面所描述的HDL代码106。电路说明转而可以被用以生成包括所描述的电路实现的SDC112。例如,由编译器104从程序源代码102生成的HDL代码106可以被利用,生成以包括由语言构造限定的电路实现的FPGA。
图6是示出了例程600的流程图,该例程图示了根据本文所公开的一个实现例的用于从有效映射到电路实现的源代码构造生成同步数字电路、参考图1-图5所描述的技术的操作的方面。应当理解,本文所描述的关于图6和其他附图的逻辑操作可以被实现(1)为运行在计算设备上的计算机实现的动作或程序模块的序列和/或(2)为计算设备内的互相连接的机器逻辑电路或电路模块。
本文所公开的技术的特定实现是取决于计算设备的性能和其他要求的选择问题。因此,本文所描述的逻辑运算被不同地称为状态、操作、结构设备、动作或模块。这些状态、操作、结构设备、动作和模块可以用硬件、软件、固件、专用数字逻辑、及其任何组合来实现。应当理解,可以执行比图中所示的和本文所述的更多或更少的操作。这些操作也可以以与本文所述的那些不同的顺序来执行。
例程600在操作602处开始,其中包括映射到电路实现的语言构造的程序源代码102被限定和存储。如上所述,例如,构造可以被指定映射到电路实现300用于使流水线中的线程能够等待指定条件发生(例如,图3),映射到电路实现400用于在硬件中原子地实现源代码指令(例如,图4),或者映射到电路实现500用于原子地执行读-修改-写存储操作(例如,图5)。映射到其他类型的电路实现的其他类型的构造可以被限定在其他配置中。
从操作602开始,例程600行进至操作604,其中编译器104将程序源代码102(包括映射到电路实现的语言构造)编译到电路说明。如上所述,电路说明可以被表达为HDL代码106。
从操作604,例程行进至操作606,其中电路说明(例如,HDL代码)被用以生成SDL112,该SDL 112包括由电路说明106限定的电路实现。例程600随后从操作606行进至操作608,在此结束。
图7是示出了针对可以实现本文所呈现的技术的方面的计算设备的说明性计算机硬件和软件架构的计算机架构图。具体地,图9中所图示的架构可以用于实现服务器计算机、移动电话、电子阅读器、智能电话、台式计算机、AR/VR设备、平板计算机、膝上型计算机或另一类型的计算设备。
图7所示的计算机700包括中央处理单元702(“CPU”),系统存储器704,包括随机存取存储器706(“RAM”)和只读存储器708(“ROM”),以及将存储器704耦合到CPU 702的系统总线710。包含有助于在计算机900内的组件之间传送信息的基本例程(诸如在启动期间)的基本输入/输出系统(“BIOS”或“固件”)可以存储在ROM 708中。计算机700还包括用于存储操作系统722、应用程序和其他类型的程序的大容量存储设备712,诸如编译器104和HDL合成工具108。大容量存储设备712还可以被配置为存储其他类型的程序和数据。
大容量存储设备712通过连接到总线710的大容量存储控制器(未示出)连接到CPU702。大容量存储设备712及其相关联的计算机可读介质针对计算机700提供非易失性存储器。尽管本文所包含的计算机可读介质的描述指大容量存储设备,诸如硬盘、CD-ROM驱动器、DVD-ROM驱动器、或USB存储键,但本领域的技术人员应当理解,计算机可读介质可以是可以由计算机700访问的任何可用计算机存储介质或通信介质。
通信介质包括计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据,诸如载波或其他传输机制、并且包括任何递送介质。术语“调制数据信号”是指其特性中的一个或多个特性以某种方式改变或设置以便对信号中的信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频、红外线和其他无线介质之类的无线介质。上述任何一种的组合也应当包括在计算机可读介质的范围内。
作为示例而非限制,计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。例如,计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其他固态存储器技术、CD-ROM、数字多功能盘(“DVD”)、HD-DVD、蓝光或其他光学存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备、或者可用于存储所需信息并且可由计算机700访问的任何其他介质。根据权利要求的目的,根据权利要求的术语,被称为“计算机存储介质”,以及其相应的变化,不包括波或信号本身或通信介质。
根据各种配置,计算机700可以在网络化的环境中操作使用通过诸如网络720的网络逻辑连接到远程计算机。计算机700可以通过连接到总线710的网络接口单元716连接到网络720。应当理解,网络接口单元716也可被利用以连接到其他类型的网络和远程计算机系统。计算机700还可以包括用于接收和处理来自多个其他设备的输入/输出控制器718,多个其他设备包括键盘、鼠标、触摸输入、电子指示笔(图7中未示出)或诸如摄像机之类的物理传感器。类似地,输入/输出控制器718可以向显示屏或其他类型的输出设备(也未在图7中示出)提供输出。
应当理解,本文所描述的软件组件在被加载到CPU 702中并且被执行时,可以将CPU 702和整个计算机700从通用计算设备变换为专用计算设备,该专用计算设备被定制以支持本文所呈现的功能性。CPU 702可以由任意数量的晶体管或其他分立电路元件构成,其可以单独地或共同地采取任意数量的状态。更具体地说,响应于包含在本文所公开的软件模块内的可执行指令,CPU 702可以而作为有限状态机来操作。这些计算机可执行指令可以通过指定CPU 702如何在状态之间转换来变换CPU 702,从而变换构成CPU 702的晶体管或其他分立硬件元件。
对本文所呈现的软件模块进行编码还可以变换本文所呈现的计算机可读介质的物理结构。在本说明书的不同实现中,物理结构的具体变换取决于各种因素。这些因素的示例包括但不限于,用于实现计算机可读介质的技术、计算机可读介质被表征为主存储器还是辅存储器等。例如,如果计算机可读介质被实现为基于半导体的存储器,则可以通过变换半导体存储器的物理状态来将本文所公开的软件编码在计算机可读介质上。例如,软件可以变换构成半导体存储器的晶体管、电容器或其他分立电路元件的状态。软件还可以变换这些组件的物理状态以便在其上存储数据。
作为另一示例,本文所公开的计算机可读介质可以是使用磁或光技术来实现。在这种实现中,当软件被编码在磁或光介质中时,本文所呈现的软件可以变换磁或光介质的物理状态。这些变换可以包括改变给定磁介质内的特定位置的磁特性。这些变换还可以包括改变给定光学介质内的特定位置的物理特征或特性,以改变这些位置的光学特性。在不脱离本说明书的范围和精神的情况下,物理介质的其他变换是可能的,提供前述示例仅为了便于本讨论。
鉴于以上内容,应当理解,在计算机700中发生许多类型的物理变换以便存储和执行本文所呈现的软件组件。还应当理解,图7所示的计算机700的架构或类似架构,可以被利用以实现其他类型的计算设备,包括手持式计算机、视频游戏设备、嵌入式计算机系统、诸如智能电话、平板计算机、以及本领域的技术人员已知的其他类型的计算设备。还考虑计算机700可能不包括图7所示的所有组件,可以包括图9中未明确示出的其他组件,或可以利用与图7所示的完全不同的架构。
图8是示出根据本文呈现的各个实现例的、其中可以实现所公开的技术的各方面的分布式网络计算环境800的网络图。如图8所示,一个或多个服务器计算机800A可经由通信网络720(其可以是固定线路或无线LAN、WAN、内联网、外联网、对等网络、虚拟专用网络、因特网、蓝牙通信网络、专用低压通信网络或其他通信网络中的任一个或组合)与多个客户端计算设备互连,这些客户端计算设备,诸如但不限于,平板计算机800B、游戏控制器800C、智能手表800D、电话800E,诸如智能电话、个人计算机800F和AR/VR设备800G。
在通信网络720是互联网的网络环境中,例如,服务器计算机800A可以是专用服务器计算机,其可操作以经由多个已知协议中的任何一个协议处理和传送去往和来自客户端计算设备800B-800G的数据,多个已知协议诸如超文本传输协议(“HTTP”),文件传输协议(“FTP”)或简单对象访问协议(“SOAP”)。此外,网络化的计算环境1000可以利用各种数据安全协议,诸如,安全插口层(“SSL”)或优良保密协议(“PGP”)。客户端计算设备800B-800G中的每个客户端计算设备都可以配备有操作系统,该操作系统可操作以支持一个或多个计算应用或终端会话,诸如web浏览器(图8中未示出)、或其他图形用户界面(图8中未示出)、或移动桌面环境(图8中未示出),以获得对服务器计算机800A的访问。
服务器计算机800A可以通信地耦合到其他计算环境(图8中未示出)并且接收关于参与的用户交互/资源网络的数据。在说明性操作中,用户(图8中未示出)可以与在客户端计算设备800B-800G上运行的计算应用交互以获得所需数据和/或执行其他计算应用。
数据和/或计算应用可以被存储在一个或者多个服务器800A上,并且在示例通信网络720上通过客户端计算设备800B-800G传达给协作用户。参与用户(图8中未示出)可以请求访问整个或部分驻留在服务器计算机800A中的特定的数据和应用。这些数据可以在客户端计算设备800B-800G和服务器计算机7800A之间传送用于处理和存储。
服务器800A可以托管用于数据和应用的生成、认证、加密、通信的计算应用、处理和小程序,并且可以与其他服务器计算环境(图8中未示出)、第三方服务供应商(图8中未示出)、网络附加存储(“NAS”)和存储区域网(“SAN”)合作以实现应用/数据处理。
应当理解,图7中所示的说明性的计算架构和图8所示的说明性的分布式网络计算环境已经被简化以便讨论。应当理解,计算架构和分布式网络计算环境可以包括和利用许多更多组件、设备、软件程序、网络设备、和本文中未具体描述的其他组件。
本文所呈现的公开内容还包括在以下条款中所阐述的主题:
条款1.一种计算机实现的方法,包括:存储以多线程命令式编程语言表达的源代码,源代码包括构造,构造映射到电路实现,构造包括条件语句,并且其中电路实现包括:实现在条件语句之前的第一指令的第一硬件流水线,第一硬件流水线具有连接到队列的输出,实现在条件语句之后的第二指令的第二硬件流水线,第二硬件流水线具有连接到队列的输入,并且其中仅当条件语句被评价为真时,第二硬件流水线才处理来自队列的值;将构造编译到电路说明;以及基于电路说明,生成同步数字电路,同步数字电路包括电路实现。
条款2.根据条款1的计算机实现的方法,其中条件语句通过以下被评价:将来自队列的值与存储在寄存器中的值进行比较。
条款3.根据条款1至2中的任一项的计算机实现的方法,其中寄存器中的值由第三硬件流水线生成。
条款4.根据条款1至3中的任一项的计算机实现的方法,其中来自队列的值包括局部变量。
条款5.根据条款1至4中的任一项的计算机实现的方法,其中存储在寄存器中的值包括全局变量。
条款6.根据条款1至5中的任一项的计算机实现的方法,其中同步数字电路被实现在现场可编程门阵列(FPGA)、门阵列、或专用集成电路(ASIC)中。
条款7.根据条款1至6中的任一项的计算机实现的方法,网络接口卡(NIC)被配置有FPGA、门阵列、或ASIC。
条款8.一种计算机实现的方法,包括:存储以多线程命令式编程语言表达的源代码,源代码包括构造,构造映射到电路实现,构造包括将被原子地执行的多个指令,并且其中电路实现包括用于实现多个指令的单个硬件流水线阶段,单个硬件流水线阶段被配置为用于在单个时钟周期中执行;将构造编译到电路说明;以及基于电路说明,生成同步数字电路,同步数字电路包括电路实现。
条款9.根据条款8的计算机实现的方法,其中电路实现还包括:用于向单个硬件流水线阶段输出值的第一寄存器。
条款10.根据条款8至9中的任一项的计算机实现的方法,其中电路实现还包括:用于接收由单个硬件流水线阶段输出的值的第二寄存器。
条款11.根据条款8至10中的任一项的计算机实现的方法,其中构造标识多个指令的开始和多个指令的结束。
条款12.根据条款8至11中的任一项的计算机实现的方法,其中同步数字电路被实现在现场可编程门阵列(FPGA)、门阵列、或专用集成电路(ASIC)中。
条款13.根据条款8至12中的任一项的计算机实现的方法,其中网络接口卡(NIC)被配置有FPGA、门阵列、或ASIC。
条款14.根据条款8至13中的任一项的计算机实现的方法,其中电路说明包括硬件描述语言(HDL)代码。
条款15.一种计算机实现的方法,包括:存储以多线程命令式编程语言表达的源代码,源代码包括构造,构造映射到电路实现,构造包括存储器读-修改-写操作将被原子地执行的指示,并且其中电路实现包括:存储器,一个或多个第一硬件流水线阶段,用于加载存储在存储器的存储器地址处的第一值,在一个或多个第一硬件流水线阶段之后的第二硬件流水线阶段,用于:将存储器地址和与先前存储操作相关联的存储器地址进行比较,如果存储器地址和与先前存储操作相关联的存储器地址相同,则通过先前存储操作来修改存储在寄存器中的第二值,以生成修改后的值,以及如果存储器地址和与先前存储操作相关联的存储器地址不相同,则修改第一值,以生成修改后的值,以及在第二硬件流水线阶段之后的一个或多个第三硬件流水线阶段,用于在存储器地址处存储修改后的值;将构造编译到电路说明;以及基于电路说明,生成同步数字电路,同步数字电路包括电路实现。
条款16.根据条款15的计算机实现的方法,其中第二硬件流水线阶段还用于将修改后的值存储在寄存器中,并且将第一值的存储器地址存储在第二寄存器中。
条款17.根据条款15至16中的任一项的计算机实现的方法,其中第二硬件流水线阶段还用于将存储器地址和与先前存储操作相关联的值存储在寄存器中。
条款18.根据条款15至17中的任一项的计算机实现的方法,其中同步数字电路被实现在现场可编程门阵列(FPGA)、门阵列、或专用集成电路(ASIC)中。
条款19.根据条款15至18中的任一项的计算机实现的方法,其中网络接口卡(NIC)被配置有FPGA、门阵列、或ASIC。
条款20.根据条款15至19中的任一项的计算机实现的方法,其中电路说明包括硬件描述语言(HDL)代码。
基于前文,应当理解用于从有效地映射到电路实现的源代码构造生成SDC的技术已经在本文中公开。虽然以计算机结构特征、方法和变换动作、特定计算机器和计算机可读介质的专用的语言描述了本文呈现的主题,但可以理解,所附权利要求书中阐述的主题不必限于本文描述的特定特征、动作或介质。相反,这些特定特征、动作和介质是作为实现所要求保护的主题的示例形式来公开的。
上述主题仅通过说明的方式提供,而不应被解释为限制性的。在没有遵循所说明和所描述的示例配置和应用、并且没有脱离在所附权利要求书中所陈述的本发明的范围的情况下,可以对本文所描述的发明主题做出各种修改和改变。
Claims (15)
1.一种计算机实现的方法,包括:
存储以多线程命令式编程语言表达的源代码,所述源代码包括构造,所述构造映射到电路实现,所述构造包括条件语句,并且其中所述电路实现包括:
实现在所述条件语句之前的第一指令的第一硬件流水线,所述第一硬件流水线具有连接到队列的输出,
实现在所述条件语句之后的第二指令的第二硬件流水线,所述第二硬件流水线具有连接到所述队列的输入,并且其中仅当所述条件语句被评价为真时,所述第二硬件流水线才处理来自所述队列的值;
将所述构造编译到电路说明;以及
基于所述电路说明,生成同步数字电路,所述同步数字电路包括所述电路实现。
2.根据权利要求1所述的计算机实现的方法,其中所述条件语句通过以下过程被评价:将来自所述队列的所述值与存储在寄存器中的值进行比较。
3.根据权利要求2所述的计算机实现的方法,其中所述寄存器中的所述值由第三硬件流水线生成。
4.根据权利要求3所述的计算机实现的方法,其中来自所述队列的所述值包括局部变量。
5.根据权利要求4所述的计算机实现的方法,其中存储在所述寄存器中的所述值包括全局变量。
6.一种计算机实现的方法,包括:
存储以多线程命令式编程语言表达的源代码,所述源代码包括构造,所述构造映射到电路实现,
所述构造包括将被原子地执行的多个指令,并且其中所述电路实现包括用于实现所述多个指令的单个硬件流水线阶段,所述单个硬件流水线阶段被配置为用于在单个时钟周期中执行;
将所述构造编译到电路说明;以及
基于所述电路说明,生成同步数字电路,所述同步数字电路包括所述电路实现。
7.根据权利要求6所述的计算机实现的方法,其中所述电路实现还包括:用于向所述单个硬件流水线阶段输出值的第一寄存器。
8.根据权利要求7所述的计算机实现的方法,其中所述电路实现还包括:用于接收由所述单个硬件流水线阶段输出的值的第二寄存器。
9.根据权利要求6所述的计算机实现的方法,其中所述构造标识所述多个指令的开始和所述多个指令的结束。
10.根据权利要求6所述的计算机实现的方法,其中所述同步数字电路被实现在现场可编程门阵列(FPGA)、门阵列、或专用集成电路(ASIC)中。
11.根据权利要求10所述的计算机实现的方法,其中网络接口卡(NIC)被配置有所述FPGA、所述门阵列、或所述ASIC。
12.一种计算机实现的方法,包括:
存储以多线程命令式编程语言表达的源代码,所述源代码包括构造,所述构造映射到电路实现,
所述构造包括存储器读-修改-写操作将被原子地执行的指示,并且
其中所述电路实现包括:
存储器,
一个或多个第一硬件流水线阶段,用于加载存储在所述存储器的存储器地址处的第一值,
在所述一个或多个第一硬件流水线阶段之后的第二硬件流水线阶段,用于:
将所述存储器地址和与先前存储操作相关联的存储器地址进行比较,
如果所述存储器地址和与所述先前存储操作相关联的所述存储器地址相同,则通过所述先前存储操作来修改存储在寄存器中的第二值,以生成修改后的值,以及
如果所述存储器地址和与所述先前存储操作相关联的存储器地址不相同,则修改所述第一值,以生成所述修改后的值,以及
在所述第二硬件流水线阶段之后的一个或多个第三硬件流水线阶段,用于在所述存储器地址处存储所述修改后的值;
将所述构造编译到电路说明;以及
基于所述电路说明,生成同步数字电路,所述同步数字电路包括所述电路实现。
13.根据权利要求12所述的计算机实现的方法,其中所述第二硬件流水线阶段还用于将所述修改后的值存储在所述寄存器中,并且将所述第一值的所述存储器地址存储在第二寄存器中。
14.根据权利要求12所述的计算机实现的方法,其中所述第二硬件流水线阶段还用于将所述存储器地址和与所述先前存储操作相关联的所述值存储在所述寄存器中。
15.根据权利要求12所述的计算机实现的方法,其中所述同步数字电路被实现在现场可编程门阵列(FPGA)、门阵列、或专用集成电路(ASIC)中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/247,226 | 2019-01-14 | ||
US16/247,226 US11144286B2 (en) | 2019-01-14 | 2019-01-14 | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
PCT/US2019/069034 WO2020150004A1 (en) | 2019-01-14 | 2019-12-31 | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113302616A true CN113302616A (zh) | 2021-08-24 |
Family
ID=69572271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980088920.4A Pending CN113302616A (zh) | 2019-01-14 | 2019-12-31 | 从映射到电路实现的源代码构造生成同步数字电路 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11144286B2 (zh) |
EP (1) | EP3912075A1 (zh) |
CN (1) | CN113302616A (zh) |
WO (1) | WO2020150004A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11106437B2 (en) | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US10810343B2 (en) | 2019-01-14 | 2020-10-20 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US11848980B2 (en) * | 2020-07-09 | 2023-12-19 | Boray Data Technology Co. Ltd. | Distributed pipeline configuration in a distributed computing system |
CN116776783B (zh) * | 2023-05-04 | 2024-07-09 | 合芯科技有限公司 | 一种模拟寄存器读写的白盒验证方法、系统、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7315991B1 (en) * | 2005-02-23 | 2008-01-01 | Xilinx, Inc. | Compiling HLL into massively pipelined systems |
CN102651121A (zh) * | 2011-02-23 | 2012-08-29 | 中国科学院声学研究所 | 一种基于fpga的3*3均值滤波算法的实现方法 |
CN105278920A (zh) * | 2014-07-09 | 2016-01-27 | 英特尔公司 | 用于实现具有迭代依赖条件的迭代的向量环路的指令 |
CN105278921A (zh) * | 2014-07-09 | 2016-01-27 | 英特尔公司 | 用于在处理具有未对齐数据行的数组期间消除未对齐的存储器访问的指令集 |
Family Cites Families (115)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5343554A (en) | 1988-05-20 | 1994-08-30 | John R. Koza | Non-linear genetic process for data encoding and for solving problems using automatically defined functions |
US5642304A (en) | 1991-08-16 | 1997-06-24 | Simpson; John Richard | Apparatus for high-speed solution of arbitrary mathematical expressions with logic code generator and programmable logic circuit |
US5416719A (en) | 1992-12-17 | 1995-05-16 | Vlsi Technology, Inc. | Computerized generation of truth tables for sequential and combinatorial cells |
US8487653B2 (en) | 2006-08-05 | 2013-07-16 | Tang System | SDOC with FPHA and FPXC: system design on chip with field programmable hybrid array of FPAA, FPGA, FPLA, FPMA, FPRA, FPTA and frequency programmable xtaless clockchip with trimless/trimfree self-adaptive bandgap reference xtaless clockchip |
US6112019A (en) | 1995-06-12 | 2000-08-29 | Georgia Tech Research Corp. | Distributed instruction queue |
US5761483A (en) | 1995-08-18 | 1998-06-02 | Xilinx, Inc. | Optimizing and operating a time multiplexed programmable logic device |
US6212601B1 (en) | 1996-08-30 | 2001-04-03 | Texas Instruments Incorporated | Microprocessor system with block move circuit disposed between cache circuits |
US6061521A (en) | 1996-12-02 | 2000-05-09 | Compaq Computer Corp. | Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle |
US5909572A (en) | 1996-12-02 | 1999-06-01 | Compaq Computer Corp. | System and method for conditionally moving an operand from a source register to a destination register |
US6784903B2 (en) * | 1997-08-18 | 2004-08-31 | National Instruments Corporation | System and method for configuring an instrument to perform measurement functions utilizing conversion of graphical programs into hardware implementations |
US6275508B1 (en) * | 1998-04-21 | 2001-08-14 | Nexabit Networks, Llc | Method of and system for processing datagram headers for high speed computer network interfaces at low clock speeds, utilizing scalable algorithms for performing such network header adaptation (SAPNA) |
US6597664B1 (en) | 1999-08-19 | 2003-07-22 | Massachusetts Institute Of Technology | Digital circuit synthesis system |
US7203718B1 (en) | 1999-10-29 | 2007-04-10 | Pentomics, Inc. | Apparatus and method for angle rotation |
US8095508B2 (en) | 2000-04-07 | 2012-01-10 | Washington University | Intelligent data storage and processing using FPGA devices |
US6988192B2 (en) | 2002-02-11 | 2006-01-17 | Hewlett-Packard Development Company, L.P. | Method and apparatus for compiling source code to configure hardware |
US7516446B2 (en) | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
US7028281B1 (en) | 2002-07-12 | 2006-04-11 | Lattice Semiconductor Corporation | FPGA with register-intensive architecture |
US7305582B1 (en) | 2002-08-30 | 2007-12-04 | Availigent, Inc. | Consistent asynchronous checkpointing of multithreaded application programs based on active replication |
EP2511787B1 (en) | 2003-05-23 | 2017-09-20 | IP Reservoir, LLC | Data decompression and search using FPGA devices |
US7805638B2 (en) | 2003-06-18 | 2010-09-28 | Nethra Imaging, Inc. | Multi-frequency debug network for a multiprocessor array |
US7111273B1 (en) | 2003-07-03 | 2006-09-19 | Xilinx, Inc. | Softpal implementation and mapping technology for FPGAs with dedicated resources |
EP1654819B1 (en) | 2003-08-15 | 2013-05-15 | Napatech A/S | A data merge unit, a method of producing an interleaved data stream, a network analyser and a method of analysing a network |
KR100626368B1 (ko) | 2003-08-25 | 2006-09-20 | 삼성전자주식회사 | 가비지 콜렉션 벤치마킹 방법 |
WO2005050494A1 (ja) | 2003-11-19 | 2005-06-02 | Kitakyushu Foundation For The Advancement Of Industry, Science And Technology | グラフ幅削減装置及びグラフ幅削減方法、並びに論理回路合成装置及び論理回路合成方法 |
US7415681B2 (en) | 2003-12-29 | 2008-08-19 | Sicronic Remote Kg, Llc | Optimal mapping of LUT based FPGA |
DE102005005073B4 (de) | 2004-02-13 | 2009-05-07 | Siemens Ag | Rechnereinrichtung mit rekonfigurierbarer Architektur zur parallelen Berechnung beliebiger Algorithmen |
US7620917B2 (en) | 2004-10-04 | 2009-11-17 | Synopsys, Inc. | Methods and apparatuses for automated circuit design |
US7584449B2 (en) | 2004-11-22 | 2009-09-01 | Fulcrum Microsystems, Inc. | Logic synthesis of multi-level domino asynchronous pipelines |
US7386820B1 (en) | 2004-12-10 | 2008-06-10 | Synopsys, Inc. | Method and apparatus for formally checking equivalence using equivalence relationships |
US7647567B1 (en) | 2005-01-31 | 2010-01-12 | Bluespec, Inc. | System and method for scheduling TRS rules |
US7375550B1 (en) | 2005-07-15 | 2008-05-20 | Tabula, Inc. | Configurable IC with packet switch configuration network |
US8285972B2 (en) | 2005-10-26 | 2012-10-09 | Analog Devices, Inc. | Lookup table addressing system and method |
US7389479B2 (en) | 2005-12-20 | 2008-06-17 | Synopsys, Inc. | Formally proving the functional equivalence of pipelined designs containing memories |
US7735050B2 (en) | 2006-02-09 | 2010-06-08 | Henry Yu | Managing and controlling the use of hardware resources on integrated circuits |
US8209580B1 (en) | 2006-05-08 | 2012-06-26 | Marvell International Ltd. | Error correction coding for varying signal-to-noise ratio channels |
US7496866B2 (en) | 2006-06-22 | 2009-02-24 | International Business Machines Corporation | Method for optimizing of pipeline structure placement |
US20080005357A1 (en) | 2006-06-30 | 2008-01-03 | Microsoft Corporation | Synchronizing dataflow computations, particularly in multi-processor setting |
US7801299B2 (en) | 2006-09-22 | 2010-09-21 | Intel Corporation | Techniques for merging tables |
US7573407B2 (en) | 2006-11-14 | 2009-08-11 | Qualcomm Incorporated | Memory efficient adaptive block coding |
US7545293B2 (en) | 2006-11-14 | 2009-06-09 | Qualcomm Incorporated | Memory efficient coding of variable length codes |
TWI331278B (en) | 2007-03-14 | 2010-10-01 | Ind Tech Res Inst | Debug method |
JP4962564B2 (ja) | 2007-03-29 | 2012-06-27 | 富士通株式会社 | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム |
US7908574B2 (en) | 2007-05-09 | 2011-03-15 | Synopsys, Inc. | Techniques for use with automated circuit design and simulations |
US7471104B1 (en) | 2007-07-27 | 2008-12-30 | Xilinx, Inc. | Lookup table with relatively balanced delays |
US7735047B1 (en) | 2007-11-29 | 2010-06-08 | Xilinx, Inc. | Method for technology mapping considering boolean flexibility |
US7823117B1 (en) | 2007-12-21 | 2010-10-26 | Xilinx, Inc. | Separating a high-level programming language program into hardware and software components |
US8468510B1 (en) | 2008-01-16 | 2013-06-18 | Xilinx, Inc. | Optimization of cache architecture generated from a high-level language description |
EP2248006A4 (en) | 2008-02-01 | 2012-08-29 | B4 Discovery Llc | METHOD FOR SEARCHING AND INDEXING DATA AND SYSTEM FOR IMPLEMENTING THE SAME |
US8930926B2 (en) | 2008-02-08 | 2015-01-06 | Reservoir Labs, Inc. | System, methods and apparatus for program optimization for multi-threaded processor architectures |
EP2304622A1 (en) | 2008-05-15 | 2011-04-06 | Universiteit Gent | Parameterized configuration for a programmable logic device |
US8392885B2 (en) | 2008-12-19 | 2013-03-05 | Microsoft Corporation | Low privilege debugging pipeline |
ES2532203T3 (es) | 2010-01-12 | 2015-03-25 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Codificador de audio, decodificador de audio, método para codificar y decodificar una información de audio y programa de computación que obtiene un valor de contexto de sub-región basado en una norma de valores espectrales previamente decodificados |
CN104617944B (zh) | 2010-06-24 | 2018-03-16 | 太阳诱电株式会社 | 半导体装置 |
JP5600805B2 (ja) | 2010-07-20 | 2014-10-01 | フラウンホッファー−ゲゼルシャフト ツァ フェルダールング デァ アンゲヴァンテン フォアシュンク エー.ファオ | 最適化されたハッシュテーブルを用いるオーディオエンコーダ、オーディオデコーダ、オーディオ情報を符号化するための方法、オーディオ情報を復号化するための方法およびコンピュータプログラム |
US8812285B2 (en) | 2010-08-31 | 2014-08-19 | The Regents Of The University Of California | Designing digital processors using a flexibility metric |
TWI420830B (zh) | 2010-12-31 | 2013-12-21 | Ind Tech Res Inst | 動態解碼查詢表之產生方法與應用其之電子裝置 |
US20130054939A1 (en) | 2011-08-26 | 2013-02-28 | Cognitive Electronics, Inc. | Integrated circuit having a hard core and a soft core |
US8607249B2 (en) | 2011-09-22 | 2013-12-10 | Oracle International Corporation | System and method for efficient concurrent queue implementation |
US8806410B2 (en) | 2011-10-28 | 2014-08-12 | The Board Of Trustees Of The University Of Illinois | Power balanced pipelines |
US8752036B2 (en) | 2011-10-31 | 2014-06-10 | Oracle International Corporation | Throughput-aware software pipelining for highly multi-threaded systems |
US8966457B2 (en) | 2011-11-15 | 2015-02-24 | Global Supercomputing Corporation | Method and system for converting a single-threaded software program into an application-specific supercomputer |
US8631380B2 (en) | 2011-11-28 | 2014-01-14 | Maxeler Technologies, Ltd. | Method of, and apparatus for, data path optimisation in parallel pipelined hardware |
US8959469B2 (en) | 2012-02-09 | 2015-02-17 | Altera Corporation | Configuring a programmable device using high-level language |
US9122523B2 (en) | 2012-05-03 | 2015-09-01 | Nec Laboratories America, Inc. | Automatic pipelining framework for heterogeneous parallel computing systems |
US9047148B2 (en) | 2012-06-15 | 2015-06-02 | Lsi Corporation | Pipelined vectoring-mode CORDIC |
US9081583B2 (en) | 2012-08-23 | 2015-07-14 | National Instruments Corporation | Compile time execution |
US9484874B2 (en) | 2012-11-16 | 2016-11-01 | Nokia Solutions And Networks Oy | Input amplitude modulated outphasing with an unmatched combiner |
US8671371B1 (en) | 2012-11-21 | 2014-03-11 | Maxeler Technologies Ltd. | Systems and methods for configuration of control logic in parallel pipelined hardware |
CN103023842B (zh) | 2012-11-26 | 2016-08-24 | 大唐移动通信设备有限公司 | 一种多频段预失真系数查找表更新方法和系统 |
US9779195B2 (en) | 2012-12-04 | 2017-10-03 | The Mathworks, Inc. | Model-based retiming with functional equivalence constraints |
US8924901B2 (en) | 2013-02-15 | 2014-12-30 | Synopsys, Inc. | Look-up based fast logic synthesis |
US8775986B1 (en) | 2013-02-25 | 2014-07-08 | Xilinx, Inc. | Software debugging of synthesized hardware |
US8881079B1 (en) | 2013-03-12 | 2014-11-04 | Xilinx, Inc. | Dataflow parameter estimation for a design |
US9824756B2 (en) | 2013-08-13 | 2017-11-21 | Globalfoundries Inc. | Mapping a lookup table to prefabricated TCAMS |
WO2015051105A1 (en) | 2013-10-02 | 2015-04-09 | The Penn State Research Foundation | Techniques and devices for performing arithmetic |
JP5842255B2 (ja) | 2013-12-12 | 2016-01-13 | 国立大学法人東京工業大学 | プログラミング言語による論理回路記述から論理回路を生成するための装置及び方法 |
US9158882B2 (en) | 2013-12-19 | 2015-10-13 | Netspeed Systems | Automatic pipelining of NoC channels to meet timing and/or performance |
US9471307B2 (en) | 2014-01-03 | 2016-10-18 | Nvidia Corporation | System and processor that include an implementation of decoupled pipelines |
US9690278B1 (en) | 2014-04-10 | 2017-06-27 | Altera Corporation | Method and apparatus for high-level programs with general control flow |
US10090864B2 (en) | 2014-09-22 | 2018-10-02 | Samsung Display Co., Ltd. | System and method for decoding variable length codes |
CN107079137B (zh) | 2014-09-26 | 2019-08-13 | 杜比实验室特许公司 | 感知量化视频内容的编码和解码 |
US10254369B2 (en) | 2014-10-29 | 2019-04-09 | Heartvista, Inc. | Pipeline engine for specifying, visualizing, and analyzing MRI image reconstructions |
JP6805140B2 (ja) | 2014-11-21 | 2020-12-23 | リサーチ インスティチュート アット ネイションワイド チルドレンズ ホスピタル | 平行プロセシングシステムおよび生物配列データの高度にスケーラブルな解析の方法 |
US9680459B2 (en) | 2014-12-11 | 2017-06-13 | Intel Corporation | Edge-aware synchronization of a data signal |
US9727679B2 (en) | 2014-12-20 | 2017-08-08 | Intel Corporation | System on chip configuration metadata |
US9971858B1 (en) | 2015-02-20 | 2018-05-15 | Altera Corporation | Method and apparatus for performing register retiming in the presence of false path timing analysis exceptions |
US10116557B2 (en) | 2015-05-22 | 2018-10-30 | Gray Research LLC | Directional two-dimensional router and interconnection network for field programmable gate arrays, and other circuits and applications of the router and network |
US9858373B2 (en) | 2015-07-15 | 2018-01-02 | International Business Machines Corporation | In-cycle resource sharing for high-level synthesis of microprocessors |
US9846623B2 (en) | 2015-08-20 | 2017-12-19 | Qsigma, Inc. | Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems |
WO2017059043A1 (en) | 2015-09-30 | 2017-04-06 | Dolby Laboratories Licensing Corporation | 2d lut color transforms with reduced memory footprint |
US10698916B1 (en) | 2015-10-16 | 2020-06-30 | Dr Holdco 2, Inc. | Data preparation context navigation |
US10311558B2 (en) | 2015-11-16 | 2019-06-04 | Dolby Laboratories Licensing Corporation | Efficient image processing on content-adaptive PQ signal domain |
WO2017084104A1 (zh) | 2015-11-20 | 2017-05-26 | 京微雅格(北京)科技有限公司 | 一种基于fpga的查找表工艺映射方法及查找表 |
US9817747B2 (en) | 2015-12-28 | 2017-11-14 | Juniper Networks, Inc. | Systems and methods for unit testing of functions on remote kernels |
US10445271B2 (en) | 2016-01-04 | 2019-10-15 | Intel Corporation | Multi-core communication acceleration using hardware queue device |
US10359832B2 (en) | 2016-03-22 | 2019-07-23 | The Board Of Regents Of The University Of Texas System | Method and apparatus for reducing power and cycle requirement for FFT of ECG signals |
US10162918B1 (en) | 2016-04-27 | 2018-12-25 | Altera Corporation | Integrated circuit retiming with selective modeling of flip-flop secondary signals |
US20170315812A1 (en) | 2016-04-28 | 2017-11-02 | Microsoft Technology Licensing, Llc | Parallel instruction scheduler for block isa processor |
US10275219B2 (en) | 2016-11-08 | 2019-04-30 | Embry-Riddle Aeronautical University, Inc. | Bit-serial multiplier for FPGA applications |
US10248498B2 (en) | 2016-11-21 | 2019-04-02 | Futurewei Technologies, Inc. | Cyclic redundancy check calculation for multiple blocks of a message |
US10235272B2 (en) | 2017-03-06 | 2019-03-19 | Xilinx, Inc. | Debugging system and method |
US10579762B2 (en) | 2017-05-15 | 2020-03-03 | LegUp Computing Inc. | High-level synthesis (HLS) method and apparatus to specify pipeline and spatial parallelism in computer hardware |
US10521877B2 (en) * | 2017-05-23 | 2019-12-31 | Samsung Electronics Co., Ltd | Apparatus and method for speculative buffer reservations with cancellation mechanism |
US11454188B2 (en) | 2017-06-02 | 2022-09-27 | The Mathworks, Inc. | Systems and methods for rescaling executable simulation models |
US10331836B1 (en) | 2017-10-11 | 2019-06-25 | Xilinx, Inc. | Loop optimization for implementing circuit designs in hardware |
US12061990B2 (en) | 2017-10-17 | 2024-08-13 | Xilinx, Inc. | Static block scheduling in massively parallel software defined hardware systems |
US11755382B2 (en) | 2017-11-03 | 2023-09-12 | Coherent Logix, Incorporated | Programming flow for multi-processor system |
US20190286972A1 (en) | 2018-03-14 | 2019-09-19 | Microsoft Technology Licensing, Llc | Hardware accelerated neural network subgraphs |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10768916B2 (en) * | 2018-11-28 | 2020-09-08 | Red Hat, Inc. | Dynamic generation of CPU instructions and use of the CPU instructions in generated code for a softcore processor |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11106437B2 (en) | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US10810343B2 (en) | 2019-01-14 | 2020-10-20 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
-
2019
- 2019-01-14 US US16/247,226 patent/US11144286B2/en active Active
- 2019-12-31 WO PCT/US2019/069034 patent/WO2020150004A1/en unknown
- 2019-12-31 CN CN201980088920.4A patent/CN113302616A/zh active Pending
- 2019-12-31 EP EP19850775.8A patent/EP3912075A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7315991B1 (en) * | 2005-02-23 | 2008-01-01 | Xilinx, Inc. | Compiling HLL into massively pipelined systems |
CN102651121A (zh) * | 2011-02-23 | 2012-08-29 | 中国科学院声学研究所 | 一种基于fpga的3*3均值滤波算法的实现方法 |
CN105278920A (zh) * | 2014-07-09 | 2016-01-27 | 英特尔公司 | 用于实现具有迭代依赖条件的迭代的向量环路的指令 |
CN105278921A (zh) * | 2014-07-09 | 2016-01-27 | 英特尔公司 | 用于在处理具有未对齐数据行的数组期间消除未对齐的存储器访问的指令集 |
Also Published As
Publication number | Publication date |
---|---|
US11144286B2 (en) | 2021-10-12 |
EP3912075A1 (en) | 2021-11-24 |
US20200225920A1 (en) | 2020-07-16 |
WO2020150004A1 (en) | 2020-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11144286B2 (en) | Generating synchronous digital circuits from source code constructs that map to circuit implementations | |
US11775269B2 (en) | Generating a synchronous digital circuit from a source code construct defining a function call | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
US10810343B2 (en) | Mapping software constructs to synchronous digital circuits that do not deadlock | |
EP3912025B1 (en) | Language and compiler that generate synchronous digital circuits that maintain thread execution order | |
US11113176B2 (en) | Generating a debugging network for a synchronous digital circuit during compilation of program source code | |
JP2020509451A (ja) | データベース状態決定方法およびデバイスならびに整合性検証方法およびデバイス | |
CN108196906B (zh) | 一种用户指令处理方法及嵌入式设备 | |
US11740869B2 (en) | Scheduling atomic field operations in jacobian coordinates used in elliptic curve cryptography scalar multiplications | |
CN114595047A (zh) | 一种批量任务处理方法和装置 | |
US20220350570A1 (en) | Pipelined hardware to accelerate modular arithmetic operations | |
US11537310B2 (en) | Threading of replication based on data type | |
CN112445525B (zh) | 数据处理方法、相关设备及计算机可读介质 | |
CN113051226A (zh) | 系统级编译方法、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |