微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于NiosII的SOPC多处理器系统设计方法

基于NiosII的SOPC多处理器系统设计方法

时间:02-10 来源:电子产品世界 点击:

4 NiosII多处理器系统设计实例

  下面将利用SOPC Builder建立一个基于标准模板的3处理器、共享片上存储器的NiosII系统,之后在NiosIIIDE中为每个处理器建立一个软件工程。系统功能是:3个CPU的软件将产生要显示的消息,使用硬件互斥核将所产生的不同消息放在共享的消息缓冲区中。cpul将连续检查缓冲区中的新消息,如果发现新消息,就通过jtag_uart显示出来。

  实例的开发环境是QuartusII 5.0或以上版本,开发套件CycloneII Edition和niosII_cycloneII_2c35开发板。

  4.1 创建硬件系统

  在标准硬件实例standard.qp的设计基础上,增加2个处理器、2个定时器和1个硬件互斥核组件;另外增加1个消息缓存区message_buffer_ram(片上RAM),用作3个处理器的消息缓存区。按如下步骤连接共享资源:

  ①使用连接矩阵,将SDRAM连接到每个处理器的指令和数据主端口。允许3个处理器访问SDRAM。

  ②将ext_ram_bus连接到每个处理器的指令和数据主端口。允许3个处理器访问外部RAM和Flash。

  ③将message_buffer_ram连接到每个处理器数据主端口。允许3个处理器访问该存储器。

  ④去除在message_buffer_ram和cpul指令主端口之间的缺省连接。

  ⑤选择System→Auto-Assign Base Addresses,为每个外设分配一个唯一的基地址。

  完成以上操作后,系统配置如图1所示。3个处理器的数据主端口与共享存储器的同一从端口连接。因为cpul、cpu2和cpu3在物理上能够同时将数据写到共享存储器中,软件必须仔细设计以保证存储在共享存储器上数据的完整性。注意:图l所示的系统配置中,只有cpul的数据主端口与jtag_uart相连。

  最后,为3个CPU设置复位和异常地址,创建和编译系统,并下载FPGA的设计文件.sof文件到开发板。

  4.2 为多处理器系统创建软件

  在NiosII IDE环境下,为3个处理器系统分别创建6个软件工程,为每个处理器创建一个应用工程和一个系统库工程。之后对软件工程进行编译、运行和调试。

  软件使用硬件Mutex共享一个消息缓存区。3个处理器分别写消息到消息缓存区(count)且循环加1。cpul读消息且通过jtag_uart显示消息。每个处理器运行同样的C文件,但处理器的操作稍有不同。这是通过使用NiosII的cpuid实现的。在NiosII处理器系统中,某个处理器通过写其cpuid控制寄存器的值到Mutex寄存器的OwrqER域来对Mt-tex加锁。cpuid寄存器保持一个静态值,在多处理器系统中,该值唯一地识别一个处理器,且在系统创建时确定。软件执行某个处理器的函数时,首先检查处理器的cpuid,如果cpuid正确,则执行相应函数。工程中的文件为hello_world_multi.c,其中将信息写入缓冲区的功能由以下程序段实现:

  如果将信息从jtag_uart输出,那么程序首先判断id是否等于3。因为硬件设计时,只有cpul与jtag_uart相连,而cpul的id的值为3(在系统创建时确定),cpu2、cpu3的id分别为1和2,且id的值等于cpuid控制寄存器的值加l,可在NiosII IDE环境下读取cpuid控制寄存器的内容。其信息输出的程序如下:

  在System Library属性中,第1个工程选择jtag_uart为stdin、stderr和stdout,选择cpul_timer为the Systemclock timer;第2个工程选择cpu2_timer为System clocktimer,验证stdin、stderr和stdout为null,因为这个处理器不与jtag_uart连接;第3个工程选择cpu3_timer为Systemclock timer,其余同工程2。验证这3个工程的SDRAM被选择为Program memory、Read-only data memory、Read/write data memory、Heap memory和Stack memory。

  分别经编译、下载、运行后,在终端上显示这3个处理器产生的消息,如图2所示。

  结语

  结果表明,3处理器系统通过硬件互斥核,实现了存储器的共享。在此实例的基础上,按同样的方法添加处理器及相应的硬件组件,并开发相关应用软件,即可实现满足不同需求的多处理器系统。

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

网站地图

Top