引言
寄存器模块在集成电路SOC和IP开发中是常见的模块,主要是让用户软件可以操作硬件,是软件和硬件的桥梁,也是固件开发者和终端软件开发者最关注的部分;
寄存器模块的一端跟芯片内部总线相连,如AXI/AHB/APB等,另一端则直接跟模块的核心相连,通过这个桥梁,用户软件可以配置、操作硬件,也可以读取硬件状态;
围绕寄存器模块,工程师有许多工作需要做,比如硬件源代码,验证UVM代码,验证C代码,C头文件,Trace32寄存器描述文件,开发文档,用户手册等等;这些工作重复且有规律,非常适合用自动化工具来生成;
寄存器工具
开发一个通用的寄存器工具,需要满足以下几个方面的需求,才能适应更广的使用场景:
数据文件格式的多样性,如Excel、XML、ipxact、批处理命令文件,其它文本等
数据文件之间可以相互转换
数据输入的多样性,如图形界面、数据文件、命令行等
支持更多数据类型的数据模型
丰富的输出文件类型,且支持用户扩展
对用户输入数据的有效性进行验证
支持丰富的数据操作,如合并、分拆、复制、移动、删除、重复、查找、过滤、批处理等
可灵活配置的硬件源代码生成,如接口类型,同步异步等
支持丰富的寄存器类型和位域类型,包括关联型的和独立型
RegFab
RegFab是笔者开发的通用寄存器工具,遵循以上全部原则,力求为工程师打造一个好用的工具,便捷,高效; 为了支持第三方IP,RegFab支持标准的ipxact文件,intel的XML文件,SVD文件;对于自研IP模块,支持固定的Excel模板,或者用户使用工具提供的命令写一个批处理文件,用命令创建寄存器及一些配置信息;另外工具还提供GUI界面创建、编辑寄存器内容,直观明了;各个文件格式之间可以相互转换,方便对外交流; RegFab内部数据模型除了寄存器、位域,还有常数、参数、寄存器组、接口、复位、访问、枚举、存储器、中断等模型,模型的属性基本上涵盖了全部寄存器相关的信息,力求可以处理所有跟寄存器有关的需求; 寄存器工具最重要的部分是输出特定格式的文件,目前RegFab支持下面几种文件类型:
Verilog寄存器模块源代码
HTML格式的开发文档,适合内部使用
验证用UVM代码
验证用C语言代码
C语言的头文件,定义一些宏、结构体、函数
软件开发工具Trace32用的寄存器描述文件
docx格式的寄存器用户手册
当然,除了这些工具自带的文件类型,用户可以扩展自己的文件类型,RegFab支持使用模板机制来做扩展,包括扩展不同排版风格的docx用户手册; Verilog源代码是寄存器工具最重要的输出文件,它包含以下内容:
可选择的接口类型:AXI、AHB、APB、MEM
支持寄存器和ROM/RAM的混合存在
可选择地生成输入/输出同步器
可选择的同步复位和异步复位,以及复位掩膜
可选择的丰富寄存器类型,及位域类型
除了以上的基本功能外,RegFab还开发了一些数据级的功能,以满足开发过程中所遇到的困难和需求,可以批量执行一些操作,比如以下一些例子:
检查用户输入数据的有效性,比如:地址重叠,信息缺失,类型冲突等
将一个地址范围内的寄存器移动到另外一个地址段
批量修改满足一定名字匹配规则的寄存器、位域,或者其它类型的属性
相同类型的寄存器以一定地址间隔重复一些次数,只有名字后缀上的差别,其它完全相同
将多个模块的寄存器文件合并起来产生输出文件
对于工具的使用形式,RegFab提供以下几种工作模式,最大程度满足各类工程师的工作习惯:
GUI界面模式
命令行模式
命令行交互模式
批处理文件模式
总结
在大规模集成电路产品开发中,庞大的硬件规模必然对应众多的寄存器模块,随之而来的就是巨大的工作量 ;所以出现自动化的寄存器工具是自然而然的想法,工具的开发难度不算高,带来的好处却是肉眼可见的;一款想工程师之所想,忧工程师之所忧,功能强大,配置灵活,使用方便的寄存器工具,也是工程师们喜闻乐见的心头好!
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !