CN105607897B - 芯片寄存器代码自动生成方法及其系统 - Google Patents
芯片寄存器代码自动生成方法及其系统 Download PDFInfo
- Publication number
- CN105607897B CN105607897B CN201510639440.6A CN201510639440A CN105607897B CN 105607897 B CN105607897 B CN 105607897B CN 201510639440 A CN201510639440 A CN 201510639440A CN 105607897 B CN105607897 B CN 105607897B
- Authority
- CN
- China
- Prior art keywords
- register
- code
- module
- output
- document
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/39—Circuit design at the physical level
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种芯片寄存器代码自动生成方法及其系统,方法包括以下步骤:设计通用的寄存器描述文档保存寄存器参数;提取所述寄存器描述文档中的寄存器参数,并保存于系统内存中;将系统内存中的数据保存为中间格式;通过继承中间格式的文本输出基类的方式,编写相应的文本输出类型,生成逻辑开发多阶段使用的相应寄存器输出格式。本发明,使用自动化的方式完成寄存器文档到代码的输出过程,并且通过用户少量修改代码,可实现代码输出结果的多样性,极大地提高了设计开发人员在代码编写的时间,还可以有效的保证代码输出的正确性,规避了人工编写时出现遗漏的情况,保证各个阶段寄存器编写的一致性,避免文档修改带来的反复性。
Description
技术领域
本发明涉及数字集成电路的逻辑开发领域,具体涉及芯片寄存器代码自动生成方法及其系统。
背景技术
众所周知,无论是在通信、消费电子还是在工业应用等领域,数字集成电路的工艺提升越来越快,单片芯片所具有的功能越来越多,因此,集成电路芯片的设计越来越复杂。英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)于1965年提出了摩尔定律,其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍,这一定律揭示了信息技术进步的速度。
随着数字集成电路(芯片)的发展,其复杂程度日益增加,相应的,单片芯片内所包含的寄存器数量越来越多。数字集成电路(或者FPGA设计)的开发、HDL设计(HDL Design,硬件描述语言设计)与验证以及软件驱动开发等,都归结于逻辑设计范畴,寄存器的描述贯穿于整个逻辑设计中。于是,对于每个逻辑开发团队来说,如何维护和管理这些越来越多、越来越复杂的寄存器,如何保证其在开发多个阶段的一致性和准确率,如何提高寄存器描述的开发效率,成为非常迫切的需求。
在目前的逻辑开发(Logic Development)过程中,对于寄存器的描述,采用的是在不同的设计阶段,通过相同的文档进行人工编写的方法进行。这种方法的缺点是:在逻辑开发过程中,需要投入较大的人力成本进行编写,并且通过人力来保证最后结果的一致性和准确率,存在太多的不确定因素。
发明内容
本发明所要解决的技术问题是解决如何在逻辑开发过程中描述寄存器,以缩短开发人员在寄存器编写上花费的时间,并保证在各设计阶段一致性的问题。
为了解决上述技术问题,本发明所采用的技术方案是提供一种芯片寄存器代码自动生成方法,包括以下步骤:
设计通用的寄存器描述文档,用于保存寄存器参数;
从用户提供的寄存器描述文档中提取寄存器参数,并保存于系统内存中;
将系统内存中的寄存器参数数据,通过文本打印程序转换为对应的Tcl编程语言的面向对象编程的扩展包Itcl代码,形成中间格式代码;
通过调用继承中间格式代码的文本输出基类的方式,根据用户指定的文本输出类型生成寄存器代码,形成逻辑开发多阶段使用的相应寄存器输出格式。
在上述方法中,所述寄存器描述文档为WORD文档,利用Visual Basic调用寄存器描述文件,提取所述寄存器描述文档中的寄存器参数,所述寄存器描述信息至少包括:寄存器名字、寄存器地址、寄存器类型、寄存器可选配置信息、寄存器的注释和寄存器域描述。
在上述方法中,形成中间格式代码的方法如下:
针对每一个寄存器,建立一个START事件;
在每一个START事件中,首先依次对寄存器名字、寄存器类型、寄存器可选配置信息进行赋值,设置当前寄存器描述信息;
然后从最后一个提取的寄存器域开始构建Module代码模块,每一个寄存器域对应一个Module代码模块,在所述Module代码模块中调用SetField函数依次对域名字、域在寄存器中的位置、域的类型、域的默认值和域的注释进行赋值。
在上述方法中,利用表格数据结构存储相似的Itcl底层库,通过所述底层库中的BasePrint类,扩展成RtlPrint类或者SvPrint类,将寄存器参数通过文本打印程序转换为逻辑开发各个阶段不同的寄存器代码。
本发明还提供了一种芯片寄存器代码自动生成系统,包括:
输入模块,用于接收来自用户给定的输入文档,所述输入文档记录有寄存器及其寄存器域描述信息;
提取模块,用于提取用户给定的输入文档中记录的寄存器及其寄存器域描述信息,并将提取的所述描述信息保存在系统内存中;
系统内存,用于存储数据;
转换模块,用于将系统内存中的所述描述信息数据通过文本打印程序转换为对应的Tcl编程语言的面向对象编程的扩展包Itcl代码,形成中间格式代码;
扩展模块,用于通过调用继承中间格式代码的文本输出基类的方法,根据用户指定的文本输出类型,生成寄存器代码;
输出模块,用于根据所述寄存器代码输出逻辑开发多阶段使用的寄存器输出格式。
在上述系统中,所述转换模块包括多个中间单元,每一个中间单元对应记录一个寄存器及其寄存器域描述信息,每一个中间单元中包含多个Module代码单元,每一个Module代码单元对应记录当前寄存器下对应的一个寄存器域描述信息。
本发明,使用自动化的方式完成寄存器文档到代码的输出过程,并且通过用户少量修改代码,可实现代码输出结果的多样性,极大地提高了设计开发人员在代码编写的时间,还可以有效的保证代码输出的正确性,规避了人工编写时出现遗漏的情况,保证各个阶段寄存器编写的一致性,避免文档修改带来的反复性。
附图说明
图1为本发明提供的方法的流程图;
图2为本发明系统的结构示意图。
具体实施方式
本发明提供的逻辑开发过程中的寄存器代码自动生成方法,主要通过三个步骤实现,首先提取寄存器描述文档中的寄存器参数并保存于系统内存;然后转换系统内存中的数据,将其封装为中间格式代码;最后生成逻辑开发多阶段使用的寄存器输出代码。其中,寄存器描述文档为WORD文档,中间格式为TCL格式,寄存器输出代码包含RTL寄存器代码,验证模型代码以及软件驱动模型代码。下面结合附图对本发明做出详细的说明。
首先介绍寄存器描述文档,它包含以下内容:
(1)寄存器名称REG_NAME;
(2)寄存器地址REG_ADDRESS;
(3)寄存器类型REG_TYPE;
(4)寄存器可选配置信息REG_OPTION;
(5)寄存器域描述。
其中,寄存器域描述包含:
(1)域名称Name;
(2)域在寄存器中的相对位置Bits;
(3)域的传输方式Access;
(4)域的默认值Default;
(5)域的注释Description。
如图1所示,本发明提供的方法,具体步骤如下:
步骤1:设计通用的寄存器描述文档,用于保存寄存器参数,然后利用VisualBasic调用寄存器描述文件(Word文档),提取WORD文档中寄存器表格中的参数(表格中的内容为寄存器描述信息,至少包括:寄存器名字、寄存器地址、寄存器类型、寄存器可选配置信息和寄存器域描述),并保存在系统内存中。寄存器表格的样式如表1所示:
表1:
其中,寄存器“EXAMPLE_CFG0”,地址在0x0000,类型为config,可选配置信息为soft,相对应的域有三个,按照记录顺序依次为域名“reserved”、域在寄存器中的位置“RSD”、域的类型“30”、域的默认值“0x0”、域的注释“保留”;域名“cfg0”、域在寄存器中的位置“RW”、域的类型“1”、域的默认值“0x0”、域的注释“寄存器说明”;域名“cfg1”、域在寄存器中的位置“RW”、域的类型“1”、域的默认值“0x1”、域的注释“寄存器说明”。
步骤2:将系统内存中的寄存器参数数据转换为中间格式代码,采用的方法是:将系统内存中的寄存器参数数据通过文本打印程序转换为对应的Tcl编程语言的面向对象编程的扩展包ITcl代码,由于使用了面向对象编程的方法设计,可扩展性较强,可以有效地保证系统的通用型,使最后的代码转换代码简单化。
中间格式代码的生成方法如下:
针对步骤1中提取的每一个寄存器,建立一个START事件,每一个START事件的用“#START Register寄存器编码”开始,用“#END Register寄存器编码”结束,这里的寄存器编码按照步骤1中提取的顺序赋予“0、1、…”;
在每一个START事件中,首先,依次对寄存器名字、寄存器类型、寄存器可选配置信息进行赋值,设置当前寄存器描述信息,比如按照上述表1给出的实例,为“exampleSetRegister{example_CFG0}{config}{0}{0}{1}{0}{{soft}{user_clk0}{}}”;
然后,从步骤1中最后一个提取的寄存器域开始构建Module代码模块,每一个寄存器域对应一个Module代码模块,在所述Module代码模块中调用SetField函数依次对域名字、域在寄存器中的位置、域的类型、域的默认值和域的注释进行赋值,比如按照上述表1给出的实例,依次为
Module::example_0SetField{cfg1}{RW}{0}{1}{1}{寄存器说明};
Module::example_0SetField{cfg0}{RW}{1}{1}{0}{寄存器说明};
Module::example_0SetField{reserved}{RSD}{2}{30}{0}{保留}。
如下表2所示,中间格式代码具体示例如下:
表2:
步骤3:设计一套表格数据结构,存储相似的Itcl底层库,通过调用继承中间格式代码的文本输出基类BasePrint类的方式,根据用户指定的文本输出类型,编写RtlPrint类或者SvPrint类扩展代码(支持用户自定义扩展为其他需要自动生成代码的类型),生成寄存器代码,形成逻辑开发多阶段使用的相应寄存器输出格式,即转换为逻辑开发各个阶段不同的寄存器代码。例如,设计阶段的RTL(寄存器交易级)代码,验证阶段的SystemVerilog(一种用于逻辑验证的编程语言)代码以及软件驱动阶段的寄存器描述代码(用于此芯片对应的软件驱动)等。
RTL的示例代码如下:
验证模型代码如下:
本发明,包含且不限于芯片设计、FPGA设计以及硬件相关的软件开发,使用自动化的方式完成寄存器文档到代码的输出过程,并且通过用户少量修改代码,可实现代码输出结果的多样性,极大地提高了设计开发人员在代码编写的时间;
另外,由于使用统一的中间格式进行交互,可以有效的保证代码输出的正确性,规避了人工编写时出现遗漏的情况;
第三,由于输入文件(寄存器描述文件)的统一,还可以保证各个阶段寄存器编写的一致性,避免文档修改带来的反复性。
在此基础上,本发明还提供了一种芯片寄存器代码自动生成系统,如图2所示,该系统包括:
输入模块,用于接收来自用户给定的输入文档,其中记录有寄存器及其寄存器域描述信息;
提取模块,用于提取用户给定的输入文档中记录的寄存器及其寄存器域描述信息,并将提取的所述描述信息保存在系统内存中;
系统内存,用于存储数据;
转换模块,用于将系统内存中的所述描述信息数据通过文本打印程序转换为对应的Tcl编程语言的面向对象编程的扩展包Itcl代码,形成中间格式代码;
扩展模块,用于通过调用继承中间格式代码的文本输出基类的方法,根据用户指定的文本输出类型,生成寄存器代码;
输出模块,用于根据所述寄存器代码输出逻辑开发多阶段使用的寄存器输出格式。
其中,所述转换模块包括多个中间单元,每一个中间单元对应记录一个寄存器及其寄存器域描述信息,每一个中间单元中包含多个Module代码单元,每一个Module代码单元对应记录当前寄存器下对应的一个寄存器域描述信息。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
Claims (6)
1.芯片寄存器代码自动生成方法,其特征在于,包括以下步骤:
设计通用的寄存器描述文档,用于保存寄存器参数;
从用户提供的寄存器描述文档中提取寄存器参数,并保存于系统内存中;
将系统内存中的寄存器参数数据,通过文本打印程序转换为对应的Tcl编程语言的代码,形成中间格式代码;
通过调用继承中间格式代码的文本输出基类的方式,根据用户指定的文本输出类型生成寄存器代码,形成逻辑开发多阶段使用的相应寄存器输出格式,寄存器输出代码包含RTL寄存器代码,验证模型代码以及软件驱动模型代码。
2.如权利要求1所述的方法,其特征在于,
所述寄存器描述文档为WORD文档,利用Visual Basic调用寄存器描述文件,提取所述寄存器描述文档中的寄存器参数,所述寄存器描述信息至少包括:寄存器名字、寄存器地址、寄存器类型、寄存器可选配置信息和寄存器域描述。
3.如权利要求1所述的方法,其特征在于,形成中间格式代码的方法如下:
针对每一个寄存器,建立一个START事件;
在每一个START事件中,首先依次对寄存器名字、寄存器类型、寄存器可选配置信息进行赋值,设置当前寄存器描述信息;
然后从最后一个提取的寄存器域开始构建Module代码模块,每一个寄存器域对应一个Module代码模块,在所述Module代码模块中调用SetField函数依次对域名字、域在寄存器中的位置、域的类型、域的默认值和域的注释进行赋值。
4.如权利要求1所述的方法,其特征在于,
利用表格数据结构存储相似的Itcl底层库,通过底层库中的BasePrint类,扩展成RtlPrint类或者SvPrint类,将寄存器参数通过文本打印程序转换为逻辑开发各个阶段不同的寄存器代码。
5.一种芯片寄存器代码自动生成系统,其特征在于,其包括:
输入模块,用于接收来自用户给定的输入文档,所述输入文档中记录有寄存器及其寄存器域描述信息;
提取模块,用于提取用户给定的输入文档中记录的寄存器及其寄存器域描述信息,并将提取的所述描述信息保存在系统内存中;
系统内存,用于存储数据;
转换模块,用于将系统内存中的所述描述信息数据通过文本打印程序转换为对应的Tcl编程语言的面向对象编程的扩展包Itcl代码,形成中间格式代码;
扩展模块,用于通过调用继承中间格式代码的文本输出基类的方法,根据用户指定的文本输出类型,生成寄存器代码;
输出模块,用于根据所述寄存器代码输出逻辑开发多阶段使用的寄存器输出格式,寄存器输出代码包含RTL寄存器代码,验证模型代码以及软件驱动模型代码。
6.根据权利要求5所述的系统,其特征在于,所述转换模块包括多个中间单元,每一个中间单元对应记录一个寄存器及其寄存器域描述信息,每一个中间单元中包含多个Module代码单元,每一个Module代码单元对应记录当前寄存器下对应的一个寄存器域描述信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510639440.6A CN105607897B (zh) | 2015-09-30 | 2015-09-30 | 芯片寄存器代码自动生成方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510639440.6A CN105607897B (zh) | 2015-09-30 | 2015-09-30 | 芯片寄存器代码自动生成方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105607897A CN105607897A (zh) | 2016-05-25 |
CN105607897B true CN105607897B (zh) | 2019-01-04 |
Family
ID=55987852
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510639440.6A Active CN105607897B (zh) | 2015-09-30 | 2015-09-30 | 芯片寄存器代码自动生成方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105607897B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484415A (zh) * | 2016-10-08 | 2017-03-08 | 武汉瑞纳捷电子技术有限公司 | 一种寄存器配置代码自动生成方法及装置 |
CN108279889A (zh) * | 2016-12-30 | 2018-07-13 | 联芯科技有限公司 | 时钟树代码生成方法及装置 |
CN107436762B (zh) * | 2017-07-03 | 2021-02-23 | 北京东土军悦科技有限公司 | 一种寄存器代码文件生成方法、装置和电子设备 |
CN107506228A (zh) * | 2017-09-11 | 2017-12-22 | 珠海亿智电子科技有限公司 | 一种根据芯片手册自动生成驱动代码的方法 |
CN109582511B (zh) * | 2017-09-29 | 2022-11-15 | 龙芯中科技术股份有限公司 | 控制器的生成方法、装置及存储介质 |
CN108108186A (zh) * | 2017-12-06 | 2018-06-01 | 珠海泰芯半导体有限公司 | 一种基于excel的芯片寄存器特性编码方法 |
CN108132924B (zh) * | 2017-12-11 | 2021-05-25 | 珠海泰芯半导体有限公司 | 一种基于excel的芯片端口映射管理方法 |
CN109977558B (zh) * | 2019-03-28 | 2023-04-07 | 合芯科技(苏州)有限公司 | 一种芯片寄存器代码结构的生成方法、装置及存储介质 |
CN111510483B (zh) * | 2020-04-09 | 2022-10-18 | 眸芯科技(上海)有限公司 | 芯片测试中不同网络域之间的配置同步系统、方法及装置 |
CN112905450B (zh) * | 2021-01-31 | 2023-11-03 | 吴赛 | 基于模板变量替换的芯片寄存器自动开发系统 |
CN113177020A (zh) * | 2021-03-31 | 2021-07-27 | 上海阵量智能科技有限公司 | 数据处理方法及装置 |
CN113515485B (zh) * | 2021-07-12 | 2024-04-02 | 合肥芯荣微电子有限公司 | 一种SoC芯片控制寄存器模块RTL代码自动生成方法 |
CN115576605A (zh) * | 2022-10-09 | 2023-01-06 | 苏州领慧立芯科技有限公司 | 一种自动生成代码和文档的寄存器管理装置及形成方法 |
CN116501305B (zh) * | 2023-06-28 | 2023-10-13 | 芯耀辉科技有限公司 | 用于寄存器代码自动生成的方法、设备、介质及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1741026A (zh) * | 2005-09-16 | 2006-03-01 | 北京中星微电子有限公司 | 一种快速生成逻辑电路的方法 |
CN101334806A (zh) * | 2007-06-26 | 2008-12-31 | 模拟装置公司 | 用于寄存器映射自动化的方法和设备 |
CN103098059A (zh) * | 2010-07-13 | 2013-05-08 | 艾尔葛托奇普股份有限公司 | 根据算法和规格的自动最佳集成电路生成器 |
CN103838653A (zh) * | 2012-11-27 | 2014-06-04 | 上海华虹集成电路有限责任公司 | 基于vmm ral的寄存器自动化验证方法 |
CN104898991A (zh) * | 2015-06-10 | 2015-09-09 | 烽火通信科技股份有限公司 | 一种基于自动化ral的寄存器访问方法及系统 |
-
2015
- 2015-09-30 CN CN201510639440.6A patent/CN105607897B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1741026A (zh) * | 2005-09-16 | 2006-03-01 | 北京中星微电子有限公司 | 一种快速生成逻辑电路的方法 |
CN101334806A (zh) * | 2007-06-26 | 2008-12-31 | 模拟装置公司 | 用于寄存器映射自动化的方法和设备 |
CN103098059A (zh) * | 2010-07-13 | 2013-05-08 | 艾尔葛托奇普股份有限公司 | 根据算法和规格的自动最佳集成电路生成器 |
CN103838653A (zh) * | 2012-11-27 | 2014-06-04 | 上海华虹集成电路有限责任公司 | 基于vmm ral的寄存器自动化验证方法 |
CN104898991A (zh) * | 2015-06-10 | 2015-09-09 | 烽火通信科技股份有限公司 | 一种基于自动化ral的寄存器访问方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105607897A (zh) | 2016-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105607897B (zh) | 芯片寄存器代码自动生成方法及其系统 | |
CN109657215A (zh) | 基于模板的文档生成方法、设备、存储介质及装置 | |
CN107291476A (zh) | Canvas代码生成方法、装置、电子设备及存储介质 | |
CN103294652B (zh) | 一种数据转换方法及系统 | |
CN109086114A (zh) | 一种生成web前端交互界面的方法、装置及终端 | |
CN101699397A (zh) | 实现Java与XML数据绑定的方法 | |
CN110147402A (zh) | Excel文件导入方法及设备、导出方法及设备 | |
Ryser et al. | Using dependency charts to improve scenario-based testing | |
CN102841950B (zh) | 一种逻辑存储单元自动验证的方法及装置 | |
CN104267966B (zh) | 软件的程序代码的生成方法及装置 | |
CN107133502B (zh) | 一种应用程序的处理方法及装置 | |
CN110262783A (zh) | 一种接口生成方法、装置及终端设备 | |
CN206921077U (zh) | 一种基于uvm的寄存器验证模型自动生成装置 | |
CN106462431A (zh) | 在高级综合中提取系统架构 | |
CN109885290A (zh) | 应用程序服务描述信息生成与发布方法、装置和存储介质 | |
Boström et al. | Contract-based verification of discrete-time multi-rate Simulink models | |
CN104898991B (zh) | 一种基于自动化ral的寄存器访问方法及系统 | |
CN112799655A (zh) | 一种基于预训练的多类型代码自动生成方法、装置及介质 | |
CN102520953A (zh) | 基于bpmn的页面生成方法和装置 | |
CN111245633B (zh) | 微电网主设备的配置文件及其运行方法 | |
CN112905450B (zh) | 基于模板变量替换的芯片寄存器自动开发系统 | |
CN102394874B (zh) | Tuxedo数据协议转换方法 | |
CN110175022A (zh) | 自动生成pojo类的方法、装置及存储介质、计算机设备 | |
Miao et al. | Research on user interface transformation method based on MDA | |
CN110162309A (zh) | 参数校验方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |