CN116911225A - 一种硬件描述语言代码自动补全方法 - Google Patents
一种硬件描述语言代码自动补全方法 Download PDFInfo
- Publication number
- CN116911225A CN116911225A CN202310564992.XA CN202310564992A CN116911225A CN 116911225 A CN116911225 A CN 116911225A CN 202310564992 A CN202310564992 A CN 202310564992A CN 116911225 A CN116911225 A CN 116911225A
- Authority
- CN
- China
- Prior art keywords
- module
- complete information
- file
- instantiated
- code
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 230000000295 complement effect Effects 0.000 title claims abstract description 12
- 238000013461 design Methods 0.000 claims description 19
- 238000013507 mapping Methods 0.000 claims description 8
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种硬件描述语言代码自动补全方法,所述方法包括:获取work库中各模块module的完整信息,将获取的各module的完整信息存储在模块存储文件中;跟踪到用户在Verilog代码的module语句部分输入被例化的module的名称,读取模块存储文件中,与该被例化的module的名称相同的module的完整信息;依据读取的module的完整信息补全被例化的module的代码;或者,获取work库中每个VHDL文件的实体entity的完整信息,将获取的各entity的完整信息存储在模块存储文件中;跟踪到用户在VHDL文件结构体architecture输入被例化元件component的名称,读取模块存储文件中,与该被例化的component名称相同的entity的完整信息;依据读取的entity的完整信息补全被例化的component的代码。本发明的方法,提高了Verilog/VHDL代码的编写效率。
Description
技术领域
本发明涉及FPGA开发领域,尤其是一种硬件描述语言代码自动补全方法。
背景技术
硬件描述语言(Hardware Description Language,HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层,也即从抽象到具体,逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具,把网表转换为要实现的具体电路布线结构。
当前,得到普遍认同的硬件描述语言有Verilog和VHDL语言。在FPGA的设计过程中,编写Verilog/VHDL代码时,采用自动补全能关键词以提高编码效率。这里,关键词是指Verilog语法里的关键词,比如input、output、wire、reg、always、begin、end、module等;或者,VHDL语法里的关键词,比如entity、architecture、component、package、port、in,out、inout、is、begin、end、generic等。
但大型的数字电路包含很多module/component,其中,很多module/component又有大量端口,因而,在实际编程的过程中仅自动补齐关键字所提高的编码效率,远远不够的。
发明内容
有鉴于此,本发明的主要目的在于提供一种硬件描述语言代码自动补全方法,通过自动补全被例化的module/component的代码,提高Verilog/VHDL代码的编写效率。
为达到上述目的,本申请提供了一种硬件描述语言代码自动补全方法,在任一个FPGA项目中,包括:
获取该项目的work库中各模块module的完整信息,将获取的各module的完整信息存储在模块存储文件中;
跟踪到用户在Verilog代码的module语句部分输入被例化的module的名称,读取模块存储文件中,与该被例化的module的名称相同的module的完整信息;
依据读取的module的完整信息补全被例化的module的代码;或者,
获取该项目的work库中每个VHDL文件的实体entity的完整信息,将获取的各entity的完整信息存储在模块存储文件中;
跟踪到用户在VHDL文件结构体architecture输入被例化元件component的名称,读取模块存储文件中,与该被例化的component名称相同的entity的完整信息;
依据读取的entity的完整信息补全被例化的component的代码。
在一个可能的实现中,所述获取work库中各module的完整信息包括:
通过Yacc和Flex工具,将该work库中描述各module的Verilog代码,转化成描述各module的完整信息。
在另一个可能的实现中,所述将获取的各module的完整信息存储在模块存储文件中包括:
依据描述各module的完整信息的网表生成可扩展标记语言xml文件,该xml文件即为所述模块存储文件。
在另一个可能的实现中,还包括:定时或实时将work库中新增module的完整信息存储进模块存储文件。
在另一个可能的实现中,所述补全被例化的module的代码后,还包括:用户依据设计需要,修改所补全的代码中,被例化的module与其上层设计的映射。
在另一个可能的实现中,所述获取work库中每个VHDL文件的entity的完整信息具体包括:
通过Yacc和Flex工具,将该work库中各VHDL文件的entity,转化成描述该entity的完整信息。
在另一个可能的实现中,所述将获取的各entity的完整信息存储在模块存储文件中包括:
依据描述各entity的完整信息生成xml文件,该xml文件即为所述模块存储文件。
在另一个可能的实现中,还包括:定时或实时将work库中新增VHDL文件中entity的完整信息存储进模块存储文件。
在另一个可能的实现中,所述补全被例化的component的代码包括:
补全位于architecture的is和begin之间的,component<被例化的component的名称>后的元件声明部分;和/或,
补全位于architecture的begin和end之间的元件例化语句。
在另一个可能的实现中,所述补全被例化的component的代码后,还包括:用户依据设计需要,修改元件例化语句中,被例化的component与其上层设计的映射。
附图说明
图1为本发明实施例一一种硬件描述语言代码自动补全方法的流程示意图;
图2为本发明实施例二一种硬件描述语言代码自动补全方法的流程示意图。
具体实施方式
具体的,本发明实施例一一种硬件描述语言代码自动补全方法的流程如图1所示,所述硬件描述语言为Verilog语言时,在任一个FPGA项目中,包括步骤101~103。
步骤101:获取该项目的work库中各module的完整信息,将获取的各module的完整信息存储在模块存储文件中。
步骤102:跟踪到用户在Verilog代码的module语句部分输入被例化的module的名称,读取模块存储文件中,与该被例化的module的名称相同的module的完整信息。
步骤103:依据读取的module的完整信息补全被例化的module的代码。
Verilog语言的编程工具,在一个FPGA项目中,有一个默认的work库,work库包括原语primitive库中的器件和用户自定义的module,即,该项目中所有的Verilog代码所描述的module都会被自动添加到work库当中,包括用户新增的Verilog代码所描述的module。相应的,
在一个可能的实现中,步骤101还包括:定时或实时将work库中新增module的完整信息存储进模块存储文件。
在另一个可能的实现中,步骤101中,所述获取work库中各module的完整信息具体包括:
通过Yacc和Flex工具,将该work库中描述各module的Verilog代码,转化成描述各module的完整信息。
这里,Flex和Yacc工具具体用于,对work库中描述各module的Verilog代码进行词法分析和语法分析,以及检验代码的语法。
在另一个可能的实现中,步骤101中,所述将获取的各module的完整信息存储在模块存储文件中包括:
依据描述各module的完整信息生成可扩展标记语言(Extensible MarkupLanguage,xml)文件,该xml文件即为模块存储文件。具体的,该模块存储文件中,每段以<module name=>起始、以</module>结束的程序,即描述了一个module的完整信息。其中,任一module的名称唯一表征一个module。
这里,步骤102中,所述模块存储文件中,与该被例化的module的名称相同的module的完整信息指:模块存储文件的各段以<module name=>起始、以</module>结束的程序中,module name与该被例化的module的名称相同的一段程序。
在另一个可能的实现中,所述module的完整信息至少包括module所含端口的端口名称,还可以包括与端口连接的外部信息名称和/或数据类型和/或参数和/或变量。
在另一个可能的实现中,步骤103中,所述补全被例化的module的代码后,还包括:用户依据设计需要,修改所补全的代码中,被例化的module与其上层设计的映射。
这里,修改被例化的module与其上层设计的映射,具体包括:即修改与被例化的module各端口连接的上层设计的端口名称和/或数据类型和/或参数和/或变量。
以例化module LUT6为例,在work库中module LUT6代码如下:
module LUT6(
xy,
f5,
f4,
f3,
f2,
f1,
f0
);
input f5;
input f4;
input f3;
input f2;
input f1;
input f0;
output xy;
parameter config_data=64'h0000_0000_0000_0000;
endmodule
module LUT6的完整信息在模块存储文件中存储为:
<?xml version="1.0"encoding="UTF-8"standalone="no"?>
<netlist_info>
<module name="LUT6">
<port width=1direction="input">f0</>
<port width=1direction="input">f1</>
<port width=1direction="input">f2</>
<port width=1direction="input">f3</>
<port width=1direction="input">f4</>
<port width=1direction="input">f5</>
<port width=1direction="output">xy</>
<parameter name="config_data"default=
"64'h0000_0000_0000_0000"></>
</module>
<netlist_info>
跟踪到用户在Verilog代码的module语句部分输入LUT6,自动补全该module语句部分中LUT6的代码如下:
LUT6#(
.config_data(64'h0000_0000_0000_0000)
)
Inst(
.f0(f0),
.f1(f1),
.f2(f2),
.f3(f3),
.f4(f4),
.f5(f5),
.xy(xy),
);
本发明实施例二一种硬件描述语言代码自动补全方法的流程如图2所示,所述硬件描述语言为VHDL语言时,在任一个FPGA项目中,包括步骤201~203。
步骤201:获取该项目的work库中每个VHDL文件的entity的完整信息,将获取的各entity的完整信息存储在模块存储文件中。
步骤202:跟踪到用户在VHDL文件architecture输入被例化component的名称,读取模块存储文件中,与该被例化的component名称相同的entity的完整信息。
步骤203:依据读取的entity的完整信息补全被例化的component的代码。
VHDL语言的编程工具,在一个FPGA项目中,有一个默认的work库,该项目用户每开发一个完整的VHDL文件,都会被自动添加到work库中,即,该项目用户新增的完整VHDL文件,会被自动添加到work库当中。相应的,
在一个可能的实现中,步骤201还包括:定时或实时将work库中新增VHDL文件中entity的完整信息存储进模块存储文件。
在另一个可能的实现中,步骤201中,所述获取work库中每个VHDL文件的entity的完整信息具体包括:
通过Yacc和Flex工具,将该work库中各VHDL文件的entity,转化成描述该entity的完整信息。
这里,Flex和Yacc工具具体用于,对work库中各VHDL文件进行词法分析和语法分析,以及检验代码的语法。
任一VHDL文件包括entity和Architecture;其中,entity描述元件的输入和输出等端口信息,architecture描述元件的具体功能,一个VHDL文件的entity和Architecture的总和就是一个元件component。
所述entity的完整信息至少包括entity描述的输入和输出等端口信息。
在另一个可能的实现中,步骤201中,所述将获取的各entity的完整信息存储在模块存储文件中包括:
依据描述entity的完整信息生成xml文件,该xml文件即为所述模块存储文件。具体的,该模块存储文件中,每段以<entity name=>起始、以</entity>结束的程序,即描述了一个entity的完整信息。其中,任一entity的名称唯一表征一个entity。
这里,步骤202中,所述模块存储文件中,与该被例化的component名称相同的entity的完整信息指:模块存储文件的各段以<entity name=>起始、以</entity>结束的程序中,entity的名称与该被例化的component的名称相同的一段程序。
在另一个可能的实现中,步骤203所述补全被例化的component的代码包括:
补全位于architecture的is和begin之间的,component<被例化的component的名称>后的元件声明部分;
补全位于architecture的begin和end之间的元件例化语句。
在另一个可能的实现中,步骤203中,所述补全被例化的component的代码后,还包括:用户依据设计需要,修改元件例化语句中,被例化的component与其上层设计的映射。
这里,修改被例化的component与其上层设计的映射,具体包括:修改与被例化的component各端口连接的上层设计的端口名称和/或数据类型和/或参数和/或变量。
以例化component LUT6为例,在work库中entity LUT6代码如下:
跟踪到用户在VHDL文件输入被例化component的名称LUT6,自动补全被例化的component的代码如下:
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种硬件描述语言代码自动补全方法,其特征在于,在任一个FPGA项目中,包括:
获取该项目的work库中各模块module的完整信息,将获取的各module的完整信息存储在模块存储文件中;
跟踪到用户在Verilog代码的module语句部分输入被例化的module的名称,读取模块存储文件中,与该被例化的module的名称相同的module的完整信息;
依据读取的module的完整信息补全被例化的module的代码;或者,
获取该项目的work库中每个VHDL文件的实体entity的完整信息,将获取的各entity的完整信息存储在模块存储文件中;
跟踪到用户在VHDL文件结构体architecture输入被例化元件component的名称,读取模块存储文件中,与该被例化的component名称相同的entity的完整信息;
依据读取的entity的完整信息补全被例化的component的代码。
2.根据权利要求1所述的方法,其特征在于,所述获取work库中各module的完整信息包括:
通过Yacc和Flex工具,将该work库中描述各module的Verilog代码,转化成描述各module的完整信息。
3.根据权利要求2所述的方法,其特征在于,所述将获取的各module的完整信息存储在模块存储文件中包括:
依据描述各module的完整信息生成可扩展标记语言xml文件,该xml文件即为所述模块存储文件。
4.根据权利要求1所述的方法,其特征在于,还包括:定时或实时将work库中新增module的完整信息存储进模块存储文件。
5.根据权利要求1所述的方法,其特征在于,所述补全被例化的module的代码后,还包括:用户依据设计需要,修改所补全的代码中,被例化的module与其上层设计的映射。
6.根据权利要求1所述的方法,其特征在于,所述获取work库中每个VHDL文件的entity的完整信息具体包括:
通过Yacc和Flex工具,将该work库中各VHDL文件的entity,转化成描述该entity的完整信息。
7.根据权利要求6所述的方法,其特征在于,所述将获取的各entity的完整信息存储在模块存储文件中包括:
依据描述各entity的完整信息生成xml文件,该xml文件即为所述模块存储文件。
8.根据权利要求1所述的方法,其特征在于,还包括:定时或实时将work库中新增VHDL文件中entity的完整信息存储进模块存储文件。
9.根据权利要求1所述的方法,其特征在于,所述补全被例化的component的代码包括:
补全位于architecture的is和begin之间的,component<被例化的component的名称>后的元件声明部分;和/或,
补全位于architecture的begin和end之间的元件例化语句。
10.根据权利要求9所述的方法,其特征在于,所述补全被例化的component的代码后,还包括:用户依据设计需要,修改元件例化语句中,被例化的component与其上层设计的映射。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310564992.XA CN116911225A (zh) | 2023-05-18 | 2023-05-18 | 一种硬件描述语言代码自动补全方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310564992.XA CN116911225A (zh) | 2023-05-18 | 2023-05-18 | 一种硬件描述语言代码自动补全方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116911225A true CN116911225A (zh) | 2023-10-20 |
Family
ID=88358980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310564992.XA Pending CN116911225A (zh) | 2023-05-18 | 2023-05-18 | 一种硬件描述语言代码自动补全方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116911225A (zh) |
-
2023
- 2023-05-18 CN CN202310564992.XA patent/CN116911225A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lavin et al. | Rapid prototyping tools for FPGA designs: RapidSmith | |
US5815405A (en) | Method and apparatus for converting a programmable logic device representation of a circuit into a second representation of the circuit | |
US7769569B2 (en) | Method and system for designing a structural level description of an electronic circuit | |
US5471398A (en) | MTOL software tool for converting an RTL behavioral model into layout information comprising bounding boxes and an associated interconnect netlist | |
CN103294600B (zh) | 基于Perl的EDIF网表级电路的自动可测性设计系统的自动可测性设计方法 | |
US11403448B1 (en) | Apparatus and method for mapping foundational components during design porting from one process technology to another process technology | |
US5548524A (en) | Expression promotion for hierarchical netlisting | |
CN106682268B (zh) | 可编程逻辑器件配置方法及设备 | |
CN113408222B (zh) | 文件生成方法、装置、电子设备及存储介质 | |
JPH0765040A (ja) | 機能データインターフェース方法および機能データインターフェース装置 | |
US5987239A (en) | Computer system and method for building a hardware description language representation of control logic for a complex digital system | |
CN115392176B (zh) | SoC芯片顶层模块集成设计方法及系统 | |
CN111709215A (zh) | 一种ip管理系统及ip管理方法 | |
US8881074B2 (en) | Device and method for refactoring hardware code | |
US20100235803A1 (en) | Method and Apparatus for Automatically Connecting Component Interfaces in a Model Description | |
US8046206B1 (en) | Method and system using subgraph isomorphism to configure hardware resources | |
CN109165131A (zh) | 一种基于Perl的原型验证平台自动化实现方法 | |
US7900174B2 (en) | Method and system for characterizing an integrated circuit design | |
US7117471B1 (en) | Generation of design views having consistent input/output pin definitions | |
CN116911225A (zh) | 一种硬件描述语言代码自动补全方法 | |
CN116956787A (zh) | 一种对xmr信号传输模式进行转换的方法及装置 | |
Lin et al. | Computational support for multiplicity in hierarchical electronics design | |
CN110941932B (zh) | 一种面向硬件逻辑设计的需求建模与验证方法 | |
US7389489B1 (en) | Techniques for editing circuit design files to be compatible with a new programmable IC | |
ITTO20010667A1 (it) | Metodo per generare circuiti elettronici. |
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 |