图形化高层次综合电路性能分析方法、系统、装置及介质

文档序号:32442501发布日期:2022-12-06 22:38阅读:21来源:国知局
1.本发明涉及电路仿真
技术领域
:,尤其是图形化高层次综合电路性能分析方法、系统、装置及介质。
背景技术
::2.高层次综合的核心功能是将高级语言描述的行为级功能,自动转换成硬件描述语言。高级语言指的是具有较高的抽象度的编程语言,常见的高级语言包括c++、c、python等;而硬件描述语言一般指veriloghdl、vhdl、systemverilog等,其特点是能够直接用于对硬件电路建模。在转换的过程中,除了使用硬件电路实现对应的行为级功能之外,设计者往往还需要关心最终结果的时序性能,如电路中各个模块的时延情况、流水线的排列情况、以及整体硬件设计的吞吐量等。3.为了确保电路性能达到设计人员的预期,在获得高层次综合生成的硬件代码后,往往需要对电路进行性能分析。传统的性能分析方法一般是人为地对高层次综合产生的硬件代码进行推理和分析。这种方法通常需要设计激励信号,然后搭建仿真平台对代码进行测试,并对仿真产生的接口信号(波形)进行分析。然而,对于电路结构复杂和逻辑门数量较多的电路,人为分析不仅费时费力,而且容易产生遗漏和错误;同时,在硬件设计过程中,当发现某项性能不达标,或电路功能不完备时,往往还需要对高层次代码和硬件电路进行反复调整。4.因此,如果只依赖人力对电路进行分析,会导致高层次综合的设计效率非常低,同时极大地增加了人力成本和时间成本。技术实现要素:5.有鉴于此,为至少部分解决上述技术问题或者缺陷之一,本发明实施例的目的在于提供一种图形化高层次综合电路性能分析方法,以提高硬件开发的效率和稳定性;此外,实施例还提供了能够实现这一方法的系统、装置以及存储介质。6.一方面,本技术技术方案提供了图形化高层次综合电路性能分析方法,包括以下步骤:7.获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码;8.对所述测试激励程序代码进行编译转换得到软件描述代码;9.对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码;10.根据所述寄存器转换级代码进行反向编译,得到硬件仿真模型;11.在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码;12.根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示。13.在本技术方案的一种可行的实施例中,所述获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码这一步骤,包括:14.确定所述目标电路需求中的硬件功能需求;15.根据所述硬件功能需求,通过高级编程语言中的关键字、控制语句进行函数封装,得到所述硬件模块代码。16.在本技术方案的一种可行的实施例中,所述对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码这一步骤,包括:17.对所述硬件描述代码进行高层次综合优化,根据优化结果创建数据流和控制结构;18.将所述数据流以及所述控制结构进行整合得到所述寄存器转换级代码。19.在本技术方案的一种可行的实施例中,所述在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码这一步骤,包括:20.确定所述硬件模块代码的高级编程语言,根据所述高级编程语言的书写格式确定所述高级编程语言中所声明的采样函数;21.确定所述采样函数的起始位置,根据所述起始位置,将所述采样函数插入至所述硬件仿真模型。22.在本技术方案的一种可行的实施例中,所述在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码,还包括以下步骤至少之一:23.通过所述采样函数,记录所述硬件仿真模型中硬件模块的层次结构;24.通过所述采样函数,记录所述硬件仿真模型中硬件模块的类型;25.通过所述采样函数,记录所述硬件仿真模型所对应硬件电路的时钟周期计数。26.在本技术方案的一种可行的实施例中,所述根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示,包括以下步骤至少之一:27.根据所述硬件模块之间的前后延时关系构建时间轴,对所述时间轴进行可视化展示;28.对所述硬件仿真模型的模块层次结构进行可视化展示;29.根据所述硬件模块之间的延时交叠确定时序关系,对所述时序关系进行可视化展示。30.在本技术方案的一种可行的实施例中,所述根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示,还包括:31.获取所述采样函数产生的日志文件,从所述日志文件中获取所述性能数据,并将所述性能数据进行可视化展示。32.另一方面,图形化高层次综合电路性能分析系统,包括:33.需求获取单元,用于获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码;34.软件编码单元,用于对所述测试激励程序代码进行编译转换得到软件描述代码;35.正向编码单元,用于对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码;36.反向编译单元,用于根据所述寄存器转换级代码进行反向编译,得到硬件仿真模型;37.模型构建单元,用于在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码;38.可视化单元,用于根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示。39.另一方面,本技术技术方案还提供一种基于图形化高层次综合电路性能分析装置,该装置包括:40.至少一个处理器;41.至少一个存储器,用于存储至少一个程序;42.当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器运行如第一方面中任一项所述的图形化高层次综合电路性能分析方法。43.另一方面,本技术技术方案还提供一种存储介质,其中存储有处理器可执行的程序,所述处理器可执行的程序在由处理器执行时用于执行如第一方面中任一项所述的图形化高层次综合电路性能分析方法。44.本发明的优点和有益效果将在下面的描述中部分给出,其他部分可以通过本发明的具体实施方式了解得到:45.本技术技术方案提供了图形化高层次综合电路性能分析方法、系统、设备以及介质;方法基于目标电路的需求构建得到测试激励程序代码以及硬件模块代码,然后通过编译工具分别进行编译,并针对硬件模块代码部分先后进行正向编译得到寄存器转换级代码,对rtl代码进行反向编译,得到硬件仿真模型,在构建仿真模型的过程中通过代码插桩将采样代码插入值模型中,最后通过硬件仿真描述代码以及软件描述代码进行仿真,并将仿真得到的结果进行可视化;方案通过代码间的转换,并基于硬件以及软件的代码描述进行仿真,极大地减少了人为分析所带来的成本消耗,同时根据仿真模型的特性提高高层次综合的设计效率。附图说明46.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。47.图1为本技术技术方案中所提供的图形化高层次综合电路性能分析方法的步骤流程图;48.图2为本技术技术方案中所提供另一种的图形化高层次综合电路性能分析方法的步骤流程图;49.图3为本技术技术方案中性能数据图形化界面示意图;50.图4为本技术技术方案中基于shang高层次综合工具的图形化性能分析的步骤流程图。具体实施方式51.下面详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。对于以下实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。52.首先对本技术技术方案中部分技术名词进行解释:53.高层次综合(high-levelsynthesis)简称hls,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。hls工具能够减少硬件工程师设计的时间,同时也让软件工程师完成硬件设计。54.llvm(lowlevelvirtualmachine)是一个编译器框架。llvm作为编译器框架,是需要各种功能模块支撑起来的,可以将clang和lld都看作是llvm的组成部分,根据其框架的特性,可以基于llvm提供的功能开发自己的模块,并集成在llvm系统上,增加它的功能,或者在开发软件工具的过程中,利用llvm来支撑底层实现。55.针对说明书背景中所指出的,在相关技术方案中存在着过度依赖人工分析的方式导致高层次综合的设计效率非常低,同时极大地增加了人力成本和时间成本的问题;首先,在第一方面,如图1所示,本发明实施例首先提出了一种图形化高层次综合电路性能分析方法,方法包括步骤s100-s600:56.s100、获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码;57.其中,目标电路是指需要进行高层次综合性能分析的硬件电路。具体在实施例中,实施例中可以通过通用程序设计语言,例如c语言生成一个双精度浮点加法器的核心代码作为实施例中的硬件仿真模型代码;同时生成一个测试程序,其中包含了测试激励程序代码。58.在一些可行的实施例方式中,实施例方法的步骤s100获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码可以包括步骤s110-s120:59.s110、确定所述目标电路需求中的硬件功能需求;60.s120、根据所述硬件功能需求,通过高级编程语言中的关键字、控制语句进行函数封装,得到所述硬件模块代码;61.具体在实施例中,首先需要基于高级语言,例如c、c++、python,生成测试激励程序代码和硬件模块代码,其中硬件模块代码的生成过程是对目标电路需要实现的硬件功能建模,建模过程中可以使用高级语言提供的关键字和控制语句,顶层硬件模块以函数的形式进行封装,函数的输入输出对应硬件模块的输入和输出。除此之外,设计的测试激励程序代码需要包括如下步骤:生成测试向量、调用硬件模块并发送测试向量、验证返回的结果是否正确。62.s200、对所述测试激励程序代码进行编译转换得到软件描述代码;63.如图2所示,具体在实施例中,在通过步骤s100生成得到测试激励程序代码之后,通过llvm的前端编译工具进行编译;实施例中的编译转换的过程主要依赖于该工具的自动实现,转换完成之后,得到测试激励程序代码部分的中间表示(intermediaterepresentation,ir);实施例中,llvm-ir描述形式使用了底层的指令集(llvm专用汇编指令集),能够在保持代码形式相对简单的前提下,提供高层次信息,用于后续的分析优化。64.s300、对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码;65.其中,从高级语言转换为寄存器转换级(registertransferlevel,rtl)代码的过程称为正向编译。如图2所示,具体在实施例中,与测试激励程序代码编译的过程相类似地,实施例通过llvm的前端编译工具进行编译,对于输入的硬件模块代码生成硬件部分中间表示ir。在得到硬件部分中间表示ir通过编译语言的转换得到rtl代码。66.s400、根据所述寄存器转换级代码进行反向编译,得到硬件仿真模型;67.具体在实施例中,根据步骤s300得到的得到rtl代码进行仿真;首先实施例需要对rtl代码进行反向编译,其目的在于获得使用高级语言描述的硬件仿真模型。更为具体地,实施例中可以通过硬件代码编译工具进行反向编译,例如verilator、v2c等;例如,可以通过硬件代码编译工具将rtl代码编译回到c++模型。68.s500、在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码;69.具体在实施例中,在通过步骤s400获取得到仿真模型的高级语言描述后,对仿真模型中的代码进行插桩,用于在仿真过程中跟踪各个模块的运行情况;其中,代码插桩是指在程序中加入额外的事件采样代码。70.s600、根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示;71.如图2所示,具体在实施例中,完成插桩的硬件仿真模型代码经过仿真工具的llvm编译,生成硬件仿真模型的ir文件,和软件ir被一起送入软硬件协同仿真平台进行仿真;其中,软硬件协同仿真平台中需要设置的程序包括:仿真流程控制程序、性能数据收集程序、仿真结果显示程序和性能数据可视化程序。实施例中,仿真流程控制程序基于tcl脚本编写,主要功能包括:控制仿真器的环境变量、声明输入文件、声明输出文件、跳转到子工程目录、以及控制仿真的流程。此外,仿真结果显示程序基于qt实现,主要功能包括:在结果窗口中打印仿真过程中每一步的执行情况,同时显示测试激励程序中输出的结果。72.在一些可行的实施方式中,实施例方法中步骤s300、对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码,其可以包括步骤s310和步骤s320:73.s310、对所述硬件描述代码进行高层次综合优化,根据优化结果创建数据流和控制结构;s320、将所述数据流以及所述控制结构进行整合得到所述寄存器转换级代码;74.具体在实施例中,硬件模块代码的llvmir文件需要首先需要经过高层次综合的优化流程,高层次综合工具根据调度和资源绑定流程的结果创建相应的数据流和控制结构,最后综合得到描述硬件电路的rtl代码。75.在一些可行的实施方式中,实施例方法中步骤s500、在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码,可以包括步骤s510-s520:76.s510、确定所述硬件模块代码的高级编程语言,根据所述高级编程语言的书写格式确定所述高级编程语言中所声明的采样函数;77.s520、确定所述采样函数的起始位置,根据所述起始位置,将所述采样函数插入至所述硬件仿真模型;78.具体在实施例中,进行代码插桩的过程为:读取硬件模块的c++代码,根据c++中函数的书写格式,确定代码中声明的所有函数;根据关键字符确定每个函数的起始位置,并在该位置插入事件采样函数的代码块;搜索整个代码文件,对每个函数都进行修改;将修改后的代码保存到硬盘。79.在一些可行的实施方式中,实施例方法中步骤s500、在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码,还可以包括步骤s530-s550:80.s530、通过所述采样函数,记录所述硬件仿真模型中硬件模块的层次结构;81.s540、通过所述采样函数,记录所述硬件仿真模型中硬件模块的类型;82.s550、通过所述采样函数,记录所述硬件仿真模型所对应硬件电路的时钟周期计数;83.具体在实施例中,对代码的插桩不会影响到硬件仿真模型的具体行为功能,事件采样函数所记录的内容包括但不限于如下:84.硬件电路模块的层次结构;硬件电路的层次结构对于性能分析非常关键,通过分析每个模块内部的层次结构,能够分析电路内部的数据依赖关系,有利于构建合适的流水线,对电路进行针对性的优化。85.硬件电路模块的类型;在使用高层次综合工具生成硬件模块的时候,会自动产生多种不同类型的模块,如读取数据模块、计算模块、写回数据模块。86.运行时刻的时钟周期计数;硬件电路的计时一般是以时钟周期数量作为计算单位,因此当程序调用到当前模块的时候,只需要记录下当前运行时刻的时钟周期,就能确定该模块位于时间线的具体位置,用于后续的时序逻辑分析。87.在一些可行的实施方式中,实施例方法中步骤s600、根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示,可以包括步骤s610-s630:88.s610、根据所述硬件模块之间的前后延时关系构建时间轴,对所述时间轴进行可视化展示;89.s620、对所述硬件仿真模型的模块层次结构进行可视化展示;90.s630、根据所述硬件模块之间的延时交叠确定时序关系,对所述时序关系进行可视化展示;91.具体在实施例中,为了便于开发人员对硬件涉及进行分析,实施例还提供了一种基于图形化界面的呈现方法,其示意图如图3所示。如图3所示,该图形化界面基于qt的qtablewidget实现,将插件中的第一行设置为时钟周期数,如c0、c1…cn,左侧第一列用于呈现模块的层次结构,插件的主体部分用于呈现各个模块在不同时钟周期的执行情况。图形化界面301中能够显示的内容包括但不限于:92.时间轴302;性能数据的图形化界面中,时间轴的基本单位为一个时钟周期。进一步,时间轴并不需要显示仿真过程中执行的所有时钟周期。因为可视化结果只是向开发人员展示了硬件模块之间的前后延时关系,因此时间轴只需要满足一次完整地数据传递过程即可。93.程序层次结构303;在高层次综合生成的硬件代码中,一个大模块往往是由若干个小模块拼接而成,开发人员需要尽可能了解硬件的模块层次结构,才能对电路进行针对性优化。进一步,图形化界面中,模块的层次结构应该从粗到细排列,上层模块的延时由下层每个模块的延时构成。94.时序关系可视化区304;主要展示各个模块的时序关系。进一步地,由于硬件电路中经常存在并行执行的情况,即前一模块还未执行完,后一模块已经开始执行,因此,模块与模块之间的延时允许存在交叠的情况。95.在一些可行的实施方式中,实施例方法中步骤s600、根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示,还可以包括步骤s640:96.s640、获取所述采样函数产生的日志文件,从所述日志文件中获取所述性能数据,并将所述性能数据进行可视化展示;97.具体在实施例中,可视化过程中,性能数据收集程序可以是一个基于c编写的文本处理程序,其主要功能是自动处理事件采样函数产生的日志文件,从中提取出各个模块的层次结构、各个模块的种类、以及模块运行的开始时间和结束时间。收集完成后,将性能数据以文本文件的形式保存在本地硬盘中。98.结合说明书附图4,对本技术技术方案的实施过程进行完整的实施过程描述:99.首先,使用c语言设计一个双精度浮点加法器的核心代码和测试程序,然后通过clang前端工具,将c语言设计的代码文件编译并转换为加法器ir和测试程序ir。clang前端是一款基于llvm的c/c++/objective-c编译器。100.基于高层次综合工具shang,对加法器的ir进行多层级优化,最后综合生成加法器的rtl代码实现。shang高层次综合工具是由中山大学电子与信息工程学院eda研究组开发的高层次综合系统。101.verilator是一个支持veriloghdl/systemverilog的周期精确的开源仿真器。本实施例中使用verilator编译工具将加法器电路的rtl代码综合为c++仿真模型。102.之后对硬件仿真模型(c++)进行代码插桩,使用预先设计好的代码读取程序解析仿真模型代码,然后在加法器中的每个模块插入事件采样函数,最后再重新保存到新的工程代码路径。103.本实施例中基于clang开发了仿真程序的前端编译器,将完成插桩的加法器的仿真模型代码编译为硬件仿真模型ir。将生成的硬件仿真模型ir和测试程序ir一起送入软硬件协同仿真平台中进行仿真。仿真平台基于python搭建,其中包括仿真流程控制程序,性能数据收集程序,仿真结果显示程序,性能数据可视化程序。104.仿真流程控制程序首先将输入的ir文件进一步编译为可执行文件,编译的过程中会进行检查,若接口不匹配,或编译错误,则提醒设计人员进行修改。105.编译通过后,首先启动性能数据收集程序线程,然后开启另一线程用于执行仿真程序,按照时钟周期的顺序,逐步执行协同仿真程序。期间性能数据收集程序一直保持运行,并从内存中获取到采集到的数据。106.仿真结束后,仿真流程控制程序关闭性能数据收集程序线程,并将收集到的所有数据全部载入到内存中,准备进行可视化。可视化界面使用pyside搭建,其中性能数据呈现窗口使用qt绘制,将双精度浮点加法器中的每个模块的执行顺序和延迟时间在图形化界面进行描述。107.另一方面,本发明实施例还提供了一种图形化高层次综合电路性能分析系统,系统包括:108.需求获取单元,用于获取目标电路需求,根据所述目标电路需求确定测试激励程序代码以及硬件模块代码;109.软件编码单元,用于对所述测试激励程序代码进行编译转换得到软件描述代码;110.正向编码单元,用于对所述硬件模块代码进行编译转换得到硬件描述代码,根据所述硬件描述代码进行正向编译得到寄存器转换级代码;111.反向编译单元,用于根据所述寄存器转换级代码进行反向编译,得到硬件仿真模型;112.模型构建单元,用于在所述硬件仿真模型中插入采样代码,对插入采样代码后的硬件仿真模型进行仿真编译,得到硬件仿真描述代码;113.可视化单元,用于根据所述软件描述代码以及所述硬件仿真描述代码进行协同仿真,对仿真结果的性能数据以及仿真流程进行可视化展示。114.另一方面,本技术的技术方案还提供一种图形化高层次综合电路性能分析装置;其包括:115.至少一个处理器;至少一个存储器,该存储器用于存储至少一个程序;当至少一个程序被至少一个处理器执行,使得至少一个处理器运行如第一方面中的图形化高层次综合电路性能分析方法。116.本发明实施例还提供了一种存储介质,其存储有对应的执行程序,程序被处理器执行,实现第一方面中的图形化高层次综合电路性能分析方法。117.从上述具体的实施过程,可以总结出,本发明所提供的技术方案相较于现有技术存在以下优点或优势:118.此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。119.在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。120.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。121.尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。122.以上是对本发明的较佳实施进行了具体说明,但本发明并不限于上述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本技术权利要求所限定的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1