高承,王正彦
(青岛大学,青岛 266071)
FPGA设计中信号量管理的硬件电路设计
高承,王正彦
(青岛大学,青岛 266071)
摘要:在对嵌入式实时操作系统μC/OS-II中任务之间通信进行深入研究的基础上,提出了将信号量的管理用基于FPGA设计的硬件电路来完成,同时保证新的混合式实时操作系统对用户来说是透明的,即保证了混合式实时操作系统的可移植性。经过设计和不断地改进,混合式实时操作系统成功的移植到Altera公司的DE2-70开发板上,并完成了信号量管理的测试。这是一次探索性的设计,是混合式嵌入式实时操作系统设计中非常重要的一部分。
关键词:RTOS;FPGA;Nios II;信号量
引言
随着信息化、智能化、网络化的发展,嵌入式系统获得了广阔的发展空间。目前嵌入式技术已成为智能领域的核心技术,特别是物联网的爆发为嵌入式系统提供了广阔的应用空间。
嵌入式系统推动了物联网的崛起,物联网的崛起,也带来嵌入式系统巨大的发展潜力。物联网的核心设备是智能终端,物联的实现就是智能终端的网络化运行。嵌入式系统又是智能终端的“大脑”和“中枢神经”,因此嵌入式系统是物联网产业发展的核心推动力。嵌入式系统是计算机硬件与软件高度融合的智能体,已经形成了巨大的技术空间和人才市场。实时操作系统(RTOS)是嵌入式系统的基础运行平台,其性能的好坏直接影响嵌入式系统性能的高低。
传统的嵌入式实时操作系统,内核和应用程序是放在一起的,内核任务的优先级一般高于应用程序任务的优先级,因此内核任务优先享有CPU使用权,进而使应用程序的执行效率降低。目前,提高嵌入式实时操作系统处理能力主要是通过使用更高主频和更多位数的处理器,或者是改进软件编程算法来实现。但是处理器主频和位数的提高受限于当前的制造工艺,而软件编程算法已经不能使其实时性和稳定性进一步提高。因此,单纯依靠这两种方式来提高嵌入式实时操作系统的处理能力已经远远不能满足需要。鉴于硬件电路在处理并发性任务时的优异表现,越来越多的研究人员开始将目光转向硬件实时操作系统(HRTOS),而近年来不断发展的FPGA也为完成一个硬件实时操作系统的设计提供了很大的便利。
从20世纪80年代开始,国外就提出了硬件实时操作系统的概念。美国的JAEHWAN LEE和INCENT JOHN MOOENY III在分析比较了RTOS调度器的软件、硬件实现的基础上,提出专用硬件IP核实现RTOS调度器,将会大大提高RTOS的工作效率。任务调度是RTOS的核心所在,任务间的通信、外部时间的处理以及中断处理等都离不开任务调度的参与。
巴西的MELLISSA VETROMILLE和LUCIANO OST分析并对比了将RTOS系统任务调度器分别采用硬件和软件实现的效率,结果表明硬件调度模型具有更高的性能。
美国马里兰大学的PAUL KOHOUT、BRINDA GANESH和BRUCE JACOB 实现了硬件实时任务管理,结果也同样表明由硬件来完成最为耗时的任务管理所用时间更短且更可靠。
东北大学的尹振宇、赵海、许久强等提出了一种基于硬件操作系统(HOS)的设计结构,在处理器中添加微代码处理逻辑及硬件处理模块,将比较耗时的操作采用硬件来实现。
总结国内外的发展趋势,目标都是设计一款独立的硬件实时操作系统。但是,独立的硬件实时操作系统没有统一的标准,可移植性也就不够强。基于可移植性的考虑,通过在已有的软件实时操作系统研究的基础上,采用软硬件结合的方式来设计一款实时操作系统,既可以提高效率,又能够保证可移植性。
1混合式实时操作系统整体设计框架
1.1实时操作系统和平台的选择
μC/OS-II[1]由Micrium公司提供,是一个可移植、可固化、可裁减、占先式、多任务实时内核。它提供了基于优先级的任务调度与管理、任务间同步通信、时间管理和中断服务、内存管理等功能。整个内核基本上都是由C语言编写而成,只有少部分CPU 硬件相关部分是采用汇编语言编写的(汇编语言总量只有约200行),便于移植到任何一种其他的CPU 上。正是由于这些优势,所以选用μC/OS-II作为混合式RTOS的参考系统。
硬件部分的设计采用硬件描述语言Verilog HDL[2]来进行编写并综合出硬件电路。选用的软件为Quartus II9.1和NiosII-IDE,Quartus II9.1所带的SOPC Builder(可编程片上系统)可以很方便地根据自己的需要搭建出一个处理器,这个处理器的内核就是Nios II处理器,而外围可以根据自己的需要添加任何需要的外设,包括定时器、PIO口、ROM、FLASH等。同时,通过NiosII-IDE可以将μC/OS-II实时操作系统移植到以Nios II为内核的处理器上,为测试提供了很大便利。而处理器和所设计的硬件电路可以通过已经设计好的AVALON总线来进行通信,而不用自己单独去研究一套新的通信协议来进行软硬件之间的通信。测试采用的是Altera提供的DE2-70开发板。
1.2混合式实时操作系统的整体架构
通过对μC/OS-II系统进行深入分析、分离可以用硬件实现的部分,设计出对应的硬件电路,然后通过AVALON总线实现软件内核和硬件电路之间的通信,同时保证修改后的系统对用户来说是透明的。具体框图如图1所示。
图1 混合式实时操作系统整体框图
图1中的CPU是通过Quartus II软件中的SOPC Builder根据需要搭建的处理器[3],搭建好的处理器作为一个单独的底层模块,然后再将软件操作系统中可以硬化的部分设计成硬件逻辑电路,作为另一个底层模块,最后在顶层模块中对搭建的处理器和硬件逻辑电路进行例化,组成一个完整的模块,下载到DE2-70开发板上进行测试。
2信号量管理软件部分
2.1信号量简介
操作系统必须具有对任务运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致产生灾难性的后果。计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。在μC/OS-II中,使用信号量、消息邮箱、消息队和信号量集来实现任务之间的通信,而信号量就是用于任务间通信的一类事件。通过使用信号量可以给共享资源设置一个标志,这个标志可以控制共享资源的占用情况。
μC/OS-II的信号量由两部分组成:①信号量的计数值,这个值是一个十六位的无符号整数;②任务等待表,该任务等待表是一个长度为64位的整型数组,每一位代表一个任务,若任务处于等待该信号量的状态,那么对应位为1,否则为0。
μC/OS-II中信号量的工作原理:每当有任务申请信号量时,如果信号量计数器OSEventCnt的值大于0,则OSEventCnt减1并使任务继续运行;如果OSEventCnt的值为0,则将任务列入任务等待表OSEventTbl[],从而使任务处于等待状态。如果有正在使用信号量的任务释放了该信号量,则会在任务等待表中找出优先级别最高的等待任务,使它就绪后调用调度器引发一次调度;如果任务等待表中已经没有等待任务,则信号量计数器加1。信号量工作原理图如图2和图3所示。
图2 任务请求信号量
图3 任务发送信号量
2.2事件控制块ECB
图4 事件控制块结构图
为了对任务之间用于通信的事件进行统一管理,μC/OS-II定义了一个叫做事件控制块的数据结构(ECB)[4],ECB可以用来描述信号量、消息邮箱、消息队列等事件。ECB结构如图4所示。用户应用程序的任务通过指针pEvent来访问事件控制块。成员OSEventCnt为信号量的计数器;OSEventPtr主要用来存放消息邮箱或消息队列的指针;OSEventTbl[OS_EVENT_TBL_SIZE]是任务等待表;OSEventGrp表示任务等待表中的各任务组是否存在等待任务;OSEventType是事件的类型,它可以是信号量、消息邮箱或消息队列。用户要根据该域的具体值来调用相应的系统函数,以保证对其操作的正确性。
3混合式实时操作系统信号量管理的硬件设计
3.1软件部分修改
通过分析,在保证对用户透明的条件下,可以对事件控制块中的任务等待表进行硬件化设计[5],那么成员OSEventGrp、OSEventTbl就可以去掉,因为使用软件进行查表和写表操作是比较费时的,尤其是进行表的遍历更加费时。如果将表相关的操作转移到硬件电路中,软件只是负责发送指令或者读取,不仅可以提高效率,还可以降低内存占用、减轻CPU的负担。
在硬件设计中不能动态地添加或者删除存储表,如果用硬件来实现任务等待表,就必须在初始化的时候就建立与事件控制块对应数目的任务等待表。通过对μC/OS-II系统进行分析发现,事件控制块的最大数目是确定的,这为实现任务等待表硬件化设计提供了前提。在硬件化设计时可以直接建立与事件控制块数目相同的任务等待表——[63∶0]TaskWaitTbl[0DK]∶EVENT_COUNT_MAX]。同时,为了能够将软件中修改后的事件控制块和硬件中的任务等待表之间建立一一对应的关系,在事件控制块数据结构中添加一个INT8U类型的变量OSEventCode来为任务控制块进行编号,这个编号将作为与硬件中的任务进行关联的标识码。修改后的事件控制块结构如下所示:
typedef stmct{
INT8UOSEventType;
INT16UOSEventCnt;
void *OSEventPtr;
INT8UOSEventCode;
}OS_EVENT;
在μC/OS-II系统进行初始化的时候会调用事件控制块初始化函数,通过修改该函数来完成对事件控制块的编号,然后对表的各种操作进行编码,当软件需要操作任务等待表的时候,向硬件发送编好号的命令码,最后硬件部分完成对任务等待表的各种操作。信号量管理整体结构如图5所示。
图5 信号量管理硬件化设计整体框图
3.2硬件部分设计
硬件部分主要是根据软件发送的命令码对任务等待表进行相应的操作。命令码编码如下:
001为初始化对应的任务控制块;010为使对应的任务等待表的相应位置1;011为使对应的任务等待表的相应位置0;100为读取相应的任务等待表中最高优先级等待任务的优先级;101为读取相应的等待表中是否有等待任务;110为读取相应的任务等待表中指定位置数据。
硬件部分整体设计图如图6所示。
图6 信号量管理硬件逻辑框图
其中,OSEvent_ctrWord为命令字,由软件写入到硬件,经过指令译码器译码后对任务等待表进行相应的操作;OSEvent_tabCode为事件控制块的编号,此编号使得事件控制块和相应的任务等待表关联起来;OSEvent_prio_in为任务的优先级输入,任务等待表的各个位对应着任务的优先级,从而可以根据优先级来确定对任务等待表的哪一个位进行操作;OSEvent_prio_out为优先级的输出,主要是输出任务等待表中最高优先级等待任务对应的优先级,软件部分可以发送命令码并读取该值;OSEvent_isWait主要是输出当前任务等待表中是否有等待任务;OSEvent_Wait用于读取任务等待表中对应位的数据。
4系统测试与结果
测试平台为Altera公司的DE2-70开发板,将硬件系统下载到开发板上,然后利用NiosII-IDE软件写出测试程序[6],选择μC/OS-II操作系统,完成对系统的测试。程序运行结果如下所示:
Hello from prio:1
Hello from prio:3
task3 running count is 1
Hello from prio:3
task3 running count is 2
Hello from prio:1
Hello from prio:3
task3 running count is 3
Hello from prio:3
task3 running count is 4
Hello from prio:1
Hello from prio:3
task3 running count is 5
Hello from prio:1
fun is running!
Hello from prio:3
task3 running count is 6
Hello from prio:3
task3 running count is 7
Hello from prio:1
Hello from prio:3
task3 running count is 8
Hello from prio:3
task3 running count is 9
测试程序:首先创建任务1(task1,优先级为1),在任务1中创建任务2(task2,优先级为2)和任务3(task3,优先级为3)。task1创建task2和task3后是一个无限循环语句,循环体中主要输出当前运行任务的优先级,即表示task1是不是运行成功;task2是一个无限循环体,每隔2 s请求一次信号量,如果请求成功就调用fun()函数,fun()函数输出“fun is running!”,如果请求不成功则任务2添加到任务等待表中,直到信号量有效再运行;task3每隔3 s 运行一次,当task3运行5次的时候,发送信号量。从结果可以看出,当task3运行5次之后fun()函数调用成功,说明系统测试通过。
结语
参考文献
[1] 任哲.嵌入式实时操作系统μC/OS-II原理及应用[M] .北京:北京航空航天大学出版社,2012:116-140.
[2] 潘松,黄继业,潘明.EDA技术实用教程——VerilogHDL版[M] .5版.北京:科学出版社,2013:58-89.
[3] 周立功.SOPC嵌入式系统基础教程[M] .北京:北京航空航天大学出版社,2006:57-92.
[4] 谭浩强.C程序设计[M] .3版.北京:清华大学出版社,2009:281-318.
[5] 崔晓英.基于FPGA的硬件实时操作系统的设计[D] .哈尔滨:哈尔滨理工大学,2010.
[6] 崔建华,孙红胜,王保进.硬件实时操作系统的设计与实现[J] .电子技术应用,2008(5).
高承(硕士研究生),主要研究方向为嵌入式与操作系统应用。
(责任编辑:薛士然收修改稿日期:2015-11-25)
Hardware Circuit Design of Semaphore Management Based on FPGA
Gao Cheng,Wang Zhengyan
(Qingdao University,Qingdao 266071,China)
Abstract:Based on the communication research of the tasks in the embedded real-time operating system μC/OS-II,a scheme is proposed, that the semaphore management is completed using the hardware circuit based on FPGA.At the same time,the new hybrid real-time operating system is transparent to the users,which ensures the portability of the hybrid real-time operating system.The hybrid real-time operating system has been successfully transplanted to Altera DE2-70 development board,and the test of semaphore management is completed.This is an exploratory design,and it is an important part in overall design of the hybrid embedded real-time operating system.
Key words:RTOS;FPGA;Nios II;semaphore
中图分类号:TP316.2
文献标识码:A