WO2023123111A1 - 编译方法以及用于编译的装置 - Google Patents

编译方法以及用于编译的装置 Download PDF

Info

Publication number
WO2023123111A1
WO2023123111A1 PCT/CN2021/142658 CN2021142658W WO2023123111A1 WO 2023123111 A1 WO2023123111 A1 WO 2023123111A1 CN 2021142658 W CN2021142658 W CN 2021142658W WO 2023123111 A1 WO2023123111 A1 WO 2023123111A1
Authority
WO
WIPO (PCT)
Prior art keywords
module
identifier
information
list
compiled
Prior art date
Application number
PCT/CN2021/142658
Other languages
English (en)
French (fr)
Inventor
林逸凡
龚辰
丁健
Original Assignee
华为技术有限公司
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 华为技术有限公司 filed Critical 华为技术有限公司
Priority to PCT/CN2021/142658 priority Critical patent/WO2023123111A1/zh
Publication of WO2023123111A1 publication Critical patent/WO2023123111A1/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Definitions

  • Embodiments of the present disclosure mainly relate to the field of chip design, and more specifically, relate to a compiling method and a compiling device.
  • HDL Hardware Description Language
  • EDA Electronic Design Automation
  • the hardware description language can only be compiled by full compilation, which leads to a long time spent in the compilation process and low compilation efficiency.
  • the embodiments of the present disclosure provide an incremental compilation solution, which avoids full compilation of all modules, shortens compilation time, and improves compilation efficiency.
  • a compiling method includes: determining module information based on a source code file of a hardware description language used for chip design; determining a first module list and a second module list based on the module information, the first module list includes at least a module identifier of a module to be compiled, The second module list includes at least the module identification of the compiled module, and the compiled module is a submodule of the module to be compiled; and incrementally compiles the module to be compiled based on the first module list and the second module list.
  • the first module list of modules to be compiled and the second module list of compiled modules can be constructed through precompilation, so that incremental compilation can be performed on the first module list, avoiding full Compile, which can shorten the compilation time and improve the compilation efficiency.
  • the module information includes first module information and second module information
  • determining the module information includes: determining the first module information by fully compiling the source code file, the first module information includes At least one of the following about at least one first module in the source code file: a module identifier, a module hash value, a submodule identifier of a module, a parent module identifier of a module, a module hierarchy, module port information, or an object code file of a module path information; obtain the modified operation for the source code file to obtain the modified source code file; and determine the second module information by precompiling the modified source code file, the first module information includes information about the modified At least one of the following items of at least one second module in the modified source code file: module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, or module port information.
  • the precompilation includes a hardware description language based compilation of the host language.
  • the embodiments of the present disclosure can obtain the first module information based on the last full compilation, and can obtain the second module information based on the precompilation of the host language, thereby facilitating the construction of the first module list and the second module list.
  • determining the first module list and the second module list based on the module information includes: determining the first module list and the second module list by comparing the first module information with the second module information list.
  • the first module list and the second module list can be determined based on this. list of modules.
  • the first module information includes the first module identifier and the corresponding first module hash value, the second module identifier and the corresponding second module hash value, and the third module identifier and the corresponding The third module hash value
  • the second module information includes the fourth module ID and the corresponding fourth module hash value, the fifth module ID and the corresponding fifth module hash value, and the sixth module ID and the corresponding Six module hashes.
  • Determining the first module list and the second module list by comparing the first module information with the second module information includes: if the first module ID is the same as the fourth module ID, and the hash value of the first module is the same as the fourth module If the hash values are different, add the fourth module ID to the first module list; if the second module ID is the same as the fifth module ID, the second module hash value is the same as the fifth module hash value, and the fifth module If the module corresponding to the identification is the parent module of the module corresponding to the third module identification, the fifth module identification is added to the first module list; and if the third module identification is the same as the sixth module identification, the third module hash value is the same as the first module identification.
  • the hash values of the six modules are the same, and the module corresponding to the sixth module identifier is a submodule of the module corresponding to the third module identifier, then the sixth module identifier is added to the second module list.
  • the module corresponding to the third module identifier is called by the parent module, and the child module is called by the module corresponding to the third module identifier.
  • incrementally compiling the module to be compiled includes: obtaining port information of the compiled module; constructing an incremental compilation environment of the module to be compiled based on at least the port information; and for the incremental compilation environment, performing Incremental compilation.
  • constructing the incremental compilation environment of the module to be compiled based at least on the port information includes: constructing an initial compilation environment of the module to be compiled; replacing the compiled module in the initial compilation environment with the port information to Build an incremental compilation environment.
  • the object code file of the compiled module is read through port information, so as to avoid incremental compilation of the compiled module.
  • the last fully compiled object code file of the compiled module is read through the port information of the compiled module, and incremental compilation of the compiled module is avoided, so that the purpose of shortening the compilation time can be achieved.
  • an apparatus for compiling includes: a first determining unit configured to determine module information based on a source code file of a hardware description language used for chip design; a second determining unit configured to determine the first module list and the second module list based on the module information A module list, the first module list includes at least the module identifier of the module to be compiled, the second module list includes at least the module identifier of the compiled module, and the compiled module is a submodule of the module to be compiled; and the compilation unit is configured to be based on the first The module list and the second module list are used for incremental compilation of the modules to be compiled.
  • the module information includes first module information and second module information
  • the first determining unit is configured to: determine the first module information by fully compiling the source code file
  • the second A module information includes at least one of the following about at least one first module in the source code file: module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, module port information, or module The path information of the object code file; obtain the modification operation for the source code file to obtain the modified source code file; and precompile the modified source code file to determine the second module information
  • the first module The information includes at least one of the following about the at least one second module in the modified source code file: a module identification, a module hash value, a submodule identification of the module, a parent module identification of the module, a module hierarchy, or module port information.
  • the precompiling comprises hardware description language based compilation of the host language.
  • the second determination unit is configured to determine the first module list and the second module list by comparing the first module information with the second module information.
  • the first module information includes the first module identifier and the corresponding first module hash value, the second module identifier and the corresponding second module hash value, and the third module identifier and the corresponding The third module hash value
  • the second module information includes the fourth module ID and the corresponding fourth module hash value, the fifth module ID and the corresponding fifth module hash value, and the sixth module ID and the corresponding Six module hash values
  • the second determination unit is configured to: if the first module identifier is the same as the fourth module identifier, and the first module hash value is not the same as the fourth module hash value, then the fourth module identifier Add to the first module list; if the second module ID is the same as the fifth module ID, the hash value of the second module is the same as the fifth module hash value, and the module corresponding to the fifth module ID is the module corresponding to the third module ID , then add the fifth module ID to the first module list; and if the third module ID is the same as the sixth module
  • the module corresponding to the third module identifier is called by the parent module, and the child module is called by the module corresponding to the third module identifier.
  • the compilation unit is configured to: obtain port information of the compiled module; construct an incremental compilation environment of the module to be compiled based on at least the port information; and perform incremental compilation for the incremental compilation environment .
  • the compiling unit is configured to: construct an initial compiling environment of the modules to be compiled; and construct an incremental compiling environment by replacing compiled modules in the initial compiling environment with port information.
  • the compilation unit is configured to read the object code file of the compiled module through port information during the incremental compilation, so as to avoid performing incremental compilation on the compiled module.
  • a computing device in a third aspect of the present disclosure, includes a processor and a memory, and the memory stores instructions executed by the processor.
  • the computing device realizes: determining module information based on a source code file of a hardware description language used for chip design ; Based on the module information, determine a first module list and a second module list, the first module list includes at least the module identifier of the module to be compiled, the second module list includes at least the module identifier of the compiled module, and the compiled module is the module to be compiled submodules; and incrementally compiling the modules to be compiled based on the first module list and the second module list.
  • the module information includes first module information and second module information
  • the computing device realizes: by fully compiling the source code file, to determine the first module Information
  • the first module information includes at least one of the following at least one first module in the source code file: module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, module port information , or the object code file path information of the module; obtain the modification operation for the source code file to obtain the modified source code file; and determine the second module information by precompiling the modified source code file
  • the first module information includes at least one of the following about at least one second module in the modified source code file: a module identifier, a module hash value, a module's submodule identifier, a module's parent module identifier, a module hierarchy, or a module port information.
  • the precompiling includes hardware description language based compilation of the host language.
  • the instructions when executed by the processor, cause the computing device to: determine the first module list and the second module list by comparing the first module information with the second module information.
  • the first module information includes the first module identifier and the corresponding first module hash value, the second module identifier and the corresponding second module hash value, and the third module identifier and the corresponding The third module hash value
  • the second module information includes the fourth module ID and the corresponding fourth module hash value, the fifth module ID and the corresponding fifth module hash value, and the sixth module ID and the corresponding Six module hashes.
  • the computing device When the instruction is executed by the processor, the computing device is enabled to implement: if the first module identification is the same as the fourth module identification, and the first module hash value is not the same as the fourth module hash value, then add the fourth module identification to the The first module list; if the second module ID is the same as the fifth module ID, the hash value of the second module is the same as that of the fifth module, and the module corresponding to the fifth module ID is the parent of the module corresponding to the third module ID module, then add the fifth module ID to the first module list; and if the third module ID is the same as the sixth module ID, the third module hash value is the same as the sixth module hash value, and the sixth module ID corresponds to If the module is a sub-module of the module corresponding to the third module identifier, the sixth module identifier is added to the second module list.
  • the module corresponding to the third module identifier is called by the parent module, and the child module is called by the module corresponding to the third module identifier.
  • the computing device when the instruction is executed by the processor, the computing device is enabled to: obtain port information of the compiled module; build an incremental compilation environment of the module to be compiled based on at least the port information; and Compilation environment for incremental compilation.
  • the computing device when the instructions are executed by the processor, the computing device is enabled to: construct an initial compilation environment of the modules to be compiled; and construct an added module by replacing the compiled modules in the initial compilation environment with port information. Quantitative compilation environment.
  • the computing device when the instruction is executed by the processor, the computing device is enabled to: read the object code file of the compiled module through the port information in the process of incremental compilation, so as to avoid Do incremental compilation.
  • a computer-readable storage medium on which computer-executable instructions are stored.
  • the computer-executable instructions are executed by a processor, the above-mentioned first aspect or its Operation of the method in any embodiment.
  • a computer program or computer program product is provided.
  • the computer program or computer program product is tangibly stored on a computer-readable medium and comprises computer-executable instructions which, when executed, implement operations according to the method in the first aspect above or any embodiment thereof.
  • Fig. 1 shows a schematic flowchart of the process of compiling according to some embodiments of the present disclosure
  • Fig. 2 shows a schematic flowchart of a process of determining module information according to some embodiments of the present disclosure
  • Fig. 3 shows a schematic flowchart of a process of incremental compilation according to some embodiments of the present disclosure
  • FIG. 4 shows a schematic block diagram of an apparatus for compiling according to an embodiment of the present disclosure.
  • Fig. 5 shows a schematic block diagram of an example device that may be used to implement embodiments of the present disclosure.
  • the term “comprising” and its similar expressions should be interpreted as an open inclusion, that is, “including but not limited to”.
  • the term “based on” should be understood as “based at least in part on”.
  • the term “one embodiment” or “the embodiment” should be read as “at least one embodiment”.
  • the terms “first”, “second”, etc. may refer to different or the same object.
  • the term “and/or” means at least one of the two items associated with it. For example "A and/or B" means A, B, or A and B. Other definitions, both express and implied, may also be included below.
  • Hardware Description Language is a language used to describe the function and behavior of digital circuits.
  • Commonly used hardware description languages include Verilog and Very High Speed Integrated Circuit HDL (VHDL).
  • VHDL Very High Speed Integrated Circuit HDL
  • high-level hardware description language refers to a high-level language (such as Scala or Python language) as the host, and high-level description language is a domain-specific language (Domain Specific Language) used to describe array circuits.
  • High-level hardware description language inherits the high-level language features of its host language, and has the same description level as hardware description language, so high-level hardware description language can be used to accurately describe hardware circuits.
  • Incremental compilation is a common compilation method in compilers. It means that when part of the source code changes, the recompilation action is limited to the modified code and its related code, without compiling all the source code.
  • the commonly used implementation method of incremental compilation is the implementation method based on the smallest compilation unit. For example, a hardware emulator uses file-based incremental compilation, which uses a file as the smallest compilation unit, and determines the scope of incremental compilation according to the change status of the source code file.
  • the compiler determines the scope of incremental compilation according to the modification information of source code files and module dependencies, and implements incremental compilation.
  • the source code file of the high-level hardware description language When the source code file of the high-level hardware description language is compiled, the source code file needs to be compiled by the compiler of its host language first, and then the compilation of the high-level hardware description language itself can be performed. This leads to the fact that the file-based incremental compilation method cannot be applied to high-level hardware description languages.
  • the compilation method of high-level hardware description language can only adopt the method of full compilation, that is to say, every time the source code file is modified, all the source code files need to be compiled, which leads to the cost of compiling process. The time is too long, affecting the compilation efficiency.
  • the embodiments of the present disclosure provide a compiling method, which can implement module-based incremental compiling based on modification information of code modules, thereby solving the problem of excessive compiling time caused by full compiling.
  • FIG. 1 shows a schematic flowchart of a compiling process 100 according to some embodiments of the present disclosure.
  • module information is determined based on the source code files of the hardware description language used for the chip design.
  • a first module list and a second module list are determined, the first module list includes at least the module identification of the module to be compiled, the second module list includes at least the module identification of the compiled module, and the compiled module is the module to be compiled. Compile the submodules of a module.
  • the modules to be compiled are incrementally compiled based on the first module list and the second module list.
  • the source code file may be generated based on a high-level hardware description language, wherein the high-level hardware description language is hosted by a high-level language (such as Scala or Python language, etc.).
  • the module information can also be called code module information or class information or other names, etc.
  • the "module" in the embodiment of the present disclosure is a user-defined software module, which is based on the code input by the user, for example, it can be compared with " A piece of code related to a class is called a "module".
  • FIG. 2 shows a schematic flowchart of a process 200 of determining module information according to some embodiments of the present disclosure.
  • the source code file is fully compiled to determine the first module information
  • the first module information includes at least one of the following at least one first module in the source code file: module identifier, module hash value, The module's submodule identifier, the module's parent module identifier, the module hierarchy, module port information, or the module's object code file path information.
  • a modification operation for the source code file is obtained to obtain a modified source code file.
  • the first module information includes at least one of the following at least one second module in the modified source code file: module identification , the hash value of the module, the child module ID of the module, the parent module ID of the module, the module hierarchy, or the module port information.
  • the user will debug the source code file through compilation to determine whether there is an error in the written code. Further, users can also partially modify the code.
  • the compiler of the high-level hardware description language can construct and obtain the first module information during the process of full compilation.
  • the first module information may also be implemented as a first module information list.
  • the first module information list may include module information of modules in the chip design project corresponding to the source code files.
  • the module information in the first module information list may include at least one of the following information about the module: module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, module port information, or module The object code file path information.
  • the module information in the first module information list may include module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, and module port information about the module.
  • the module information in the first module information list may not include the object code file path information of the module, which can simplify the information in the list and improve the processing speed.
  • the module identifier may be a module name or a module identifier. It can be understood that even if the user modifies the code in the module, the module identifier of the module will not change.
  • the module hash value may be a hash value in the form of a character string obtained after the module is serialized, for example, may be in binary form. In the process of serializing the module, the statements and expressions included in the module are sequentially serialized, and then the serialized strings of each statement and expression are synthesized to obtain the module hash value .
  • the submodule identifier may include module identifiers of other modules called by the module, such as the module name or module identifier of the called submodule.
  • the parent module identifier may include module identifiers of other modules that call the module, such as the module name or module identifier of the parent module that calls the module.
  • the module level may represent the number of nested layers of modules, for example, the module level of the top-level module may be represented as 0, the module level of the sub-modules of the top-level module may be represented as 1, and so on.
  • the module port information can represent the port information corresponding to the module, for example, it can be the hardware port information of the chip, and the port information can include one or more of port identification, port type, and port bit width, where the port identification can be Including the port name or identifier, etc., the port type can be input or output, etc., and the port bit width can be a value in bytes or bits.
  • the object code file path information may indicate the object code file corresponding to the module after full compilation.
  • precompiling in block 230 refers to host language-based compilation.
  • the compiler of the host language may be invoked to compile the modified source code file; then the front-end parser of the high-level hardware module language is invoked to perform lexical, grammatical and semantic analysis, to obtain an abstract syntax tree (Abstract Syntax Code, AST); and based on the obtained AST, the second module information can be obtained.
  • the data structure obtained through precompilation can be stored in memory, and then the front-end parser can build AST based on the data structure in memory.
  • Lexical Analysis scans a string to generate a series of tokens.
  • the tokens can include numbers, punctuation marks, operators, etc., and the tokens are independent.
  • Syntax Analysis is used to determine whether the grammatical structure is correct, and combine the flat token list into statement nodes and expression nodes according to grammatical rules, and finally form a nested syntax tree. Semantic analysis is to check the relevance of the context before and after to determine whether the semantics before and after are consistent.
  • AST is a tree structure formed by nesting different types of nodes. It can be understood that, for lexical analysis, syntax analysis, semantic analysis and AST, etc., reference may be made to related descriptions in the prior art, and details will not be repeated in the present disclosure.
  • the second module information may also be implemented as a second module information list.
  • the second module information list may include module information related to modules in the modified source code file.
  • the module information may include at least one of the following information about the module: module identifier, module hash value, submodule identifier of the module, parent module identifier of the module, module hierarchy, or port information of the module.
  • the first module list and the second module list may be determined through a comparison between the first module information and the second module information. Specifically, it can be determined which modules have been modified through the comparison, so that the modified modules are added to the first module list. Further, if the submodule of the modified module has not been modified, it is added to the second module list.
  • the first module information includes the first module identifier and the corresponding first module hash value, the second module identifier and the corresponding second module hash value, and the third module identifier and the corresponding third module hash value.
  • the second module information includes a fourth module identifier and a corresponding fourth module hash value, a fifth module identifier and a corresponding fifth module hash value, and a sixth module identifier and a corresponding sixth module hash value. Then, if the first module identifier is the same as the fourth module identifier, and the first module hash value is not the same as the fourth module hash value, then add the fourth module identifier to the first module list.
  • the hash value of the second module is the same as the fifth module hash value
  • the module corresponding to the fifth module ID is the parent module of the module corresponding to the third module ID
  • the Five module identifications are added to the first module list.
  • the third module ID is the same as the sixth module ID
  • the hash value of the third module is the same as the sixth module hash value
  • the module corresponding to the sixth module ID is a sub-module of the module corresponding to the third module ID
  • the Six modules identify the addition of a second module list.
  • the first module information may be compared with the second module information by using the first iteration pointer, and an initial first module list may be constructed according to the comparison result.
  • the first module information is realized as a first module information list including a plurality of first data items.
  • the second module information is realized as a second module information list including a plurality of second data items. Then building the initial first module list can include:
  • the second iteration pointer may be used to obtain an updated first module list and a second module list on the basis of the initial first module list. Assume that the initial first module list includes a plurality of third data items. Then obtaining the first module list and the second module list may include:
  • the object code file obtained from the previous full compilation may also be updated. For example, if a certain module exists in the first module information list but not in the second module information list, based on the object code file path information of the module in the first module information list, the target associated with the module Code files are partially deleted. For example, when the user modifies the source code file, some of the modules may be deleted.
  • the first module information list includes the first data item whose module identifier is C, but any If the module identification of the second data item is not C, then the part of the object code file corresponding to module C can be deleted, thereby realizing the updating of the object code file.
  • the embodiments of the present disclosure determine the first module list and the second module list through the comparison between the first module information and the second module information, the modified module is indicated by the first module list, and the modified module is indicated by the second module list Indicates unmodified submodules of the modules in the first module list. In this way, the incremental compilation of the modules in the first module list can be implemented based on this.
  • an incremental compilation environment may be constructed based on the first module information list, the first module list and the second module list, and further incremental compilation is performed on the modules in the first module list.
  • FIG. 3 shows a schematic flowchart of a process 300 of incremental compilation according to some embodiments of the present disclosure.
  • port information for the compiled module is obtained.
  • an incremental compilation environment of the module to be compiled is constructed based at least on the port information.
  • port information of the compiled modules may be obtained from the first module information list or from the second module information list.
  • an initial compilation environment of modules to be compiled may be constructed based on the first module list; and an incremental compilation environment may be constructed by replacing compiled modules in the initial compilation environment with port information.
  • port information of compiled modules in the second module list may be obtained from the first or second module information list, and module codes of the compiled modules may be further determined.
  • the compiler can traverse the compiled modules in the second module list, read the port information of the compiled modules, and print the generated module codes to the specified file according to the code format of the high-level hardware description language . For example, for a compiled module, assume that the module information of the compiled module in the first module information list is:
  • the second module list in the embodiments of the present disclosure may be called a black-box compilation list or a black-box compilation list, and correspondingly, the compiled modules in the second module list may be called black-box modules.
  • the high-level hardware description language provides an interface for interacting with the traditional hardware description language.
  • the high-level hardware description language can call the traditional hardware description language through such an interface.
  • such an interface can be called a black box interface.
  • modules of traditional hardware description languages can be called black-box modules.
  • the hardware description language file corresponding to the black box module of the traditional hardware description language can be indexed under the file path of full compilation. In this way, these compiled modules can be shielded, the compilation chain can be cut, and the compilation time can be shortened.
  • a build script for incremental compilation may be created, and the code files corresponding to the compiled modules in the second module list may be introduced therein.
  • a top-level module all modules to be compiled in the first module list are sequentially invoked in the top-level module. In this way, by compiling the top-level module in the incremental compilation environment, incremental compilation of the module to be compiled can be realized. It can be understood that during the incremental compilation process, the object code file of the compiled module is read through the port information, so as to avoid incremental compilation of the compiled module. And it can be understood that the new object code file obtained through the incremental compilation can replace the corresponding object code file obtained by the last full compilation.
  • the first module list of modules to be compiled and the second module list of compiled modules can be constructed through precompilation, so that incremental compilation can be performed on the first module list, avoiding full Compilation, which can shorten the compilation time, improve compilation efficiency, and further improve the efficiency of hardware development and verification in high-level hardware description languages.
  • Fig. 4 shows a schematic block diagram of an apparatus 400 for compiling according to an embodiment of the present disclosure.
  • the device 400 may be implemented by software, hardware or a combination of both.
  • the apparatus 400 may be implemented as a computing device, an electronic device, or the like.
  • the apparatus 400 includes a first determining unit 410 , a second determining unit 420 and a compiling unit 430 .
  • the first determination unit 410 is configured to determine the module information based on the source code file of the hardware description language used for chip design;
  • the second determination unit 420 is configured to determine the first module list and the second module list based on the module information, the second A module list includes at least module identifiers of modules to be compiled, and a second module list includes at least module identifiers of compiled modules, which are submodules of the module to be compiled.
  • the compiling unit 430 is configured to incrementally compile the modules to be compiled based on the first module list and the second module list.
  • the module information includes first module information and second module information.
  • the first determining unit 410 may be configured to: determine the first module information by fully compiling the source code file, and the first module information includes at least one of the following items about at least one first module in the source code file: module identification , the module hash value, the submodule identifier of the module, the parent module identifier of the module, the module hierarchy, the module port information, or the object code file path information of the module; the acquisition is used to modify the source code file to obtain the modified source code file; and by precompiling the modified source code file to determine the second module information, the first module information includes at least one of the following at least one second module in the modified source code file: module ID, module hash value, submodule ID of a module, parent module ID of a module, module hierarchy, or module port information.
  • the precompilation includes compilation of a host language based on a hardware description language.
  • the second determination unit 420 may be configured to determine the first module list and the second module list by comparing the first module information with the second module information.
  • the first module information includes the first module identifier and the corresponding first module hash value, the second module identifier and the corresponding second module hash value, and the third module identifier and the corresponding third module hash value
  • the second module information includes the fourth module identifier and the corresponding fourth module hash value, the fifth module identifier and the corresponding fifth module hash value, and the sixth module identifier and the corresponding sixth module hash value.
  • the second determining unit 420 may be configured to: if the first module identifier is the same as the fourth module identifier, and the hash value of the first module is different from the hash value of the fourth module, then add the fourth module identifier to the first module list; if the second module ID is the same as the fifth module ID, the hash value of the second module is the same as the fifth module hash value, and the module corresponding to the fifth module ID is the parent module of the module corresponding to the third module ID, then adding the fifth module identification to the first module list; and if the third module identification is the same as the sixth module identification, the third module hash value is the same as the sixth module hash value, and the module corresponding to the sixth module identification is the first module identification If the sub-modules of the modules corresponding to the three module identifiers are used, the sixth module identifier is added to the second module list.
  • the module corresponding to the third module identifier is called by the parent module
  • the child module is called by the module corresponding to
  • the compilation unit 430 may be configured to: obtain port information of the compiled module; at least based on the port information, construct an incremental compilation environment of the module to be compiled; and perform incremental compilation for the incremental compilation environment.
  • the compiling unit 430 may be configured to: construct an initial compiling environment of modules to be compiled; and construct an incremental compiling environment by replacing compiled modules in the initial compiling environment with port information.
  • the compilation unit 430 may be configured to read the object code file of the compiled module through the port information during the incremental compilation, so as to avoid performing incremental compilation on the compiled module.
  • the division of modules or units in the embodiments of the present disclosure is schematic, and is only a logical function division. In actual implementation, there may be other division methods.
  • the functional units in the disclosed embodiments can be integrated In one unit, it may exist separately, or two or more units may be integrated into one unit.
  • the above-mentioned integrated units can be implemented in the form of hardware or in the form of software functional units.
  • the device 400 in FIG. 4 can be used to implement the processes described above in conjunction with FIGS. 1 to 3 , and for the sake of brevity, details are not repeated here.
  • Fig. 5 shows a schematic block diagram of an example device 500 that may be used to implement embodiments of the present disclosure.
  • the device 500 may be implemented as a computing device, or may include the apparatus 400 as shown in FIG. 4 .
  • the device 500 includes a central processing unit (Central Processing Unit, CPU) 501, a read-only memory (Read-Only Memory, ROM) 502, and a random access memory (Random Access Memory, RAM) 503.
  • the CPU 501 can perform various appropriate actions and processes according to computer program instructions stored in the RAM 502 and/or RAM 503 or loaded from the storage unit 508 into the ROM 502 and/or RAM 503.
  • various programs and data necessary for the operation of the device 500 can also be stored.
  • the CPU 501 and the ROM 502 and/or RAM 503 are connected to each other via a bus 504.
  • An input/output (I/O) interface 505 is also connected to the bus 504 .
  • the I/O interface 505 includes: an input unit 506, such as a keyboard, a mouse, etc.; an output unit 507, such as various types of displays, speakers, etc.; a storage unit 508, such as a magnetic disk, an optical disk, etc. ; and a communication unit 509, such as a network card, a modem, a wireless communication transceiver, and the like.
  • the communication unit 509 allows the device 500 to exchange information/data with other devices over a computer network such as the Internet and/or various telecommunication networks.
  • CPU 501 may be various general and/or special purpose processing components having processing and computing capabilities. Some examples that can be implemented as include, but are not limited to, Graphics Processing Unit (Graphics Processing Unit, GPU), various dedicated artificial intelligence (Artificial Intelligence, AI) computing chips, various computing units that run machine learning model algorithms, digital signal A processor (Digital Signal Processor, DSP), and any suitable processor, controller, microcontroller, etc., may accordingly be referred to as a computing unit.
  • the CPU 501 executes the various methods and processes described above, such as the processes 100 to 300.
  • the various processes described above may be implemented as a computer software program tangibly embodied on a computer-readable medium, such as storage unit 508 .
  • part or all of the computer program may be loaded and/or installed on the device 500 via the ROM 502 and/or RAM 503 and/or the communication unit 509.
  • a computer program When a computer program is loaded into ROM 502 and/or RAM 503 and executed by CPU 501, one or more steps of the process described above may be performed.
  • the CPU 501 may be configured in any other appropriate manner (for example, by means of firmware) to execute the various processes described above.
  • the apparatus 500 in FIG. 5 may be implemented as a computing device, or may be implemented as a chip or a chip system in the computing device, which is not limited by the embodiments of the present disclosure.
  • An embodiment of the present disclosure also provides a computing device, including a memory and a processor, where computer instructions or computer programs are stored in the memory.
  • the computer instructions or computer programs in the memory when executed by the processor, enable the computing device to implement the various processes described above.
  • Embodiments of the present disclosure also provide a chip, which may include an input interface, an output interface, and a processing circuit.
  • a chip which may include an input interface, an output interface, and a processing circuit.
  • the interaction of signaling or data may be completed by the input interface and the output interface, and the generation and processing of signaling or data information may be completed by the processing circuit.
  • Embodiments of the present disclosure also provide a chip system, including a processor, configured to support a computing device to implement the functions involved in any of the foregoing embodiments.
  • the system-on-a-chip may further include a memory for storing necessary program instructions and data, and when the processor runs the program instructions, the device installed with the system-on-a-chip can implement the program described in any of the above-mentioned embodiments.
  • the chip system may consist of one or more chips, and may also include chips and other discrete devices.
  • Embodiments of the present disclosure further provide a processor, configured to be coupled with a memory, where instructions are stored in the memory, and when the processor executes the instructions, the processor executes the methods and functions involved in any of the foregoing embodiments.
  • Embodiments of the present disclosure also provide a computer program product containing instructions, which, when run on a computer, cause the computer to execute the methods and functions involved in any of the above embodiments.
  • Embodiments of the present disclosure also provide a computer-readable storage medium on which computer instructions are stored, and when a processor executes the instructions, the processor is made to execute the methods and functions involved in any of the above embodiments.
  • the various embodiments of the present disclosure may be implemented in hardware or special purpose circuits, software, logic or any combination thereof. Some aspects may be implemented in hardware, while other aspects may be implemented in firmware or software, which may be executed by a controller, microprocessor or other computing device. While various aspects of the embodiments of the present disclosure are shown and described as block diagrams, flowcharts, or using some other pictorial representation, it should be understood that the blocks, devices, systems, techniques or methods described herein can be implemented as, without limitation, Exemplary, hardware, software, firmware, special purpose circuits or logic, general purpose hardware or controllers or other computing devices, or some combination thereof.
  • the present disclosure also provides at least one computer program product tangibly stored on a non-transitory computer-readable storage medium.
  • the computer program product comprises computer-executable instructions, eg included in program modules, which are executed in a device on a real or virtual processor of a target to perform the process/method as above with reference to the accompanying drawings.
  • program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types.
  • the functionality of the program modules may be combined or divided as desired among the program modules.
  • Machine-executable instructions for program modules may be executed within local or distributed devices. In a distributed device, program modules may be located in both local and remote storage media.
  • Computer program codes for implementing the methods of the present disclosure may be written in one or more programming languages. These computer program codes can be provided to processors of general-purpose computers, special-purpose computers, or other programmable data processing devices, so that when the program codes are executed by the computer or other programmable data processing devices, The functions/operations specified in are implemented.
  • the program code may execute entirely on the computer, partly on the computer, as a stand-alone software package, partly on the computer and partly on a remote computer or entirely on the remote computer or server.
  • computer program code or related data may be carried by any suitable carrier to enable a device, apparatus or processor to perform the various processes and operations described above.
  • carriers include signals, computer readable media, and the like.
  • signals may include electrical, optical, radio, sound, or other forms of propagated signals, such as carrier waves, infrared signals, and the like.
  • a computer readable medium may be any tangible medium that contains or stores a program for or related to an instruction execution system, apparatus, or device.
  • the computer readable medium may be a computer readable signal medium or a computer readable storage medium.
  • a computer readable medium may include, but is not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination thereof. More detailed examples of computer-readable storage media include electrical connections with one or more wires, portable computer diskettes, hard disks, random storage access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM or flash), optical storage, magnetic storage, or any suitable combination thereof.

Abstract

本公开的实施例提供了一种编译方法以及用于编译的装置。该方法包括:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。以此方式,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率。

Description

编译方法以及用于编译的装置 技术领域
本公开的实施例主要涉及芯片设计领域,更具体地,涉及一种编译方法以及用于编译的装置。
背景技术
在芯片制造过程中,一般都先使用硬件描述语言(Hardware Description Language,HDL)在高层次(诸如寄存器级)上写逻辑,随后再使用电子设计自动化(Electronic Design Automation,EDA)软件将硬件描述语言翻译成底层(诸如门级)的网表。网表在经过仿真确认没有问题之后,才会被经过各种加工工艺制造芯片。可见,硬件描述语言是芯片制造的基础之一,因此硬件描述语言的成功编译和运行是芯片制造的前提。
目前只能通过全量编译的方式来对硬件描述语言进行编译,这样导致了编译过程所花费的时间过长,编译效率低。
发明内容
本公开的实施例提供了一种增量编译的方案,避免对所有的模块进行全量编译,能够缩短编译的时间,提升编译效率。
在本公开的第一方面,提供了一种编译方法。该方法包括:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
如此,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率。
在第一方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,并且确定模块信息包括:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第一方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
如此,本公开的实施例可以基于上一次的全量编译得到第一模块信息,并且可以基于宿主语言的预编译得到第二模块信息,从而能够便于构建第一模块列表和第二模块列表。
在第一方面的一些实施例中,基于模块信息确定第一模块列表和第二模块列表包括:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
如此,通过第一模块信息和第二模块信息之间的比较,从而能够确定哪些模块被修改并确定被修改的模块的哪些子模块未被修改,从而能够基于此确定第一模块列表和第二模块列表。
在第一方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。通过第一模块信息与第二模块信息之间的比较以确定第一模块列表和第二模块列表包括:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
如此,本公开的实施例中通过模块哈希值的比较来确定模块是否被修改,并且还可以考虑父模块、子模块等模块之间的关系来进一步完善第一模块列表和第二模块列表。
在第一方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第一方面的一些实施例中,对待编译模块进行增量编译包括:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第一方面的一些实施例中,至少基于端口信息构建待编译模块的增量编译环境包括:构建待编译模块的初始编译环境;通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第一方面的一些实施例中,在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
如此,通过已编译模块的端口信息来读取已编译模块的的上一次全量编译的目标代码文件,避免对已编译模块进行增量编译,从而能够达到缩短编译时间的目的。
在本公开的第二方面,提供了一种用于编译的装置。该装置包括:第一确定单元,被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;第二确定单元,被配置为基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及编译单元,被配置为基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在第二方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,并且其中第一确定单元被配置为:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经 修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第二方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
在第二方面的一些实施例中,第二确定单元被配置为:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
在第二方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,并且第二确定单元被配置为:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
在第二方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第二方面的一些实施例中,编译单元被配置为:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第二方面的一些实施例中,编译单元被配置为:构建待编译模块的初始编译环境;以及通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第二方面的一些实施例中,编译单元被配置为:在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
在本公开的第三方面,提供了一种计算设备。该计算设备包括处理器以及存储器,存储器上存储有由处理器执行的指令,当指令被处理器执行时使得该计算设备实现:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在第三方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,当指令被处理器执行时使得该计算设备实现:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第三方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
在第三方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。当指令被处理器执行时使得该计算设备实现:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
在第三方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:构建待编译模块的初始编译环境;通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
在本公开的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现根据上述第一方面或其任一实施例中的方法的操作。
在本公开的第五方面,提供了一种计算机程序或计算机程序产品。该计算机程序或计算机程序产品被有形地存储在计算机可读介质上并且包括计算机可执行指令,计算机可执行指令在被执行时实现根据上述第一方面或其任一实施例中的方法的操作。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了根据本公开的一些实施例的编译的过程的示意流程图;
图2示出了根据本公开的一些实施例的确定模块信息的过程的示意流程图;
图3示出了根据本公开的一些实施例的增量编译的过程的示意流程图;
图4示出了根据本公开的实施例的用于编译的装置的示意框图;以及
图5示出了可以用来实施本公开的实施例的示例设备的示意性框图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。术语“和/或”表示由其关联的两项的至少一项。例如“A和/或B”表示A、B、或者A和B。下文还可能包括其他明确的和隐含的定义。
硬件描述语言(Hardware Description Language,HDL)是用于描述数字电路功能及行为的语言,常用的硬件描述语言包括verilog和超高速集成电路硬件描述语言(Very High Speed Integrated Circuit HDL,VHDL)。相对于HDL而言,高层次硬件描述语言是指以高级语言(如Scala或Python语言等)为宿主,且高层次描述语言是用于描述数组电路的领域专用语言(Domain Specific Language)。高层次硬件描述语言继承了其宿主语言的高级语言特性,同时与硬件描述语言有相同的描述层级,因此高层次硬件描述语言可用于精确描述硬件电路。
增量编译是编译器中常见的一种编译方式。其是指当源程序代码中的部分代码发生改变后,重新编译的动作只限于修改的代码及与之相关的代码,而无需对所有源代码进行编译。在软件开发和调试期间,通过增量编译可极大缩短编译时间,提高软件开发和调试的效率。增量编译常用的实现方法是基于最小编译单元的实现方法。例如硬件仿真器使用的是基于文件的增量编译,其将文件作为最小编译单元,根据源代码文件的改动状态来确定增量编译范围。在增量编译的过程中,编译器根据源代码文件的修改信息和模块依赖关系,确定增量编译范围,实施增量编译。
在高层次硬件描述语言的源代码文件进行编译时,源代码文件需要先经过其宿主语言的编译器的编译,然后才能执行高层次硬件描述语言本身的编译。这样导致基于文件的增量编译方法不能被应用于高层次硬件描述语言。目前对于高层次硬件描述语言的编译方式只能采用全量编译的方式,也就是说,每一次对源代码文件的修改,都需要对所有的源代码文件全部执行编译,这样导致了编译过程所花费的时间过长,影响编译效率。
有鉴于此,本公开的实施例提供了一种编译方法,能够基于代码模块的修改信息,实现对基于模块的增量编译,从而解决了因全量编译造成的编译时间过长的问题。
图1示出了根据本公开的一些实施例的编译的过程100的示意流程图。
在框110,基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息。
在框120,基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块。
在框130,基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在本公开的实施例中,源代码文件可以是基于高层次硬件描述语言而生成的,其中高层 次硬件描述语言以高级语言(诸如Scala或Python语言等)为宿主。模块信息也可以被称为代码模块信息或者类信息或者其他的名称等,本公开实施例中的“模块”(module)是用户定义的软件模块,其基于用户输入的代码,例如可以将与“类”相关的一段代码称为“模块”。
图2示出了根据本公开的一些实施例的确定模块信息的过程200的示意流程图。
在框210,通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息。
在框220,获取用于针对源代码文件的修改操作,以得到经修改的源代码文件。
在框230,通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
具体而言,用户编写高层次硬件描述语言的源代码文件的过程中,会通过编译来对源代码文件进行调试,确定编写的代码是否存在错误。进一步地,用户还可以对代码进行部分修改。
在一些实施例中,高层次硬件描述语言的编译器可以在全量编译的过程中构建并得到第一模块信息。可选地,第一模块信息也可以被实现为第一模块信息列表。第一模块信息列表中可以包括与源代码文件对应的芯片设计工程中的模块的模块信息。第一模块信息列表中的模块信息可以包括关于模块的以下信息中至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息。举例而言,第一模块信息列表中的模块信息可以包括关于模块的模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、以及模块端口信息。可选地,第一模块信息列表中的模块信息可以不包括模块的目标代码文件路径信息,这样能够简化列表中的信息,提升处理速度。
示例性地,模块标识可以为模块名称或模块标识符,可理解,即使用户对模块中的代码进行修改,该模块的模块标识也不改变。示例性地,模块哈希值可以是将模块进行序列化之后所得到的字符串形式的哈希值,例如可以为二进制的形式。在对模块进行序列化的过程中,将模块中所包括的语句和表达式等依次地进行序列化,随后将各个语句和表达式的序列化后的字符串进行合成,从而得到模块哈希值。示例性地,子模块标识可以包括该模块所调用的其他模块的模块标识,例如所调用的子模块的模块名称或模块标识符等。示例性地,父模块标识可以包括调用该模块的其他模块的模块标识,例如调用该模块的父模块的模块名称或模块标识符等。示例性地,模块层级可以表示模块被嵌套的层数,例如可以将顶层模块的模块层级表示为0,将顶层模块的子模块的模块层级表示为1,以此类推,等等。示例性地,模块端口信息可以表示该模块对应的端口信息,例如可以为芯片的硬件端口信息,该端口信息可以包括端口标识、端口类型、端口位宽中的一个或多个,其中端口标识可以包括端口名称或标识符等,端口类型可以为输入或输出等,端口位宽可以是以字节或比特为量纲的数值。示例性地,目标代码文件路径信息可以指示该模块经全量编译所对应的目标代码文件。
在一些实施例中,框230中的预编译是指基于宿主语言的编译。在一些示例中,针对经修改的源代码文件,可以调用宿主语言的编译器对经修改的源代码文件进行编译;随后调用高层次硬件模块语言的前端解析器,进行词法、语法和语义分析,以得到抽象语法树(Abstract  Syntax Code,AST);并且可以基于得到的AST,得到第二模块信息。可选地,通过预编译得到的数据结构可以被存储在内存中,随后前端解析器可以基于内存中的数据结构构建AST。
词法分析(Lexical Analysis)是通过对字符串进行扫描以生成一系列的词法单元(tokens),词法单元可以包括数字、标点符号、运算符等,并且词法单元之间都是独立的。语法分析(Syntax Analysis)用于确定语法结构是否无误,并按照语法规则将扁平的token列表,组合成一个个声明语句节点、表达式节点,最终形成嵌套结构的语法树。语义分析是进行上下文前后相关性的检查,以确定前后的语义是否一致。AST是由不同类型的节点通过相互嵌套而构成的树形结构。可理解,关于词法分析、语法分析、语义分析和AST等可以参照已有技术中的相关描述,本公开中不再赘述。
可选地,第二模块信息也可以被实现为第二模块信息列表。第二模块信息列表中可以包括与经修改后的源代码文件中的模块的模块信息。模块信息可以包括关于模块的以下信息中至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块的端口信息。
在本公开的一些实施例中,可以通过第一模块信息和第二模块信息之间的比较,来确定第一模块列表和第二模块列表。具体而言,通过比较可以确定哪些模块被进行了修改,从而将已修改的模块添加到第一模块列表。进一步地,如果被修改的模块的子模块未被修改,则添加到第二模块列表。
举例而言,假设第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值。假设第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。那么,如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表。如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表。如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
可选地,在一些实施例中,可以利用第一迭代指针将第一模块信息和第二模块信息进行比较,并且可以根据比较的结果来构建初始第一模块列表。假设第一模块信息被实现为第一模块信息列表,该第一模块信息列表包括多个第一数据项。假设第二模块信息被实现为第二模块信息列表,该第二模块信息列表包括多个第二数据项。那么构建初始第一模块列表可以包括:
(1-1),将第一迭代指针指向第二模块信息列表中的第一个第二数据项,再执行(1-2)。
(1-2),针对第一迭代指针所指向的第二数据项,基于该第二数据项的模块标识,确定在第一模块信息列表中是否存在相同模块标识的第一数据项。如果有,则执行(1-3)。如果没有,则执行(1-4)。
(1-3),针对该第二数据项的模块标识,确定在第二模块信息列表中对应的第二模块哈希值与在第一模块信息列表中对应的第一模块哈希值是否相同。如果不相同,则执行(1-4)。如果相同,则执行(1-5)。
(1-4),将第一迭代指针所指向的第二数据项的模块标识添加到初始第一模块列表中,再执行(1-5)。
(1-5),确定第一迭代指针是否指向第二模块信息列表中的最后一个第二数据项。如果是,该过程结束。如果否,则将第一迭代指针加1,再执行(1-2)。
可选地,在一些实施例中,可以利用第二迭代指针,在初始第一模块列表的基础上,得到更新的第一模块列表,并得到第二模块列表。假设初始第一模块列表中包括多个第三数据项。那么得到第一模块列表和第二模块列表可以包括:
(2-1),将第二迭代指针指向初始第一模块列表中的第一个第三数据项,再执行(2-2)。
(2-2),针对第二迭代指针所指向的第三数据项,从第二模块信息列表中获取对应的子模块标识,执行(2-3)。
(2-3),遍历对应的子模块标识,对于每个子模块标识,确定是否存在于初始第一模块列表中。如果有,则继续下一个子模块标识。如果没有,将子模块标识添加到第二模块列表中,执行(2-4)。
(2-4),针对第二迭代指针所指向的第三数据项,从第二模块信息列表中获取对应的父模块标识,执行(2-6)。
(2-6),遍历对应的父模块标识,对于每个父模块标识,确定是否存在于初始第一模块列表中。如果有,则继续下一个父模块标识。如果没有,将父模块标识添加到初始第一模块列表中,以更新初始第一模块列表,执行(2-7)。
(2-7),确定第二迭代指针是否指向第二模块信息列表中的最后一个第三数据项。如果是,该过程结束。如果否,则将第二迭代指针加1,再执行(2-2)。
可选地,在一些实施例中,在该比较过程中,还可以对前一次全量编译所得到的目标代码文件进行更新。例如,如果某个模块存在于第一模块信息列表中但是不存在于第二模块信息列表中,则可以基于第一模块信息列表中该模块的目标代码文件路径信息,将与该模块关联的目标代码文件部分删除。举例而言,用户在对源代码文件进行修改时,可能会将其中的部分模块删除,例如第一模块信息列表中包括模块标识为C的第一数据项,但是第二模块信息列表中任一第二数据项的模块标识都不为C,则可以将模块C对应的那一部分目标代码文件删除,从而实现了对于目标代码文件的更新。
如此,本公开的实施例通过第一模块信息和第二模块信息之间的比较来确定第一模块列表和第二模块列表,通过第一模块列表来指示被修改的模块,通过第二模块列表指示未被修改的、第一模块列表中的模块的子模块。如此,能够使得基于此实现对于第一模块列表中的模块的增量编译。
在本公开的一些实施例中,可以基于第一模块信息列表、第一模块列表和第二模块列表构建增量编译环境,并进一步地对第一模块列表中的模块进行增量编译。图3示出了根据本公开的一些实施例的增量编译的过程300的示意流程图。
在框310,获取已编译模块的端口信息。
在框320,至少基于端口信息,构建待编译模块的增量编译环境。
在框330,针对增量编译环境,进行增量编译。
具体而言,在框310,针对第二模块列表中的已编译模块,可以从第一模块信息列表中或者从第二模块信息列表中获取已编译模块的端口信息。
示例性地,在框320,可以基于第一模块列表构建待编译模块的初始编译环境;并且通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。具体而言,可以从第一或第二模块信息列表中获取第二模块列表中的已编译模块的端口信息,并进一步确定已编译模块的模块代码。通过将第一模块列表中的待编译模块和已确定的已编译模块的模块代码进行整合,生成相应的增量编译的工作目录以及顶层调用模块,从而建立增量编译环境。
在一些示例中,编译器可以遍历第二模块列表中的已编译模块,读取该已编译模块的端口信息,按照该高层次硬件描述语言的代码的格式将生成的模块代码打印到指定文件中。举例而言,针对某已编译模块,假设在第一模块信息列表中该已编译模块的模块信息为:
Figure PCTCN2021142658-appb-000001
可选地,本公开实施例中的第二模块列表可以被称为黑盒编译列表或黑盒编译清单,相应地,第二模块列表中的已编译模块可以被称为黑盒模块。高层次硬件描述语言中提供了与传统硬件描述语言相互交互的接口,高层次硬件描述语言能够通过这样的接口来调用传统硬件描述语言,可选地,这样的接口可以被称为黑盒接口,相应地,传统硬件描述语言的模块可以被称为黑盒模块。如此,在本公开的实施例中,可以在全量编译的文件路径下索引到传统硬件描述语言的黑盒模块对应的硬件描述语言文件。从而能够屏蔽这些已编译模块,裁剪编译链,达到缩短编译时间的目的。
针对第一模块列表中的待编译模块,可以创建增量编译的构建脚本,在其中引入第二模块列表中的已编译模块对应的代码文件。通过创建顶层模块,使得在顶层模块中依次调用所有第一模块列表中的待编译模块。如此,通过对增量编译环境中的顶层模块进行编译,能够实现对于待编译模块的增量编译。可理解,在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。并且可理解,通过该增量编译所得到的新的目标代码文件可以替换上一次全量编译所得到的对应的目标代码文件。
如此,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率,进一步地也能够提升高层次硬件描述语言进行硬件开发和验证的效率。
应理解,在本公开的实施例中,“第一”,“第二”,“第三”等只是为了表示多个对象可能是不同的,但是同时不排除两个对象之间是相同的。“第一”,“第二”,“第三”等不应当解释为对本公开实施例的任何限制。
还应理解,本公开的实施例中的方式、情况、类别以及实施例的划分仅是为了描述的方便,不应构成特别的限定,各种方式、类别、情况以及实施例中的特征在符合逻辑的情况下,可以相互结合。
还应理解,上述内容只是为了帮助本领域技术人员更好地理解本公开的实施例,而不是要限制本公开的实施例的范围。本领域技术人员根据上述内容,可以进行各种修改或变化或组合等。这样的修改、变化或组合后的方案也在本公开的实施例的范围内。
还应理解,上述内容的描述着重于强调各个实施例之前的不同之处,相同或相似之处可以互相参考或借鉴,为了简洁,这里不再赘述。
图4示出了根据本公开的实施例的用于编译的装置400的示意框图。装置400可以通过软件、硬件或者两者结合的方式实现。在一些实施例中,装置400可以为实现为计算设备、电子设备等。
如图4所示,装置400包括第一确定单元410、第二确定单元420以及编译单元430。第一确定单元410被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;第二确定单元420被配置为基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块。编译单元430被配置为基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
模块信息包括第一模块信息和第二模块信息。第一确定单元410可以被配置为:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。可选地,预编译包括基于硬件描述语言的宿主语言的编译。
在一些实施例中,第二确定单元420可以被配置为通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
举例而言,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。第二确定单元420可以被配置为:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在一些实施例中,编译单元430可以被配置为:获取已编译模块的端口信息;至少基于 端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。编译单元430可以被配置为:构建待编译模块的初始编译环境;以及通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。示例性地,编译单元430可以被配置为在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
本公开的实施例中对模块或单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时也可以有另外的划分方式,另外,在公开的实施例中的各功能单元可以集成在一个单元中,也可以是单独物理存在,也可以两个或两个以上单元集成为一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
图4中的装置400能够用于实现上述结合图1至图3中所述的各个过程,为了简洁,这里不再赘述。
图5示出了可以用来实施本公开的实施例的示例设备500的示意性框图。设备500可以被实现为计算设备,或者可以包括如图4所示的装置400。
如图所示,设备500包括中央处理单元(Central Processing Unit,CPU)501、只读存储器(Read-Only Memory,ROM)502以及随机存取存储器(Random Access Memory,RAM)503。CPU 501可以根据存储在RAM 502和/或RAM 503中的计算机程序指令或者从存储单元508加载到ROM 502和/或RAM 503中的计算机程序指令,来执行各种适当的动作和处理。在ROM 502和/或RAM 503中,还可存储设备500操作所需的各种程序和数据。CPU 501和ROM 502和/或RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
CPU 501可以是各种具有处理和计算能力的通用和/或专用处理组件。可以被实现为的一些示例包括但不限于图形处理单元(Graphics Processing Unit,GPU)、各种专用的人工智能(Artificial Intelligence,AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(Digital Signal Processor,DSP)、以及任何适当的处理器、控制器、微控制器等,相应地可以被称为计算单元。CPU 501执行上文所描述的各个方法和处理,例如过程100至300。例如,在一些实施例中,上文所描述的各个过程可被实现为计算机软件程序,其被有形地包含于计算机可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或RAM 503和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到ROM 502和/或RAM 503并由CPU 501执行时,可以执行上文描述的过程的一个或多个步骤。备选地,在其他实施例中,CPU 501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上文所描述的各个过程。
示例性地,图5中的装置500可以被实现为计算设备,或者可以被实现为计算设备中的芯片或芯片系统,本公开的实施例对此不限定。
本公开的实施例还提供了一种计算设备,包括存储器和处理器,存储器中存储有计算机指令或计算机程序。在存储器中的计算机指令或计算机程序被处理器执行时,能够使得计算 设备实现上文所描述的各个过程。
本公开的实施例还提供了一种芯片,该芯片可以包括输入接口、输出接口和处理电路。在本公开的实施例中,可以由输入接口和输出接口完成信令或数据的交互,由处理电路完成信令或数据信息的生成以及处理。
本公开的实施例还提供了一种芯片系统,包括处理器,用于支持计算设备以实现上述任一实施例中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,用于存储必要的程序指令和数据,当处理器运行该程序指令时,使得安装该芯片系统的设备实现上述任一实施例中所涉及的方法。示例性地,该芯片系统可以由一个或多个芯片构成,也可以包含芯片和其他分立器件。
本公开的实施例还提供了一种处理器,用于与存储器耦合,存储器存储有指令,当处理器运行所述指令时,使得处理器执行上述任一实施例中涉及的方法和功能。
本公开的实施例还提供了一种包含指令的计算机程序产品,其在计算机上运行时,使得计算机执行上述各实施例中任一实施例中涉及的方法和功能。
本公开的实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,当处理器运行所述指令时,使得处理器执行上述任一实施例中涉及的方法和功能。
通常,本公开的各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。一些方面可以用硬件实现,而其他方面可以用固件或软件实现,其可以由控制器,微处理器或其他计算设备执行。虽然本公开的实施例的各个方面被示出并描述为框图,流程图或使用一些其他图示表示,但是应当理解,本文描述的框,装置、系统、技术或方法可以实现为,如非限制性示例,硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或其某种组合。
本公开还提供有形地存储在非暂时性计算机可读存储介质上的至少一个计算机程序产品。该计算机程序产品包括计算机可执行指令,例如包括在程序模块中的指令,其在目标的真实或虚拟处理器上的设备中执行,以执行如上参考附图的过程/方法。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。在各种实施例中,可以根据需要在程序模块之间组合或分割程序模块的功能。用于程序模块的机器可执行指令可以在本地或分布式设备内执行。在分布式设备中,程序模块可以位于本地和远程存储介质中。
用于实现本公开的方法的计算机程序代码可以用一种或多种编程语言编写。这些计算机程序代码可以提供给通用计算机、专用计算机或其他可编程的数据处理装置的处理器,使得程序代码在被计算机或其他可编程的数据处理装置执行的时候,引起在流程图和/或框图中规定的功能/操作被实施。程序代码可以完全在计算机上、部分在计算机上、作为独立的软件包、部分在计算机上且部分在远程计算机上或完全在远程计算机或服务器上执行。
在本公开的上下文中,计算机程序代码或者相关数据可以由任意适当载体承载,以使得设备、装置或者处理器能够执行上文描述的各种处理和操作。载体的示例包括信号、计算机可读介质、等等。信号的示例可以包括电、光、无线电、声音或其它形式的传播信号,诸如载波、红外信号等。
计算机可读介质可以是包含或存储用于或有关于指令执行系统、装置或设备的程序的任何有形介质。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可 读介质可以包括但不限于电子的、磁的、光学的、电磁的、红外的或半导体系统、装置或设备,或其任意合适的组合。计算机可读存储介质的更详细示例包括带有一根或多根导线的电气连接、便携式计算机磁盘、硬盘、随机存储存取器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光存储设备、磁存储设备,或其任意合适的组合。
此外,尽管在附图中以特定顺序描述了本公开的方法的操作,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤组合为一个步骤执行,和/或将一个步骤分解为多个步骤执行。还应当注意,根据本公开的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在很好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各个实现方式。

Claims (20)

  1. 一种编译方法,包括:
    基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;
    基于所述模块信息,确定第一模块列表和第二模块列表,所述第一模块列表至少包括待编译模块的模块标识,所述第二模块列表至少包括已编译模块的模块标识,所述已编译模块是所述待编译模块的子模块;以及
    基于所述第一模块列表和所述第二模块列表,对所述待编译模块进行增量编译。
  2. 根据权利要求1所述的方法,其中所述模块信息包括第一模块信息和第二模块信息,并且其中确定所述模块信息包括:
    通过对所述源代码文件进行全量编译,以确定所述第一模块信息,所述第一模块信息包括关于所述源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;
    获取用于针对所述源代码文件的修改操作,以得到经修改的源代码文件;以及
    通过对所述经修改的源代码文件进行预编译,以确定所述第二模块信息,所述第一模块信息包括关于所述经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
  3. 根据权利要求2所述的方法,其中所述预编译包括基于所述硬件描述语言的宿主语言的编译。
  4. 根据权利要求2或3所述的方法,其中基于所述模块信息确定第一模块列表和第二模块列表包括:
    通过所述第一模块信息与所述第二模块信息之间的比较,以确定所述第一模块列表和所述第二模块列表。
  5. 根据权利要求4所述的方法,其中所述第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,所述第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,
    并且其中通过所述第一模块信息与所述第二模块信息之间的比较以确定所述第一模块列表和所述第二模块列表包括:
    如果所述第一模块标识与所述第四模块标识相同,且所述第一模块哈希值与所述第四模块哈希值不相同,则将所述第四模块标识添加到所述第一模块列表;
    如果所述第二模块标识与所述第五模块标识相同,所述第二模块哈希值与所述第五模块哈希值相同,且所述第五模块标识对应的模块是所述第三模块标识对应的模块的父模块,则将所述第五模块标识添加到所述第一模块列表;以及
    如果所述第三模块标识与所述第六模块标识相同,所述第三模块哈希值与所述第六模块哈希值相同,且所述第六模块标识对应的模块是所述第三模块标识对应的模块的子模块,则将所述第六模块标识添加所述第二模块列表。
  6. 根据权利要求5所述的方法,其中所述第三模块标识对应的模块被所述父模块所调用,所述子模块被所述第三模块标识对应的模块所调用。
  7. 根据权利要求1至6中任一项所述的方法,其中对所述待编译模块进行增量编译包括:
    获取所述已编译模块的端口信息;
    至少基于所述端口信息,构建所述待编译模块的增量编译环境;以及
    针对所述增量编译环境,进行增量编译。
  8. 根据权利要求7所述的方法,其中至少基于所述端口信息构建所述待编译模块的增量编译环境包括:
    构建所述待编译模块的初始编译环境;以及
    通过将所述初始编译环境中的所述已编译模块替换为所述端口信息,以构建所述增量编译环境。
  9. 根据权利要求7或8所述的方法,其中在所述增量编译的过程中,通过所述端口信息读取所述已编译模块的目标代码文件,以避免对所述已编译模块进行增量编译。
  10. 一种用于编译的装置,包括:
    第一确定单元,被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;
    第二确定单元,被配置为基于所述模块信息,确定第一模块列表和第二模块列表,所述第一模块列表至少包括待编译模块的模块标识,所述第二模块列表至少包括已编译模块的模块标识,所述已编译模块是所述待编译模块的子模块;以及
    编译单元,被配置为基于所述第一模块列表和所述第二模块列表,对所述待编译模块进行增量编译。
  11. 根据权利要求10所述的装置,其中所述模块信息包括第一模块信息和第二模块信息,并且其中所述第一确定单元被配置为:
    通过对所述源代码文件进行全量编译,以确定所述第一模块信息,所述第一模块信息包括关于所述源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;
    获取用于针对所述源代码文件的修改操作,以得到经修改的源代码文件;以及
    通过对所述经修改的源代码文件进行预编译,以确定所述第二模块信息,所述第一模块信息包括关于所述经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
  12. 根据权利要求11所述的装置,其中所述预编译包括基于所述硬件描述语言的宿主语言的编译。
  13. 根据权利要求11或12所述的装置,其中所述第二确定单元被配置为:通过所述第一模块信息与所述第二模块信息之间的比较,以确定所述第一模块列表和所述第二模块列表。
  14. 根据权利要求13所述的装置,其中所述第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,所述第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,并且其中所述第二确定单元被配置为:
    如果所述第一模块标识与所述第四模块标识相同,且所述第一模块哈希值与所述第四模 块哈希值不相同,则将所述第四模块标识添加到所述第一模块列表;
    如果所述第二模块标识与所述第五模块标识相同,所述第二模块哈希值与所述第五模块哈希值相同,且所述第五模块标识对应的模块是所述第三模块标识对应的模块的父模块,则将所述第五模块标识添加到所述第一模块列表;以及
    如果所述第三模块标识与所述第六模块标识相同,所述第三模块哈希值与所述第六模块哈希值相同,且所述第六模块标识对应的模块是所述第三模块标识对应的模块的子模块,则将所述第六模块标识添加所述第二模块列表。
  15. 根据权利要求14所述的装置,其中所述第三模块标识对应的模块被所述父模块所调用,所述子模块被所述第三模块标识对应的模块所调用。
  16. 根据权利要求10至15中任一项所述的装置,其中所述编译单元被配置为:
    获取所述已编译模块的端口信息;
    至少基于所述端口信息,构建所述待编译模块的增量编译环境;以及
    针对所述增量编译环境,进行增量编译。
  17. 根据权利要求16所述的装置,其中所述编译单元被配置为:
    构建所述待编译模块的初始编译环境;以及
    通过将所述初始编译环境中的所述已编译模块替换为所述端口信息,以构建所述增量编译环境。
  18. 根据权利要求16或17所述的装置,其中所述编译单元被配置为:在增量编译的过程中,通过所述端口信息读取所述已编译模块的目标代码文件,以避免对所述已编译模块进行增量编译。
  19. 一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现根据权利要求1至9中任一项所述的方法。
  20. 一种计算机程序产品,其特征在于,所述计算机程序产品上包含计算机可执行指令,所述计算机可执行指令在被执行时实现根据权利要求1至9中任一项所述的方法。
PCT/CN2021/142658 2021-12-29 2021-12-29 编译方法以及用于编译的装置 WO2023123111A1 (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/142658 WO2023123111A1 (zh) 2021-12-29 2021-12-29 编译方法以及用于编译的装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/142658 WO2023123111A1 (zh) 2021-12-29 2021-12-29 编译方法以及用于编译的装置

Publications (1)

Publication Number Publication Date
WO2023123111A1 true WO2023123111A1 (zh) 2023-07-06

Family

ID=86996921

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2021/142658 WO2023123111A1 (zh) 2021-12-29 2021-12-29 编译方法以及用于编译的装置

Country Status (1)

Country Link
WO (1) WO2023123111A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117313651A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(上海)有限公司 芯片功能特征设置方法、电子设备和介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141702A (ja) * 2010-01-06 2011-07-21 Fujitsu Ltd モジュール更新検出プログラム、モジュール更新検出方法及びモジュール更新検出装置
CN106462434A (zh) * 2014-06-25 2017-02-22 微软技术许可有限责任公司 整个程序代码的增量式编译
US20200310768A1 (en) * 2019-03-28 2020-10-01 International Business Machines Corporation Reducing compilation time for computer software
CN112131806A (zh) * 2020-11-25 2020-12-25 芯华章科技股份有限公司 验证设计的编译方法、电子设备及存储介质
CN112783508A (zh) * 2021-02-01 2021-05-11 北京百度网讯科技有限公司 文件的编译方法、装置、设备以及存储介质
CN113536717A (zh) * 2021-07-14 2021-10-22 北京华大九天科技股份有限公司 一种基于增量编译的电路仿真方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011141702A (ja) * 2010-01-06 2011-07-21 Fujitsu Ltd モジュール更新検出プログラム、モジュール更新検出方法及びモジュール更新検出装置
CN106462434A (zh) * 2014-06-25 2017-02-22 微软技术许可有限责任公司 整个程序代码的增量式编译
US20200310768A1 (en) * 2019-03-28 2020-10-01 International Business Machines Corporation Reducing compilation time for computer software
CN112131806A (zh) * 2020-11-25 2020-12-25 芯华章科技股份有限公司 验证设计的编译方法、电子设备及存储介质
CN112783508A (zh) * 2021-02-01 2021-05-11 北京百度网讯科技有限公司 文件的编译方法、装置、设备以及存储介质
CN113536717A (zh) * 2021-07-14 2021-10-22 北京华大九天科技股份有限公司 一种基于增量编译的电路仿真方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117313651A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(上海)有限公司 芯片功能特征设置方法、电子设备和介质
CN117313651B (zh) * 2023-11-30 2024-02-09 沐曦集成电路(上海)有限公司 芯片功能特征设置方法、电子设备和介质

Similar Documents

Publication Publication Date Title
US11868745B2 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
CN110187885B (zh) 一种量子程序编译的中间代码生成方法及装置
US10216501B2 (en) Generating code in statically typed programming languages for dynamically typed array-based language
JPH08512152A (ja) インクリメンタル生成システム
WO2021128973A1 (zh) 一种软件代码的多变更版本合并方法及装置
Gurfinkel et al. A context-sensitive memory model for verification of C/C++ programs
US9311077B2 (en) Identification of code changes using language syntax and changeset data
WO2021258692A1 (zh) 一种多芯片兼容的编译方法和装置
US10534592B2 (en) Template expressions for constraint-based systems
Ahmad et al. Leveraging parallel data processing frameworks with verified lifting
US10474435B2 (en) Configuration model parsing for constraint-based systems
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
US10657252B2 (en) Detecting malicious code embedded in documents
WO2023123111A1 (zh) 编译方法以及用于编译的装置
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
WO2023087720A1 (zh) 小程序生成方法、装置、设备及存储介质
US10416971B2 (en) Method of creating the balanced parse tree having optimized height
Chen et al. Hopper: Interpretative fuzzing for libraries
KR102117165B1 (ko) 바이너리 분석을 위한 중간 언어 테스트 방법 및 장치
US20230418574A1 (en) Using a semantic tree of a compiler to execute a semantic code query against source code
US8621447B1 (en) Systems and methods for dynamic struct variable creation including inline declaration with dynamic keys
CN112416362B (zh) 一种pdk编译功能的实现方法
CN110096274B (zh) 分布式内存列式数据库的生成代码复用匹配管理方法
US20220075778A1 (en) Transforming operations of a computer program for execution at a database
Hardin Verification of a Rust Implementation of Knuth's Dancing Links using ACL2

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 21969479

Country of ref document: EP

Kind code of ref document: A1