SOPC之NiosⅡ系统(二)

本文详细介绍了NIOSⅡ系统中的关键组件,包括时钟组件的设置,如时钟频率和复位同步边沿选项;NiosⅡ处理器的选择,如快速型和经济型;存储器组件,如RAM和复位/异常向量;以及中断和PIO组件的配置,如电平触发和边沿触发中断。此外,还提到了JTAGDebug模块用于调试和SystemID组件的唯一识别号功能。
摘要由CSDN通过智能技术生成

常用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可以进行参数设置

时钟频率(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)

2.1 Main

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

2.2 Vector

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

复位向量存储器(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的数据和指令缓存部件

指令缓存(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处理器是否支持硬件除法运算,也可以选择乘法、移位等运算的实现方式。

2.5 JTAG Debug

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

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

3.RAM组件

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

存储器类型(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组件

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

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

5.JTAG UART组件

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

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

 在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组件

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),当输入端口出现了上升沿或下降沿或者双沿中的一种。


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 Ⅱ开发指南》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值