蒋忠均,张德民,庹 勤
(重庆邮电大学 移动通信重点实验室,重庆 400065)
为了加速TD-LTE(Long Term Evolution)在中国的全面成长和产业链的的形成,2011年我国启动了“新一代宽带无线移动通信网”重大专项。本文介绍了在国家重大专项“TD-LTE无线综合测试仪表开发”的基础上,对TD-LTE网络端 MAC(Medium Access Control)调度的实现。目前关于MAC层的文献有不少,但大都局限于简单的协议研究和设计[1]。在协议栈里所有的数据都需要通过MAC层的调度才能走向空中接口和时间轴上,MAC层是实现实时性和调度机制的枢纽[2],所以设计MAC层子帧调度方案显得尤为重要。
Nucleus主控程序的操作机制是采用等待检测机制[3],不断循环检测当前执行任务或高级中断的封闭循环,仅当有中断到达、未处理任务设置或复位时才跳出循环。主控程序首先检测当前是否有高优先级中断被激活,如果有,则跳出循环进入高优先级中断处理服务函数;如果没有,则继续检测当前是否有未处理激活任务。如果有未处理激活任务,则转入任务处理模块;如果没有,则返回继续检测。
TD-LTE系统为每层设置状态机入口函数,函数设计为一个死循环。函数从相应层队列中接收消息,根据当前不同状态进入相应消息处理函数[4];最后将承载消息内存释放,依次循环,直到队列为空时挂起当前任务,跳出循环,返回操作系统。图1为MAC状态机入口函数的处理机制。在队列中所有消息接收完成后,系统将在队列中挂起MAC任务,返回操作系统主控程序[5]。
根据TD-LTE整体硬件设计,经过实际调试,对于不同大小消息,DSP和FPGA处理消息的总时间为0.8 ms~0.9 ms,ARM 处理MAC层消息的总时间为 0.4 ms~0.5 ms。从而得出,消息处理的总时间为1.2 ms~1.4 ms。图2为消息在实际调试中的处理时间:示波器通道1高电平为ARM处理消息所消耗时间(为 465μs);通道 2高电平为DSP和 FPGA处理消息所消耗时间(为 882μs)。总时间为1 347μs。所以MAC层必须提前2子帧配置消息,MAC调度设计方案[6]才能得到实现。
在代码实现中,MAC调度器维护一个消息发送标志数组 assignment_flag[i][j],其中,0≤i<10,0≤j<1 023。 数组的行代表子帧号,列代表帧号。这样,assignment_flag[i][j]总共可表示10 240个子帧时刻。由于每一调度时刻只允许发送一个任务,因此在第j帧的第i子帧有消息发送任务被配置后,assignment_flag[i][j]被置1。每当有新消息被调度发送时,任务调度指针p_assignment_flag将查询assignment_flag[i][j]变量,如果 assignment_flag[i][j]不为 1,则将消息配置在assignment_flag[i][j]-2的时刻发送至物理层。如图3所示,设在第39帧的子帧9收到RLC层新数据发送任务,p_assignment_flag指针继续向后查询,可得第40帧中第3子帧无发送任务。调度器将assignment_flag[3][40]变量置 1,并提前 2个子帧,在 40帧的子帧1将此消息发送至物理层。
子帧中断信号由FPGA提供,每1 ms触发1次中断,MAC层的任务调度将通过子帧中断触发。当每1 ms的子帧中断到达时,子帧中断触发MAC层进入子帧中断服务函数INT_Schedule。下面是子帧中断服务函数INT_Schedule的实现方案。
(1)同步。进入INT_Schedule函数读取当前帧号和子帧号并保存至本地,以达到本地与硬件计数同步。
(2)状态选择。在同步之后,根据MAC当前状态进入状态分支。
(3)任务执行判断。在进入MAC当前状态分支后,调度器将规划的待发送消息的发送帧号和子帧号与当前帧号和子帧号对比,如果相等则转入步骤(4);如果不相等,则跳出状态分支,转入步骤(5)。
(4)消息发送。进入原语组装函数,组装原语直接发送给物理层。
(5)跳出子帧中断服务函数。
友好的欢迎和支持总是能让我们倍感温暖。在皮兰,当地政府批准我们驾驶那些跑车进入原本禁止游客车辆进入的中心广场,我们在那里瞬间成为了所有人关注的焦点。起初,我还自作多情地以为那里的游客是为我们这些“有钱人”而来,但过了一段时间我才意识到,他们真正感兴趣的只是那几辆跑车而已。在那里,我们听到最多的话就是:“不好意思,稍微靠边一点好吗,顺便帮我和这辆车拍张合影吧?”
此方案的处理方法比较简洁,在消息数据量非常小时具有可执行性。但随着数据量逐渐增大,MAC组装原语的数据搬移时间也随之变长。MAC层处理消息时间为 465μs,从而子帧中断扩展至约 0.5 ms,使得 ARM芯片一直处于硬件中断中,造成其他低优先级中断无法响应。更加严重的是,如果子帧中断时间大于1 ms,则下一个子帧中断也将无法响应,使得TD-LTE系统无法正常运行,所以该方案缺乏可执行性。为此,对该方案进行以下改进。
(1)同步。进入INT_Schedule后,MAC首先读取当前帧号和子帧号并保存至本地使用。
(2)状态选择。在同步之后,MAC根据当前状态进入状态分支。
(3)任务执行判断。在进入MAC当前状态分支后,MAC将之前规划的待发送消息的发送帧号和子帧号与当前帧号和子帧号对比,如果相等则转入步骤(4);否则转入步骤(5)。
(4)发送消息。向MAC队列发送一条消息,消息体为空,消息头附带所要发送的原语ID,激活一个MAC任务。
(5)跳出子帧中断服务函数。
由于发送队列所占用的时间特别短,子帧中断服务函数很快结束跳出中断。该方案巧妙地将发送原语交至操作系统执行,操作系统在循环检测中检测到存在MAC任务时即进入MAC状态机处理MAC任务,使耗时较多的数据搬移放到了MAC状态机中去执行,很好地解决了原始方案中子帧中断耗时长的问题。但在操作系统任务繁多时,子帧中断中激活的MAC任务并不会立即得到执行,而是在操作系统中排队等待。由于子帧中断规划的MAC任务要求很强的实时性,长时间的排队等待将使得MAC任务被延迟执行,最终导致消息不能实时发送,所以该方案也缺乏实时性。
(1)利用子帧中断处理函数INT_Schedule完成以下操作:
①激活高级中断HISR。
②跳出子帧中断服务函数。
(2)利用高优先级中断服务函数HISR_Schedule完成以下操作:
①同步。进入INT_Schedule后,MAC首先读取当前帧号和子帧号并保存至本地使用。
②状态选择。在同步之后,MAC根据当前状态进入状态分支。
③任务执行判断。在进入MAC当前状态分支后,MAC将之前规划的待发送消息的发送帧号和子帧号与当前帧号和子帧号对比,如果相等转入步骤(4);如果不相等,转入步骤(5)。
④发送消息。如果此时满足了发送消息的条件,MAC立即组装原语直接发送给物理层。
⑤跳出HISR服务函数。
由于该方案的子帧中断只占用一个激活高优先级中断的时间,使得子帧中断的时间变得非常短,满足了子帧中断快速跳出的特性。高优先级中断的优先级别比一般任务高,在激活HISR后,在操作系统循环检测中将优先处理HISR进入HISR_Schedule函数,把消息发送至物理层,使该方案避免了任务队列的等待时间,有效满足了MAC任务的实时性。图4为改进的HISR中断服务函数示意图。
图5是子帧中断优化方案2的示波器截图,图中通道3波形为子帧中断,通道1高电平为MAC层处理消息时需要耗费时间长度(为465μs)。从图5中可以看出,子帧中断的时间非常的短,几乎可以忽略不计。而在子帧中断结束时,MAC任务被很快地得到了执行,说明HISR的改进方案使得MAC层任务优先得到了执行。
本文给出了TD-LTE系统中MAC层子帧调度和子帧中断函数的实现机制。通过示波器测出MAC层与物理层之间消息处理的时间偏移,提出子帧调度方案,并验证了其正确性;通过几个子帧中断函数的比较,找到了运用HISR设计子帧中断函数的最佳方案,并得到了最佳的效果。最后通过板级调试验证了本设计方案具有较强的独立性和实时性,优化了系统资源利用率,实现了任务中断与任务调度的高强度反复的稳定性。
[1]陈燕燕.LTE基站MAC-PHY API接口的设计和实现[D].北京:北京邮电大学,2011.
[2]李小文,李贵勇,陈贤亮,等.TD-SCDMA第三代移动通信系统、信令及实现[M].北京:人民邮电出版社,2003:402-405.
[3]李小文,肖垒.应用 RTOS的TD-LTE无线综测仪的实现[J].自动化仪表,2012,33(2):25-28.
[4]道理.Nucleus体系结构分析及应用研究[D].长沙:中南大学,2007.
[5]管武.基于ARM的嵌入式测控平台的设计及实现[D].上海:上海大学,2008.
[6]魏振华,洪炳熔,乔永强,等.嵌入式实时操作系统 Nucleus中线程控制部件的实现方法[J].计算机应用研究,2003,20(4):97-99.