CN114328061B - 一种用于逻辑仿真***的高性能信号监视方法 - Google Patents
一种用于逻辑仿真***的高性能信号监视方法 Download PDFInfo
- Publication number
- CN114328061B CN114328061B CN202111656294.XA CN202111656294A CN114328061B CN 114328061 B CN114328061 B CN 114328061B CN 202111656294 A CN202111656294 A CN 202111656294A CN 114328061 B CN114328061 B CN 114328061B
- Authority
- CN
- China
- Prior art keywords
- signal
- reference point
- patch
- executing
- logic simulation
- 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
Links
- 238000012544 monitoring process Methods 0.000 title claims abstract description 51
- 238000004088 simulation Methods 0.000 title claims abstract description 39
- 238000000034 method Methods 0.000 title claims abstract description 38
- 230000000977 initiatory effect Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 6
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明公开了一种用于逻辑仿真***的高性能信号监视方法。该方法包含步骤S1:对源代码进行词法及语法分析,生成对应的抽象语法树;S2:生成基于节点语义的定义引用表;S3:对源代码执行代码生成,记录信号引用点位置,同时在信号引用点前后置入空指令;S4:创建定义符号引用地址表;S5:执行逻辑仿真***逻辑仿真;S6:执行检查点补丁;S7:记录并更新信号值及检查点结果。该方法利用硬件描述语言特性在源代码的编译处理过程中产生引用信息,为调试器提供关键的语义信息,同时在信号引用点位置预留补丁空间,从而提高逻辑仿真***对信号监控的执行性能。
Description
技术领域
本发明涉及信号监视领域,尤其涉及一种用于逻辑仿真***的高性能信号监视方法。
背景技术
对于大型的逻辑仿真项目,需要对众多的信号波形进行监视,目前的监视方法为在每个信号引用点的位置添加检查点补丁,以测试信号引用点是否在监视范围。
在运行过程中由于观察的信号波形非常多,仿真时间和仿真密度都比较大,导致检查点补丁也非常多,同时由于可调式格式中没有保存信号引用点的应用信息,因此调试器无法利用源代码中的语义信息,导致逻辑仿真运行很慢,极大影响后续分析和研究的效率。
发明内容
本发明所要解决的技术问题是:克服现有技术存在的上述缺陷,提供一种用于逻辑仿真***的高性能信号监视方法,提高仿真效率。
本发明的技术解决方案是:
提供一种用于逻辑仿真***的高性能信号监视方法,包含以下步骤:
S1:编译器对源代码进行词法及语法分析,生成对应的抽象语法树;
S2:编译器遍历抽象语法树的所有节点,生成基于节点语义的定义引用表,其中,定义引用表包含信号引用点位置;
S3:编译器对源代码生成二进制代码,并在二进制代码生成过程中记录定义引用表中信号引用点位置,同时在信号引用点位置的前后置入空指令,该记录的信号引用点位置及空指令均包含在生成的二进制代码中;
S4:编译器利用定义引用表和信号引用点位置计算引用地址,获取每个信号引用点,基于引用地址和信号引用点创建定义符号引用地址表;
S5:逻辑仿真***发起信号监视操作,调试器通过定义符号引用地址表定位具体引用位置,并记录当前被监视的信号值,同时在该位置设置检查点补丁;
S6:调试器执行检查点补丁并记录当前被监视的信号值,比较执行检查点补丁前后所记录的当前被监视的信号值是否一致,若一致则执行步骤S7,若不一致,则触发值改变事件,将信号值记录为执行检查点补丁后监视的信号值,执行步骤S7;
S7:调试器执行完需监视的全部信号监视任务后返回逻辑仿真流程,输出记录的信号值及检查点补丁运行结果。
进一步的,所述步骤S4包含以下具体步骤:
S41:编译器获取步骤S2生成的定义引用表及步骤S3记录的信号引用点位置,利用定义引用表及信号引用点位置计算引用地址,计算得到每个信号引用点的引用地址;
S42:编译器对每个信号引用点及该信号引用点的引用地址创建定义符号引用地址表;
S43:编译器检查编译过程中该信号引用点所在模块是否存在加载或卸载,若存在,则对步骤S42生成的定义符号引用地址表进行更新,若不存在,不执行任何操作。
进一步的,所述步骤S5包含以下具体步骤:
S51:逻辑仿真***发起对信号引用点的监视操作;
S52:调试器在接收到该监视操作指令后,通过定义符号引用地址表查找信号引用点的准确位置;
S53:调试器记录该检查点的当前信号值;
S54:调试器获取该信号引用点位置后,在该位置设置检查点,并将检查点补丁写入该信号引用点位置。
进一步的,所述S6包含以下具体步骤:
S61:调试器执行检查点补丁;
S62:获取执行检查点补丁后该信号引用点的被监视信号值;
S63:将执行检查点补丁后获取的信号值与执行检查点补丁前记录的信号值进行比较,若一致则执行步骤S7,若不一致,则触发值改变事件,将信号值记录为执行检查点补丁后获取的信号值。
进一步的,所述定义引用表包含定义符号、信号引用点位置、引用类型。
进一步的,所述定义符号包含符号的位置信息、类型信息、名称、约束、属性,引用类型包含读访问引用和写访问引用。
进一步的,所述信号引用点位置为该信号引用点与该信号引用点所在函数起始块地址的相对偏移量或该信号引用点与该信号引用点所在模块的相对偏移量。
进一步的,所述逻辑仿真***发起对信号引用点的监视操作包含通过信号设置发起监视操作、通过信号改变发起监视操作、通过信号读取发起监视操作。
进一步的,所述检查点补丁包含内存缺页补丁、陷阱补丁、代码补丁。
进一步的,所述源代码采用硬件描述语言。
本发明产生的有益效果是:本发明自主研发了一种用于逻辑仿真***的高性能信号监视方法,通过在编译过程中生成定义引用地址表,同时在逻辑仿真过程中通过对该定义引用地址表的精确寻址实现对引用信息的参考,从而避免在逻辑仿真过程中设置大量检查点,导致降低仿真效率的问题。
附图说明
图1为本发明提供的一种用于逻辑仿真***的高性能信号监视方法流程图。
具体实施方式
为使本领域技术人员更加清楚和明确本发明的技术方案,下面结合实施例及附图对本发明作进一步详细的描述,需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互结合。
参见图1,图1为本实施例提供的一种用于逻辑仿真***的高性能信号监视方法,包含以下步骤:
S1:编译器对源代码进行词法及语法分析,生成对应的抽象语法树;
在编译过程中,首先利用词法分析器对源代码进行扫描,将由字符组成的字符串分解为有意义的代码块,即词法单元,接着将代码块流转换成一个由元素嵌套所组成的代表了程序语法结构的树,即抽象语法树,其中抽象语法树中的每个节点都表示源代码中的一种结构。
S2:编译器遍历抽象语法树的所有节点,生成基于节点语义的定义引用表,其中,定义引用表包含信号引用点位置;
S3:编译器对源代码生成二进制代码,并在二进制代码生成过程中记录定义引用表中信号引用点位置,同时在信号引用点位置的前后置入空指令,该记录的信号引用点位置及空指令均包含在生成的二进制代码中;
S4:编译器利用定义引用表计算引用地址,获取信号引用点,基于引用地址和信号引用点创建定义符号引用地址表,包含以下具体步骤:
S41:获取步骤S2生成的定义引用表及步骤S3记录的信号引用点位置,利用定义引用表及信号引用点位置计算引用地址,计算得到每个信号引用点的引用地址,其中信号引用点位置为该信号引用点与该信号引用点所在函数起始块地址的相对偏移量或该信号引用点与该信号引用点所在模块的相对偏移量;
其中,函数起始块与函数相同,是高级语言中函数翻译成的机器代码段,模块为以文件为单位的可执行代码。
S42:对每个信号引用点及该信号引用点的引用地址创建定义符号引用地址表;
S43:编译器检查编译过程中该信号引用点所在模块是否存在加载或卸载,若存在,则对步骤S42生成的定义符号引用地址表进行更新,若不存在,不执行任何操作。
S5:逻辑仿真***发起信号监视操作,调试器通过定义引用地址表定位具体引用位置,并在该位置设置检查点补丁,并记录当前被监视的信号值,包含以下具体步骤:
S51:逻辑仿真***发起对信号引用点的监视操作,其中,监视操作包含信号设置监视、信号改变监视、信号读取监视;
信号设置监视为在信号被逻辑仿真***执行改写信号动作,即使改写的信号值一致,也触发监视操作;
信号改变监视为当信号值变化时,触发监视操作;
信号读取监视为在读取该信号的值时,触发监视操作。
S52:调试器在接收到监视操作指令后,通过定义符号引用地址表查找信号引用点的准确位置;
S53:记录该检查点的当前信号值;
S54:获取该信号引用点位置后,在该位置设置检查点,并将检查点补丁写入该信号引用点位置。
S6:调试器执行检查点补丁并比较执行检查补丁前后监视的信号值与步骤S5记录的检查点补丁运行前的信号值是否一致,若一致则执行步骤S7,若不一致,则触发值改变事件,将信号值记录为运行检查点补丁后监视的信号值,执行步骤S7,包含以下具体步骤:
S61:调试器执行检查点补丁;
S62:获取执行检查点补丁后该信号引用点的被监视信号值;
S63:将执行检查点补丁后获取的信号值与执行检查点补丁前记录的信号值进行比较,若一致则执行步骤S7,若不一致,则触发值改变事件,将信号值记录为运行检查点补丁后监视的信号值。
S7:调试器执行完需监视的全部信号监视任务后返回逻辑仿真流程,输出记录的信号值及检查点补丁运行结果。
进一步的,所述检查点补丁包含内存缺页补丁、陷阱补丁、代码补丁。
进一步的,所述源代码采用硬件描述语言。
对采用本实施例的执行时间进行统计,其执行时间y与检查点个数x的关系为:y=k*x+b,其中,k为平均执行单个检查点补丁所需的cpu时间,b为仿真程序所需的时间,由于检查点仅在发起监视时调用,因此检查点个数x相对于当前普通的监视方法会大幅减少,因此仿真***的完整执行时间大幅降低。
上面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,不能理解为对本发明保护范围的限制。
总之,本发明虽然列举了上述优选实施方式,但是应该说明,虽然本领域的技术人员可以进行各种变化和改型,除非这样的变化和改型偏离了本发明的范围,否则都应该包括在本发明的保护范围内。
Claims (10)
1.一种用于逻辑仿真***的高性能信号监视方法,其特征在于,包含以下步骤:
S1:编译器对源代码进行词法及语法分析,生成对应的抽象语法树;
S2:编译器遍历抽象语法树的所有节点,生成基于节点语义的定义引用表,其中,定义引用表包含信号引用点位置;
S3:编译器对源代码生成二进制代码,并在二进制代码生成过程中记录定义引用表中信号引用点位置,同时在信号引用点位置的前后置入空指令,该记录的信号引用点位置及空指令均包含在生成的二进制代码中;
S4:编译器利用定义引用表中信号引用点位置计算引用地址,获取每个信号引用点,基于引用地址和信号引用点创建定义符号引用地址表;
S5:逻辑仿真***发起信号引用点的监视操作,调试器通过定义符号引用地址表定位具体引用位置,并记录当前的被监视信号值,同时在该位置设置检查点补丁;
S6:调试器执行检查点补丁并记录当前的被监视信号值,判断执行检查点补丁前后所记录的当前被监视信号值是否一致,若一致则执行步骤S7,若不一致,则触发信号值改变事件,将信号值记录为执行检查点补丁后的被监视信号值,执行步骤S7;
S7:调试器执行完需监视的全部信号引用点的监视任务后返回逻辑仿真流程,并输出所记录的被监视信号值以及执行检查点补丁的运行结果。
2.根据权利要求1所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述步骤S4包含以下具体步骤:
S41:编译器获取步骤S2生成的定义引用表及步骤S3记录的信号引用点位置,利用定义引用表及信号引用点位置计算引用地址,得到每个信号引用点的引用地址;
S42:编译器根据每个信号引用点及该信号引用点的引用地址创建定义符号引用地址表;
S43:编译器检查编译过程中该信号引用点所在模块是否存在加载或卸载,若存在,则对步骤S42生成的定义符号引用地址表进行更新,若不存在,不执行任何操作。
3.根据权利要求2所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述步骤S5包含以下具体步骤:
S51:逻辑仿真***发起对信号引用点的监视操作;
S52:调试器在接收到监视操作的指令后,通过定义符号引用地址表查找该信号引用点的准确位置;
S53:调试器记录该信号引用点当前的被监视信号值;
S54:调试器获取该信号引用点位置后,在该位置设置检查点,并将检查点补丁写入该信号引用点位置。
4.根据权利要求3所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述S6包含以下具体步骤:
S61:调试器执行检查点补丁;
S62:获取执行检查点补丁后该信号引用点的被监视信号值;
S63:将执行检查点补丁后获取的被监视信号值与执行检查点补丁前记录的被监视信号值进行比较,若一致则执行步骤S7,若不一致,则触发信号值改变事件,将信号值记录为执行检查点补丁后获取的被监视信号值。
5.根据权利要求4所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述定义引用表包含定义符号、信号引用点位置、引用类型。
6.根据权利要求5所述的一种用于逻辑仿真***的高性能信号监视方法,其特征在于,所述定义符号包含符号的位置信息、类型信息、名称、约束、属性,引用类型包含读访问引用和写访问引用。
7.根据权利要求6所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述信号引用点位置为该信号引用点与该信号引用点所在函数起始块地址的相对偏移量或该信号引用点与该信号引用点所在模块的相对偏移量。
8.根据权利要求7所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述逻辑仿真***发起对信号引用点的监视操作包含通过信号设置发起监视操作、通过信号改变发起监视操作、通过信号读取发起监视操作。
9.根据权利要求8所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述检查点补丁包含内存缺页补丁、陷阱补丁、代码补丁。
10.根据权利要求9所述的用于逻辑仿真***的高性能信号监视方法,其特征在于,所述源代码采用硬件描述语言。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111656294.XA CN114328061B (zh) | 2021-12-30 | 2021-12-30 | 一种用于逻辑仿真***的高性能信号监视方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111656294.XA CN114328061B (zh) | 2021-12-30 | 2021-12-30 | 一种用于逻辑仿真***的高性能信号监视方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114328061A CN114328061A (zh) | 2022-04-12 |
CN114328061B true CN114328061B (zh) | 2024-03-29 |
Family
ID=81019409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111656294.XA Active CN114328061B (zh) | 2021-12-30 | 2021-12-30 | 一种用于逻辑仿真***的高性能信号监视方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328061B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955426A (zh) * | 2014-04-21 | 2014-07-30 | 中国科学院计算技术研究所 | 一种检测c代码空指针引用的方法及*** |
CN107408055A (zh) * | 2015-05-29 | 2017-11-28 | 谷歌公司 | 代码缓存*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7246267B2 (en) * | 2001-10-01 | 2007-07-17 | Tektronix, Inc. | Logic analyzer having a disassembler employing symbol table information for identifying op-codes |
US9639343B2 (en) * | 2014-08-29 | 2017-05-02 | Nxp Usa, Inc. | Method for altering execution of a program, debugger, and computer-readable medium |
-
2021
- 2021-12-30 CN CN202111656294.XA patent/CN114328061B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955426A (zh) * | 2014-04-21 | 2014-07-30 | 中国科学院计算技术研究所 | 一种检测c代码空指针引用的方法及*** |
CN107408055A (zh) * | 2015-05-29 | 2017-11-28 | 谷歌公司 | 代码缓存*** |
Non-Patent Citations (1)
Title |
---|
复杂***建模仿真语言编译器的实现与应用;周文;迟鹏;李伯虎;宋晓;;***仿真学报;20160708(07);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114328061A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11126930B2 (en) | Code completion for dynamically-typed programming languages using machine learning | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
WO2019143541A1 (en) | Code suggestion based on machine learning | |
US10394694B2 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN113641701B (zh) | 一种数据查询方法、***、异构加速平台及存储介质 | |
CN108710662B (zh) | 语言转换方法和装置、存储介质、数据查询***和方法 | |
US11327722B1 (en) | Programming language corpus generation | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
US11243750B2 (en) | Code completion with machine learning | |
CN102722438B (zh) | 一种内核调试的方法和设备 | |
CN104035862A (zh) | 闭包测试方法和装置 | |
CN114661290A (zh) | 一种脚本错误的处理方法、装置、设备及存储介质 | |
CN114328061B (zh) | 一种用于逻辑仿真***的高性能信号监视方法 | |
CN109344083B (zh) | 一种程序调试方法、装置、设备及可读存储介质 | |
JP6878707B2 (ja) | 試験装置、試験方法および試験プログラム | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 | |
CN114327614A (zh) | 参考模型数据流记录和分析的方法及应用 | |
CN113377675A (zh) | 基于反馈的smt求解器性能测试用例约简方法 | |
CN111752967A (zh) | 基于sql的数据处理方法、装置、电子设备和存储介质 | |
CN113849814A (zh) | 一种可配置***漏洞复现***以及复现方法 | |
JP2000181697A (ja) | メインフレームcobol資産のオープン系システムへのコンバージョン方法及び装置並びに記録媒体 | |
CN112148581A (zh) | 代码规范检查方法、装置、***及存储介质 | |
US20240152507A1 (en) | Schema-free static query template | |
JP4782315B2 (ja) | 影響解析装置および方法、記録媒体、プログラム |
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 |