引言
SOPC技术涵盖嵌入式系统设计全部内容,它是由单个集成芯片完成整个嵌入式系统的主要逻辑设计功能,通过逻辑编程实现硬件和软件上的裁减、扩充、升级。硬件技术是以PCB和电磁兼容性分析、信号完整性分析为基础的高速电路设计技术。软件技术是以RTOS和驱动程序为中心的软件设计技术。本文以CYCLONE IV芯片为载体,设计了基于FPGA的SOPC系统,移植μC/OSII实时系统,并实现时间戳功能,以利于系统实时调试。
1 SOPC硬件系统的设计
在FPGA上实现SOPC硬件系统的设计,此系统主要是由软核系统、硬实时部分、逻辑电路组成。本文设计了基于NIOSII软核与μC/OSII结合的最小实时调试系统。
NIOSII软核的硬件设计主要在Quartus软件的SOPC Builder模块中实现,它是由NIOSII微处理器作为CPU,NIOSII微处理器体系结构支持某些用户自定义功能的指令,并用硬件电路实现这些指令功能,其地位与NIOSII微处理器内部自带指令集中的指令地位等价。NIOSII可以根据应用的需要配置不同资源、不同速度级别的CPU、Debug单元、可配置大小的数据Cache、指令Cache、MMU、MPU、中断及通用寄存器。
Avalon总线是NIOSII硬件系统设计中的重要组成部分,它为CPU与外设之间指令与数据的通信提供了一种互联规范,实现CPU指令总线、数据总线与外设的主从关系以及冲突裁决等功能。SOPC硬件系统如图1所示。
图1 SOPC硬件系统
CYCLONE IV系列FPGA芯片每个时钟输入经过一个PLL后,可产生5路时钟输出,每个输出均可配置相应的分频、倍频、相移。本文用了2路输出,一路提供CPU的主频时钟,另一路经过相移后作为SDRAM的主频。该SOPC系统的RTL级视图如图2所示。
图2 SOPC的RTL级视图
系统在SOPC Builder中的CPU与外设之间指令总线、数据总线、时钟源、寻址地址范围、中断优先级等设置如图3所示。
图3 CPU与外设的系统关系图
基于NIOSII的SOPC主从关系建立好后,生成对应的硬件系统描述文件,该描述文件为NIOSII IDE提供系统对应的硬件寻址范围等相关内容,建立并运行TCL脚本文件,将FPGA的引脚与SOPC的硬件电路引脚相匹配。文件进行分析、综合等操作后得到系统级的硬件配置文件。
2 SOPC软件系统的设计
SOPC的软件可在NIOSII IDE平台上开发,根据之前生成硬件系统描述文件创建相应的工作空间。每个工作空间主要由2个工程组成,一个工程主要存放SOPC的软件代码,另一个工程主要存放SOPC的板级硬件描述。
为方便用户的使用,NIOSII IDE提供了一些工程模板,其中有一个是Hello MicroC/OSII的工程模板,创建了这个模板,就基本实现了μC/OSII系统在ALTER NIOSII软核上的建立。对于实时性很强的应用,在NIOSII IDE中可以创建一个硬件定时器,并利用时间戳来进行实时测量,从而实现CPU输入时钟级的实时调试。
在SOPC的硬件系统设计中,创建了两个定时器:第一个定时器为μC/OSII提供时基中断,中断间隔为1 ms;第二个定时器用于为时间戳计数提供时钟。这两项功能在BSP Editor中设置。
#defineALT_SYS_CLK TIMER_0
#defineALT_TIMESTAMP_CLK TIMER_1
时间戳功能的相关函数申明在sys/alt_timestamp.h头文件中,在使用时间戳功能之前,先要调用alt_timestamp()函数开启时间戳功能。
在μC/OSII系统中共建立了两个任务,任务体的代码分别为:
t1 = alt_timestamp();
printf("时间戳(t1) = %ld\\n", t1);
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 1);
OSTimeDly(1000);
t2 = alt_timestamp();
printf("时间戳(t2) = %ld\\n", t2);
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 2);
OSTimeDly(2000);
SOPC系统的输入频率为f=50 MHz。故时间戳的计数值每秒增量为50M,时基中断F1=1 000 Hz。
时间戳计算方式如下:
其中,T1、T2分别为任务1和任务2每次执行的时间间隔。
编译程序并配置运行模式为NIOSIIHARDWARE,下载在Eclipse的Console显示了从UART中接收到的字符输出。由图4可以看出,时间戳值与理想值的偏差非常微小。
结语
基于FPGA的SOPC系统设计涉及到硬件开发与软件开发两部分,其基本流程图如图5所示。
基于NIOSII的SOPC发挥了软核嵌入式微处理器的性能,用户可以获得超过200 DMIPS的性能,在超过60多个的IP核中选择所需要的内容,真正实现板级硬件的可裁剪。在软核中移值μC/OSII实时系统,实现软件上的可靠性和可移植性,再加上本文所提及的时间戳调试方式,使得SOPC的开发和实时调试更为简易。
图4 时间戳值反馈表
图5 SOPC开发的流程图