SOPC之NiosⅡ系统(二)

常用NIOS Ⅱ组件概括

目录

1.时钟组件

2.Nios Ⅱ处理器

2.1 Main

2.2 Vector

 2.3 Caches and Memory Interfaces

2.4 Arithmetic Instructions

2.5 JTAG Debug

3.RAM组件

4.System ID组件

5.JTAG UART组件

6.PIO组件

6.1 基础设置(Basic Settings)

6.2 输出寄存器(Output register)

6.3 边沿捕获寄存器(Edge capture register)

6.4 中断(Interrupt)

​6.4.1 电平触发 IRO

6.4.2 边沿触发IRO


1.时钟组件

当打开Platform Designer就会默认添加了一个CLOCK组件,通过双击clk_0可以进行参数设置

SOPC之NiosⅡ系统(二)_第1张图片

时钟频率(Clock frequency)默认为50000000Hz,即50MHz,那么在Qsys系统的顶层会引出一个clock输入信号,在 FPGA 中就必须输人一个 50MHz 的时钟信号与之相连接。

时钟频率已知(Clockfrequency is known)默认勾选

复位同步边沿(Reset synchronous edges)有 None,Both 和Deassert三个选项,这些设置主要与复位和时钟的同步或异步控制机制有关。若没有特殊要求,可以不用设置。

2.Nios Ⅱ处理器

在IP Catalog中搜索Nios可以找到,双击添加Nios Ⅱ Processor组件

(14.0版本之前叫Nios Ⅱ(Classic)Processor、14.0版本之后叫Nios Ⅱ Processor)

SOPC之NiosⅡ系统(二)_第2张图片

2.1 Main

添加后会有类型选择
Nios II/f(快速型,消耗资源最高,性能最强)
Nios II/e(经济型,消耗资源最少,性能最低)

SOPC之NiosⅡ系统(二)_第3张图片

2.2 Vector

Nios Ⅱ还需要在添加完存储器组件后设置复位向量和异常地址向量

SOPC之NiosⅡ系统(二)_第4张图片

复位向量存储器(Reset vector memory)用于设置CPU复位后从什么地方启动

异常向量存储器(Exception vector memory)用于存放CPU处理异常时间的代码,例如中断代码。该向量常指向于一个低延迟存储器,如SDRAM、SRAM、或者片上存储器(On Chip RAM)

快速TLB命中异常向量(Fast TLB Miss Exception Vector)主要与MMU协作,管理存储器

 2.3 Caches and Memory Interfaces

主要设置CPU的数据和指令缓存部件

SOPC之NiosⅡ系统(二)_第5张图片

指令缓存(Instruction cache)用于缓存NIOS II处理器的各种指令,以提高 CPU 的运行效率。该缓存的大小从 512 字节到 64K 字节用户可自定义设置,也可以不使用指令缓存。

当选择不使用指令缓存时,NIOS II处理器的指令总线将会被移除,因此必须要包含一个紧耦合型指令存储器(tightly-coupled instruction memory)

数据缓存(Data cache)用于存放数据,Datacache数据缓存选项用于指定缓存的大小。该缓存的大小从 512 字节到 64K 字节用户可自定义设置,也可以不使用指令缓存。

指令缓存和数据缓存在刚开始接触NIOS II处理器时使用默认设置即可。

2.4 Arithmetic Instructions

用来设置NIOS II处理器实现算术指的方式,可以通过选择Divide Hardware来设置NIOS II处理器是否支持硬件除法运算,也可以选择乘法、移位等运算的实现方式。

SOPC之NiosⅡ系统(二)_第6张图片

2.5 JTAG Debug

该模块为了方便调试,但要占用较多逻辑资源,调试完毕后可取消勾选。

JTAG调试模块根据功能的不同可设置是否使用硬件断点,使用数据触发,跟踪类型和跟踪存储等。

SOPC之NiosⅡ系统(二)_第7张图片

3.RAM组件

在IP Catalog中搜索On-chip添加On-chip Memory(RAM or ROM)组件

SOPC之NiosⅡ系统(二)_第8张图片

存储器类型(Memory Type)中Type有RAM(Writable)和ROM(Read-only)两个选项

Size中设定存储器数据位宽(Data width)为32位,存储量大小(Total memorysize)为 22528B(即 22KB)。其他设置使用系统默认设置。

4.System ID组件

在IP Catalog中搜索System ID添加System ID Peripheral Intel FPGA IP组件

SOPC之NiosⅡ系统(二)_第9张图片

System ID是Nios Ⅱ处理器的唯一识别号,用于确认当前运行的程序和 FPGA 中内嵌的 Nios Ⅱ处理器是否相匹配。

System ID的值为32位,在Qsys中添加该组件时设置。在弹出的 System ID组件设置页面中,可以设置这个32位ID值为0x1223344

SOPC之NiosⅡ系统(二)_第10张图片

5.JTAG UART组件

在IP Catalog中搜索JTAG UART添加JTAG UART Intel FPGA IP组件

JTAG UART使用FPGA 的JTAG 接口协议实现PC和FPGA内部Nios Ⅱ处理器之间串行字符串的传输

SOPC之NiosⅡ系统(二)_第11张图片

 在JTAG UART 组件设置页面中,为了降低这个外设所要用到的缓存FIFO对存储器的需求,设置 Write 和 Read FIFO 的存储量为16B,并且选上Construct using registers instead of memory blocks,表示不使用FPGA片内存储器,而是使用FPGA的逻辑来实现 FIFO。

6.PIO组件

PIO IP核为Avalon-MM从端口和通用I/O端口提供了一个存储器映射(memory-mapped)接口。
PIO的I/O 端口可以连接片内用户逻辑( verilog 语言完成的电路部分),也可以连接到与外部器件相连的 FPGA引脚。每个PIO 核能提供最高 32 I/O 端口,可以在一个 Qsys 系统里添加多个 PIO IP 核。
PIO 为用户逻辑或外围器件提供了简单的 I/O 控制,如控制 LED 灯、获取按键的电平变化信息、控制显示设备、与片外器件通信等。

在IP Catalog中搜索PIO添加PIO(Parallel I/O) Intel FPGA IP组件

SOPC之NiosⅡ系统(二)_第12张图片

6.1 基础设置(Basic Settings)

设置PIO端口的数据位宽(Width,1-32bits,因为最高提供32个I/O端口)

设置PIO端口方向(Direction)

       Bidirectional(tristate) ports,每个PIO位使用一个引脚来驱动和捕获数据,可单独设定每个引脚方向

       Input port only,PIO端口只能捕获输入数据

       Output port only,PIO端口只能驱动输出

       Both input and output ports(InOut),输入和输出端口总线独立,同时生成输入和输出端口

设置端口复位值(Output Port Reset Value)可以确定输出端口的复位值,有效值的长度取决于端口宽度

6.2 输出寄存器(Output register)

Enable individual bit setting/clearing能置位或清零各自独立的输出端口。
当这个选项被选中之后,会出现两个额外的寄存器——置位寄存器、清零寄存器,可以用这些寄存器去确定要置位或清零的位。
 

6.3 边沿捕获寄存器(Edge capture register)

当在Basic Settings中的Direction处选中Input选项时,PIO IP核便允许选中边沿捕获(synchoronously capture)和产生IRQ选项(Generate IRQ)。
当选择Output Ports选项时,边沿捕获和产生IRQ选项是无法选中的。
当选中Synchronously capture选项时,PIO IP核中将包含边沿捕获寄存器 (edge capture)。当一个输入端口产生了特定的边沿时,边沿捕获寄存器能让核检测或产生一个可选的中断。

要检测的边沿种类
Rising Edge 上升沿:
Falling Edge 下降沿:
Any Edge 上升或下降沿。

选择了Enable bit-clearing for edge capture register选项后,给edge capture 寄存器单独的位写1清中断
若是没有选择Enable bit-clearingfor edge capture register,则是写任意数清中断。
当指定类型的边沿在输入端口出现时,边沿捕获寄存器对应位置 1。当 Synchronously capture 选项未选中时,边沿捕获寄存器不存在。

6.4 中断(Interrupt)

当选中Generate IRQ选项时,若输入端口发生指定的事件,则PIO IP核发出IRQ中断(Interrupt request)
中断是指在计算机的运行过程中,由于系统内部或外部或现行程序本身出现紧急事件,计算机立即自动停止正在运行的程序,并开始处理新的程序(中断程序),在处理完中断程序后返回原来的程序接着运行。
 触发IRQ 的方式有两种:一种是电平触发(Level),当输入端口为高电平时触发:另一种是边沿触发(Edge),当输入端口出现了上升沿或下降沿或者双沿中的一种。

SOPC之NiosⅡ系统(二)_第13张图片
6.4.1 电平触发 IRO

产生电平出发IRO的条件:
(1) 首先PIO核的端口需要是Input的端口
(2) 在Interrupt项中,选中GenerateIRQ选项
(3) 选中电平触发选项,即在IRQ type (IRQ 类型)中选中Level。
(4) 使能中断。在硬件设置完成后,需要在软件中给中断屏蔽寄存器 (interruptmask Register) 写1。
电平触发IRQ的工作方式:
(1) 当硬件设置成电平触发模式时,PIO IP核的输入端口出现高电平,就能触发IRQ: 若想要低电平触发IRO,需要在 Quartus I 工程的顶层,在输入端口前面加一个非门。
(2) 当PIO IP核某一个输入端口满足IRQ触发条件,PIO IP核发出IRQ后,程序开始处理中断函数假如此时输入端口一直满足IRO触发条件,那么程序在处理完中断函数后会再次进入中断函数接着运行直到触发条件不存在了,程序才能在处理完中断函数后回到主函数。
(3) 若程序中有复数个中断函数,且中断函数之间还有优先级的区别,就可能发生这样的情况:主程序正在处理某一个中断函数,这时突然触发一个优先级更高的IRO,那么主程序会从当前处理的中断函数跳到优先级更高的中断函数。

6.4.2 边沿触发IRO

产生边沿触发IRO需要的条件
(1) 首先PIO核的端口需要是Input的端口
(2) 在Edge capure register(边沿捕获寄存器)栏选中Synchronously capture选项。此时可以在 Edge type一栏选择触发电平,里面的选项有 RISING (上升沿)、FALLING (下降沿)、ANY(任意边沿)。在 Edgcapure register 栏还有 enable bit-clearing for edge capture register 选项。选择了 enable bit-clearing for edgccapture register 选项后,给 edge capture 寄存器单独的位写1 清中断:若是没有选择 nable bit-clearing foredge capture register 选项,则是写任意数清中断。每触发一次边沿类型的IRQ 后,需要给 edge capture 寄存器写 1清一次中断,否则 PIO IP 核会一直输IRQ。(3) 在 PIO IP 核中加入IRQ 这个功能,也就是在 nterrupt 项中,选中 Generate IRQ 这一选项    (4) 选中边沿触发选项,即在 IRQ type (IRQ类型)中选中 EDGE。
(5) 使能中断。在硬件设置完成后,需要在软件中给中断屏蔽寄存器 (interruptmask Register) 写1

边沿触发的 IRQ 工作的方式
(1) 当硬件设置成边沿触发模式时,PIO IP核的输入端口出现相应的边沿,就能触发IRQ
(2)当 PIO IP 核某一个输入端口满足IRQ触发条件,PIOIP 核发出IRQ 后,程序开始处理中断函数。在中断函数中一般包含给 edge capture 存器写 1清中断的操作。假如此时输入端口一直满足IRQ触发条件,那么程序在处理完中断函数后会再次进入中断函数接着运行。直到触发条件不存在了,程序才能在处理完中断函数后回到主函数。
(3) 若程序中有多个中断函数,且中断函数之间还有优先级的区别,就可能发生这样的情况:主程序正在处理某一个中断函数,这时突然触发一个优先级更高的IRO,那么主程序会从当前处理的中断函数跳到优先级更高的中断函数。

参考文献:特权同学《勇敢的芯-伴你玩转NIOS Ⅱ》、正点原子《开拓者Nios Ⅱ开发指南》

你可能感兴趣的:(一般人学不会的FPGA,fpga开发,嵌入式硬件)