一种基于增量编译的制造技术

技术编号:39830636 阅读:7 留言:0更新日期:2023-12-29 16:11
本发明专利技术公开了一种基于增量编译的

【技术实现步骤摘要】
一种基于增量编译的Verilog语法分析方法


[0001]本专利技术涉及电子设计自动化
,具体涉及一种基于增量编译的
Verilog
语法分析方法


技术介绍

[0002]增量编译技术最早起源于软件领域,其技术核心是只编译代码中被修改的部分,以提高编译效率

因此,基于增量编译的程序开发必须考虑编译结果的保存问题,以便下一次编译时使用

在软件开发中,增量编译的结果通常只需要满足一个单一的需求,即生成计算机底层的机器码

因此,软件编程语言中的增量编译技术通常保存与目标代码结构相似的中间结果,也就是同汇编代码接近的
.o
文件

所以,增量编译中间结果的数据结构往往同目标语言绑定

[0003]随着硬件设计规模的扩大,增量编译技术在硬件领域也变得流行

与软件领域增量编译单一的需求不同,硬件语言编译的中间结果具有多种用途,包括仿真

网表生成

形式化验证

时序分析以及不同硬件语言之间代码转换等

然而,现有的硬件语言编译技术都与特定应用密切相关,比如,同仿真有关的增量编译产生的中间代码是适合仿真的中间代码

这样导致所保存的增量编译结果缺少通用性,只能直接满足目标应用需求

例如,在论文

基于层次化设计的
Verilog HDL
增量编译方法

中,提出了一种利用
Verilog
语言层次化特点的增量编译方法

由于该论文的目的是将
Verilog
语言转化为
VHDL
语言,因此在编译结果的生成上,选择了一种更适合
VHDL
语言生成的层次结构

但是,这种结构缺乏通用性,无法直接用于逻辑综合等其他开发用途

此外,为了生成这种专门的中间结果,每次编译都需要对代码中的模块进行排序,优先编译底层模块,这在一定程度上影响了编译效率


技术实现思路

[0004]专利技术目的:本专利技术的目的是提供一种基于增量编译的
Verilog
语法分析方法解决了现有增量编译技术中间语言与目标应用紧密相关的问题;采用以模块为单位的增量编译方法,当出现微小的修改仅限于某个模块时,相较于整个文件的重新编译,仅对发生修改的模块本身及其依赖模块进行重编译能够显著节省重编译所需的时间

[0005]技术方案:本专利技术所述的一种基于增量编译的
Verilog
语法分析方法,包括首次编译和再编译两个阶段;
[0006]首次编译阶段对
Verilog
文件全部模块进行语法分析,包括以下步骤:
[0007](1)
获取待分析的
Verilog
文件代码,以模块为单位读入;
[0008](2)
对读入模块代码进行预处理,主要进行宏定义替换,并删除代码中的宏定义部分;
[0009](3)
对预处理后的模块代码进行语法分析,得到该模块对应的抽象语法树结构,将抽象语法树结构存储到二进制文件中;
[0010](4)
分析抽象语法树结构内部的模块依赖关系,获得模块依赖集合,存储到全局模
块依赖关系表中;
[0011](5)

Verilog
文件中所有模块都编译完毕,将得到的模块依赖关系表结构写入二进制文件开头

[0012]进一步的,再编译阶段对
Verilog
文件中用户指定模块重新进行语法分析,包括以下步骤:
[0013](S1)
获取用户指定需要重编译的模块名称;
[0014](S2)
根据用户指定模块名获取相应代码,对其进行语法分析,并分析修改类型,若是外向型修改则根据模块依赖关系得到需要重新进行语法分析的模块集合,否则将当前模块的语法分析结果直接存储到新二进制文件中,其余模块的语法分析结果从步骤
(3)
二进制文件中获取;
[0015](S3)
以模块为单位读入代码,判断当前模块是否存在于需要重新进行语法分析的模块集合中,若存在则对该模块重新进行预处理

语法分析以及模块依赖分析操作,并将得到的抽象语法树结构输出到新的二进制文件中,若不存在则从步骤
(3)
的二进制文件获取当前模块上一次语法分析结构存入新的二进制文件;
[0016](S4)

Verilog
文件中所有模块处理完毕,将更新后的模块依赖关系表结构写入新的二进制文件开头,并删除旧的二进制文件

[0017]进一步的,所述步骤
(4)
包括:分析抽象语法树结构内部是否存在模块实例化相关语句,若存在则向全局模块依赖关系表中添加相应的模块依赖关系,若不存在则继续读取下一模块代码

[0018]进一步的,所述步骤
(S1)
获取用户指定需要重编译的模块名称包括:获取
Verilog
文件首次编译得到的二进制文件头部的模块依赖关系表;根据模块依赖关系表获取依赖用户指定模块的所有模块,这些模块同用户指定模块一同构成需要重新进行语法分析的模块集合

[0019]进一步的,所述模块实例化相关语句包括:在当前模块中对其他模块进行实例化;在当前模块中直接使用其他模块名进行层次调用

[0020]进一步的,向全局模块依赖关系表中添加相应的模块依赖关系包括:从模块实例化相关语句中获得被实例化的模块名;从全局模块依赖关系表中查找被实例化的模块的依赖模块集合,将当前模块添加到该依赖集合中

[0021]进一步的,所述根据模块依赖关系表获取依赖用户指定模块的所有模块具体如下:以用户指定模块名为键,在模块依赖关系表中检索其对应的值,得到依赖用户指定模块的所有模块构成的集合

[0022]本专利技术所述的一种基于增量编译的
Verilog
语法分析系统,包括:
[0023]输入单元,包括命令行指令读取和待分析的
Verilog
代码读取,其中
Verilog
代码的读取以模块为单位进行;
[0024]选项处理单元,用于解析命令行指令中的选项参数;
[0025]预处理单元,用于对
Verilog
文件进行宏定义替换等预处理操作;
[0026]模块依赖关系分析单元,根据模块内部实例化相关语句分析
Verilog
文件的模块依赖关系;
[0027]语法分析单元,分析修改类型,根据用户输入的模块名本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于增量编译的
Verilog
语法分析方法,其特征在于,包括首次编译和再编译两个阶段;首次编译阶段对
Verilog
文件全部模块进行语法分析,包括以下步骤:
(1)
获取待分析的
Verilog
文件代码,以模块为单位读入;
(2)
对读入模块代码进行预处理,主要进行宏定义替换,并删除代码中的宏定义部分;
(3)
对预处理后的模块代码进行语法分析,得到该模块对应的抽象语法树结构,将抽象语法树结构存储到二进制文件中;
(4)
分析抽象语法树结构内部的模块依赖关系,获得模块依赖集合,存储到全局模块依赖关系表中;
(5)

Verilog
文件中所有模块都编译完毕,将得到的模块依赖关系表结构写入二进制文件开头
。2.
根据权利要求1所述的一种基于增量编译的
Verilog
语法分析方法,其特征在于,再编译阶段对
Verilog
文件中用户指定模块重新进行语法分析,包括以下步骤:
(S1)
获取用户指定需要重编译的模块名称;
(S2)
根据用户指定模块名获取相应代码,对其进行语法分析,并分析修改类型,若是外向型修改则根据模块依赖关系得到需要重新进行语法分析的模块集合,否则将当前模块的语法分析结果直接存储到新二进制文件中,其余模块的语法分析结果从步骤
(3)
二进制文件中获取;
(S3)
以模块为单位读入代码,判断当前模块是否存在于需要重新进行语法分析的模块集合中,若存在则对该模块重新进行预处理

语法分析以及模块依赖分析操作,并将得到的抽象语法树结构输出到新的二进制文件中,若不存在则从步骤
(3)
的二进制文件获取当前模块上一次语法分析结构存入新的二进制文件;
(S4)

Verilog
文件中所有模块处理完毕,将更新后的模块依赖关系表结构写入新的二进制文件开头,并删除旧的二进制文件
。3.
根据权利要求1所述的一种基于增量编译的
Verilog
语法分析方法,其特征在于,所述步骤
(4)
包括:分析抽象语法树结构内部是否存在模块实例化相关语句,若存在则向全局模块依赖关系表中添加相应的模块依赖关系,若不存在则继续读取下一模块代码
。4.
根据权利要求2所述的一种基于增量编译的
Verilog
语法分析...

【专利技术属性】
技术研发人员:陈乡栎陈钢
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1