第7章 Nios II 常用外设编程 SOPC技术与应用
- 格式:doc
- 大小:1.13 MB
- 文档页数:27
Sopc技术与应用SOPC它是用可编程逻辑技术把整个系统放到一块硅片上,来用于嵌入式系统的研究和电子信息处理.SOPC是一种特殊的嵌入式系统,它是片上系统(SOC),即由单个芯片完成整个系统的主要逻辑功能但它不是简单的SOC,它也是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。
SOPC的特点SOPC前提是SOC系统,所以SOPC继承着了SOC的各种特点,而且SOPC兼具这PLD和FPGA 的优点,一般概括其特点为:(1)至少包含一个嵌入式处理器内核(2)具有小容量片内高速RAM资源;(3)丰富的IPCore资源可供选择;(4)足够的片上可编程逻辑资源;(5)处理器调试接口和FPGA编程接口;(6)可能包含部分可编程模拟电路;(7)单芯片、低功耗、微封装。
SOPC的技术内容:SOPC设计技术涵盖了嵌入式系统设计技术的全部内容,除了以处理器和实时多任务操作系统(RTOS)为中心的软件设计技术、以PCB和信号完整性分析为基础的高速电路设计技术以外,SOPC还涉及目前以引起普遍关注的软硬件协同设计技术。
由于SOPC的主要逻辑设计是在可编程逻辑器件内部进行,而BGA封装已被广泛应用在微封装领域中,传统的调试设备已很难进行直接测试分析,因此,必将对以仿真技术为基础的软硬件协同设计技术提出更高的要求。
同时,新的调试技术也已不断涌现出来,如Xilinx公司的片内逻辑分析ChipScopeILA就是一种价廉物美的片内实时调试工具。
SOPC技术主要应用以下三个方向:(1)基于FPGA嵌入IP硬核的应用。
这种SOPC系统是指在FPGA中预先植入处理器。
这使得FPGA灵活的硬件设计与处理器的强大软件功能有机地结合在一起,高效地实现SOPC系统。
(2)基于FPGA嵌入IP软核的应用。
这种SOPC系统是指在FPGA中植入软核处理器,如:NIOSII核等。
用户可以根据设计的要求,利用相应的EDA工具,对NIOSII及其外围设备进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求。
基于Nios II的片上可编程系统(SOPC)实现的直流电机的PWM调速系统朱科星,郁建平(东南大学机械工程学院,江苏南京211189)摘 要:介绍了一种基于Nios II软核处理器的直流电机PWM调速系统,并以此说明了SOPC思想及其实现途径。
该系统以一片PF G A为核心,结构紧凑,体现了SOPC系统集成度高、灵活性强、扩展性好的特点。
并且能大大缩短产品的开发周期。
关键词:现场可编程逻辑门阵列(FPG A);片上可编程系统(SOPC);Nios II;脉宽调制(PWM);直流电机中图分类号:TM33;TP273+5 文献标识码:B 文章编号:167125276(2007)0120113203PWM R egulating Speed System of DC Motor B ased on SOPC of Nios IIZHU K e2xing,YU Jian2ping(College of Mechenical Engineering,S outheast University,Nanjing211189,China)Abstract:This paper introduces a kind of s peed regulation for DC mortor based on the soft CPU core named Nios II,and then il2 luminates the thinking and method of SOPC.A piece of FPG A is the core of the system,simple and compact,showsing high in2 tegration,flexibility,expandability of SOPC and reduction of the time of develo pment of product.K ey w ords:SOPC;Nios II;PWM;DC motor0 引言SOPC是电子设计自动化EDA(electronics design au2tomation)技术和大规模集成电路技术高度发展的产物。
NIOS2完整教程NIOSII是一种32位可配置的软核处理器,支持使用硬件描述语言(HDL)进行快速设计和开发。
下面是一个完整的NIOSII教程,介绍了NIOSII的基本概念和使用方法。
第一部分:NIOSII概述(300字)NIOS II是Altera公司推出的一种可配置软核处理器。
它可以根据需要进行配置,包括选择处理器指令集的大小和功能,以及设置外设和存储器的接口。
NIOS II是基于经典的RISC架构,具有高性能和灵活性。
第二部分:NIOSII的基本构成(300字)NIOSII处理器由五个核心组件组成:指令集体系结构(ISA)、处理器核心、数据存储器、指令存储器和外设接口。
ISA定义了NIOSII支持的指令集,包括整数指令、浮点指令和多媒体指令。
处理器核心执行指令,并且可以执行单周期、多周期或流水线处理。
数据存储器用于存储数据,指令存储器用于存储程序指令。
外设接口用于连接NIOSII处理器和外部设备。
第三部分:NIOSII的配置和开发环境(300字)第四部分:NIOSII的应用场景(300字)NIOSII可用于各种应用场景,包括但不限于嵌入式系统、通信系统、工业自动化和军事应用。
NIOSII的可配置性使得它非常适合于各种需求和资源约束的项目。
NIOSII的性能和可扩展性使得它能够满足高带宽和实时性要求的应用。
此外,NIOSII的软件开发环境也非常成熟和易于使用,可以加快开发过程。
第五部分:NIOSII的优势和挑战(300字)NIOSII相对于其他软核处理器的主要优势在于其可配置性和性能。
NIOSII可以根据需求进行定制,并且可以实现高度优化的硬件和嵌入式软件系统。
然而,NIOSII的可配置性也带来了一些挑战,例如设计复杂性和调试困难。
此外,NIOSII的性能也受限于硬件资源的可用性和设计的质量。
总结(200字)在本教程中,我们介绍了NIOSII的基本概念和使用方法。
NIOSII是一种可配置的软核处理器,支持使用HDL进行快速设计和开发。
第1节并行输入/输出内核并行输入/输出(PIO)内核提供了Avalon存储器映射从端口和通用IO端口直接的接口。
I/O端口连接到片内的用户逻辑或是连到与FPGA片外设备相连的引脚上。
PIO内核提供对用户逻辑或外部设备简单的I/O访问,应用实例如下:∙控制LED∙获取开关数据∙控制显示设备∙配置并与片外设备通信,例如专用标准产品(ASSP)的设备。
PIO内核可以基于输入信号而发出中断请求 (IRQ) 输出。
SOPC Builder 中提供了现成的 PIO内核,可以很容易地将PIO内核集成到SOPC Builder生成的系统中。
7.1.1 PIO 寄存器描述每个PIO内核可提供多达32I/O端口,用户可以添加一个或多个PIO内核。
CPU通过读/ 写PIO接口的映射寄存器来控制PIO端口。
在CPU的控制下,PIO内核在输入端口捕获数据,驱动数据到输出端口。
当PIO端口直接连到了I/O管脚,通过写控制寄存器,CPU能够将管脚置成三态。
图7-1是一个PIO应用的例子,本例使用了多个 PIO内核。
图7-1 使用PIO内核的系统实例当集成到SOPC Builder生成的系统中,PIO内核有两个特性对用户是可见的。
∙具有四个寄存器的存储器映射的寄存器空间,4个寄存器是data、direction、 interruptmask和edgecapture。
∙1到32个的I/O端口。
有些寄存器在某些硬件配置下不是必需的,这时相应的寄存器就不存在了。
对一个不存在的寄存器进行读操作,则返回一个未定义的值;一个不存在寄存器进行写操作则没有任何结果。
表7-1给出了PIO寄存器的描述。
1. 数据寄存器(Data Input & Output)PIO内核I/O端口可以连接到片上或片外的逻辑。
内核可以配置成仅有输入端口,或仅有输出端口,或两者都有。
如果内核用于控制设备上的双向I/O 管脚,内核提供具有三态控制的双向模式。
读数据寄存器返回输入端口上的数据,写数据寄存器则提供驱动到输出端口的数据。
这些端口是独立的,读数据寄存器不会返回之前写入的数据。
2. 方向寄存器(direction)如果端口是双向的,方向寄存器控制每个PIO端口的数据方向。
当方向寄存器的第n为被置为1,端口n 驱动数据寄存器中相应位的值。
方向寄存器只有当PIO内核配置为双向模式时才存在,模式(输入、输出或双向)在系统生成时指定,在运行时无法更改。
在 input-only或output-only模式下,方向寄存器不存在。
这种情况下,读方向寄存器返回一个未定义的值,写方向寄存器则没有结果。
复位之后,方向寄存器的所有位都是0,即所有双向的I/O 端口配置为输入。
如果PIO端口连接到设备的管脚,则管脚保持高阻状态。
3. 中断掩码寄存器(interruptmask)设置中断掩码寄存器某位为1,则将相应的PIO输入端口中断使能。
中断的行为依赖PIO 内核的硬件的配置。
.中断掩码寄存器只有当硬件配置产生中断请求(IRQ)时才存在。
如果内核不能产生中断请求,读指定掩码寄存器返回一个未定义的值,写中断掩码寄存器则没有任何结果。
复位之后,所有的中断掩码寄存器位都为零,即所有PIO端口中断被禁止。
4. 边沿捕获寄存器PIO内核可配置在输入端口上捕获脉冲边沿,可捕获由低到高的跳变、由高到底的跳变,或两种跳变。
当输入端口检测到一个脉冲的边沿,则边沿捕获寄存器会作出相应的反映。
检测的边沿种类在系统生成时指定,并且不能通过写寄存器来改变。
5. 中断请求产生PIO内核可以配置成在某个输入的情况下产生中断请求。
产生中断请求的条件可以是:∙电平触发——PIO内核硬件检测到高电平则产生中断请求。
通过在内核外部加一个非门来实现对低电平敏感。
∙边沿触发——内核的边沿捕获配置决定哪种边沿会导致中断请求。
每个端口的中断可以被屏蔽,中断掩码可以决定哪个端口可以产生中断。
有关PIO硬件配置请看第二章电子钟的硬件设计,其中用到了PIO。
7.1.2 软件编程这部分讨论PIO内核的软件编程模型。
Altera提供了定义PIO内核寄存器的HAL系统库头文件。
PIO内核不属于HAL支持的通用设备模型的种类,所以不能通过HAL API或者ANSI C标准库来访问它。
Niios II EDS提供了几个演示PIO内核使用的例子。
count_binary.c 例子中使用PIO内核来驱动LED,使用PIO内核边沿检测中断来检测按钮按下。
7.1.2.1 软件文件Altera提供了PIO内核的寄存器头文件altera_avalon_pio_regs.h。
该文件定义了内核的寄存器映射,提供了对底层硬件的符号化的访问。
下面的代码为Altera提供的寄存器头文件。
#ifndef __ALTERA_AVALON_PIO_REGS_H__#define __ALTERA_AVALON_PIO_REGS_H__#include <io.h>#define IOADDR_ALTERA_AVALON_PIO_DATA(base)__IO_CALC_ADDRESS_NATIVE(base, 0)#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)#define IOADDR_ALTERA_AVALON_PIO_DIRECTION(base)__IO_CALC_ADDRESS_NATIVE(base, 1)#define IORD_ALTERA_AVALON_PIO_DIRECTION(base) IORD(base, 1)#define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data) IOWR(base, 1, data)#define IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base)__IO_CALC_ADDRESS_NATIVE(base, 2)#define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base) IORD(base, 2)#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data) IOWR(base, 2, data)#define IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base)__IO_CALC_ADDRESS_NATIVE(base, 3)#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base) IORD(base, 3)#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data) IOWR(base, 3, data)#endif /* __ALTERA_AVALON_PIO_REGS_H__ */一个 Nios II嵌入式系统中可能有多个用 PIO内核的设备,这些设备的配置、基地址中断优先级等信息在 system.h 头文件中定义。
在第二章的电子钟设计中用到了 Button_PIO,在 system.h 头文件中关于 Button_PIO的定义的代码如下:#define BUTTON_PIO_NAME "/dev/button_pio"#define BUTTON_PIO_TYPE "altera_avalon_pio"#define BUTTON_PIO_BASE 0x00000860#define BUTTON_PIO_SPAN 16#define BUTTON_PIO_IRQ 2#define BUTTON_PIO_DO_TEST_BENCH_WIRING 0#define BUTTON_PIO_DRIVEN_SIM_VALUE 0x0000#define BUTTON_PIO_HAS_TRI 0#define BUTTON_PIO_HAS_OUT 0#define BUTTON_PIO_HAS_IN 1#define BUTTON_PIO_CAPTURE 1#define BUTTON_PIO_EDGE_TYPE "ANY"#define BUTTON_PIO_IRQ_TYPE "EDGE"#define BUTTON_PIO_FREQ 50000000#define ALT_MODULE_CLASS_button_pio altera_avalon_pio即寄存器头文件定义了通用的 PIO 内核硬件结构,所有用到 PIO 内核的设备的个性信息在 system.h 文件中定义。
对 Button_PIO的读访问可以使用下面两个函数:IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE)IORD(BUTTON_PIO_BASE, 0)即用 BUTTON_PIO_BASE 来代替函数中的参数,那对其他的设备的访问代入其它设备的基地址的宏定义即可,不要用直接硬件的地址。
第2节定时器具有Avalon接口的定时器内核是32位的间隔定时器,可用于基于Avalon总线的处理器系统,比如Nios II处理器系统。
定时器提供如下的特性:∙可控制启动、停止和复位定时器。
∙两种计数模式:一次递减和连续递减。
∙递减周期寄存器当递减到零时,可屏蔽中断请求。
∙可选的看门狗定时器特性——当定时器计时零时,复位系统。
∙可选的周期脉冲产生器特性——当定时器计时到零时,输出一个脉冲。
∙兼容32位和16位的处理器,在HAL系统库中提供了Nios II处理器的定时器的驱动程序。
定时器内核在SOPC Builder中现成的IP,而且很容易集成到任何SOPC Builder生成的系统。
图7-2显示了定时器内核结构,定时器内核对用户可见的特性:∙提供对6个16位寄存器访问的Avalon存储器映射接口∙可用作脉冲产生器的可选的脉冲输出所有的寄存器都是16位的,使得定时器能够兼容16位和32位的处理器。
某些寄存器只有在特定的配置下才在硬件上存在。
例如,如果定时器配置成具有一个固定的周期,硬件上就没有周期寄存器(period registers)了7.2.1 定时器寄存器描述如果使用Nios II处理器HAL系统库提供的标准的特性,程序开发者可以不必通过寄存器来直接访问定时器。
通常,寄存器映射只是对开发驱动程序的人员有用处。
对于定时器共有6个用户可以访问的16位的寄存器。