




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、双Nios处理器系统关键技术研究与应用Research on Key Technology and Application of NiosII Multi-Processors孟祥臣哈尔滨工程大学Altera联合实验室摘要:启动和通信是双Nios系统的两个关键问题,本文分析了几种常用的启动方案和通信方案,测试验证了各种方案的优缺点,给出了各种方案的应用范围,提出了构建组合导航计算机最优双Nios系统的方法。关键词:Nios,多处理器,启动,通信,组合导航计算机Abstract:Startup and communication are the key issues of NiosMulti-P
2、rocessors. The paper analyzes several common startup and communication schemes, tests and validates the advantages and disadvantages of them, gives its range of applications,and provides the scheme of optimal construction of niosfor integrated navigation computer.Keywords:Nios, Multi-Processors, sta
3、rtup , communication, integrated navigation computer1 引言SOPC(System-on-a-Programmable-Chip)技术最早是由Altera公司在2000年提出来的,是PLD和ASIC技术融合的结果,是一种灵活、高效的SOC解决方案,可以认为SOPC代表了半导体产业未来的发展方向。其技术实现方式一般分为三种:(1)基于HardCopy技术的SOPC系统。(2)基于FPGA嵌入IP(Intellectual Property)硬核的SOPC系统。(3)基于FPGA嵌入IP软核的SOPC系统。利用嵌入式硬核实现的SOPC系统尚存在一
4、些缺陷:成本较高;结构、功能固定;较难在同一片FPGA中集成多个处理器等。如果利用嵌入式软核处理器实现就可以有效的弥补上述不足,其中最具有代表性的嵌入式软核处理器是Altera公司的Nios软核处理器,以及Xilinux公司的MicroBlaze核。特别是Nios软核,能很好的解决上述几方面的不足。Altera的Nios核是用户可配置和构建的32位RISC嵌入式处理器IP核,采用Avalon交换式总线结构,具有超过200DMIP的性能,在FPGA中实现的成本只有35美分。然而,随着诸多应用领域内各种复杂算法的不断提出与发展,对传统处理器的性能提出了挑战,单纯的依靠提高时钟频率、数据吞吐量等指标
5、已经不能很好的满足需求。系统设计者大多会考虑到板级多处理器的构建,如MCU-DSP组合、FPGA-DSP组合。这种方案虽然满足了需求,同时也带来了设计复杂、设计周期长,升级困难,对开发者要求较高等不足。片上多Nios处理器技术在满足性能的同时,大大简化了开发流程,降低了开发难度,已经受到越来越多开发者的青睐,逐渐发展成为一种趋势。双核的启动与双核间的通信是构建稳定与高效的双核系统的核心内容。在哈尔滨工程大学Altera联合实验室的支持下,笔者对构建双Nios处理器系统中的关键技术进行研究,结合导航领域内对导航计算机的要求,在自行设计的Cyclone开发板上完成了设计和验证,对其中的关键技术进行
6、了分析,得到了一些对开发者有所帮助的结论。2 双Nios系统的基本原理2.1 双Nios系统启动方案(1)BootloaderBootloader (引导加载程序)是系统加电启动后运行的第一段软件代码。PC机的Bootloader的任务是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。对于Nios系统而言,它承担下面几个任务: 完成复位的功能。在从复位地址开始的32字节(指令缓存行的尺寸)空间内完成复位的软件响应:初始化status寄存器、关闭中断、初始化所有的指令缓存、最后跳转到复位地址。 完成加载的功能。从非易失性存储器中将程序映像拷贝到程序运行地址
7、,通常情况下,运行程序在RAM中。 跳转到应用程序入口。由于FPGA本身的结构特点,Nios系统加电后的Boot过程实际上需要以下两个步骤: FPGA器件本身的配置过程。由于FPGA基于SRAM结构,因而每次上电时,都需要对FPGA器件进行重新配置。 Nios处理器程序的加载过程。在上一步之后,Nios软核的硬件结构已经在FPGA内部生成,并在内部复位逻辑的作用下,从复位地址开始执行程序,Nios处理器的复位地址通常存放着Bootloader代码。由此可见,Nios处理器与传统的嵌入式CPU的启动过程相似,不同的是Nios处理器在执行Bootloader代码之前插入了另一个环节,配置FPGA器
8、件,即先生成Nios处理器。(2)两种常见的单Nios处理器Boot方式EPCS和CFI Flash是两种常用的存储FPGA配置数据的非易失性存储器,因配置方式不同,Nios处理器的Boot过程也存在一定的差异。1)从EPCS串行存储器中Boot为了实现从EPCS中Boot,必须在SOPC Builder中配置EPCS Controller,并把Nios处理器的复位地址设置成EPCS Controller的基地址。SOPC Builder会自动生成epcs_controller_boot_rom.hex的十六进制文件,Quartus会依据该文件初始化EPCS Controller片上ROM,而
9、其中存放的内容正是加载Nios系统的Bootloader。这样,系统上电并且FPGA被成功配置后,Nios处理器会利用存放于片上ROM里Bootloader完成系统的加载。设计双Nios处理器的启动,还必须要熟悉EPCS Flash中数据的存放格式,如表1所示。表1 EPCS Flash数据存储规范地址数据含义剩余空间4字节的最后一个“程序记录”的目的地址域A0x00000000,4字节的最后一个“程序记录”长度域LLn个字节的第n个程序段映象4字节的第n个程序段的目的地址An4字节的第n个程序段的长度LnL2个字节的第2个程序段映象4字节的第2个程序段的目的地址A24字节的第2个程序段的长度
10、L2Length+8length+L+7L1字节的第1个程序段映象Length+4length+74字节的第1个程序段的目的地址A1Lengthlength+34字节的第1个程序段的长度L10length-1FPGA配置数据,长度为Length由表1可知,EPCS中的数据可以分为三块,第一块是FPGA配置数据,从地址0处开始存放;第二块是程序记录(长度和目的地址)和程序映像,从length处开始存放;第三块是尾端程序记录,其中记录的并不是程序映像的信息,而是决定程序去向的一个标志数据,如长度域L= 0x00000000(跳转指令的编码),则Nios处理器将跳转到地址域A所指定的地址处继续执行,
11、如长度域L=0xffffffff(停机指令的编码),Nios处理器将会忽略地址域A中的地址,停机,停止执行任何指令。2)从外部CFI 并行Flash中BootNios处理器的异常地址决定程序最终运行在RAM中、还是Flash中,由于通常都是采用RAM作为程序的运行空间,所以本文仅对运行在RAM中的情况下进行了分析。使用CFI Flash对FPGA进行配置时,需要一个配置控制器。可以把配置数据和程序映像同放到一片Flash中,实现FPGA的配置和Nios处理器的启动。首先必须在SOPC Builder中将Nios处理器的复位地址设置成CFI Flash的基地址。在异常地址选择RAM的情况下,工具
12、elf2flash在生成.flash文件时,会自动的在程序映像中添加“程序记录”和bootloader。如表2所示,CFI Flash数据存储规范与EPCS中的数据结构基本相似,主要不同点在于两者的Bootloader的产生方式不同、存储位置不同。当从EPCS中Boot时,启动代码由SOPC Builder产生,存放在片上ROM上;当从CFI Flash中Boot时,启动代码由elf2flash产生,直接存放在Flash中,而且位于基地址处。表2 CFI Flash数据存储规范地址数据含义剩余空间4字节的最后一个“程序记录”的目的地址域A0x00000000,4字节的最后一个“程序记录”长度域
13、LLn个字节的第n个程序段映象4字节的第n个程序段的目的地址An4字节的第n个程序段的长度LnL2个字节的第2个程序段映象4字节的第2个程序段的目的地址A24字节的第2个程序段的长度L2Length+8length+L+7L1字节的第1个程序段映象Length+4length+74字节的第1个程序段的目的地址A1Lengthlength+34字节的第1个程序段的长度L10length-1Bootloader另外,值得注意的是,无论是EPCS Flash还是CFI Flash,其程序映像都是直接或间接的由工具elf2flash产生的,因此Bootloader对程序映像的结构的理解必须与elf2f
14、lash相一致。(3)几种常用的双处理器系统的启动方案由以上对Bootloader和单Nios处理器的Boot过程分析,可以推断以下几个双核启动的可行方案,如表3所示。这五种方案都有可以实现的理论依据,方案5中CPU1的启动可以使用方案1-4中的任意一种,而CPU2的启动则由CPU1通过应用程序来实现,由此可以看出这种方案的显著优点在于对于CPU2的启动过程是可以控制的,本文即选择了此种方案来实现双Nios处理器系统的启动。表3 Nios处理器启动方案方案方案1方案2方案3方案4方案5Bootloader存放位置CPU1CFI FlashCFI FlashEPCS Controller片上RO
15、M方案1-5中的任意一种CPU2CFI Flash片上ROM片上ROM片上ROMCPU1的应用程序中程序映像存放位置CPU1CFI FlashCFI FlashEPCSCFI Flash或EPCS方案1-5中的任意一种CPU2CFI FlashCFI FlashEPCSCFI Flash或EPCS方案1-5中的任意一种复位地址CPU1Flash中存放Bootloader的起始位置Flash中存放Bootloader的起始位置EPCS Controller基地址片上ROM的基地址方案1-5中的任意一种CPU2Flash中存放Bootloader的起始位置片上ROM的基地址片上ROM的基地址片上R
16、OM的基地址RAM异常地址CPU1RAMRAMRAMRAMRAMCPU2RAMRAMRAMRAMRAM2.2 双Nios系统通信方案(1) 多CPU系统常用通信方案多个CPU之间进行通信,常采用以下三种方式: 串行方式。多个CPU之间可以采用各种常用的串行总线如 UART、SPI、I2C 等进行通讯。这种方案实现简单,但会受到总线波特率的限制,通讯效率存在瓶颈。 并行方式。多CPU之间通过CPU的I/O功能如SOPC Builder中的PIO核进行通讯,较串行方式相比效率有所提高。 共享存储器。不同的CPU之间可以通过共享同一块存储器来实现CPU间的通讯,如利用DMA、双口RAM等,可以实现数
17、据的高速传输。(2) 多Nios核间可行的通信方案串口通讯中有单工、半双工和全双工之分,简单的定义如下: 在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能有一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。借用以上区分串口通讯的方法,双Nios处理器间的通讯模式也可以有单工、半双工和全双工之分。例如使用PIO内核通讯时,如果用一个PIO,则CPU之间的通讯属于半双工,同一时刻每个CPU只能是向另一方发送或者从另一方接收数据;如果用两个PIO,CPU之间的通讯就属
18、于全双工,因为任意时刻每个CPU都可以在接收数据的同时发送数据。由于Avalon交换结构的存在,多个处理器间通过带有Avalon接口的单个从设备进行通讯时,不存在抢占总线、等待总线空闲的说法,但是多个主设备会竞争从设备,尤其是存在同时向从设备写数据时,在降低多处理器间通讯效率的同时也会使数据的安全可靠性受到威胁,因此不得不采取一些措施来保障从设备始终只能被单个Nios处理器访问。鉴于以上的结论,通讯方案可以采用全双工的通讯模型,即在接收数据的同时可以发送数据,并使用中断方式接收数据,这样每个CPU无需在去竞争从设备,即提高了效率,又保证了数据的安全可靠。本文从验证通讯效率的角度出发,简化了模型
19、,采用查询方式而不是中断方式接收数据,因为查询或者中断真正影响的是Nios的工作效率,并不是本文的评估指标。这种模型的缺陷是需要两套从设备,会增加FPGA的资源使用量,因此最好在资源充沛的系统中使用。下面简单的介绍各种通信机制的原理,除I2C和CAN外,其他组件都可以在SOPC Builder中方便的添加,Altera公司都为他们提供了驱动程序,并自动集成到HAL系统库中,因此在Nios中的使用也非常方便。1)通用串行接口总线双Nios间可以通过UART、SPI、I2C、CAN等几种串行总线接口进行串行方式的通信,用户可在Nios中使用 ANSC C标准函数或者UNIX风格的IO函数来访问。常
20、见的串行总线接口的差异如表4所示,他们的工作原理大致相同,在实际工程中,其应用领域大多是各种外设、传感器、PC机与CPU间传输数据。当在双Nios处理器间进行通讯时,由于受到其本身工作机制的限制,其传输速率会限制通讯效率,降低系统的整体性能。而且这种通信方案比较成熟,因此本文只对其进行了理论分析,并没有工程实现。表4 常见串行总线接口总线接口全/半双工主从模式异步/同步波特率使用方式UART全双工一对一异步300-115200SOPC Builder自带SPI全双工一主多从同步几百K-几MSOPC Builder自带I2C半双工多主多从同步几百K-几M第三方组件CAN半双工多主多从异步小于1M
21、第三方组件2)并行PIO内核Altera为Nios处理器提供带有Avalon接口的并行输入/输出(PIO)内核,并提供了Avalon从端口到通用I/O口间的存储器映射。I/O口既可以连接到片内逻辑,又可以通过FPGA的I/O引脚连接到外部设备。用户可以在SOPC Builder中方便的添加并行输入/输出内核,可以通过SOPC Builder中的GUI给出的接口,来设置PIO的属性。每个PIO元件可以拥有132个通用I/O口,传输方向能够配置成输入、输出、双向、双向三态四种类型,除输出类型的PIO外,其余三种还可以选择边沿捕获寄存器和允许产生中断事件。3)共享存储器之单/双口RAM单口RAM只有
22、一套地址总线,双核对其读和写是分开进行的,而双口RAM有两套地址总线,双核可以同时进行读操作,不可以同时进行写操作。4)共享存储器之mutex内核在SOPC Builder中有现成的Avalon-MM接口的互斥硬核,其提供的基于硬件的原子测试和置位(test-and-set)操作以及内部协议可以保证对一个共享资源的互斥占有,是Altera公司针对带有Avalon接口的多处理器对共享资源的访问问题而专门提出的。Mutex可以保证同一时刻只有一个处理器Nios访问共享资源,因此在这种情况下使用双口RAM和单口RAM是没有差别的。5)共享存储器之mailbox内核带有Avalon接口的邮箱内核也是为
23、解决多处理器通信问题而提出的。邮箱内核必须用独立的共享存储体作为缓冲区来实现多核间的消息传递,其拥有的两个互斥体,一个用来保证对共享存储体的唯一写操作,另一个用来保证对共享存储体的唯一读操作,这样就保证了消息的完整性,同时也在共享存储体内形成了一个消息FIFO,这个消息队列的最大消息数是有限制的,由SOPC Builder计算完成。邮箱内核的实现机制使它比较适合于单方向的传送消息,也适合于通过向消息队列传送共享存储体的指针而实现大量数据的交换的场合。6)共享存储器之FIFO内核带有Avalon接口的异步FIFO内核也可以作为双核通信的缓冲区,并且提供了流控制,输入输出口既可以是Avalon-M
24、M类型的也可以是Avalon-ST类型的,可以选择单时钟模式或双时钟模式。消息从输入端口进入,以同样的顺序从输出端口输出,并可以同时对异步FIFO内核进行读写操作,因此比较适合大量数据的突发传送。7)共享存储器之可控式双核通信方案这种方案的思想是在双Nios处理器间共用一块RAM,每当CPU1要访问RAM的时候,都把CPU2控制在停止状态,当CPU1访问RAM结束后,再运行CPU2。这种通讯方法可以保证同一时刻只有一个Nios处理器访问RAM,但是CPU2的停止和运行要占用一定的时间。3 双nios系统的SOPC构建3.1 双Nios系统的SOPC Builder实现Avalon交换式总线结构
25、是Altera公司开发的用于连接处理器与片内(外)资源的内部连线技术,是SOPC技术中的一个精华所在。由于其主从端口的友好的仲裁能力,允许用户轻松的添加多个处理器到系统中,并根据系统配置最终生成一个最佳交换结构。用户只需要简单的连接其中的关键信号,如图1所示,为了构建双Nios系统以及分析和验证系统的性能,在SOPC Builder中添加了: cpu1和cpu2:处理器1和处理器2 pio_reset:与cpu1相连的PIO,控制cpu2的复位 message_buffer_mutex:硬件互斥核 message_buffer_ram:cpu1与cpu2利用互斥硬核进行通讯的RAM cpu1_
26、send_to_cpu2_ram:cpu1向cpu2发送数据的单口RAM cpu1_recv_from_cpu2_ram:cpu1从cpu2接收数据的单口RAM cpu1_send_to_cpu2_dual_ram:cpu1向cpu2发送数据的双口RAM cpu1_recv_from_cpu2_dual_ram:cpu1从cpu2接收数据的双口RAM cpu1_send_to_cpu2_mailbox:cpu1向cpu2发送数据的邮箱内核 cpu1_recv_from_cpu2_mailbox:cpu1从cpu2接收数据的邮箱内核 cpu1_send_to_cpu2_mailbox_buffe
27、r:发送数据邮箱内核的缓冲区 cpu1_recv_from_cpu2_mailbox_buffer:接收数据邮箱内核的缓冲区 cpu1_send_to_cpu2_fifo:cpu1向cpu2发送数据的片上FIFO 内核 cpu1_recv_from_cpu2_fifo:cpu1从cpu2接收数据的片上FIFO 内核 cpu1_send_to_cpu2_pio:cpu1向cpu2发送数据PIO 内核 cpu1_recv_from_cpu2_pio:cpu1从cpu2接收数据PIO 内核图1 双Nios处理器系统的SOPC Builder实现在确定系统配置好以后,生成添加在Quartus中的顶层原
28、理图,如图2所示。图2 双Nios处理器系统顶层原理图3.2 双Nios系统启动方案的实现本文采用表3中的方案5来实现双Nios处理器系统的启动,具体配置为CPU1和CPU2的程序映像都存放到EPCS中,CPU1的Bootloader存放到EPCS Controller中、复位地址指向EPCS Controller的基地址,启动代码由开发环境自动生成。CPU2的Bootloader由CPU1的应用程序来实现、复位地址指向RAM,这部分也正是本文的研究内容,下面主要介绍如何制作CPU2的Bootloader和程序映像。(1) 关键技术之SOPC Builder参考图1,添加一个与CPU1相连的双
29、向PIO核,并使能上升沿边沿捕获寄存器,其输出端口用来复位CPU2,输入端口用来判断CPU2是否复位成功。CPU1和CPU2的基本配置分别如图3和图4所示。图3 CPU1在SOPC Builder的基本配置图4 CPU2在SOPC Builder的基本配置此外,还要在CPU2中使能可选的复位信号,它不同于全局硬复位信号,其功能是仅复位处理器,对其他器件不产生影响。在CPU2中添加这两个信号用来实现CPU1对CPU2复位的控制和CPU1读取CPU2的复位状态。图5 CPU2在SOPC Builder的复位信号配置(2) 关键技术之Quartus参考图2,在Quartus中将pio_reset的输
30、入端口与cpu_resettaken端口相连,将pio_reset的输出端口与cpu_resetrequest端口相连。(3) 关键技术之Nios CPU1的启动代码由SOPC Builder自动生成,并由Quartus完成初始化,因此在定制了合适的系统并成功编译后,接下来的工作是在Nios IDE中开发位于CPU1应用程序中的控制CPU2启动的代码,启动代码主要由四部分构成。开发者首先需要确定下来CPU2程序映像在EPCS中存储的地址(本文0x00160000),并且根据system.h文件明确CPU2的复位地址(本文0x00c00000)。装载CPU2映像。对EPCS的读取操作符合SCI的
31、规范,并且参考表1,可以知道EPCS中存放数据的格式,依据“程序记录”将程序映像从EPCS(LAM)中拷贝到SDRAM(VAM)中,根据最后一个“程序记录”来决定程序的去向。当程序映像被成功加载到SDRAM后,会返回一个入口地址entry_point。向CPU2复位地址写分支指令。分支指令中的offset值等于CPU2的入口地址减去复位地址,这样CPU2在复位后执行的第一条指令就是分支指令,会从复位地址处跳转offset个地址,即跳转到程序的入口地址。分支指令的构造需遵循以下的规则:branch_instruction = (offset - 4) 6) | 0x6offset要减去4是因为o
32、ffset是相对当前的program counter而言的,真正的跳转是在下一条指令时才执行,此时需要跳转的实际值就变成了offset 4,左移6位是因为无条件分支跳转指令的操作码要占用最低的6位,其指令的操作码是0x6。以本文为例,做如下推导:入口地址 = 0x00c001d0复位地址 = 0x00c00000(offset - 4) 6 = (入口地址 -复位地址 4)*26 = 0x7300branch_instruction = (offset - 4) 6) | 0x6 = 0x7306复位CPU2。通过向与CPU1相连的pio_reset的输出端写入1来拉高cpu_resetque
33、st,使CPU2进入复位状态,并通过读取pio_reset的边沿捕获寄存器来判断CPU2是否确实复位成功。运行CPU2。向pio_reset的输出端写入0来拉低cpu_resetquest,使CPU2退出复位状态。(4) 关键技术之Flash Programmer为了使CPU2程序映像的存放格式与Bootloader的读取方式匹配,需要对Nios IDE生成的.elf文件进行转换,在命令行环境下,利用Altera公司提供的转换脚本make_flash_image_script.sh生成CPU2的程序映像,如图6所示。图6 制作CPU2程序映像如图7所示,为了区分不同的软核,在多处理器系统中要加
34、载.jdi文件。CPU2的程序映像通过向EPCS中烧写文件的方式写入到EPCS中的指定位置,位置值应该与其启动代码中的一致(本文0x00160000)。图7 下载双Nios工程3.3 双Nios系统通信方案的实现(1) 通讯模型图8 全双工模型下双Nios的通讯流程整个通信流程如图8所示,cpu1通过PIO、RAM、mailbox等不间断的向cpu2发送信息,并不停的查询从cpu2传送过来的信息,cpu2则执行正好相反的动作。在这种工作模式下,两个处理器的效率并不高,因为要不停的发送数据和查询数据,但却非常有利于评估这种通讯机制的最大效率,统计其在不停运转的环境下平均每次传输所要占用的时钟数,
35、当然在实际工程应用中,应该利用中断机制来提高CPU的运行效率,对于PIO和共享RAM方案还应当自定义协议和时序来保证数据的安全可靠。(2) 各通讯方案的SOPC实现1) 并行PIO内核PIO核将I/O口通过片上逻辑与cpu1和cpu2相连,不需要使用FPGA的I/O引脚,每个PIO有32个I/O口,一次可以传送一个32位宽度的数据,同样的频率下,通信效率较串行方式有很大提高。关键代码:IOWR_ALTERA_AVALON_PIO_DATA(CPU1_SEND_TO_CPU2_PIO_BASE,message_send_buffer);message_receive_buffer = IORD_
36、ALTERA_AVALON_PIO_DATA(CPU1_RECV_FROM_CPU2_PIO_BASE);2) 单/双口RAM在SOPC Builder中添加两个片上单口RAM和两个片上双口RAM,以对比通讯效率,数据线宽度均设置成32位,大小根据FPGA资源使用量而定。关键代码:IOWR(CPU1_SEND_TO_CPU2_DUAL_RAM_BASE,0,message_send_buffer);message_receive_buffer=IORD(CPU1_RECV_FROM_CPU2_DUAL_RAM_BASE,0);3) mutex内核在SOPC Builder中添加一个mutex和
37、一个共享RAM,在Nios中可以对mutex进行打开、加锁、解锁等操作。关键代码:altera_avalon_mutex_lock( mutex, cpu1_id );IOWR(MESSAGE_BUFFER_RAM_BASE,0,message_send_buffer);altera_avalon_mutex_unlock( mutex );altera_avalon_mutex_lock( mutex, cpu1_id+1 );message_receive_buffer = IORD(MESSAGE_BUFFER_RAM_BASE + 100,0);altera_avalon_mutex_
38、unlock( mutex );5) mailbox内核在SOPC Builder中添加两个mailbox,实现不同方向的传送,为每个mailbox建立一块单独的片上RAM,大小根据系统而定,在Nios中可以对mailbox进行打开、关闭、发送消息、(非)阻塞式读消息等操作。关键代码:altera_avalon_mailbox_post(cpu1_send_to_cpu2_mailbox_dev,message_send_buffer);message_receive_buffer = altera_avalon_mailbox_pend(cpu1_recv_from_cpu2_mailbox
39、_dev);6) FIFO内核在SOPC Builder中添加两个FIFO,作为不同方向上的消息缓冲区。为每个FIFO选择单时钟模式,数据宽度设置成32位的。不需要产生中断信号,因为两个Nios处理器都是工作在查询模式下。关键代码:altera_avalon_fifo_write_fifo(CPU1_SEND_TO_CPU2_FIFO_IN_BASE, CPU1_SEND_TO_CPU2_FIFO_IN_CSR_BASE, message_send_buffer);message_receive_buffer = altera_avalon_fifo_read_fifo(CPU1_RECV_F
40、ROM_CPU2_FIFO_OUT_BASE, CPU1_RECV_FROM_CPU2_FIFO_IN_CSR_BASE);7)可控式双核通信用一块RAM作为缓冲区,在cpu1的应用程序里通过控制cpu2的复位状态,来实现双核的通讯。关键代码:stop_cpu2();IOWR(MESSAGE_BUFFER_RAM_BASE,0, message_send_buffer);/ message_receive_buffer = IORD(MESSAGE_BUFFER_RAM_BASE,0,);run_cpu2(); 4 系统实验和结论4.1 启动方案验证由本文第二、三部分的分析可以看出,双Nios
41、处理器的启动方案的实现,关键是CPU2的Bootloader的定制, CPU2程序映像的制作和下载,以及以此为目并且为此提供软硬环境支持的系统搭建,主要在SOPC Builder和Quartus中完成。至此,已经按方案5成功的实现了双Nios处理器的启动,并在自行设计的Cyclone开发板上进行了验证,CPU1和CPU2都能成功启动,而且可以由CPU1来控制CPU2的启动、停止、运行。4.2 通讯方案对比通过对各通讯方案的理解,在开发板上测试了除串行通讯方式外的其余6种方案,测试流程图如图9所示。图9 双核通讯测试方法流程图板子工作100MHz的时钟下,在SOPC Builder中设置系统的定
42、时器周期为1ms。测试的方法是,在100S内不间断发送和接收数据,求出100S内总共传输了多少次。一个通讯周期包括一个发送过程、一个接收过程以及期间运行软件代码所需要的时间,这里求得的传输周期并不严格的代表各通讯机制的单独运行时间,而且测得的结果与两个处理器访问通讯设备的状态有较大关系,因此即使是同一种通讯设备,每一次测试得到的结果都是不一致的,最大差距会达到20%左右。经过测试得到的数据如表5所示。表5 多核通讯方案性能对比方案实现方法传输次数(100S内)数据安全适用范围一PIO100320低小量数据交互传输二单口RAM95643低突发性的大量数据传输三双口RAM104358低突发性的大量数据传输四mutex81546高频繁的大量数据传输五mailbox103235高大量数据的单向传输六fifo90023高突发性的大量数据传输七可控式71025高绝对安全的数据传输4.3 实验结论由表3可知,双核系统有较多的启动方式,可适应不同系统的需求。本文验证的可控式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 用人单位近一半不签劳动合同7篇
- 有关私有房屋买卖合同9篇
- 办公室装潢装修合同5篇
- 水、电、蒸汽能源供应服务合同7篇
- 集体土地使用权私下转让合同5篇
- 瑜伽物品售卖合同协议
- 电商运营团队合同协议
- 电梯通讯协议书范本
- 珠宝顾问招聘合同协议
- 现有技术协议先签合同
- 正式展会合同协议
- 贯彻落实清理规范非融资性担保方案指导意见
- 工程甩项合同协议
- 甲状旁腺切除术后的护理措施
- 2025广东省深圳市中考数学复习分类汇编《函数综合题》含答案解析
- 金融工程重点总结
- 渔业资源与渔场学课件蓝点马鲛学习资料
- 2024慢性鼻窦炎诊断和治疗指南解读课件
- 2025年度毛绒玩具采购合同
- (T8联考)2025届高三部分重点中学3月联合测评生物试卷(含答案详解)河北版
- 2024年四川成都农业科技中心招聘笔试真题
评论
0/150
提交评论