CN116149670B - 一种基于图的hdl编译优化方法 - Google Patents
一种基于图的hdl编译优化方法 Download PDFInfo
- Publication number
- CN116149670B CN116149670B CN202310434999.XA CN202310434999A CN116149670B CN 116149670 B CN116149670 B CN 116149670B CN 202310434999 A CN202310434999 A CN 202310434999A CN 116149670 B CN116149670 B CN 116149670B
- Authority
- CN
- China
- Prior art keywords
- graph
- nodes
- hdl
- statement
- variable nodes
- 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
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
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- 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
- G06F8/42—Syntactic analysis
-
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及编译优化技术领域,具体为一种基于图的HDL编译优化方法,包括如下步骤:步骤S1、获取或者构建HDL文件;步骤S2、对HDL文件进行词法、语法分析,并通过词法、语法分析结果构建抽象语法树;步骤S3、依据抽象语法树构建图;步骤S4、在图上实施多种优化算法,得到优化后的图;步骤S5、将优化后的图转换为目标无关的中间代码;步骤S6、调用编译后端程序将中间代码转为目标机器上的可执行文件。本发明旨在解决在编译过程中优化HDL代码和硬件设计的问题,通过在编译过程中添加图优化的步骤,能够很容易的发掘出原始HDL设计中可被优化的地方,并通过在图上实施,从而达到很好的优化效果。
Description
技术领域
本发明涉及编译优化技术领域,特别涉及一种基于图的HDL编译优化方法。
背景技术
硬件设计通常都是由一系列硬件编程语言(HDL)所写的文件构成,对硬件设计的仿真方法有很多种,其中最常用的方法之一就是将其编译为可以在通用计算机上运行的可执行文件,通过运行这个可执行文件对硬件设计中描述的行为进行模拟仿真。因此,生成的可执行文件的“好”“坏”就直接影响了仿真的速度:如果生成的可执行文件中包含很多大量消耗CPU的逻辑,就会导致仿真速度变得很慢。因此,在将硬件设计编译为可执行文件的过程中,如何尽可能的消除这些大量消耗CPU的逻辑就变的极其重要。
经过几十年的发展,针对通用CPU编程语言,已经形成了大量成熟可靠的编译优化手段,如死代码消除、常量替换、循环展开等等。由于HDL自身的特殊性,如HDL的并发性、四值特点等,这些手段中有很多是不能直接应用到HDL的编译过程中的。另外,也由于HDL自身的特殊性,往往仅仅采用通用的编译优化手段不能够达到很好的优化效果。
发明内容
本发明提供了一种基于图的HDL编译优化方法,以解决现有编译优化方法优化效果不佳的技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种基于图的HDL编译优化方法,包括如下步骤:
步骤S1、获取或者构建HDL文件;
步骤S2、对HDL文件进行词法、语法分析,并通过词法、语法分析结果构建抽象语法树;
步骤S3、遍历抽象语法树,创建多个变量节点和多个语句节点,在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图;
步骤S4、对图进行优化,得到优化后的图;
步骤S5、将优化后的图转换为目标无关的中间代码;
步骤S6、调用编译后端程序,将中间代码转为目标机器上的可执行文件。
进一步地,所述步骤S3具体包括如下步骤:
步骤S31、对抽象语法树进行预处理,得到预处理后的抽象语法树;
步骤S32、遍历预处理后的抽象语法树,提取其中所有的变量,并为所有变量分别创建变量节点;
步骤S33、遍历预处理后的抽象语法树,提取其中所有的语句,并为所有的语句分别创造语句节点;
步骤S34、分析并提取步骤S32中所有变量与步骤S33中所有语句之间的依赖关系,并分别为这些依赖关系在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图。
进一步地,所述步骤S31中的预处理包括补全端口连接关系、生成层次树。
进一步地,所述步骤S4具体包含如下步骤:
步骤S41、对图进行预处理,得到预处理后的图;
步骤S42、遍历预处理后的图中所有的变量节点和所有的语句节点,并根据多个优化算法对所有的变量节点和所有的语句节点进行标记和记录;
步骤S43、检查图中所有的变量节点和所有的语句节点是否均标记完成,如果均标记完成,则进入到步骤S44,否则返回步骤S42;
步骤S44、根据标记和记录对所有的变量节点和所有的语句节点进行修改,得到优化后的图。
进一步地,所述步骤S41中的预处理包括对变量节点和/或所有语句节点进行染色。
进一步地,所述步骤S42中的多个优化算法包括always合并、module inline、循环展开、向量化、组合逻辑优化、死代码消除、语句重排、门优化、并行性分析、常量传播、常量折叠、复写传播等。
进一步地,所述步骤S5具体方法为:遍历图中所有变量节点、所有语句节点以及所有有向边,调用内部接口,为所有变量节点、所有语句节点以及所有有向边生成目标无关的中间表示代码。
本发明的有益效果:
1、本发明提出一种基于图的HDL编译优化方法,与传统编译流程相比,在抽象语法树到目标无关的中间代码之间添加了图优化的步骤,旨在解决在编译过程中更好地优化HDL代码和硬件设计的问题,通过在编译过程中添加图优化的步骤,能够很容易的发掘出原始HDL设计中可被优化的地方,并通过在图上实施,从而达到很好的优化效果。
2、本发明使用图来表示HDL设计之间的关系,更加直观,便于编译优化;同时本发明生成的图能够更方便地应用优化算法和传统编译优化手段;通过对图进行分析,也能够最大程度发现仿真过程中可并行的部分,为并行仿真提供了参考依据。
附图说明
图1为本发明的流程示意图;
图2为依据本发明实施例中的verilog代码生成的图;
图3为采用步骤S4对图进行优化后所形成的图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
参照图1,本申请实施例提供了一种基于图的HDL编译优化方法,包括如下步骤:
步骤S1、获取或者构建HDL文件;
步骤S2、对HDL文件进行词法、语法分析,并通过词法、语法分析结果构建抽象语法树;
步骤S3、遍历抽象语法树,创建多个变量节点和多个语句节点,在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图;
图构建是指将原始设计转为图表示的过程,这个过程中的输入为由原始设计得到的抽象语法树(AST),输出是原始设计的图表示。
步骤S4、对图进行优化,得到优化后的图;
步骤S5、将优化后的图转换为目标无关的中间代码;
步骤S6、调用编译后端程序,将中间代码转为目标机器上的可执行文件。
进一步地,所述步骤S3具体包括如下步骤:
步骤S31、对抽象语法树进行预处理,得到预处理后的抽象语法树;进行预处理是为了后面更方便的生成图;
步骤S32、遍历预处理后的抽象语法树,提取其中所有的变量,并为所有变量分别创建变量节点;
在仿真过程中,变量是事件的载体,所有信号变化所产生的的事件都将通过这些变量进行传播。在图中,某个变量A所对应的节点即表示A发生变化的事件。
步骤S33、遍历预处理后的抽象语法树,提取其中所有的语句,并为所有的语句分别创造语句节点;这些语句通常在仿真程序执行过程中都被表示为一个个信号变化对应的事件。
步骤S34、分析并提取步骤S32中所有变量与步骤S33中所有语句之间的依赖关系,并分别为这些依赖关系在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图。
进一步地,所述步骤S31中的预处理包括但不限于补全端口连接关系、生成层次树,经过这些预处理后的AST将包含更将丰富细节的信息。
进一步地,所述步骤S4具体包含如下步骤:
步骤S41、对图进行预处理,得到预处理后的图,以方便后面优化算法的实施;
例如:always合并算法会给无关的节点添加标记,表明这些节点是可被忽略的,这样后面的步骤中就不需要再对这些节点进行遍历了,提高了仿真效率;
步骤S42、遍历预处理后的图中所有的变量节点和所有的语句节点,并根据多个优化算法对所有的变量节点和所有的语句节点进行标记和记录;
例如:always合并算法会遍历图中所有的always语句,并对其中满足合并条件的节点进行标记和记录;
步骤S43、检查图中所有的变量节点和所有的语句节点是否均标记完成,如果均标记完成,则进入到步骤S44,否则返回步骤S42;
步骤S44、根据标记和记录对所有的变量节点和所有的语句节点进行修改,得到优化后的图。
在本实施例中,所述步骤S41中的预处理包括对变量节点和/或所有语句节点进行染色。
在本实施例中,所述步骤S42中的多个优化算法包括always合并、module inline(模块内联)、循环展开、向量化、组合逻辑优化、死代码消除、语句重排、门优化、并行性分析、常量传播、常量折叠、复写传播。
除了上述优化算法外,还可以基于此步骤实施其他的一系列基于图的优化算法,如:DAG优化、排序、染色、always拆分等。
此过程可能会增加一些节点,也可能会删除掉一些节点,也有可能只是对记录的节点的某些属性进行修改。如always合并算法会对步骤S42中记录和标记的所有变量节点、所有语句节点进行合并处理。
在本实施例中,所述步骤S5具体方法为:遍历图中所有变量节点、所有语句节点以及所有有向边,调用内部接口,为所有变量节点、所有语句节点以及所有有向边生成目标无关的中间表示代码。
本发明提出一种基于图的HDL编译优化方法,与传统编译流程相比,在抽象语法树到目标无关的中间代码之间添加了图优化的步骤,旨在解决在编译过程中更好地优化HDL代码和硬件设计的问题,通过在编译过程中添加图优化的步骤,能够很容易的发掘出原始HDL设计中可被优化的地方,并通过在图上实施,从而达到很好的优化效果。
下面对本发明进行举例说明:
本例子中verilog代码如下:
timescale 1ns / 1ps
module tb_alu;
reg [3:0] ctl;
reg [31:0] a, b;
wire [31:0] out;
wire zero;
always #1 ctl = ctl + 1;
alu dut(
.ctl(ctl),
.a(a),
.b(b),
.out(out),
.zero(zero)
);
initial begin
$monitor("time=%0d,ctl=%b,a=%h,b=%h,out=%h,zero=%b",
$time,ctl,a,b,out,zero);
ctl=4'd0;
a=32'h12345678;
b=32'habcdef98;
#20 $finish;
end
endmodule
module alu(
input [3:0] ctl,
input [31:0] a, b,
output reg [31:0] out,
output zero);
wire [31:0] sub_ab;
wire [31:0] add_ab;
wire oflow_add;
wire oflow_sub;
wire oflow;
wire slt;
assign zero = (0 == out);
assign sub_ab = a - b;
assign add_ab = a + b;
assign oflow_add = (a[31] == b[31] && add_ab[31] != a[31]) ? 1 :0;
assign oflow_sub = (a[31] == b[31] && sub_ab[31] != a[31]) ? 1 :0;
assign oflow = (ctl == 4'b0010) ? oflow_add : oflow_sub;
// set if less than, 2s compliment 32-bit numbers
assign slt = oflow_sub ? ~(a[31]) : a[31];
case (ctl)
default: out <= 0;
endcase
end
endmodule
依据上述verilog代码生成的图如附图2所示,然后采用步骤S4优化之后,所形成的图如附图3所示。可以发现经过优化后的图相比原始图简化了很多,如删除了“assignoflow”、“assign oflow_add”节点和它们关联的边,将“assign add_ab”节点内联到了“always @()”中等,除此之外,根据不同的用户配置,还可选更多不同的优化策略:如只在module内部优化、删除多余的边等。
在经过优化后,当“a”的值被修改后,不再需要计算“assign oflow_add”语句,减少了仿真过程中执行的逻辑,提升了性能。同时也能发现“always @()”节点的两条出边所指向的节点之间不存在依赖,因此可以并行计算,在仿真时就可以应用并行技术加快仿真速度。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。并且,本发明各个实施方式之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (6)
1.一种基于图的HDL编译优化方法,其特征在于:包括如下步骤:
步骤S1、获取或者构建HDL文件;
步骤S2、对HDL文件进行词法、语法分析,并依据词法、语法分析结果构建抽象语法树;
步骤S3、遍历抽象语法树,创建多个变量节点和多个语句节点,在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图;
步骤S4、对图进行优化,得到优化后的图;
所述步骤S4具体包含如下步骤:
步骤S41、对图进行预处理,得到预处理后的图;
步骤S42、遍历预处理后的图中所有的变量节点和所有的语句节点,并根据多个优化算法对所有变量节点和所有语句节点进行标记和记录;
步骤S43、检查图中所有变量节点和所有语句节点是否均标记完成,如果均标记完成,则进入到步骤S44,否则返回步骤S42;
步骤S44、根据标记和记录对所有的变量节点和所有的语句节点进行修改,得到优化后的图;
步骤S5、将优化后的图转换为目标无关的中间代码;
步骤S6、调用编译后端程序,将中间代码转为目标机器上的可执行文件。
2.根据权利要求1所述的HDL编译优化方法,其特征在于,所述步骤S3具体包括如下步骤:
步骤S31、对抽象语法树进行预处理,得到预处理后的抽象语法树;
步骤S32、遍历预处理后的抽象语法树,提取其中所有的变量,并为所有变量分别创建变量节点;
步骤S33、遍历预处理后的抽象语法树,提取其中所有的语句,并为所有的语句分别创造语句节点;
步骤S34、分析并提取步骤S32中所有变量与步骤S33中所有语句之间的依赖关系,并分别为这些依赖关系在多个变量节点和/或多个语句节点之间添加有向边,得到需要构建的图。
3.根据权利要求2所述的HDL编译优化方法,其特征在于,所述步骤S31中的预处理包括补全端口连接关系、生成层次树。
4.根据权利要求1所述的HDL编译优化方法,其特征在于,所述步骤S41中的预处理包括对变量节点和/或所有语句节点进行染色。
5.根据权利要求1所述的HDL编译优化方法,其特征在于,所述步骤S42中的多个优化算法包括always合并、module inline、循环展开、向量化、组合逻辑优化、死代码消除、语句重排、门优化、并行性分析、常量传播、常量折叠、复写传播。
6.根据权利要求1所述的HDL编译优化方法,其特征在于,所述步骤S5具体方法为:遍历图中所有变量节点、所有语句节点以及所有有向边,调用内部接口,为所有变量节点、所有语句节点以及所有有向边生成目标无关的中间表示代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310434999.XA CN116149670B (zh) | 2023-04-21 | 2023-04-21 | 一种基于图的hdl编译优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310434999.XA CN116149670B (zh) | 2023-04-21 | 2023-04-21 | 一种基于图的hdl编译优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116149670A CN116149670A (zh) | 2023-05-23 |
CN116149670B true CN116149670B (zh) | 2023-07-11 |
Family
ID=86351043
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310434999.XA Active CN116149670B (zh) | 2023-04-21 | 2023-04-21 | 一种基于图的hdl编译优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116149670B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117075909B (zh) * | 2023-10-11 | 2023-12-15 | 沐曦集成电路(南京)有限公司 | 用于实现并行编程的编译方法、电子设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812851A (en) * | 1995-03-29 | 1998-09-22 | Sun Microsystems, Inc. | Compiler with generic front end and dynamically loadable back ends |
CN111459500A (zh) * | 2020-06-17 | 2020-07-28 | 北京机电工程研究所 | 基于海鹰翼辉操作系统的安全编译方法及装置 |
CN114780100A (zh) * | 2022-04-08 | 2022-07-22 | 芯华章科技股份有限公司 | 编译方法、电子设备及存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8214814B2 (en) * | 2008-06-24 | 2012-07-03 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
US9182957B2 (en) * | 2012-07-10 | 2015-11-10 | Loring Craymer | Method and system for automated improvement of parallelism in program compilation |
US9619601B1 (en) * | 2015-01-22 | 2017-04-11 | Xilinx, Inc. | Control and data flow graph generation for hardware description languages |
US10885247B2 (en) * | 2018-01-26 | 2021-01-05 | Vmware, Inc. | Just-in-time hardware for field programmable gate arrays |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US10802806B1 (en) * | 2019-03-29 | 2020-10-13 | Advanced Micro Devices, Inc. | Generating vectorized control flow using reconverging control flow graphs |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
-
2023
- 2023-04-21 CN CN202310434999.XA patent/CN116149670B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812851A (en) * | 1995-03-29 | 1998-09-22 | Sun Microsystems, Inc. | Compiler with generic front end and dynamically loadable back ends |
CN111459500A (zh) * | 2020-06-17 | 2020-07-28 | 北京机电工程研究所 | 基于海鹰翼辉操作系统的安全编译方法及装置 |
CN114780100A (zh) * | 2022-04-08 | 2022-07-22 | 芯华章科技股份有限公司 | 编译方法、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116149670A (zh) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Balzer | Transformational implementation: An example | |
Roy et al. | NICAD: Accurate detection of near-miss intentional clones using flexible pretty-printing and code normalization | |
US6343376B1 (en) | System and method for program verification and optimization | |
Winsborough | Multiple specialization using minimal-function graph semantics | |
Pontelli et al. | Justifications for logic programs under answer set semantics | |
McAllester | On the complexity analysis of static analyses | |
Rompf et al. | Functional pearl: a SQL to C compiler in 500 lines of code | |
JP2001166949A (ja) | シンボリック実行を用いてソースコードをコンパイルするための方法及び装置 | |
Amme et al. | Data dependence analysis of assembly code | |
US8332833B2 (en) | Procedure control descriptor-based code specialization for context sensitive memory disambiguation | |
Vasconcelos | Space cost analysis using sized types | |
US20020083418A1 (en) | Case-reduced verification condition generation system and method using weakest precondition operator expressed using strongest postcondition operators | |
CN116149670B (zh) | 一种基于图的hdl编译优化方法 | |
Godlin et al. | Inference rules for proving the equivalence of recursive procedures | |
Yu et al. | Detecting java code clones based on bytecode sequence alignment | |
Cheney et al. | Database queries that explain their work | |
JP2001166946A (ja) | 階層の平坦化によりソースコードをコンパイルする方法及び装置 | |
Jacob-Rao et al. | Index-stratified types | |
Plump et al. | The semantics of graph programs | |
Henderson et al. | The Lispkit Manual | |
US20170344351A1 (en) | Information processing apparatus, compiling management method, and recording medium | |
CN109117142A (zh) | 一种基于变量关联树的基本类型重构方法 | |
KR20050065015A (ko) | 프로그램의 복제 여부를 검사하는 방법 및 시스템 | |
Beringer | Relational bytecode correlations | |
Serebrenik et al. | Inference of termination conditions for numerical loops in Prolog |
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 |