需要开发多种脚本或利用专门的工具来实现常见代码的生成和模块的集成,具体如下。
·代码集成脚本。
·引脚复用脚本。
·模块模型生成脚本(BFM、Stub模型、接口模型)。
·低速模组(子系统)代码生成和验证脚本。
·寄存器读写代码生成脚本。
·芯片寄存器信息收集和列表脚本。
·低功耗设计电源意图格式生成脚本。
代码集成脚本需要支持初始集成、手工增删、列表增删、固定代码等操作,还需要支持一对一连接、一对多连接(全连接/部分连接)、多对一连接、输入接口连接、输出接口连接等集成方式。代码集成如图2.49所示。
图2.49 代码集成
当集成开始时,基本原则是接口匹配,最简单的方式是,将指定模块的相同命名接口直接相连。由于不同模块的相同作用接口,其命名可能各不相同,因此一般需要经过一定的映射以转换成所指定的相同命名。进一步,可以将接口成组形成特定协议或含义的总线,如AMBA总线(APB、AHB、AXI、ACE、CHI)、DFT总线等,集成时直接指定特定模块间的总线互连,总线内部的多个接口则隐含在脚本内部。
后续集成代码的更新采取“增量方式”,即以当前版本为基础进行增加或减删。可以在当前版本上直接手动进行代码修改,或者读入以一定方式提供的连接关系列表。此外,还应考虑代码的保留或注释。有些模块的接口列表中采用包含(Include)、宏变量和变量传递等代码风格,由代码集成脚本予以支持。
代码集成脚本还应具备一定的检查功能,当发现“输入接口悬空”“多输出接口驱动”等情况时,发出位置信息或报警信息。此外,代码集成脚本还可以考虑生成多种模块模型。
引脚复用脚本包括引脚复用逻辑脚本、引脚复用控制逻辑脚本、引脚连接关系生成脚本和引脚复用逻辑验证脚本。在引脚复用脚本列表中支持:输出引脚复用,包括多路输出(如8路)到单一I/O引脚和同一输出到多个I/O引脚;输入引脚复用,包括同一输入来自多个I/O引脚;引脚分区,包括分布分区和电源分区。引脚复用脚本将生成引脚复用(PinMUX)逻辑代码、引脚控制寄存器(pin_cfg_register)代码,而引脚复用逻辑模块与引脚复用控制逻辑模块和功能模块相连,也与引脚模块(pad_IO)相连。在图2.50中,①表示引脚复用控制逻辑模块与引脚复用逻辑模块的连接,②表示功能模块与引脚复用逻辑模块的连接,③和④分别表示引脚复用逻辑模块与引脚模块的连接。引脚复用脚本还需实现引脚模块的例化。
图2.50 引脚复用连接
引脚复用列表需要指定I/O引脚的属性、类型、复用关系和控制寄存器信息。表2.6给出了一个引脚复用列表示例。
表2.6 引脚复用列表示例
(1)引脚类型:名称、选用的I/O单元。
(2)引脚属性:输入、输出、双向;上挂、下拉、开漏;驱动强度、驱动电压,是否带有施密特触发器功能。
(3)复用关系:是否功能复用,是否DFT复用,是否要分区及分区号是多少。
(4)功能复用信息:复用信号,I/O属性,复用信号输入默认值,如图2.51所示。
(5)DFT复用信息:DFT复用信号,I/O属性,复用信号输入默认值。
(6)复用控制寄存器信息:名称、默认值和地址。
(7)I/O控制寄存器信息:名称、默认值和地址。
图2.51 功能复用信息
依据引脚复用列表,可以生成引脚复用验证环境和用例。
根据寄存器列表生成寄存器读写代码和相应文档。需要填写每个寄存器的名称、所占用比特位、信号名、读写属性(只读、只写、读写)、默认值、偏址、信号描述。表2.7给出了一个寄存器列表示例。
表2.7 寄存器列表示例
脚本产生下述RTL代码。
所生成的文档实例如下。
[0x0] TEST_REG_0
Table test_reg_0 Description
[0x4] TEST_REG_1
Table test_reg_1 Description
[0x10] FLASH_CRM_REG
Table flash_crm_reg Description