沈智明,资深经理,晶心科技股份有限公司
晶心科技所设计 IP 的目的,是满足客户实际需求,提供低成本高效率的产品给客户,让客户可以做出极具竞争力的SoC,达到客户与晶心科技双赢的目的, 本文介绍的具 OSC 的 FreeRTOS 产品,巧妙的与 AndesCore™结合,客户导入产品后,具竞争力与实用性,本文的目的期望能够让更多的读者清楚这个产品的特性与优势进而使用此产品。
某些电子产品的应用是不同的时间需要运行不同的功能,这时需要大空间的ROM 与 RAM 来存放与运行时会用到的各式各样的功能。因为 CPU 同时间只会运行一种功能。所以在务实与经济的考虑下可以使用 overlay 的方式来满足此类型产品的需求, 不但大幅降低 RAM 空间的使用,也达成硬件成本降低,使得产品竞争力大大的提升。达成 overlay 的方式有两种,纯软件 overlay 与硬件加速 overlay。纯软件的 overlay 不须增加硬件,但软件工程师写程序时需自己配置functions 摆放的位置,容易出错;呼叫 functions 时需要经过额外的处理,降低程序效能。因此纯软件的方法多用于只需偶而更换 overlay 的应用。例如 audio player,一条歌播完下一条开始前才需要检查是否要用不同 decoder。我们有另一篇文章针对软件 overlay 做介绍,本文不多加探讨。
硬件加速的 overlay 使用少许硬件 gate count < 2K (OSC, Overlay SRAM Controller),提供软件透明的 overlay 处理。软件工程师写程序时,可以假设有一个很大的连续程序空间,完全不需配置 functions 摆放的位置,这大大增加开发程序的效率;同时,呼叫 functions 时完全没有任何纯软件方式的 overhead。上述之 OSC 优点可以符合客户之需求,如果客户系统复杂,要做的事比较多,需要用到多任务(Multi-tasking),则晶心科技「支持 OSC 的 FreeRTOS 产品」就是最佳解方案。
1. Andes OSC 工作原理
先设定AndesCore™ NCEOSC100 IP中缓存器,再与运行软件做整合搭配, 即可执行OSC的功能。
1.1 设定 OSC IP 的缓存器与动作解说
• OSC Control Register, OSCCTRL (+0x00)
• OVL_SZ: 3’h4 (16KB) RO/WI
• OVL_VALID: 0
• Fixed Region Size Register, OVLFS (+0x04)
• OVL_FSZ: 8’h18 (96KB) RW
• Overlay Region Base Register, OVLBASE (+0x08)
• Overlay Region End Register, OVLEND (+0x0C)
在OSC设计中SRAM分为两个区域一个是”fixed region” 另一个是 “overlay region”,fixed region 为低地址的 SRAM ,其大小由OVLFS 缓存器设定。overlay region 是一个动态的区域,其地址由OVLBASE缓存器设定,大小由OVL_SZ 设定。当CPU运行时存取地址落在缓存器 OVLBASE与OVLEND之间时OSC将自动转址到SRAM的overlay region内,如图1所示。
因应实际需求设定多个Overlay 区域,当发生 ”Overlay Miss” 时,经由Overlay Exception的机制与软件的搭配,可以将storage 中的 overlay page N 复制到 SRAM 中的Overlay Region,如图1所示。关于overlay page 置换的工作原理将于下两个章节中做说明。
图 1. Overlay 范例说明
CPU运行时存取地址不在fixed region 或是当时有效的 overlay page 时,会发生Overlay Miss。当o Miss 发生时OSC会产生illegal instruction (32’hcoddcodd) 造成general exception。因为也有其他原因也会产生general exception,如何区分出overlay miss 与其他general exception于下个章节说明。
1.2 Overlay Exception 侦测
当进入 general exception 时可透过软件检验下列程序来判断是否为overlay miss:
Step 1 如果 interrupt level 已经到达最大值 (PSW.INTL == Max INTL) ,这是 fetal error 不是overlay miss。
Step 2 必须是ITYPE.EYPE==1,才有机会是overlay miss。
Step 3 检查IPC值,如果是落在fixed region 或是当时有效的 overlay page 时这是真正的 illegal exception case. 如果不是在这两个区域则是overlay miss。
经过前面3步骤验证,如果确定是overlay miss ,则可进行Overlay exception handling 的动作。
1.3 执行 Overlay Exception Handling 的动作
确定 overlay miss 后,做更新overlay region的动作。
Step 1 得到新的overlay region 地址:
– 从IPC得到更新overlay page的起始位置。
– 更新OVLBASE 缓存器。
Step 2 更新的overlay page内容复制到 SRAM 中的overlay region
Step 3 最后执行iret返回overlay miss发生时的地址。
2. 具 OSC 的 FreeRTOS 介绍
Andes 结合OSC 与 FreeRTOS设计出具 OSC的FreeRTOS ,OSC的功能与原理已经介绍于上个章节,本章节将说明具 OSC的FreeRTOS与一般的FreeRTOS 的差异处,并列举范例程序的运行展现OSC与FreeRTOS的功能。
2.1 具OSC的FreeRTOS内存配置
具OSC的FreeRTOS的内存配置如图2 , 范例程序的linker script设定了LMA(系统image)的内存配置模式,其中overlay0, overlay1 与 overlay2是仿真storage 的地址。linker script 设定VMA(系统执行时)的内存配置模式,当系统运行进入overlay1,2.. 时产生overlay miss 触发 exception 将overlayN 内的数据复制到 overlay region 中,这样的设计达到一份Overlay Region 的SRAM空间可以在不同时间执行对应不同的overlayN程序代码的目的。
图 2.具 OSC 的 FreeRTOS 内存配置图
2.2 osc_hisr task
从图2的overlay0,1,2 中可以发现系统会运行task1与task2。说明FreeRTOS 做overlay region置换时也会执行scheduler 做置换task 的工作。本范例程序设计是在standard FreeRTOS 中增加一个 osc_hisr task 做overlay region 置换与管理的工作。如何达到OSC 与 osc_hisr task的结合需从Overlay Exception Handling的动作开始研讨:
• 当 overlay exception 被触发时,送 message 给 queue 启动 osc_hisr task。
• 因为 osc_hisr task 做 overlay region 资料的置换,所以 osc_hisr task 尚未执行完成前,不可以执行Overlay Exception Handling 的 iret.
osc_hisr task 的主要工作在:
• Map overlay region
• overlay region 数据的复制
osc_hisr task 设计的原则:
• 此 task 必须是最高 priority task.
• 此 task 必须放在 fixed region.
2.3 范例程序运行
具 OSC 的 FreeRTOS 在 Andes EVB 上直接运行得到的结果如图 3,范例程序中键入 3 时,是进行 task 转换,因为不同 task 运行相对应的 overlay function 从console task 转成task1 再转成task2 也会产生相对应的page fault 执行osc_hisr task。图 3 红色箭头与数字转变可以得知 task 转换启动 function overlay 运作,从此范例程序中可同时验证 OSC 与 FreeRTOS 两者的功能。
图 3.范例程序执行结果
3. 结语
本文第一章说明 Andes OSC 的工作原理与功能,第二章说明 FreeRTOS 如何与 Andes OSC 整合运作,在 OSC 的 FreeROTS 中也增加一个最高 priority task “osc_hisr” 来执行 OSC 相对应的功能,进而说明了具 OSC 的 FreeRTOS 需注意的设计原则,具 OSC 之 FreeRTOS 是由软件与硬件单元所组成,兼具硬件的效能与软件的弹性。
已经有业界客户取得 Andes 的具 OSC 之 FreeRTOS 开发出具竞争力产品在市面上销售,由此可知具 OSC 之 FreeRTOS 具有经济实用的价值,可以协助客户在使用 AndesCore™时,设计出具有弹性且高附加价值之产品。