EDN China > 设计实例 > EDA工具与服务 > IP核 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

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

单片机与嵌入式系统应用 李兰英 李霄燕?? 2010年12月24日 ?? 收藏0

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

系统配置

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

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

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

程序段实现

  如果将信息从jtag_uart输出,那么程序首先判断id是否等于3。因为硬件设计时,只有cpul与jtag_uart相连,而cpul的id的值为 3(在系统创建时确定),cpu2、cpu3的id分别为1和2,且id的值等于cpuid控制寄存器的值加1,可在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处理器系统通过硬件互斥核,实现了存储器的共享。在此实例的基础上,按同样的方法添加处理器及相应的硬件组件,并开发相关应用软件,即可实现满足不同需求的多处理器系统。


上一页123下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

NiosII?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈