微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM的IEEE802.11bMAC层协议IP核设计

基于ARM的IEEE802.11bMAC层协议IP核设计

时间:10-29 来源:互联网 点击:

C/C++代码。驱动软件部分主要用于实现对硬件设备的驱动功能。如PCMCIA接口驱动,这一部分软件用C/C++语言进行设计实现。接口软件部分主要完成SDL转换出的系统代码与RTOS及硬件平台的接口功能。这一部分软件借用于代码生成器产生的环境函数,用C/C++语言设计实现。软件部分的层次结构如图3所示。

4 与ADS接口及软件后端开发

从SDL转化出C/C++代码后,可使用ARM的开发工具ADS进行后续的软件开发。其与SDT工具的接口及开发流程如图4所示。

由SDL描述转换出的C/C++代码,与环境函数、Runtime库以及C/C++库一起用ARM的编译器编译,产生面向ARM的可执行程序。其中,环境函数主要用描述系统运行的具体物理环境。由SDT工具根据用户所作的系统描述自动生成一个结构框架,然后用户根据的采用的具体硬件平台环境编辑这个文件,以描述真实的系统工作环境。Runtime库主要包含SDL预定义的数据类型、操作符的实现、调度函数、运行错误处理等信息。SDT工具提供简单的Runtime库。C advanced/C micro代码生成器都有各自对应的Runtime库。C/C++库是ADS本身携带的函数库,主要包含ISO标准定义的C/C++库函数。

在使用ARM编译器编译后,产生ARM的目标文件(.o文件)。如果还有用ARM汇编指令编写的汇编程序,可用汇编器(armasm)汇编,产生相应的目标文件。把所有的目标文件用链接器(armlink)链接,便可得到能在ARM7TDMI处理器上执行的映像文件(.aof文件)。这时可以用ADS提供的调试工具AXD进行程序的调试。

因为SDL的系统设计在高层进行了仿真和验证,所以调试的主要工作集中在驱动、中断和环境函数的调试上。对SDL系统的调度主要是通过仿真确定对系统性能影响严重的模块并对其进行优化以及系统在实时运行状态下能否满足设计要求。如果在调试中发现问题需要修改SDL的系统设计,可重新执行如图4所示的流程,直到满足设计要求。


5 问题及分析

(1)代码生成器的选择问题。SDT提供三种代码生成器,即C basic、C advanced和C micro。其中C basic是最简单的代码产生器,一般只用于在SDT开发环境中仿真系统的行为。C advanced和C Micro是面向应用的代码产生器,可以产生高效的代码。C advanced支持几乎所有的SDL概念,对SDL设计的约束较少。C micro可以产生性能更优越、占用存储空间更小的代码,代价是对SDL设计的约束较多,例如不支持使能条件、连续信号、过程的继承等。

(2)设计优化问题。在进行系统设计时,应注意的设计要点有:当输出信号时,应带上接收进程的PID,这样可以减少对信号进行路由的开销;信号应尽量少带占用大量存储空间的参数,因为在信号传递时同时复制信号的参数,占用大量存储空间的参数将占用过多存储空间并引起附加延时;两个状态之间的传输操作不宜过多,否则会带来较大延时(可以用实时仿真确定影响时延的关键路径并进行优化);如果系统中有比较复杂的模块,对时延又有严格要求,可以用C/C++或汇汇编单独编写,也可用硬件完成,如图1的WEP算法模块。

(3)与RTOS的集成问题。用户可以不使用RTOS,而使用SDT提供的缺省内核程序,也可以自己编写所需的调度算法、内存管理、中断处理等。SDT工具直接支持的RTOS有Solaris(Posix 4)、Win32、VxWorks和OSE delta。SDT提供三种与RTOS的集成方式,即松集成、线程集成和紧集成。松集成把整个系统映射为OS的一个任务,使用SDT提供的标准内核进行调度,每次进行一个完整的传输。因此松集成调度的最大延时是SDL设计中状态之间传输的最长时间。紧集成把每个进程映射为一个OS的任务,可以使用OS的调度算法,给不同的任务以不同的优先级执行,因而性能好于松集成。线程集成则是两者的折衷。

(4)环境函数的编写。环境函数主要是完成四个函数的编写。XInitEnv():主要用于完成系统的初始化操作。XInEnv():主要用于接收来自硬件或RTOS的信号并转换成SDL系统所需要的信号。调度器每隔一段时间轮询一次xInEnv()函数,检查是否有信号输入。如果发现有信号输入则发送适当信号给SDL系统。XInEnv()函数中不能使用阻塞函数,如getchar()等。阻塞函数会妨碍调度器处理SDL系统。XOutEnv():主要用于接收来自SDL系统的信号并转换成对RTOS的信号或对硬件的操作。当SDL系统有信号输出时,则调用xOutEnv()函数,根据用户编写的代码产生相应的物理信号或硬件操作。XCloseEnv():用来完成关闭环境的操作。

参考文献:

[1].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.
[3].ROMdatasheethttp://www.dzsc.com/datasheet/ROM_1188413.html.
[4].MSCdatasheethttp://www.dzsc.com/datasheet/MSC_1580913.html.
[5].PCFdatasheethttp://www.dzsc.com/datasheet/PCF_1201585.html.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top