CN116108782B - 一种mcu外设控制寄存器行为模拟方法与相关装置 - Google Patents
一种mcu外设控制寄存器行为模拟方法与相关装置 Download PDFInfo
- Publication number
- CN116108782B CN116108782B CN202310395796.4A CN202310395796A CN116108782B CN 116108782 B CN116108782 B CN 116108782B CN 202310395796 A CN202310395796 A CN 202310395796A CN 116108782 B CN116108782 B CN 116108782B
- Authority
- CN
- China
- Prior art keywords
- value
- area
- access action
- updating
- access
- 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
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种MCU外设控制寄存器行为模拟方法及相关装置,涉及模拟仿真技术领域。首先构建与外设内存映射空间等宽的多个共享内存空间,当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读或写操作时,更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致;在模拟器运行主机中,依据访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至外设内存映射空间,同时更新访存动作应答标记区的值与访存动作申请标记区的值一致,以应答运行于FreeRTOS的POSIX环境的MCU的外设访问操作。本申请具有能够模拟真实MCU外设控制寄存器的行为的优点。
Description
技术领域
本申请涉及模拟仿真技术领域,具体而言,涉及一种MCU外设控制寄存器行为模拟方法与相关装置。
背景技术
随着电子技术的飞速发展,芯片的功能复杂性日益提高,市场竞争全球化,使开发周期不断缩短。同时,片上系统的设计越来越复杂,单个片上系统芯片往往需要大量不同类型的微控制器和固件运行在其中以支持该片上系统的运行。各个微控制器子系统的固件开发工作面临巨大挑战。
芯片的开发通常包括芯设计,硅前验证,硅后验证等阶段。硅前验证时通常需要固件的配合以便达到必要的测试覆盖率。考虑到紧张的项目周期以及硅前仿真环境的成本和客观的仿真速度等因素,固件本身的开发和验证工作会被提前到该阶段之前。
为了给整个片上系统的仿真验证提供可靠固件,往往需要搭建独立的固件开发和验证环境,例如基于FPGA硬件的开发评估板,或纯虚模拟环境。
FreeRTOS作为主流的实时操作系统,在各类微控制器项目中都有广泛的应用。它的Linux Posix移植为芯片设计初期基于纯虚模拟环境的固件开发提供了便利。运行在其中的业务逻辑可以直接调用FreeRTOS的系统服务,和运行于真实平台并无差别。但对MCU的外设驱动部分支持不足,无法实现外设行为模拟。
综上,现有技术中存在无法模拟MCU外设行为的问题。
发明内容
本申请的目的在于提供了一种MCU外设控制寄存器行为模拟方法与相关装置,以解决现有技术中存在的无法模拟MCU外设行为的问题。
为了实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种MCU外设控制寄存器行为模拟方法,应用于FreeRTOS的POSIX环境,所述FreeRTOS的POSIX环境中包括MCU与模拟器运行主机;所述方法包括:
构建与外设内存映射空间等宽的多个共享内存空间,其中,所述多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区,且所述访存动作申请标记区与所述访存动作应答标记区用于同步MCU与模拟器运行主机的动作;
当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读或写操作时,更新访存动作申请标记区的值,以使所述访存动作申请标记区与所述访存动作应答标记区的值不一致;
在模拟器运行主机中,依据所述访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至所述外设内存映射空间;
更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU的读写操作得以完成。
当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读操作时,更新访存动作申请标记区的值的步骤包括:
将所述访存动作申请标记区的值更新为当前值的下一个奇数值,或更新预设位域的值为第一值;
当运行于FreeRTOS的POSIX环境的MCU执行写操作时,更新访存动作申请标记区的值的步骤包括:
将所述访存动作申请标记区的值更新为当前值的下一个偶数值,或更新预设位域的值为第二值。
所述多个共享内存空间中还包括访问属性标记区与上锁区;当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读或写操作时,在更新访存动作申请标记区的值的步骤之前,所述方法还包括:
将寄存器转换为相对于外设内存映射空间基址的偏移量与位宽;
依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;
依据所述偏移量与位宽在所述上锁区的相应位置逐一使用原子比较并交换操作上锁;
在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,所述方法还包括:
将上锁区域逐一解锁。
所述多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区;当运行于FreeRTOS的POSIX环境的MCU对外设空间执行写操作时,在更新访存动作申请标记区的值的步骤之前,所述方法还包括:
将寄存器转换为相对于外设内存映射空间基址的偏移量与位宽;
依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;
依据所述偏移量与位宽在所述上锁区的相应位置逐一使用原子比较并交换操作上锁;
将写入值存入所述未提交的写缓冲区;
将寄存器的值更新至所述外设内存映射空间的步骤包括:
将所述未提交的写缓冲区的值更新至所述外设内存映射空间;
在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,所述方法还包括:
将上锁区域逐一解锁。
另一方面,本申请实施例还提供了一种MCU外设控制寄存器行为模拟装置,其特征在于,应用于FreeRTOS的POSIX环境,所述FreeRTOS的POSIX环境中包括MCU与模拟器运行主机;所述装置包括:
共享内存空间构建单元,用于构建与外设内存映射空间等宽的多个共享内存空间,其中,所述多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区;
标记区更新单元,用于当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使所述访存动作申请标记区与所述访存动作应答标记区的值不一致;
数据更新单元,用于在模拟器完成寄存器模拟动作后,依据所述访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至所述外设内存映射空间;
标记区更新单元,还用于更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU的读写操作同步。
当运行于FreeRTOS的POSIX环境的MCU执行读操作时,所述标记区更新单元用于将所述访存动作申请标记区的值更新为当前值的下一个奇数值,或更新预设位域的值为第一值;
当运行于FreeRTOS的POSIX环境的MCU执行写操作时,所述标记区更新单元用于将所述访存动作申请标记区的值更新为当前值的下一个偶数值,或更新预设位域的值为第二值。
对于读操作,所述多个共享内存空间中还包括访问属性标记区与上锁区,所述装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;依据所述偏移量与位宽在所述上锁区的相应位置逐一上锁;
所述数据处理单元还用于在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
对于写操作,所述多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区;所述装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;依据所述偏移量与位宽在所述上锁区的相应位置逐一上锁;将写入值存入所述未提交的写缓冲区;
所述数据处理单元还用于将所述未提交的写缓冲区的值更新至所述外设内存映射空间;并在在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
第三方面,本申请实施例还提供了一种电子设备,包括:
存储器,用于存储一个或多个程序;
处理器;
当所述一个或多个程序被所述处理器执行时,实现上述的方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的方法。
相对于现有技术,本申请具有以下有益效果:
本申请实施例提供了一种MCU外设控制寄存器行为模拟方法及相关装置,首先构建与外设内存映射空间等宽的多个共享内存空间,其中,多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区;当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致;在模拟器运行主机中,依据访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至外设内存映射空间;更新访存动作应答标记区的值与访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU的读写操作得以完成。由于本申请通过设置多个共享内存空间的方式,实现了外设内存映射空间的读写操作,模拟了真实MCU外设控制寄存器的行为。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。
图1为本申请实施例提供的电子设备的模块示意图。
图2为本申请实施例提供的MCU外设控制寄存器行为模拟方法的示例性流程图。
图3为本申请实施例提供的共享内存空间的示意图。
图4为本申请实施例提供的MCU外设控制寄存器行为模拟方法中读操作流程示意图。
图5为本申请实施例提供的MCU外设控制寄存器行为模拟方法中写操作流程示意图。
图中:100-电子设备;101-处理器;102-存储器;103-通信接口。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
在本申请的描述中,需要说明的是,术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该申请产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
在本申请的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
正如背景技术中所述,FreeRTOS能够实现纯虚拟环境模拟,运行在其中的业务逻辑可以直接调用FreeRTOS的系统服务,和运行于真实平台并无差别。但对MCU的外设驱动部分支持不足,无法实现外设行为模拟。
其中,外设指与MCU连接的组件,例如,对于某无人机而言,MCU的外设可以包的陀螺仪与电机,陀螺仪与电机均与MCU电连接,并且,MCU能够获取陀螺仪的数据,并依据该数据控制电机的运行转速等参数。
在实际的芯片中,外设也可以指不同种类的寄存器,例如中断寄存器等,目前的FreeRTOS也无法模拟各类寄存器的行为。
有鉴于此,本申请提供了一种MCU外设控制寄存器行为模拟方法,通过设置多个共享内存空间,并将数据挂载至共享内存空间的方式,实现真实寄存器行为模拟。
需要说明的时,本申请提供的MCU外设控制寄存器行为模拟方法可以应用于电子设备100中,该电子设备搭建有FreeRTOS的POSIX环境,其中,本申请所述的电子设备可以为模拟器等设备,图1示出本申请实施例提供的电子设备100的一种示意性结构框图,电子设备100包括存储器102、处理器101和通信接口103,该存储器102、处理器101和通信接口103相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
存储器102可用于存储软件程序及模块,如本申请实施例提供的MCU外设控制寄存器行为模拟装置对应的程序指令或模块,处理器101通过执行存储在存储器102内的软件程序及模块,从而执行各种功能应用以及数据处理,进而执行本申请实施例提供的MCU外设控制寄存器行为模拟方法的步骤。该通信接口103可用于与其他节点设备进行信令或数据的通信。
其中,存储器102可以是,但不限于,随机存取存储器(RandomAccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除可编程只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器101可以是一种集成电路芯片,具有信号处理能力。该处理器101可以是通用处理器,包括中央处理器(CentralProcessingUnit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以理解,图1所示的结构仅为示意,电子设备100还可以包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
下面对本申请提供的MCU外设控制寄存器行为模拟方法进行示例性说明:
作为一种可选的实现方式,请参阅图2,该方法包括:
S102,构建与外设内存映射空间等宽的多个共享内存空间,其中,多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区;
S104,当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致;
S106,依据访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至外设内存映射空间;
S108,更新访存动作应答标记区的值与访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU在外设内存映射空间实现读或写操作。
外设通过片上或片外总线与MCU系统相连,MCU对外设的访问普遍使用内存映射的方式。例如,请参见表一:
与之相关的典型处理程序如下:
#define INTR_PENDING 0xB0001000
#define INTR_CLEAR 0xB0001004
#define INTR_MASK 0xB0001008
#define MMCR_GET(addr, bw, val) val = \
*((const volatile uint##bw##_t *)addr)
#define MMCR_SET(addr, bw, val) *((volatile uint##bw##_t *)addr) =val
#define MMCR_GET_32b(addr, val) MMCR_GET(addr, 32, val)
#define MMCR_SET_32b(addr, val) MMCR_SET(addr, 32, val)
void interrupt_service_example ( void )
{
uint32_t pending, mask;
uint32_t ops;
MMCR_GET_32b (INTR_MASK, mask); // fetch the mask
While (1) {
MMCR_GET_32b (INTR_PENDING, pending); // fetch the pending bits
pending&= ~mask; // handle only the
// unmasked interrupts
if (!pending) {
break;
}
ops := the bit index of the lowest 1;
Service interrupt of ops;
MMCR_SET_32b (INTR_CLEAR, 1<<ops);
}
}
其中,该段程序中,表征了通过使用内存映射的方式实现数据的调用,当需要控制中断挂起寄存器时,MCU可以给中断屏蔽寄存器下发指令,进而通过中断屏蔽寄存器实现对中断挂起寄存器的操作。
具体地,该示例寄存器中,中断清除寄存器和中断挂起寄存器是不同的地址。程序读取“中断挂起寄存器”,与“中断屏蔽寄存器”的读数比较后,对未屏蔽的位逐一调用其中断服务程序。并通过对“中断清除寄存器”的写1动作清除“中断挂起寄存器”中的相应位。可以看出,代码段若要退出循环,需要模拟写1到“中断清除寄存器”清除“中断挂起寄存器”中的相应比特位的动作。该动作在真实环境里由芯片的门级电路完成。即若需要中断挂起寄存动作,实际需要控制中断清除寄存器动作,才会使中断挂起寄存器动作。
在此基础上,本申请设置了多个共享内存空间,并通过相关宏定义,达到模拟控制寄存器行为的目的。
其中,借助Posix兼容系统的shmget, shmat系统调用,可将外设内存映射空间挂载到共享内存空间,且该共享内存空间的位置可满足预定义的外设基地址位置的要求。实际应用中可以仅申请一个或数个足够大的共享内存区域,以覆盖离散的外设配置寄存器空间之要求。例如,申请一块256MB大小的共享内存区域挂载到0xB0000000位置,则区域[0xB0000000, 0xBFFFFFFF]可覆盖表一所述寄存器,以及其它需调试的寄存器。示例如下:
int32_t shmid = shmget( (key_t)MMCR_MAP_SPACE_KEY,
0x10000000,
0666 | IPC_CREAT ); // allocate the space
assert(shmid>= 0);
void * mmcr_space = (void *)shmat(shmid, (void *)0xB000000, 0);
assert(NULL != mmcr_space);// mount it to 0xB0000000
上述代码示例中,表征了申请[0xB0000000, 0xBFFFFFFF]内存,利用该内存区域可以实现寄存器的动作。
为了实现最小为字节粒度的存取模拟,每个共享内存空间的宽度与外设内存映射空间的宽度相等。在行为模拟过程中,分为读或写两种流程,且两个流程都通过共享内存空间与模拟器主循环交换信息和同步状态。
当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,模拟器中的MCU会更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致,此时,当模拟器检测到访存动作申请标记区的值与访存动作应答标记区的值不一致时,触发寄存器的模拟动作,并将寄存器的值更新到外设内存映射空间中,更新访存动作应答标记区的值与访存动作申请标记区的值一致。而当模拟器中的MCU检测的到访存动作申请标记区与访存动作应答标记区的值一致后,则表示寄存器动作已完成,可以继续之后的操作。
需要说明的是,本申请提供的宏包括读操作宏与写操作宏,在此基础上,请参阅图3,多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区,即在实际应用中,除了外设内存映射空间,初始化程序还会申请额外的5倍于外设内存映射空间的共享内存用于存放控制信息,以便实现最小为字节粒度的存取模拟,这5个区域不必连续或固定其挂载位置。
模拟器进程通过额外的数据结构与运行于FreeRTOS的POSIX环境的MCU固件的访存动作进行交互,以实现对外设控制寄存器的模拟。
需要说明的是,访问属性标记区用于确定当前寄存器的访问属性,访问属性控制块由初始化程序逐字节填充外设内存映射空间对应字节的访问属性。每个字节8个比特共可标记最多8种访问属性。本例中只使用了其中5个,分别为:可读(bit 0)、可写(bit 1)、读动作需同步(bit 2)、写动作需同步(bit 3)、写动作需分步提交(bit 4)。
当进行读操作时,首先将寄存器转换为偏移量与位宽,然后依据偏移量与位宽从访问属性标记区中确定访问属性,最后依据偏移量与位宽在上锁区的相应位置逐一上锁。通过上锁的方式,以实现MCU访问外设寄存器总线一致性和给定时刻对同一寄存器访问的排他性。在完成所要模拟的外设行为之后,模拟器会将上锁区域逐一解锁。
当进行写操作时,首先将寄存器转换为偏移量与位宽,然后依据偏移量与位宽从访问属性标记区中确定访问属性,再依据偏移量与位宽在上锁区的相应位置逐一上锁,最后将写入值存入未提交的写缓冲区。同理地,在完成所要模拟的外设行为之后,模拟器会将上锁区域逐一解锁。
通过设置未提交的写缓冲区,可以实现写缓冲区与外设内存映射空间之间的数据对比,实现更新前与更新后的数据对比,便于查看更新了哪个bit,更新了哪个位置。
下面结合图3,对读写操作过程中的具体流程进行详细说明:
其中,当进行读操作时,请参阅图4,包括以下步骤:
步骤0、寄存器在MCU固件基于FreeRTOS的Posix移植的进程空间(标号11)中的地址可由C语言取地址符号&得到。寄存器R的位宽,可根据实际使用场景,由C语言sizeof语法或宏定义指定。
#define MMCR_GET( reg, bw, val ) mmio_read(reg, bw,&(val))
步骤1、实现寄存器读取函数,原型可定义为
bool mmio_read(void * register, size_t bit_width, void * pData);
步骤2、在读取函数中,首先检查访问属性标记区(标号18)对应此寄存器的属性(标号24)是否允许读操作和需要读同步。条件不满足时可直接从读取函数返回以跳过后续操作。
步骤3、访问条件满足时,从约定的顺序(例如永远从低址向高址)逐一调用“原子性比较和交换函数”(该操作的形式可因所使用的编译器或所运行的宿主机器架构不同而有所不同,例如gcc在x86的场景该操作的函数原型为bool__sync_bool_compare_and_swap(T*__p,U__compVal,V__exchVal))。该步骤的目的是为了实现MCU端访问相同寄存器单元的互斥特性,即便是多任务场景,在指令架构级别上,对同一地址的访问不会同时发生。约定加锁顺序是为了避免多任务场景对同一寄存器单元的部分字节锁住而造成死锁。“原子性比较和交换函数”保证了在多任务场景加锁的正确性。用于存放“锁”的变量在上锁区(标号15)的相同位移位置(标号21)。由于上锁区的大小与外设内存映射空间一致,每个寄存器有独立的锁空间,从而实现不同寄存器之间的访问互不干扰。
由于初始化时上锁区区域被置为全0,“原子性比较和交换函数”可以用0与要加锁的位置比较并换入非零值。如果原子操作成功,则相应位置变为非零值,代表加锁成功。如果原子操作失败,则循环此操作直到成功为止。在绝大多数情况下加锁动作可一次性成功,这是由外设驱动的特性导致的。即,在MCU固件中,同一个外设的驱动程序对其寄存器存取往往发生在一个执行线程,极少发生多个线程存取同一个外设寄存器的情况。
步骤4、将访存动作申请标记区(标号16)里相同偏移量的单元位置(标号22)更新为一个与当前值不同的数值。以便通知仿真器一侧本单元正在等待同步。可以使用特定的比特位或更新后数值的奇偶性以区分当前MCU一侧正在进行的是读或写操作。
步骤5、等待直到访存动作应答标记区(标号17)相同偏移量单元(标号23)被更新为与步骤4中单元(标号22)相同的数值。代表仿真器一侧已经准备好了要读取的数据到外设内存映射空间的相应寄存器位置(标号19)。
步骤6、逐一解锁上锁区(标号15)该寄存器位宽所覆盖的字节(标号21)并返回寄存器数据。
当进行写操作时,请参阅图5,包括以下步骤:
步骤0、寄存器R在MCU固件基于FreeRTOS的Posix移植的进程空间(标号11)中的地址可由C语言取地址符号&得到。寄存器R的位宽,可根据实际使用场景,由C语言sizeof语法或宏定义指定。
#define MMCR_SET( reg, bw, val ) mmio_write(reg, bw, val)
步骤1、实现寄存器写入函数,原型可定义为
bool mmio_write(void * register, size_t bit_width, uint32_t data);
步骤2、在写入函数中,首先检查访问属性标记区(标号18)对应此寄存器的属性(标号24)是否允许写操作和需要写同步。条件不满足时可直接从读取函数返回以跳过后续操作。
步骤3、访问条件满足时,从约定的顺序(例如永远从地址向高址)逐一调用“原子性比较和交换函数”(该操作的形式可因所使用的编译器或所运行的宿主机器架构不同而有所不同,例如gcc在x86的场景该操作的函数原型为bool __sync_bool_compare_and_swap (T*__p,U__compVal,V__exchVal))。该步骤的目的同前。约定加锁顺序同前。用于存放“锁”的变量在上锁区 (标号15)的相同位移位置(标号21)。由于上锁区区域的大小与外设内存映射空间一致,每个寄存器有独立的锁空间,从而实现不同寄存器之间的访问互不干扰。
步骤4、如果寄存器的属性(标号24)表示需要进行分步的写提交(bit 4),则暂存MCU对寄存器R的写入值到未提交的写缓冲区(标号14)的对应位置处(标号20)。该步骤的目的是为了实现精确到比特的写入控制。例如:某寄存器的bit 0不可改写,当前值为1,MCU对整个寄存器的执行写入操作,写入值为0x11223344 (bit 0 为0),则最终由仿真器一端同步并提交的最终值为0x11223345(bit 0 为1)。如果寄存器的属性(标号24)表示不需要进行写提交,则可直接将写入值存入外设内存映射空间(标号13)的对应寄存器位置(标号19)。
步骤5、将访存动作申请标记区(标号16)里相同偏移量的单元位置(标号22)更新为一个与当前值不同的数值。以便通知仿真器一侧本单元正在等待同步。可以使用特定的比特位或更新后数值的奇偶性以区分当前MCU一侧正在进行的是读或写操作。
步骤6、等待直到访存动作应答标记区(标号17)相同偏移量单元(标号23)被更新为与步骤5中单元(标号22)相同的数值。代表仿真器一侧已经准备好了要写入数据的同步操作,(步骤4中寄存器的属性表示需要写提交时)并将最终寄存器值放入到了外设内存映射空间的相应寄存器位置(标号19)。
步骤7、逐一解锁上锁区区域(标号15)该寄存器位宽所覆盖的字节(标号21)。
仿真器一侧,在主工作循环里,可以通过预定义的宏逐一检查需要模拟的寄存器行为,当某个上锁区区域不为零(标号21),且其访存动作申请标记区单元内容(标号22)与访存动作应答标记区相应单元的值(标号22)不同时,代表此时MCU一侧正在发生访问该寄存器的操作并等待模拟器的同步。仿真器可根据实际需模拟的行为,更新外设内存映射空间后,将访存动作申请标记区的相应单元内容(标号22)拷贝到访存动作应答标记区相应位置,以使MCU侧可继续执行。
基于上述实现方式,本申请实施例还提供了一种MCU外设控制寄存器行为模拟装置,应用于模拟器,装置包括:
共享内存空间构建单元,用于构建与外设内存映射空间等宽的多个共享内存空间,其中,多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区。
可以理解地,通过共享内存空间构建单元可执行上述的S102。
标记区更新单元,用于当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致。
可以理解地,通过标记区更新单元可执行上述的S104。
数据更新单元,用于依据访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至外设内存映射空间。
可以理解地,通过数据更新单元可执行上述的S106。
标记区更新单元,还用于更新访存动作应答标记区的值与访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU在外设内存映射空间实现读或写操作。
可以理解地,通过标记区更新单元可执行上述的S108。
区分读或写操作的方式较多,本实施例中在当运行于FreeRTOS的POSIX环境的MCU执行读操作时,标记区更新单元用于将访存动作申请标记区的值更新为当前值的下一个奇数值;或者,更新预设位域的值为第一值,例如,将访存动作申请标记区中某一位域的值更新为1。
当运行于FreeRTOS的POSIX环境的MCU执行写操作时,标记区更新单元用于将访存动作申请标记区的值更新为当前值的下一个偶数值。或者,更新预设位域的值为第二值,例如,将访存动作申请标记区中某一位域的值更新为0。其中,表征读操作或写操作的位域可以为同一位域,也可以为不同位域,在此不做限定。
其中,多个共享内存空间中还包括访问属性标记区与上锁区;该装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据偏移量与位宽从访问属性标记区中确定访问属性;依据偏移量与位宽在上锁区的相应位置逐一上锁;
数据处理单元还用于在更新访存动作应答标记区的值与访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
此外,多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区;装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据偏移量与位宽从访问属性标记区中确定访问属性;依据偏移量与位宽在上锁区的相应位置逐一上锁;将写入值存入未提交的写缓冲区;
数据处理单元还用于将未提交的写缓冲区的值更新至外设内存映射空间;并在在更新访存动作应答标记区的值与访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
本申请实施例提供了一种MCU外设控制寄存器行为模拟方法及相关装置,首先构建与外设内存映射空间等宽的多个共享内存空间,其中,多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区;当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使访存动作申请标记区与访存动作应答标记区的值不一致;然后依据访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至外设内存映射空间;更新访存动作应答标记区的值与访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU在外设内存映射空间实现读或写操作。由于本申请通过设置多个共享内存空间的方式,实现了外设内存映射空间的读写操作,模拟了真实MCU外设控制寄存器的行为。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。
也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。
也要注意的是,框图和或流程图中的每个方框、以及框图和或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (10)
1.一种MCU外设控制寄存器行为模拟方法,其特征在于,应用于FreeRTOS的POSIX环境,所述FreeRTOS的POSIX环境中包括MCU与模拟器运行主机;所述方法包括:
构建与外设内存映射空间等宽的多个共享内存空间,其中,所述多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区,且所述访存动作申请标记区与所述访存动作应答标记区用于同步MCU与模拟器运行主机的动作;
当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读或写操作时,更新访存动作申请标记区的值,以使所述访存动作申请标记区与所述访存动作应答标记区的值不一致;
在模拟器运行主机中,依据所述访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至所述外设内存映射空间;
更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致,以使运行于FreeRTOS的POSIX环境的MCU的读写操作得以完成。
2.如权利要求1所述的MCU外设控制寄存器行为模拟方法,其特征在于,当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读操作时,更新访存动作申请标记区的值的步骤包括:
将所述访存动作申请标记区的值更新为当前值的下一个奇数值;
当运行于FreeRTOS的POSIX环境的MCU执行写操作时,更新访存动作申请标记区的值的步骤包括:
将所述访存动作申请标记区的值更新为当前值的下一个偶数值;或,
当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读操作时,更新访存动作申请标记区的值的步骤包括:
更新预设位域的值为第一值;
当运行于FreeRTOS的POSIX环境的MCU执行写操作时,更新访存动作申请标记区的值的步骤包括:
更新预设位域的值为第二值。
3.如权利要求1所述的MCU外设控制寄存器行为模拟方法,其特征在于,所述多个共享内存空间中还包括访问属性标记区与上锁区;当运行于FreeRTOS的POSIX环境的MCU对外设空间执行读操作时,在更新访存动作申请标记区的值的步骤之前,所述方法还包括:
将寄存器转换为相对于外设内存映射空间基址的偏移量与位宽;
依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;
依据所述偏移量与位宽在所述上锁区的相应位置逐一使用原子比较并交换操作上锁;
在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,所述方法还包括:
将上锁区域逐一解锁。
4.如权利要求1所述的MCU外设控制寄存器行为模拟方法,其特征在于,所述多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区;当运行于FreeRTOS的POSIX环境的MCU对外设空间执行写操作时,在更新访存动作申请标记区的值的步骤之前,所述方法还包括:
将寄存器转换为相对于外设内存映射空间基址的偏移量与位宽;
依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;
依据所述偏移量与位宽在所述上锁区的相应位置逐一使用原子比较并交换操作上锁;
将写入值存入所述未提交的写缓冲区;
将寄存器的值更新至所述外设内存映射空间的步骤包括:
将所述未提交的写缓冲区的值更新至所述外设内存映射空间;
在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,所述方法还包括:
将上锁区域逐一解锁。
5.一种MCU外设控制寄存器行为模拟装置,其特征在于,应用于FreeRTOS的POSIX环境,所述FreeRTOS的POSIX环境中包括MCU与模拟器运行主机;所述装置包括:
共享内存空间构建单元,用于构建与外设内存映射空间等宽的多个共享内存空间,其中,所述多个共享内存空间中包括访存动作申请标记区与访存动作应答标记区;
标记区更新单元,用于当运行于FreeRTOS的POSIX环境的MCU执行读或写操作时,更新访存动作申请标记区的值,以使所述访存动作申请标记区与所述访存动作应答标记区的值不一致;
数据更新单元,用于在模拟器完成寄存器模拟动作后,依据所述访存动作申请标记区更新后的值实现寄存器的模拟动作,并将寄存器的值更新至所述外设内存映射空间;
标记区更新单元,还用于更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致,以应答运行于FreeRTOS的POSIX环境的MCU的读写操作。
6.如权利要求5所述的MCU外设控制寄存器行为模拟装置,其特征在于,当运行于FreeRTOS的POSIX环境的MCU执行读操作时,所述标记区更新单元用于将所述访存动作申请标记区的值更新为当前值的下一个奇数值,当运行于FreeRTOS的POSIX环境的MCU执行写操作时,所述标记区更新单元用于将所述访存动作申请标记区的值更新为当前值的下一个偶数值;或,
当运行于FreeRTOS的POSIX环境的MCU执行读操作时,所述标记区更新单元用于更新预设位域的值为第一值,当运行于FreeRTOS的POSIX环境的MCU执行写操作时,所述标记区更新单元用于更新预设位域的值为第二值。
7.如权利要求5所述的MCU外设控制寄存器行为模拟装置,其特征在于,所述多个共享内存空间中还包括访问属性标记区与上锁区,对于读操作,所述装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;依据所述偏移量与位宽在所述上锁区的相应位置逐一上锁;
所述数据处理单元还用于在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
8.如权利要求5所述的MCU外设控制寄存器行为模拟装置,其特征在于,所述多个共享内存空间中还包括访问属性标记区、上锁区以及未提交的写缓冲区;对于写操作,所述装置还包括:
数据处理单元,用于将寄存器转换为偏移量与位宽;依据所述偏移量与位宽从所述访问属性标记区中确定访问属性;依据所述偏移量与位宽在所述上锁区的相应位置逐一上锁;将写入值存入所述未提交的写缓冲区;
所述数据处理单元还用于将所述未提交的写缓冲区的值更新至所述外设内存映射空间;并在在更新所述访存动作应答标记区的值与所述访存动作申请标记区的值一致的步骤之后,将上锁区域逐一解锁。
9.一种电子设备,其特征在于,包括:
存储器,用于存储一个或多个程序;
处理器;
当所述一个或多个程序被所述处理器执行时,实现如权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310395796.4A CN116108782B (zh) | 2023-04-14 | 2023-04-14 | 一种mcu外设控制寄存器行为模拟方法与相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310395796.4A CN116108782B (zh) | 2023-04-14 | 2023-04-14 | 一种mcu外设控制寄存器行为模拟方法与相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116108782A CN116108782A (zh) | 2023-05-12 |
CN116108782B true CN116108782B (zh) | 2023-07-25 |
Family
ID=86265941
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310395796.4A Active CN116108782B (zh) | 2023-04-14 | 2023-04-14 | 一种mcu外设控制寄存器行为模拟方法与相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116108782B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115563914A (zh) * | 2022-09-29 | 2023-01-03 | 飞腾信息技术有限公司 | 验证方法及装置、计算设备、计算机可读存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256502B (zh) * | 2007-02-27 | 2011-02-09 | 国际商业机器公司 | 模拟多处理器系统的系统和方法 |
US20100250875A1 (en) * | 2009-03-25 | 2010-09-30 | Silicon Laboratories Inc. | Eeprom emulation using flash memory |
JP2012155519A (ja) * | 2011-01-26 | 2012-08-16 | Renesas Electronics Corp | シミュレーション装置、シミュレーション方法およびそのコンピュータ・プログラム |
US9424173B2 (en) * | 2014-10-23 | 2016-08-23 | GlobalFoundries, Inc. | Performing secure address relocation within a multi-processor system sharing a same physical memory channel to external memory |
CN109408388B (zh) * | 2018-10-29 | 2021-07-20 | 北京控制与电子技术研究所 | 一种VisualDSP++环境下外设读写模拟方法 |
CN109885466B (zh) * | 2019-01-25 | 2022-07-05 | 上海创景信息科技有限公司 | 处理器c8000的仿真方法、系统及介质 |
CN114461478A (zh) * | 2020-11-09 | 2022-05-10 | 华为技术有限公司 | 模拟器,驱动测试方法,电子设备及计算机可读存储介质 |
CN112527690B (zh) * | 2021-02-10 | 2021-05-18 | 武汉精鸿电子技术有限公司 | 一种针对半导体存储器老化测试的离线调试方法及装置 |
CN114168259A (zh) * | 2021-11-10 | 2022-03-11 | 中国航发控制系统研究所 | 虚拟芯片及虚拟芯片内串口外设的方法 |
CN114330177A (zh) * | 2021-12-23 | 2022-04-12 | 山东云海国创云计算装备产业创新中心有限公司 | 芯片寄存器的系统级验证方法、系统、设备及存储介质 |
CN115422118A (zh) * | 2022-08-30 | 2022-12-02 | 山东泰开高压开关有限公司 | 一种基于共享内存的电力电子变压器监控系统 |
CN115878266A (zh) * | 2022-12-15 | 2023-03-31 | 上海创景信息科技有限公司 | ARM Cortex-A7处理器仿真方法、系统、介质及设备 |
-
2023
- 2023-04-14 CN CN202310395796.4A patent/CN116108782B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115563914A (zh) * | 2022-09-29 | 2023-01-03 | 飞腾信息技术有限公司 | 验证方法及装置、计算设备、计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116108782A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9195786B2 (en) | Hardware simulation controller, system and method for functional verification | |
RU2606878C2 (ru) | Обработка транзакций | |
CN102648449B (zh) | 一种用于处理干扰事件的方法和图形处理单元 | |
US6571204B1 (en) | Bus modeling language generator | |
US7779393B1 (en) | System and method for efficient verification of memory consistency model compliance | |
Clouard et al. | Using Transactional-Level Models in an SoC Design Flow | |
CN106293894B (zh) | 执行事务性功率管理的硬件设备和方法 | |
CN105446841B (zh) | 缓存一致性测试方法 | |
US20080189528A1 (en) | System, Method and Software Application for the Generation of Verification Programs | |
Schüpbach et al. | A declarative language approach to device configuration | |
CN102184290B (zh) | 嵌入式微处理器的周期精确和位精确系统级模型构建方法 | |
WO2011159892A1 (en) | Multiple platform support in computer system firmware | |
de Lima Chehab et al. | Clof: A compositional lock framework for multi-level NUMA systems | |
Lai et al. | Fast profiling framework and race detection for heterogeneous system | |
CN116108782B (zh) | 一种mcu外设控制寄存器行为模拟方法与相关装置 | |
EP4318211A1 (en) | Method for inspecting code under weak memory order architecture, and corresponding device | |
CN115858092A (zh) | 时序仿真方法、装置及系统 | |
CN117667655A (zh) | 验证系统、验证方法、电子设备以及存储介质 | |
CN115185638A (zh) | 一种仿真运行应用程序时获取调用栈的方法及计算设备 | |
Jain et al. | Scaling the UVM_REG model towards automation and simplicity of use | |
US20120191444A1 (en) | Simulation device, simulation method, and computer program therefor | |
Heinig | R2G: Supporting POSIX like semantics in a distributed RTEMS system | |
CN110704260A (zh) | 一种用于处理器io寄存器测试激励的可重用方法 | |
CN111142854A (zh) | 一种微处理器的信息模型建模及生成方法 | |
US20220317927A1 (en) | Adaptive memory consistency in disaggregated datacenters |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CB03 | Change of inventor or designer information |
Inventor after: Chu Ranzhou Inventor after: Zhou Chengjun Inventor before: Chu Ranzhou |
|
CB03 | Change of inventor or designer information |