CN110603528B - 调试***和方法 - Google Patents

调试***和方法 Download PDF

Info

Publication number
CN110603528B
CN110603528B CN201880029950.3A CN201880029950A CN110603528B CN 110603528 B CN110603528 B CN 110603528B CN 201880029950 A CN201880029950 A CN 201880029950A CN 110603528 B CN110603528 B CN 110603528B
Authority
CN
China
Prior art keywords
debug
hardware
level language
command
debug command
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.)
Active
Application number
CN201880029950.3A
Other languages
English (en)
Other versions
CN110603528A (zh
Inventor
J·维拉里尔
M·桑克罗伊
N·A·杜梅
K·迪帕克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of CN110603528A publication Critical patent/CN110603528A/zh
Application granted granted Critical
Publication of CN110603528B publication Critical patent/CN110603528B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3656Software debugging using additional hardware using a specific debug interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/273Tester hardware, i.e. output processing circuits
    • G06F11/277Tester hardware, i.e. output processing circuits with comparison between actual response and known fault-free response
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/331Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种用于调试软件规格的电路实现的方法,该方法包括将高级语言调试命令转换(508)为指定电路实现(108)中的条件的值的硬件调试命令以及存储条件的值的存储元件。硬件调试命令被发送(518)到调试控制器电路(112),调试控制器电路生成(624)单个时钟脉冲到电路实现。调试控制器电路从由硬件调试命令指定的存储元件读取(626)值,并确定(628)值是否满足条件。调试控制器电路响应于从存储元件读取的值不满足条件,生成另一个单个时钟脉冲。响应于从存储元件读取的值满足条件,暂停时钟信号的脉冲的生成并且输出(632)指示断点的数据。

Description

调试***和方法
技术领域
本公开大体涉及已经转换为电路描述的调试软件。
背景技术
一种用于提升软件***性能的技术是将选定的部分实施为硬件加速器。***中的那些表现出高计算复杂度并消耗大部分总运行事件的部分可能是用于实施为硬件加速器的合适候选者。例如,硬件加速器可以是专用集成电路(ASIC)、图形处理单元(GPU)或在现场可编程门阵列(FPGA)上运行的电路。软件设计人员在创建硬件加速器时采用的一种常用方法是使用高级综合(HLS)工具将已识别部分的原始高级语言(HLL)规格转换为等效的寄存器传输级别(RTL)或其他硬件描述语言(HDL)规格的电路。
尽管生成的RTL规格在功能上可能与HLL规格相同,但软件设计人员可能需要在***开发过程中调试所实现的电路。涉及时序、并发和竞争条件的问题可能在开发HLL规格时被掩盖,并且可能出现在硬件测试期间。此外,软件和硬件库实施的差异、不正确的转换或内存访问的差异可能带来实现问题。
通过检测硬件设计可以助于调试FPGA硬件中的电路实现。在综合电路设计之前,设计人员可以指定额外的调试电路(集成逻辑分析仪)来监控各个信号。但是,为了指定调试电路,设计人员必须知道要追踪的内部低层次信号和要设置的触发条件以生成波形。设计者可能会发现需要进行多次综合迭代,每次迭代都涉及改变设计和跟踪不同的信号。
发明内容
调试软件规格的电路实施的公开方法包括通过在计算机***上执行的硬件调试服务器将第一HLL调试命令转换为硬件调试命令。硬件调试命令指定软件规格在可编程集成电路(IC)上的电路实现中的条件的一个或多个值以及可编程IC上的一个或多个存储元件,所述存储元件中存储条件的一个或多个值。第一硬件调试命令被发送到可编程IC上的调试控制器电路,并且调试控制器电路生成提供给所述软件规格的电路实现的时钟信号的单个脉冲。在生成单个脉冲之后,调试控制器电路从由硬件调试命令指定的一个或多个存储元件中读取一个或多个值,并确定一个或多个值是否满足条件。调试控制器响应于从一个或多个存储元件中读取的一个或多个值不满足条件,生成时钟信号的另一个单个脉冲;响应于从一个或多个存储元件中读取的一个或多个值满足条件,暂停时钟信号的脉冲的生成;并且响应于从一个或多个存储元件中读取的一个或多个值满足条件,输出指示断点的数据。
可选地,输出数据可以包括由调试控制器电路向硬件调试服务器发送断点消息,其中断点消息可以指定一个或多个存储元件以及从一个或多个存储元件读取的一个或多个值。该方法还可以包括由硬件调试服务器确定对应于断点消息中指定的一个或多个值和一个或多个存储元件的HLL软件规格的一行以及输出指示HLL软件规格的行的数据。
可选地,转换包括从交叉引用数据库确定硬件有限状态机的一个或多个元素,其与在第一HLL调试命令中指定的一个或多个HLL元素交叉引用,以及确定与硬件有限状态机的一个或多个元素交叉引用的可编程IC的一个或多个存储元件。
可选地,确定HLL软件规格的行可以包括从交叉引用数据库确定HLL软件规格的行,其与断点指示的硬件有限状态机的元素交叉引用。
可选地,该方法还可以包括通过硬件调试服务器将第二HLL调试命令转换为第二硬件调试命令,其中第二HLL调试命令指定读请求和在HLL软件规格中的变量的名称,第二硬件调试命令指定读请求和可编程IC的存储元件。该方法还可以包括将第二硬件调试命令发送到可编程IC上的调试控制器电路;通过调试控制器电路读取第二硬件调试命令中指定的存储元件的值;从调试控制器电路向硬件调试服务器发送对第二硬件调试命令的第一响应,其中第一响应包括存储元件的标识和存储元件的值;将第一响应转换为具有变量名称和存储元件的值的第二响应;并由硬件调试服务器输出第二响应。
可选地,该方法还可以包括响应于第一硬件调试命令,由调试控制器电路将一个或多个存储元件的一个或多个值和规格存储在可编程IC的存储器中
可选地,一个或多个存储元件的规格可以指定可编程IC的配置存储器的帧和偏移。
可选地,该方法还可以包括通过硬件调试服务器将用于运行HLL软件规格的第二HLL调试命令转换为第二硬件调试命令,该第二硬件调试命令指定将时钟信号自由运行到可编程IC上的的软件规格的电路实现。该方法还可以包括将第二硬件调试命令发送到调试控制器电路、通过调试控制器电路将时钟模式设置为自由运行模式、响应于自由运行模式,由调试控制器电路连续地生成提供给软件规格的电路实现的时钟信号的脉冲以及响应于自由运行模式,绕过读取一个或多个值并确定一个或多个值是否满足条件的操作。
可选地,该方法还可以包括通过硬件调试服务器将用于单步执行HLL软件规格的第二HLL调试命令转换为第二硬件调试命令,第二硬件调试命令指定将时钟信号单步执行到可编程IC上的软件规格的电路实现。该方法还可以包括将第二硬件调试命令发送到调试控制器电路,并且通过调试控制器电路将时钟模式设置为单步。生成时钟信号的单个脉冲可以响应于第二硬件调试命令并且生成时钟信号的另一个单个脉冲可以响应于指定单步时钟信号的另一个硬件调试命令。
可选地,该方法还可以包括通过硬件调试服务器将第二HLL调试命令转换为第二硬件调试命令,其中第二HLL调试命令指定写请求、在HLL软件规格中的变量的名称和值,以及第二硬件调试命令指定写请求、可编程IC的存储元件和值。该方法还可以包括将第二硬件调试命令发送到可编程IC上的调试控制器电路,并且由调试控制器电路将值写入第二硬件调试命令中指定的存储元件。
所公开的调试***包括可编程集成电路(IC)、耦接到可编程IC的处理器、以及耦接到处理器的存储器装置。可编程IC包括软件规格的电路实现和耦接到电路实现的调试控制器电路。存储器装置配置由指令,当处理器执行指令时,使得处理器将第一HLL调试命令转换为硬件调试命令,该命令指定电路实现中的一个或多个条件值,以及存储条件的一个或多个值的可编程IC上的存储元件。处理器将第一硬件调试命令发送到调试控制器电路。调试控制器电路被配置为生成提供给软件规格的电路实现的时钟信号的单个脉冲。在生成单个脉冲之后,调试控制器电路从第一硬件调试命令指定的一个或多个存储元件读取一个或多个值,并确定一个或多个值是否满足条件。响应于从一个或多个存储元件读取的一个或多个值不满足条件,调试控制器电路生成时钟信号的另一单个脉冲。响应于从一个或多个存储元件读取的一个或多个值满足所述条件,调制控制器电路暂停生成时钟信号的脉冲并且输出指示断点的数据。
可选地,调试控制器电路还可以被配置为将断点消息发送到硬件调试服务器,并且断点消息可以指定一个或多个存储元件以及从一个或多个存储元件读取的一个或多个值。存储器装置还可以被配置指令,当指令由处理器执行时使得处理器处理下述操作:由硬件调试服务器确定对应于断点消息中指定的一个或多个值和一个或多个存储元件的HLL软件规格的一行以及由硬件调试服务器输出指示HLL软件规格的行的数据。
可选地,用于转换的指令可以包括用于从交叉引用数据库确定硬件有限状态机的一个或多个元素的指令,该一个或多个元素与在第一HLL调试命令中指定的一个或多个HLL元素交叉引用,以及用于从交叉引用数据库确定与硬件有限状态机的一个或多个元素交叉引用的可编程IC的一个或多个存储元件的指令。
可选地,用于确定HLL软件规格的行的指令可以包括用于从交叉引用数据库确定HLL软件规格的行的指令,该HLL软件规格的行与由断点指示的硬件有限状态机的元素交叉引用。
可选地,存储器装置还可以被配置有指令,当指令由处理器执行时,使得处理器执行下述操作:通过硬件调试服务器将第二HLL调试命令转换为第二硬件调试命令,其中第二HLL调试命令指定读请求和HLL软件规格中的变量名,第二硬件调试命令指定读请求和可编程IC中的存储元件,并且将第二硬件调试命令发送到可编程IC上的调试控制器电路。调试控制器电路还可以被配置为读取在第二硬件调试命令中指定的存储元件的值并将第二硬件调试命令的第一响应发送到硬件调试服务器,第一响应包括存储元件的标识和存储元件的值。存储器还可以被配置有指令,当指令由处理器执行时使处理器将第一响应转换为具有变量名称和存储元件值的第二响应,并由硬件调试服务器输出第二响应。
可选地,调试控制器电路还可以被配置为响应于第一硬件调试命令在可编程IC的存储器中存储一个或多个存储元件的一个或多个值和规格。
可选地,一个或多个存储元件的规格可以指定可编程IC的配置存储器的帧和偏移。
可选地,存储器装置还可以被配置有指令,当指令由处理器执行时,使得处理器将用于运行HLL软件规格的第二HLL调试命令转换为第二硬件调试命令,第二硬件调试命令指定将时钟信号自由运行到可编程IC上的软件规格的电路实现并将第二个硬件调试命令发送到调试控制器电路。调试控制器电路还可以被配置为通过调试控制器电路将时钟模式设置为自由运行模式,响应于自由运行模式将时钟信号的脉冲连续地生成到软件规格的电路实现,并且响应于自由运行模式的条件绕过读取一个或多个值以及确定一个或多个值是否满足条件。
可选地,存储器装置还可以被配置有指令,当由处理器执行时,使得处理器将用于单步执行HLL软件规格的第二HLL调试命令转换为第二硬件调试命令,该第二硬件调试命令指定将时钟信号单步执行到可编程IC上的软件规格的电路实现,并将第二硬件调试命令发送到调试控制器电路。调试控制器电路还可以被配置为将时钟模式设置为单步,时钟信号的单个脉冲的生成可以响应于第二硬件调试命令并且时钟信号的另一个单个脉冲的生成还可以响应于指定单步执行时钟信号的另一个硬件调试命令。
可选地,存储器装置还可以被配置有指令,当指令由处理器执行时,使得处理器将第二HLL调试命令转换为第二硬件调试命令,其中第二HLL调试命令指定写请求、HLL软件规格的变量名称和值,第二硬件调试命令指定写请求、可编程IC的存储元件和值,并将第二硬件调试命令发送到可编程IC上的调试控制器电路。调试控制器电路还可以被配置为将值写入第二硬件调试命令中指定的存储元件。
考虑到下文的具体实施方式和权利要求,其他特征也将被理解。
附图说明
通过阅读以下具体实施方式并参考附图,该方法和***的各个方面和特征将变得显而易见,附图中:
图1示出了使用软件调试技术和方法支持调试硬件加速器的***的实现;
图2示出了根据一个实现的调试控制器电路的电路图;
图3是说明交叉引用数据库的生成的数据流图;
图4示出了根据一个实现的硬件调试服务器的组件;
图5示出了实现第一***线程的过程的流程图;
图6示出了实现第二***线程的过程的流程图;
图7示出了实现命令线程的过程的流程图;
图8是调试控制器电路在处理来自硬件调试服务器的命令并将硬件加速器的调试输出上报给硬件调试服务器时所执行的过程的流程图;
图9示出了HLL源代码的示例以及处理HLL程序变量“计数器”的HLS生成的RTL代码的等效部分;以及
图10示出了在其上可实现调试控制器电路和硬件加速器的可编程集成电路(IC)。
具体实施方式
在以下描述中,阐述了许多具体细节以描述本文呈现的具体示例。然而,对于本领域技术人员来说显而易见的是,可以在没有下文给出的所有具体细节的情况下实践这些示例的一个或多个其他示例和/或变型。在其他实例中,没有详细描述众所周知的特征,以免模糊本文中的示例的描述。为了便于说明,可以在不同的图中使用相同的附图标记来指代相同元件或相同元件的附加实例。
软件设计者可能熟悉的调试环境与涉及集成逻辑分析器和波形查看器的硬件调试环境大不相同。软件调试器提供例如在特定指令或顺序执行的程序代码行上设置断点以及检查和编辑变量的功能,变量的值可以在程序执行期间存储在寄存器或存储器中。软件调试器在源代码级别呈现调试信息,允许软件设计人员轻松地将软件调试器的所需操作与执行程序的状态与HLL程序名称和语句相关联。
具有集成逻辑分析器和波形查看器的硬件调试环境在信号级操作。集成逻辑分析器提供基于信号状态设置断点、跟踪信号状态、查看波形和检查寄存器的功能。然而,由于实现的电路最初在HLL中指定,设计者可能不熟悉HLL程序的元素与实现的电路中的信号名称和特定寄存器之间的关联。因此,设计者可能在调试工作中受到阻碍。
所公开的方法和***弥合了软件设计者熟悉的软件调试环境与硬件调试环境之间的差距。这些方法和***支持软件调试器中发现的调试功能,例如在HLL程序代码的特定行设置断点、通过变量的HLL名称检查变量值以及检查内存的内容。***处理HLL结构和RTL结构之间的映射,以及RTL结构和实现RTL结构的电路元件之间的映射。***提供的映射和转换允许软件设计人员就像在软件调试器环境中操作一样调试硬件加速器。
在所公开的实施中,在计算机***上执行的硬件调试服务器从软件调试器前端接收调试命令。调试命令指定在HLL软件规格中设置断点。硬件调试服务器将调试命令转换为硬件调试命令。硬件调试命令指定软件规格的电路实现中的条件的一个或多个值,并指定存储条件的一个或多个值的一个或多个存储元件。电路实现在可编程IC上运行。硬件调试服务器将硬件调试命令发送到可编程IC上的调试控制器电路,并且调试控制器电路生成提供给电路实现的时钟信号的单个脉冲。然后,调试控制器电路从硬件调试命令指定的存储元件中读取值并确定值是否满足条件。如果从存储元件读取的值不满足条件,则调试控制器电路生成时钟信号的另一个单个脉冲。如果从存储元件读取的值确实满足条件,则调试控制器电路输出指示断点的信号并暂停时钟信号的脉冲的生成直到从硬件调试服务器接收到另一命令。
图1示出了支持使用软件调试技术和方法调试硬件加速器的***100的实现。***支持如GDB之类的软件调试器与由HLL源代码生成的硬件加速器之间的交互。***提供的硬件加速器的视图由软件调试器在调试HLL源代码时提供。该***包括HLL调试器前端102、硬件调试服务器106和可编程IC 110,硬件加速器108和调试控制器电路112在可编程IC 110上实现。
硬件调试服务器在计算机***104上执行。在一个实现中,HLL调试器前端也可以在计算机***104上执行。或者,调试器前端可以在通过接到网络(例如LAN或因特网)的网络接口来耦接到的计算机***104的另一计算机***(未示出)上执行。HLL调试器前端102和硬件调试服务器106可以使用诸如TCP/IP的协议而可通信地耦接。
一些先前的支持调试软件而不支持硬件加速器的软件调试器包括软件调试服务器,其允许在一个计算机***上执行的调试器前端控制在另一计算机***上执行的软件的调试。在一个实现中,HLL调试器前端102可以是通常可用的软件调试器(例如GNU调试器GDB)的一部分。在以原始HLL源代码的形式呈现执行程序状态时,HLL调试器前端使用标准格式的调试信息,例如DWARF信息。显示HLL源代码中的变量名称以及从硬件寄存器读取的相应的值。在示例实现中,HLL调试器前端102使用与用于与软件调试服务器通信的协议相同的协议与硬件调试服务器106通信。在涉及GDB的HLL调试器前端的实现中,调试器前端使用远程串行协议(RSP)与硬件调试服务器通信,该协议与GDB的调试器前端用于与软件调试服务器通信的协议相同。
硬件调试服务器106在调试器前端102和调试控制器电路112之间转换命令和数据。硬件调试服务器经由总线接口(例如PCIe)连接到调试控制器电路。调试控制器电路控制发送给硬件电路108的时钟信号,硬件电路108是从HLL程序代码实现的电路,并且调试控制器电路通过处理命令和返回硬件加速器的值来处理硬件调试服务器和硬件加速器之间的交互。硬件调试服务器允许HLL调试器前端在调试硬件加速器时以与HLL调试器前端在调试软件时采用的相同的方式执行。硬件调试服务器抽象出硬件模拟语义和细节,并向用户呈现面向软件的视图。
在生成硬件加速器时,HLS工具还生成隔离电路114以围绕硬件加速器。隔离电路符合HLL程序代码中指定的接口,并用于在硬件加速器和可编程IC 110上的其余电路之间提供屏障。隔离电路允许调试控制器电路112在处于单步模式时或命中断点时停止给硬件加速器发送时钟信号,而提供给可编程IC上其他电路的时钟信号保持活跃。
加速软件调试信息116被提供给HLL调试器前端102,并包括用于调试从其生成硬件加速器108的源HLL程序代码的调试符号。在示例实现中,加速的软件调试信息116可以是由HLS工具生成的DWARF信息。HLS工具生成HLL程序代码的中间表示,并且在优化之前通过生成CPU目标可执行而又相关的调试信息116的过程传递中间表示。
调试服务器106用于构建交叉引用数据库118。交叉引用数据库包括与从HLL生成的RTL状态机的元素交叉引用的加速软件调试信息以及与硬件加速器108的元素交叉引用的RTL状态机的元素。
在调试场景中,硬件调试服务器106从调试器前端接收用于在HLL软件规格中设置断点的高级语言(HLL)调试命令。调试硬件加速器的人员与调试器前端进行交互,以在从HLL软件规格中生成硬件加速器108的该HLL软件规格中选择特定的指令或行号。本领域技术人员将认识到,可以使用已知的HLS工具来生成电路设计描述和适用于从HLL源代码进行仿真的相应硬件模型。
响应于接收到HLL调试命令,硬件调试服务器将HLL调试命令转换为指定条件和可编程IC 110上的一个或多个存储元件的硬件调试命令,所述存储元件上存储一个或多个条件的值。然后,硬件调试服务器将硬件调试命令传送给调试控制器电路112。响应于硬件调试命令,调试控制器电路在提供给硬件加速器的时钟信号的每个周期之后,确定是否满足断点的条件。断点命令指定可编程IC的一个或多个存储元件,并且在生成时钟信号的单个脉冲之后,调试控制器电路从一个或多个存储元件中读取一个或多个值。如果该值满足断点的条件,则调试控制器电路暂停生成提供给硬件加速器的时钟脉冲,并且向硬件调试服务器106输出信号。如果该值不满足断点的条件,则若自由运行时钟模式时,调试控制器电路可以向硬件加速器提供另一个时钟脉冲。如果以单步模式运行,则调试控制器电路将等待来自硬件调试服务器的另一条命令。
将断点传达给硬件调试服务器后,硬件调试服务器将确定与该断点相对应的HLL软件规格的行号、指令或语句。然后,硬件调试服务器将HLL行号、HLL软件规格的指令或语句以及断点的指示输出到HLL调试器前端。
硬件调试服务器106和HLL调试器前端102在其中执行的数据处理***可以包括一个或多个处理器电路(或“处理器”),例如,通过***总线或其他合适的电路耦接到存储器和存储装置的中央处理单元(CPU)。***存储实现HLL调试器前端和硬件调试服务器的程序代码,并且处理器通过***总线执行从存储器和存储装置中访问出的程序代码。数据处理***的存储器可以包括一个或多个物理存储器装置,例如本地存储器和永久存储装置。本地存储器指的是通常在程序代码的实际执行期间使用的随机存取存储器或其他非永久存储器装置。永久存储可以实现为硬盘驱动器(HDD)、固态驱动器(SSD)或其他永久数据存储装置。***100还可以包括一个或多个高速缓冲存储器(未示出),其提供至少一些程序代码和数据的临时存储,以减少在执行期间必须从本地存储器和永久存储器程序代码和数据的次数。数据处理***还可以包括输入/输出(I/O)装置,例如用户输入装置和显示装置。数据处理***的网络适配器可以通过中间私有或公共网络将***耦接到其他计算机***、远程打印机和/或远程存储装置。
图2示出了根据一个实现的调试控制器电路112的电路图。调试控制器电路可以实现在可编程IC的可编程逻辑资源中,或者作为硬连线电路实现。调试控制器电路的受控时钟发生器202被配置为生成受控时钟信号214,其可以被停止、单脉冲生成或被允许以提供给可编程IC的时钟信号的频率自由地运行。受控时钟被提供给硬件加速器,并为调试控制器电路提供步进、暂停或自由运行硬件加速器的能力。调试控制器还可以访问可编程IC的配置存储器,允许读取和写入变量值。通过受控时钟和对配置存储器的访问的组合,调试控制器电路通过在受控时钟信号的每个周期之后检查条件来实现硬件断点和观察点。
调试控制器的断点和读回电路204通过外部接口电路206(例如AXI总线连接)接收指令。外部接口电路还被用于发送回变量数据并报告何时命中断点。调试控制器电路从外部接口接受指令、解译指令、并执行指令指定的动作。可以从外部接口接受用于设置断点、停止硬件加速器、运行硬件加速器、读取变量或以断点步进模式运行的命令。
当调试控制器接收到设置断点的指令时,断点和读回电路204将断点帧和偏移信息(“断点信息”)208存储在本地存储器210内。断点信息可以指定可编程IC的配置存储器元件的帧和偏移,以及包括要检查的条件的值。
在调试控制器电路已经用断点信息编程之后,启动指令使断点和读回电路204以调试模式开始操作。在调试模式下,断点和读回电路向受控时钟发生器202发信号以对受控时钟信号进行一次脉冲,从而使硬件加速器的操作前进一个时钟周期。在脉冲之后,断点和读回电路生成提供给配置访问接口电路212的信号,以从可编程IC的配置存储器进行读取。配置访问接口电路可以是作为标准功能包括在可编程IC上的电路。
断点和读回电路从存储器210读取断点信息208,以确定配置存储器中的哪些位置要读取。断点和读回电路向配置访问接口212发出读取命令,该命令读取配置存储器的指定帧。一旦数据值的帧通过配置访问接口返回,断点和读回电路将解析帧数据,并将指定偏移处的值与从存储器210读取的断点信息的值进行比较。当满足断点的条件时,断点和读回电路向受控时钟发生器202发信号以停止受控时钟信号214的进一步脉冲,并通过外部接口电路206将断点命中报告给硬件调试服务器。如果不满足断点的条件并且调试时钟模式是自由运行的,则断点和读回电路时钟向受控时钟发生器202发信号以再次对受控时钟信号214进行单脉冲,并且重复该过程。如果没有满足断点的条件并且调试时钟模式是单步的,则断点和读回电路将等待来自硬件调试服务器的另一条命令,并且在收到运行或步进命令之前,不会向受控时钟发生器发信号以对受控时钟信号进行单脉冲。
图3是示出了交叉引用数据库118的生成的数据流程图。HLS工具304输入HLL程序302,其指定要由硬件加速器实现的功能。HLS工具生成多个版本的调试信息,以供硬件调试服务器106使用。在HLS工具流程开始时,在前端解析之后优化之前,HLS工具生成针对特定CPU的可执行程序(未示出)。可执行程序具有关联的高级调试信息306,该信息用于向HLL调试器前端(图1,#102)提供与原始HLL程序302相关的符号。硬件调试服务器106还在构建交叉引用数据库118中使用了高级调试信息。在一种实现中,高级调试信息是DWARF调试信息。
在HLS工具304的优化和调度过程中,HLS工具生成映射信息308和硬件模型310。映射信息308指定HLL程序302的元素与硬件模型中的元素之间的关联。一种实现方式中的硬件模型可以是RTL有限状态机,其活跃状态指定仿真期间同时处理的HLL程序的那些语句。
行为综合工具312输入硬件模型310并且在生成用于对可编程IC进行编程以实现硬件加速器的配置数据的过程中,还生成硬件模型的元素到可编程IC的配置存储器的元素或存储位置的映射。例如,映射信息可以指定映射到可编程逻辑的配置存储器的帧和偏移的RTL有限状态机的元素。
硬件调试服务器106输入高级调试信息306、映射信息308和映射信息314,并生成交叉引用数据库118,该数据库将HLL元素到硬件模型308的元素的映射与高级调试信息306进行交叉引用。交叉引用数据库还包括映射信息314,其将硬件模型的元素与可编程IC的存储位置/元素进行交叉引用。硬件调试服务器106可以在仿真期间使用硬件模型来查询数据库118,以查找硬件模型的元素以及与来自调试器前端(图1,#102)的命令中指定的HLL程序元素相对应的存储位置/元素,以及查找与在调试控制器电路返回的数据中引用的存储位置/元素相对应的HLL程序元素(图1,#112)。通过映射信息,HLL程序的行号、语句或指令上的断点可以使用与硬件状态机的状态和可编程IC的存储元件/位置相对应的条件来完成。
断点所应用于的HLL程序302中的行到对应硬件状态机元素的映射的构造取决于HLS生成的硬件模型310的结构。在一种实现中,硬件模型包括有限状态机,其中HLL语句对应于RTL信号上的条件。通过查询交叉引用数据库118,硬件调试服务器106可以将来自HLL调试器前端的断点命令转换为硬件有限状态机上的等效条件。硬件有限状态机上的条件可以转换为可编程IC的存储位置/元素上的条件。转换后的断点信息可以输入到调试控制器电路112,其将附条件的断点信息存储在本地存储器208中。硬件调试服务器可以通过查询交叉引用数据库将来自软件调试器前端的、在请求变量值的命令转换为对来自调试控制器的硬件信号和变量的值的请求。
HLL程序级别的变量具有基于该语言定义的具体基础类型构建的复杂类型***。当使用HLS工具对高级语言程序进行综合时,生成的硬件通常将HLL的类型优化并将其平面化为位向量。例如,HLS工具可能确定在高级语言中声明为“int”的变量仅使用十七个低阶位,并综合成包含十七位的寄存器和位向量的硬件,而不是高级语言所期望的三十二位寄存器。
HLS工具捕获类型的转换,以便提供从HLL构造到RTL构造的完整映射。图1显示了映射信息类型的文本视图,该映射信息用于将类型从HLL构造转换为RTL构造,反之亦然。每个RTL类型到原始类型的直接映射隐含着一个转换规则,例如符号扩展或零扩展。另外,HLS工具可以决定创建硬件,在其中将高级语言构造存储在许多不同的RTL寄存器或信号中;映射指定了将多少个RTL信号组合回原始的高级表示形式。可以通过二进制编码完成此映射的实现和存储。
HLL类型 RTL类型 转换规则
int [16:0]logic 符号扩展至32位
float [31:0]logic 将32位解译为浮点数
unsigned long long int 两个32位逻辑向量 将向量1附接到向量2
表1
在HLS生成的RTL中,HLL变量不仅可以实现为单个寄存器,还可以实现为多个寄存器和信号,这些寄存器和信号可以在不同的时钟周期激活或者可以根据HLS工具做出的流水线决策同时全部激活。映射信息308指定组成有限状态机的状态寄存器和任何流水线阶段激活寄存器的寄存器和信号的集合。表2示出了HLL变量“counter”的位置信息的映射位置的示例。
表2
对于每个HLL变量,HLS工具都会创建从这些状态寄存器的不同配置到其他RTL信号列表的映射,这些列表表示该变量在该时钟周期所在的活跃信号。表2中示出的文本示例表示由HLS工具输出的元数据的二进制编码,并包括通配符以表示特定位的所有排列对于单个映射均有效。
当某个FSM状态处于活跃状态时,原始HLL程序中的每一行源代码都在RTL代码中开始执行。当某个RTL条件为真时,例如当状态寄存器处于特定配置中以及完成内存获取时,FSM中的状态将处于活跃状态。
如表3中的文本所示,交叉引用数据库保持从原始HLL程序中的行到生成的RTL模型中的条件的映射,这些条件对应于表示FSM状态何时开始执行的配置,包括任何生成的流水线信息。需要注意的是,映射可能不是一对一的,因为生成的RTL模型可能同时或不按顺序地开始几个语句,以便将可用资源利用得最好并使吞吐量最大化。
表3
HLS工具将HLL程序中的指针变量转换为RTL寄存器和信号。实现指针变量的实际存储器可以是可编程IC上的本地RAM或连接的DDR存储器。由HLS工具输出并存储在交叉引用数据库中的映射信息指定了内存空间的分区和分配,这样硬件调试服务器可以解引用指针并遵循指向存储值的链接。
为了支持在可编程IC上运行的硬件加速器电路的以软件为中心的视图,将硬件模型的元素被映射到实现硬件模型的元素的可编程IC的存储位置/元素。映射信息是在综合、布局走线和比特流生成期间生成的。映射信息提供了从硬件模型的信号到可编程IC中的存储位置/元素的直接链接。例如,在FPG A中,存储位置/元素被指定为配置存储器的帧和偏移。映射信息通过用户指定HLL程序中的变量和代码行来支持调试操作期间对硬件加速器的检查。
表4的示例示出了RTL信号与在其上实现了RTL信号的可编程IC的配置存储器中的特定帧和偏移之间的关联。
表4
图4示出了根据一种实现的硬件调试服务器106的组件。硬件调试服务器可以实现为具有两个***线程404和406以及命令线程408的多线程独立程序。***线程404监视与HLL调试器前端的连接以获取命令,***线程406监视与调试控制器电路连接以获取响应。***线程404和406将命令和响应写入命令先进先出(FIFO)数据结构402。命令线程408从命令FIFO读取命令和响应、使用交叉引用数据库118转换命令和响应、将转换后的命令发送到调试控制器电路,并将转换后的响应发送到HLL调试器前端。
图5示出了实现***线程404的过程的流程图。在框422处,例如,***线程通过TCP/IP套接口连接来监听来自HLL调试器前端的命令。在框424,***线程404接收HLL调试命令,并且在框426,***线程将命令存储在命令FIFO 402中。***线程426然后返回到框422以监听来自HLL调试器前端的另一命令。
图6示出了实现***线程406的过程的流程图。在框452处,例如,***线程406通过PCIe连接监听来自调试控制器电路的响应。在框454处,***线程406接收从调试控制器电路输出的响应,并且在框456,***线程将输出存储在命令FIFO 402中。***线程406然后返回到框452以监听来自HLL调试器前端的另一命令。
图7示出了实现命令线程408的过程的流程图。在框502,命令线程从命令FIFO中读取入口,并且在框504,命令线程对命令进行解码。术语“命令”同时指代来自HLL调试器前端的命令和来自调试控制器电路的响应,因为命令和响应都存储在命令FIFO中并由命令线程处理。
决策框506基于框504的解码来切换命令线程的处理。框508-518的处理适用于来自HLL调试器前端的命令,框520-524的处理适用于来自调试控制器电路的命令。
如果解码的命令是断点命令,则在框508处命令线程将HLL断点命令转换为用于调试控制器电路的断点信息。命令线程在交叉引用数据库中查找与HLL断点命令中的HLL元素相关联的有限状态机的元素。然后,命令线程在交叉引用数据库中查找与有限状态机的元素相关联的可编程IC的存储元件。转换后的断点命令指定了断点条件,并标识了该断点条件所引用的可编程IC的存储元件。
如果解码的命令指定读取HLL变量的值,则在框510处,命令线程将HLL命令转换为用于调试控制器电路的硬件调试命令。命令线程在交叉引用数据库中查找与HLL调试读取命令中的HLL元素相关联的有限状态机的元素。然后,命令线程在交叉引用数据库中查找与有限状态机的一个或多个元素相关联的可编程IC的一个或多个存储元件。转换后的读取命令指定读取操作,并标识由读取操作引用的可编程IC的存储元件。
如果解码的命令指定将值写入HLL变量,则在框512处,命令线程将HLL命令转换为用于调试控制器电路的硬件调试命令。命令线程在交叉引用数据库中查找与HLL调试写入命令中的HLL元素相关联的有限状态机的元素。然后,命令线程在交叉引用数据库中查找与有限状态机的一个或多个元素相关联的可编程IC的一个或多个存储元件。转换后的写入命令指定写入操作,并标识该写入操作引用的可编程IC的存储元件。
如果解码的命令指定单步执行HLL程序,则在框514处,命令线程将命令转换为用于调试控制器电路的硬件调试命令。转换后的命令指定将受控时钟信号单步执行到硬件加速器。
如果解码的命令指定运行HLL程序,则在框516处,命令线程将命令转换为用于调试控制器电路的硬件调试命令。转换后的命令指定将受控时钟信号自由运行到硬件加速器。
在框518处,命令线程将转换后的命令发送到调试控制器电路,然后返回到框502处开始处理来自命令FIFO的另一条命令。
如果解码的命令指示满足来自调试控制器电路的断点条件,则在框520处,命令线程将来自调试控制器电路的断点信息转换为用于HLL调试器前端的HLL断点信息。
来自调试控制器电路的断点信息指定了断点条件、可编程IC的一个或多个存储元件以及从一个或多个存储元件读取的一个或多个值。命令线程使用交叉引用数据库来查找与断点信息中标识的存储元件相关联的有限状态机元素。然后,命令线程使用交叉引用数据库(例如,表3)来确定哪个断点对应于断点条件、存储元件的值以及有限状态机的元素。命令线程从交叉引用数据库中确定与断点关联的HLL程序代码的行号,并将指示HLL程序代码的行的断点数据输出到HLL调试器前端。
如果解码的命令指示响应于读取命令而返回的值,则在框522处,命令线程将来自调试控制器电路的值转换为与该值的HLL表示一致的值(例如,表1)。来自调试控制器电路的响应还指定了从中读取值的可编程IC的存储元件。命令线程使用交叉引用数据库来查找与命令中标识的存储元件关联的有限状态机的元素,然后查找与有限状态机的元素关联的HLL变量名。命令线程将转换后的值和HLL变量名称组合到给HLL调试器前端的响应中。
在框524处,命令线程将在框520和522处生成的HLL调试数据发送到HLL调试器前端,并且该过程在框502处继续以处理来自命令FIFO的其他命令。
图8是由调试控制器电路在处理来自硬件调试服务器的命令并将来自硬件加速器的调试输出报告给硬件调试服务器时的执行过程的流程图。在框602处,调试控制器电路在空闲状态中等待来自硬件调试服务器的命令,在框604处,调试控制器电路从硬件调试服务器接收并解码命令。
决策框606基于框604的解码来切换调试控制器电路的处理。如果该命令是断点命令,则在框608处,调试控制器电路将指定断点条件和一个或多个值的断点信息存储在可编程IC的存储器以及一个或多个存储元件中。然后,该过程返回到框602处以等待来自硬件调试服务器的另一命令。
如果该命令是读取命令,则在框610处,调试控制器电路向配置访问接口发出读取命令,以从该命令中指定的可编程IC的存储元件进行读取。调试控制器电路将从可编程IC的配置存储器读取的值返回到硬件调试服务器,然后在框602处等待另一命令。
如果该命令是写入命令,则在框612处,调试控制器电路向配置访问接口发出写入命令,以将写入命令中指定的值写至该命令中指定的存储模块中的可编程IC的存储元件。然后,在框602处,调试控制器电路等待另一个命令。
调试控制器电路可以响应于硬件调试服务器提供的转换命令,以自由运行模式、单步模式或步进到断点模式将受控时钟信号提供给硬件加速器。响应于单步命令,在框614处,调试控制器电路将时钟模式设置为单步模式。在框616处,调试控制器电路响应于步进到断点命令而将时钟模式设置为步进到断点。响应于自由运行命令,在框618处,调试控制器电路将时钟模式设置为自由运行。
如果时钟模式是自由运行的,则决策框620将调试控制器电路引导至框622,并且调试控制器电路连续生成受控时钟信号的脉冲,直到另一个命令可用为止。当另一个命令可用时,该过程在框604处继续。当在自由运行模式下运行时,调试控制器电路绕过从存储器位置读取值并确定是否满足断点的条件。
在单步和步进到断点时钟模式下,在框624处,调试控制器电路生成提供给硬件加速器的受控时钟信号的单个脉冲。在生成受控时钟信号的单个脉冲之后,在框626处,调试控制器电路从在本地存储器中存储的断点信息中标识的存储元件中读取值。
在框628处,调试控制器电路使用从可编程IC的配置存储器读取的值来评估断点信息中指定的条件。如果断点的条件被满足,则决策框630将处理引导到框632,其中调试控制器电路输出指示满足断点的数据。数据可以在断点消息中被指定并指示该满足条件的断点的信息。响应于断点条件的满足,调试控制器电路返回到框602以等待来自硬件调试服务器的另一命令。
如果不满足断点条件,调试控制器在决策框634处根据时钟模式进行。如果时钟模式是步进到断点,则在框624处,调试控制器电路生成提供给硬件加速器的受控时钟信号的另一单个脉冲。如果时钟模式是单步模式,则调试控制器进行至框602以等待另一命令。
图9示出了HLL源代码702的示例以及与HLL程序变量“counter”相关的HLS生成的RTL代码704的等效部分。HLL源代码有12条带编号的行,包括功能语句、变量语句、赋值语句、控制语句、作用域定界符和空白行。
HLL变量“counter”映射到RTL中的5位寄存器,其中每个寄存器在生成的FSM机的不同阶段均处于活跃状态。这些寄存器包括:
reg[4:0]vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter1_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter2_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter3_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter4_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter5_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter6_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter7_vadd_counter_reg_95;
reg[4:0]ap_pipeline_reg_iter8_vadd_counter_reg_95;
HLL语句,counter+=1;映射到always块的“if”部分,以及RTL语句
当条件(ap_CS_fsm_pp0_stage0==1’b1)&(ap_enable_reg_pp0_iter0==1’b1)&(exitcond_fu_146_p2==1’b0)在主时钟的上升沿上为真时,在仿真中执行:
vadd_counter_reg_95<=p_reg2mem_0_i_i_fu_152;
HLL语句,counter=1;映射到always块的“else if”部分,以及RTL语句,
当条件(ap_CS_fsm_state1==1’b1)&~(ap_start==1’b0)在主时钟的上升沿为真时,在仿真中执行:
vadd_counter_reg_95<=ap_const_lv5_0;
响应于从HLL调试器前端102接收到的指定了HLL行6和10的断点命令,硬件调试服务器106将HLL断点命令转换为指定断点条件和可编程IC的存储元件的断点信息,并将断点信息发送到调试控制器电路112。调试控制器电路将断点信息存储在其本地存储器中。响应于调试器前端发出的在HLL代码行6上设置断点的命令,当条件(ap_CS_fsm_state1==1'b1)&~(ap_start==1'b0)在主时钟的上升沿为真时,硬件调试服务器会生成断点信息,该信息使调试控制器电路停止向硬件加速器提供时钟脉冲,这发生在硬件加速器执行RTL语句vadd_counter_reg_95<=ap_const_lv5_0之前。响应于HLL调试器前端发出的在HLL代码行10上设置断点的命令,当条件(ap_CS_fsm_pp0_stage0==1'b1)&(ap_enable_reg_pp0_iter0==1'b1)&(exitcond_fu_146_p2==1'b0)在主时钟的上升沿为真时,硬件调试服务器生成断点信息,该信息使调试控制器电路停止向硬件加速器提供时钟脉冲,这发生在硬件加速器执行RTL语句vadd_counter_reg_95<=p_reg2mem_0_i_i_fu_152之前。
图10示出了可编程集成电路(IC)800,在其上可以实现调试控制器电路和硬件加速器。可编程IC也可以被称为片上***(SOC),其包括现场可编程门阵列逻辑(FPGA)以及其他可编程资源。FPGA逻辑可以在阵列中包括几种不同类型的可编程逻辑块。例如,图10示出了可编程IC 800,其包括大量不同的可编程片,包括多千兆位收发器(MGT)801、可配置逻辑块(CLB)802、随机存取存储器块(BRAM)803、输入/输出块(IOB)804、配置和时钟逻辑(CONFIG/CLOCKS)805、数字信号处理模块(DSP)806、专用输入/输出模块(I/O)807,例如,时钟端口和其他可编程逻辑808,例如数字时钟管理器、模数转换器、***监视逻辑等。一些具有FPGA逻辑的可编程IC还包括专用处理器块(PROC)810以及内部和外部重配置端口(未示出)。
在某些FPGA逻辑中,每个可编程片包括可编程互连元件(INT)811,该可编程互连元件具有去往和来自每个相邻区片的对应互连元件的标准化连接。因此,可编程互连元件一起实现了用于所示FPGA逻辑的可编程互连结构。可编程互连元件INT 811还包括去往和来自同一片内的可编程逻辑元件的连接,如图10顶部包括的示例所示。
例如,CLB 802可以包括可进行编程以实现用户逻辑的可配置逻辑元件CLE 812,以及单个可编程的互连元件INT 811。除了一个或多个可编程互连元件之外,BRAM 803还可包括BRAM逻辑元件(BRL)813。通常,片内包括的互连元件的数量取决于片的高度。在图示的实施例中,BRAM片具有与五个CLB相同的高度,但是也可以使用其他数目(例如四个)CLB相同的高度。除了适当数量的可编程互连元件之外,DSP区块806还可以包括DSP逻辑元件(DSPL)814。除了可编程互连元件INT 811的一个实例之外,IOB 804还可以包括例如输入/输出逻辑元件(IOL)815的两个实例。如本领域技术人员将清楚的,例如,使用连接在I/O逻辑元件815上的实际I/O接合焊盘是使用金属层制造的,该金属层位于各种所示逻辑框上方,并且通常不限于输入/输出逻辑元件815的区域。
在图示的实施例中,靠近裸片中心的柱状区域(在图10中以阴影示出)用于配置、时钟和其他控制逻辑。从该列延伸的水平区域809用于在可编程IC的整个宽度上分配时钟和配置信号。请注意,对“列”和“水平”区域的引用是相对于以纵向方向查看图形的。
使用图10所示的架构的一些可编程IC包括附加逻辑块,其破坏了构成可编程IC很大一部分的规则柱状结构。附加逻辑块可以是可编程框和/或专用逻辑。例如,图10中所示的处理器框PROC 810跨越几列CLB和BRAM。
注意图10仅旨在示出示例性可编程IC架构。列中逻辑块的数量、列的相对宽度、列的数量和顺序、列中包括的逻辑块的类型,逻辑块的相对大小以及图10顶部包括的互连/逻辑实现方式仅仅是示例性的。例如,在实际的可编程IC中,无论CLB出现在何处,通常都包括一个以上的相邻列CLB,以促进用户逻辑的有效实现。
某些实现方式针对计算机程序产品(例如,非易失性存储装置),其包括其上存储有指令的机器或计算机可读介质,这些指令可由计算机(或其他电子装置)执行,以执行这些操作/活动。
尽管在某些情况下可以在各个附图中描述各方面和特征,但是应当理解,即使未明确示出或明确描述为组合,也可以将一个附图中的特征与另外的附图中的特征进行组合。
该方法和***被认为适用于各种用于调试电路设计的***。通过参考说明书,其他方面和特征对于本领域技术人员将是显而易见的。该方法和***可以被实现为被配置为执行软件的一个或多个处理器、被实现为专用集成电路(ASIC),或者被实现为可编程逻辑装置上的逻辑。说明书和附图仅被认为是示例,本发明的真实范围由所附权利要求指出。

Claims (15)

1.一种调试方法,其特征在于,所述方法包括:
通过在计算机***上执行的硬件调试服务器将第一高级语言调试命令转换为第一硬件调试命令,所述第一硬件调试命令指定高级语言软件规格在可编程集成电路上的电路实现中的条件的一个或多个值以及所述可编程集成电路上的一个或多个存储元件,所述存储元件中存储所述条件的一个或多个值;
将所述第一硬件调试命令发送到所述可编程集成电路上的调试控制器电路;
通过所述调试控制器电路生成提供给所述高级语言软件规格的电路实现的时钟信号的单个脉冲;
在生成所述单个脉冲之后由所述调试控制器电路从由所述第一硬件调试命令指定的所述一个或多个存储元件中读取一个或多个值;
确定所述一个或多个值是否满足所述条件;
响应于从所述一个或多个存储元件中读取的所述一个或多个值不满足所述条件,生成所述时钟信号的另一个单个脉冲;
响应于从所述一个或多个存储元件中读取的所述一个或多个值满足所述条件,暂停生成所述时钟信号的脉冲;以及
响应于从所述一个或多个存储元件中读取的所述一个或多个值满足所述条件,输出指示断点的数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述输出指示断点的数据包括由所述调试控制器电路向所述硬件调试服务器发送断点消息,所述断点消息指定所述一个或多个存储元件以及从所述一个或多个存储元件读取的所述一个或多个值;
由所述硬件调试服务器确定对应于所述断点消息中指定的所述一个或多个值和所述一个或多个存储元件的所述高级语言软件规格的一行;以及
由所述硬件调试服务器输出指示所述高级语言软件规格的行的数据。
3.根据权利要求2所述的方法,其特征在于,所述转换包括从交叉引用数据库确定硬件有限状态机的一个或多个元素,其与在所述第一高级语言调试命令中指定的一个或多个高级语言元素交叉引用,以及确定与所述硬件有限状态机的所述一个或多个元素交叉引用的所述可编程集成电路上的一个或多个存储元件;以及
其中,确定所述高级语言软件规格的行包括从所述交叉引用数据库确定所述高级语言软件规格的行,其与由所述断点指示的所述硬件有限状态机的元素交叉引用。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:
通过所述硬件调试服务器将第二高级语言调试命令转换为第二硬件调试命令,其中所述第二高级语言调试命令指定读请求和在所述高级语言软件规格中的变量的名称,所述第二硬件调试命令指定读请求和所述可编程集成电路上的存储元件;
将所述第二硬件调试命令发送到所述可编程集成电路上的调试控制器电路;
通过所述调试控制器电路读取在所述第二硬件调试命令中指定的所述存储元件的值;
从所述调试控制器电路向所述硬件调试服务器发送对所述第二硬件调试命令的第一响应,所述第一响应包括所述存储元件的标识和所述存储元件的值;
将所述第一响应转换为具有所述变量的名称和所述存储元件的值的第二响应;以及
由所述硬件调试服务器输出所述第二响应。
5.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:响应于所述第一硬件调试命令,由所述调试控制器电路将所述一个或多个存储元件的所述一个或多个值和规格存储在所述可编程集成电路上的存储器中。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过硬件调试服务器将用于运行高级语言软件规格的第二高级语言调试命令转换为第二硬件调试命令,所述第二硬件调试命令指定将时钟信号自由运行到所述可编程集成电路上的高级语言软件规格的电路实现中;
将所述第二硬件调试命令发送到所述调试控制器电路;
通过所述调试控制器电路将时钟模式设置为自由运行模式;
响应于所述自由运行模式,由所述调试控制器电路连续地生成提供给所述高级语言软件规格的电路实现的时钟信号的脉冲;以及
响应于所述自由运行模式,绕过读取所述一个或多个值以及确定所述一个或多个值是否满足所述条件的操作。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过所述硬件调试服务器将用于单步执行所述高级语言软件规格的第二高级语言调试命令转换为第二硬件调试命令,所述第二硬件调试命令指定将所述时钟信号单步执行到所述可编程集成电路上的高级语言软件规格的电路实现;
将所述第二硬件调试命令发送到所述调试控制器电路;
通过所述调试控制器电路将时钟模式设置为单步;
其中,生成所述时钟信号的单个脉冲响应于所述第二硬件调试命令;以及
其中,生成所述时钟信号的另一个单个脉冲还响应于指定单步执行时钟信号的另一个硬件调试命令。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过所述硬件调试服务器将第二高级语言调试命令转换为第二硬件调试命令,其中所述第二高级语言调试命令指定写请求、在高级语言软件规格中的变量的名称和值,所述第二硬件调试命令指定写请求、所述可编程集成电路上的存储元件和所述值;
将所述第二硬件调试命令发送到所述可编程集成电路上的所述调试控制器电路;以及
通过所述调试控制器电路将所述值写入在所述第二硬件调试命令中指定的所述存储元件。
9.一种调试***,其特征在于,所述调试***包括:
可编程集成电路,其中所述可编程集成电路包括高级语言软件规格的电路实现和耦接到所述电路实现的调试控制器电路;
耦接到所述可编程集成电路的处理器;以及
耦接到所述处理器的存储器装置,其中所述存储器装置配置有指令,当所述处理器执行所述指令时,使得处理器执行下述操作,包括:
将第一高级语言调试命令转换为第一硬件调试命令,所述第一硬件调试命令指定所述电路实现中的条件的一个或多个值以及存储所述条件的一个或多个值的所述可编程集成电路上的一个或多个存储元件;以及
将所述第一硬件调试命令发送到所述调试控制器电路;
其中所述调试控制器电路配置为:
生成提供给所述高级语言软件规格的电路实现的时钟信号的单个脉冲;
在生成所述单个脉冲之后,从所述第一硬件调试命令指定的所述一个或多个存储元件读取一个或多个值;
确定所述一个或多个值是否满足所述条件;
响应于从所述一个或多个存储元件读取的所述一个或多个值不满足所述条件,生成所述时钟信号的另一单个脉冲;
响应于从所述一个或多个存储元件读取的所述一个或多个值满足所述条件,暂停生成所述时钟信号的脉冲;以及
响应于从所述一个或多个存储元件读取的所述一个或多个值满足所述条件,输出指示断点的数据。
10.根据权利要求9所述的***,其特征在于:
所述调试控制器电路还被配置为将断点消息发送到硬件调试服务器,并且所述断点消息指定所述一个或多个存储元件以及从所述一个或多个存储元件读取的所述一个或多个值;以及
所述存储器装置还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
由所述硬件调试服务器确定对应于所述断点消息中指定的所述一个或多个值和所述一个或多个存储元件的所述高级语言软件规格的一行;以及
由所述硬件调试服务器输出指示所述高级语言软件规格的行的数据。
11.根据权利要求10所述的***,其特征在于,用于将第一高级语言调试命令转换为第一硬件调试命令的指令包括用于从交叉引用数据库确定硬件有限状态机的一个或多个元素的指令,所述一个或多个元素与在所述第一高级语言调试命令中指定的一个或多个高级语言元素交叉引用,以及用于从交叉引用数据库确定与所述硬件有限状态机的所述一个或多个元素交叉引用的所述可编程集成电路上的所述一个或多个存储元件的指令;以及
其中,用于确定所述高级语言软件规格的行的指令包括用于从所述交叉引用数据库确定所述高级语言软件规格的行的指令,所述高级语言软件规格的行与由所述断点指示的所述硬件有限状态机的元素交叉引用。
12.根据权利要求10或11所述的***,其特征在于:
所述存储器装置还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
通过所述硬件调试服务器将第二高级语言调试命令转换为第二硬件调试命令,其中所述第二高级语言调试命令指定读请求和在所述高级语言软件规格中的变量的名称,所述第二硬件调试命令指定读请求和所述可编程集成电路上的存储元件;以及
将所述第二硬件调试命令发送到所述可编程集成电路上的所述调试控制器电路;
所述调试控制器电路还用于:
读取在所述第二硬件调试命令中指定的所述存储元件的值;以及
将对所述第二硬件调试命令的第一响应发送到所述硬件调试服务器,其中所述第一响应包括所述存储元件的标识和所述存储元件的值;以及
所述存储器还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
将所述第一响应转换为具有所述变量的名称和所述存储元件的值的第二响应;以及
由所述硬件调试服务器输出所述第二响应。
13.根据权利要求9所述的***,其特征在于:
所述存储器装置还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
将用于运行所述高级语言软件规格的第二高级语言调试命令转换为第二硬件调试命令,所述第二硬件调试命令指定将所述时钟信号自由运行到所述可编程集成电路上的所述高级语言软件规格的所述电路实现;以及
将所述第二硬件调试命令发送到所述调试控制器电路;
所述调试控制器电路还被配置为:
通过所述调试控制器电路将时钟模式设置为自由运行模式;
响应于所述自由运行模式,连续地生成提供给所述高级语言软件规格的电路实现的所述时钟信号的脉冲;以及
响应于所述自由运行模式,绕过读取所述一个或多个值以及确定所述一个或多个值是否满足所述条件的操作。
14.根据权利要求9所述的***,其特征在于:
所述存储器装置还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
将用于单步执行所述高级语言软件规格的第二高级语言调试命令转换为第二硬件调试命令,所述第二硬件调试命令指定将所述时钟信号单步执行到所述可编程集成电路上的所述高级语言软件规格的电路实现;以及
将所述第二硬件调试命令发送到所述调试控制器电路;
所述调试控制器电路还被配置为将时钟模式设置为单步;
所述时钟信号的单个脉冲的生成响应于所述第二硬件调试命令;以及
所述时钟信号的另一单个脉冲的生成还响应于指定所述时钟信号的单步执行的另一硬件调试命令。
15.根据权利要求9所述的***,其特征在于:
所述存储器装置还配置有指令,当所述指令由所述处理器执行时,使得所述处理器执行下述操作:
将第二高级语言调试命令转换为第二硬件调试命令,其中所述第二高级语言调试命令指定写请求、在所述高级语言软件规格中的变量的名称和值,所述第二硬件调试命令指定写请求、所述可编程集成电路上的存储元件和所述值;以及
将所述第二硬件调试命令发送到所述可编程集成电路上的所述调试控制器电路;以及
所述调试控制器电路还被配置为将所述值写入在所述第二硬件调试命令中指定的所述存储元件。
CN201880029950.3A 2017-03-06 2018-02-12 调试***和方法 Active CN110603528B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/451,068 2017-03-06
US15/451,068 US10235272B2 (en) 2017-03-06 2017-03-06 Debugging system and method
PCT/US2018/017876 WO2018164811A1 (en) 2017-03-06 2018-02-12 Debugging system and method

Publications (2)

Publication Number Publication Date
CN110603528A CN110603528A (zh) 2019-12-20
CN110603528B true CN110603528B (zh) 2023-11-14

Family

ID=61283351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880029950.3A Active CN110603528B (zh) 2017-03-06 2018-02-12 调试***和方法

Country Status (6)

Country Link
US (1) US10235272B2 (zh)
EP (1) EP3593250B1 (zh)
JP (1) JP7019711B2 (zh)
KR (1) KR102521517B1 (zh)
CN (1) CN110603528B (zh)
WO (1) WO2018164811A1 (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method
US10762211B2 (en) * 2018-04-12 2020-09-01 United States Of America, As Represented By The Secretary Of The Navy Source code diagnostic instrument
US10599553B2 (en) 2018-04-27 2020-03-24 International Business Machines Corporation Managing cloud-based hardware accelerators
US20200004666A1 (en) * 2018-07-02 2020-01-02 International Business Machines Corporation Debug boundaries for hardware accelerators
US10831975B2 (en) 2018-11-29 2020-11-10 International Business Machines Corporation Debug boundaries in a hardware accelerator
JP7073285B2 (ja) * 2019-01-09 2022-05-23 ルネサスエレクトロニクス株式会社 動作検証プログラム、動作同期方法及び異常検出装置
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
US10810343B2 (en) 2019-01-14 2020-10-20 Microsoft Technology Licensing, Llc Mapping software constructs to synchronous digital circuits that do not deadlock
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
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
US11442104B1 (en) 2019-02-25 2022-09-13 Marvell Asia Pte, Ltd. Configurable integrated logic analyzer
JP7202225B2 (ja) * 2019-03-12 2023-01-11 ローム株式会社 半導体装置及びデバッグシステム
CN113454607B (zh) * 2019-03-21 2023-08-22 杭州飞步科技有限公司 调试方法、装置及片上***
US11347624B1 (en) * 2019-06-28 2022-05-31 Meta Platforms, Inc. Systems and methods for application exception handling
KR20210014365A (ko) * 2019-07-30 2021-02-09 에스케이하이닉스 주식회사 컨트롤러 및 그 동작 방법
US11442844B1 (en) 2020-06-01 2022-09-13 Xilinx, Inc. High speed debug hub for debugging designs in an integrated circuit
US11249872B1 (en) 2020-06-26 2022-02-15 Xilinx, Inc. Governor circuit for system-on-chip
CN116384305B (zh) * 2023-06-05 2023-08-01 英诺达(成都)电子科技有限公司 数据通信方法、装置、***、设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8214701B1 (en) * 2009-04-17 2012-07-03 Altera Corporation Hardware and software debugging
US8402442B1 (en) * 2009-07-28 2013-03-19 Xilinx, Inc. Common debugger method and system
CN104797948A (zh) * 2012-11-19 2015-07-22 泰拉丁公司 半导体器件测试环境中的调试

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0719711B2 (ja) * 1986-05-30 1995-03-06 松下電器産業株式会社 マグネツトロ−ルの製造方法
US5678028A (en) * 1994-10-25 1997-10-14 Mitsubishi Electric Information Technology Center America, Inc. Hardware-software debugger using simulation speed enhancing techniques including skipping unnecessary bus cycles, avoiding instruction fetch simulation, eliminating the need for explicit clock pulse generation and caching results of instruction decoding
US6055649A (en) * 1997-11-19 2000-04-25 Texas Instruments Incorporated Processor test port with scan chains and data streaming
US6212650B1 (en) 1997-11-24 2001-04-03 Xilinx, Inc. Interactive dubug tool for programmable circuits
US5995744A (en) 1997-11-24 1999-11-30 Xilinx, Inc. Network configuration of programmable circuits
US6263489B1 (en) 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US20060117274A1 (en) * 1998-08-31 2006-06-01 Tseng Ping-Sheng Behavior processor system and method
JP2001209556A (ja) 1999-11-18 2001-08-03 Yokogawa Electric Corp 検証支援システム
US6985980B1 (en) 2000-11-03 2006-01-10 Xilinx, Inc. Diagnostic scheme for programmable logic in a system on a chip
US6744274B1 (en) * 2001-08-09 2004-06-01 Stretch, Inc. Programmable logic core adapter
US7308564B1 (en) 2003-03-27 2007-12-11 Xilinx, Inc. Methods and circuits for realizing a performance monitor for a processor from programmable logic
US7523351B2 (en) * 2004-09-27 2009-04-21 Ceva D.S.P. Ltd System and method for providing mutual breakpoint capabilities in computing device
US7805593B1 (en) 2005-03-24 2010-09-28 Xilinx, Inc. Real-time performance monitoring using a system implemented in an integrated circuit
WO2008020513A1 (fr) 2006-08-14 2008-02-21 Nec Corporation débogueur et procédé de débogage
US8327200B1 (en) 2009-04-02 2012-12-04 Xilinx, Inc. Integrated circuit providing improved feed back of a signal
FR2945396A1 (fr) * 2009-05-07 2010-11-12 St Microelectronics Grenoble 2 Procede et dispositif d'analyse de la propagation de transactions dans un reseau multi-protocoles d'un systeme sur puce
JP5526725B2 (ja) * 2009-11-20 2014-06-18 富士通株式会社 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置
US8856742B2 (en) 2010-06-11 2014-10-07 International Business Machines Corporation Distributed debugging
US8595561B1 (en) 2010-10-27 2013-11-26 Xilinx, Inc. Integrated debugging within an integrated circuit having an embedded processor
US8595555B1 (en) 2011-01-13 2013-11-26 Xilinx, Inc. Debugging an integrated circuit with an embedded processor
US9256408B2 (en) * 2012-01-20 2016-02-09 Qualcomm Incorporated Optimizing texture commands for graphics processing unit
US9292414B2 (en) * 2012-11-26 2016-03-22 Nvidia Corporation System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU
US8775986B1 (en) * 2013-02-25 2014-07-08 Xilinx, Inc. Software debugging of synthesized hardware
US9262299B1 (en) 2013-05-31 2016-02-16 Cadence Design Systems, Inc. Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
US9575869B2 (en) * 2015-02-25 2017-02-21 Red Hat, Inc. Service implementation based debugger for service oriented architecture projects
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8214701B1 (en) * 2009-04-17 2012-07-03 Altera Corporation Hardware and software debugging
US8402442B1 (en) * 2009-07-28 2013-03-19 Xilinx, Inc. Common debugger method and system
CN104797948A (zh) * 2012-11-19 2015-07-22 泰拉丁公司 半导体器件测试环境中的调试

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
电磁灶控制保护电路原理调试及故障检修;孙日宁;《家用电器科技》(第05期);42-45 *

Also Published As

Publication number Publication date
KR102521517B1 (ko) 2023-04-12
US20180253368A1 (en) 2018-09-06
EP3593250B1 (en) 2021-09-08
EP3593250A1 (en) 2020-01-15
US10235272B2 (en) 2019-03-19
CN110603528A (zh) 2019-12-20
JP2020509507A (ja) 2020-03-26
KR20190121378A (ko) 2019-10-25
WO2018164811A1 (en) 2018-09-13
JP7019711B2 (ja) 2022-02-15

Similar Documents

Publication Publication Date Title
CN110603528B (zh) 调试***和方法
US10255400B1 (en) Debugging system and method
US9507688B2 (en) Execution history tracing method
US7584456B1 (en) Method and apparatus for debugging embedded systems having read only memory
Narayan et al. Translating system specifications to VHDL
US9946823B2 (en) Dynamic control of design clock generation in emulation
CN109891395B (zh) 调试***和方法
US10664637B2 (en) Testbench restoration based on capture and replay
Gao et al. Software and hardware co-verification technology based on virtual prototyping of RF SOC
US20070265822A1 (en) Data processing system and method
US10816600B1 (en) Protocol analysis and visualization during simulation
US9135384B1 (en) Compilation and simulation of a circuit design
Acquaviva et al. Semi-automatic generation of device drivers for rapid embedded platform development
CN112329369A (zh) 一种在芯片仿真模型上进行软件调试的方法
Bombieri et al. Correct-by-construction generation of device drivers based on RTL testbenches
US8229725B1 (en) Method and apparatus for modeling processor-based circuit models
TWI427496B (zh) 製造積體電路的模型的方法和系統
Yang et al. HDLs modeling technique for burst-mode and extended burst-mode asynchronous circuits
CN103969574A (zh) 应用FPGA实现ATE测试波形的Verilog编码方法
Parker et al. ISPS: A retrospective view
Zhang et al. Design of High Reliability Debugging System for RISC-V Microprocessor
Wang et al. Uniform SystemC Co-Simulation Methodology for System-on-Chip Designs
Silva Elastic circuits in FPGA
Banerjee et al. Automated approach to Register Design and Verification of complex SOC
Zhang et al. Integrated iss and fpga soc hw/sw co-verification environment design

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
GR01 Patent grant
GR01 Patent grant