PicoBlaze 8 位微控制器

PicoBlaze 8 位微控制器

PicoBlaze 是一个8 位的微控制器,非常适合于Spartan 系列及Virtex 系列FPGA。还可以用于CPLD,但是需要外部加SRAM 存储器以运行程序。它又被称为常数化的可编程状态机KCPSM((K)constant Coded Programmable State Machine),之所以这样称呼它,是因为PicoBlaze 非常适合实现复杂的、实时性要求不高的状态机。

一般情况下,实现一个PicoBlaze 微控制器,仅仅需要96 个SLICE(192 逻辑单元)和一个BRAM(Block RAM),最大可以寻址1K 指令空间(每条指令18 位宽)。其性能可以达到44~76DMIPS,取决于其所用的FPGA 及速度等级。
PicoBlaze 可以扩展最多256 个8 位的输入口和256 个8 位的输出口,可以通过这些输入/输出口方便地实现与用户逻辑的连接。另外,它还具有一个中断输入。

PicoBlaze 以VHDL/Verilog 源码提供给用户,占用非常少的资源,不会像51 核等CPU一样停产。而且它完全采用同步设计,容易在各种FPGA 中实现。

12.1 PicoBlaze 特性

PicoBlaze 微控制器框图如图12-1 所示,它的特性介绍如下。

PicoBlaze 微控制器框图

图12-1 PicoBlaze 微控制器框图

16 个8 位的通用数据寄存器。指令空间:1K(18 位)片上存储器,上电自动装入。ALU:字节宽度,具有进位carry 及零zero 标志位。64 个字节的片上暂存器Scratchpad RAM。最多可以扩展256 个输入口和256 个输出口。31(10 位)个可供CALL/RETURN 调用的堆栈。每条指令在两个时钟周期内完成,在Virtex2-Pro、Virtex-4、Virtex-5、Virtex 6高性能FPGA中,可以达到200MHz(100MIPS)。快速中断响应,最差为5个时钟周期。在Spartan、Virtex2、Virtex-II Pro、Virtex4/5/6中,仅需要大约96个SLICE和一个BRAM。支持汇编和指令集仿真。

12.2 PicoBlaze硬件基本结构

接下来介绍PicoBlaze微控制器的硬件基本结构,包括控制器各功能模块、信号、中断、暂存器、输入输出端口以及指令存储器的不同配置结构。

12.2.1 PicoBlaze功能模块说明

下面对图12-1中所示PicoBlaze的各功能模块进行简要说明。

(1) 通用寄存器(General Purpose Register):PicoBlaze有16个通用寄存器,被定义为s0~sF,为方便程序的编写,这些寄存器可以用汇编命令重新命名。各寄存器用途一样,没有优先级,也没有专用的累加器。

(2) 1K寻址空间:每条指令都是18位宽,这些指令与FPGA其他逻辑设计一同编译,程序在配置过程中自动装入BRAM运行。

(3) 算术逻辑单元(ALU):ALU单元执行所有微控制器运算,内容如下。

基本的算术操作,例如加法和减法。位运算,例如与、异或等操作。算术比较和位测试操作。移位和旋转操作。

所有具有一个操作数的操作,操作数被置于一个指定的寄存器中(sX),结果也被存放在此寄存器中。如果某条指令需要两个操作数,则第二个操作数被置于另外一个寄存器sY或者是一个立即数kk中。

(4) 标志位(Flag):ALU的操作会影响标志位RO和CARRY。ZERO表示最后一个操作结果为零,CARRY的结果预示着各种各样的情况,取决于最后一条指令的执行结果。

(5) 中断使能标志(Interrupt_Enable):使能中断输入Interrupt。

(6) 64字节暂存器(Scratchpad RAM):PicoBlaze微控制器提供64字节的片上数据暂存空间,通过STORE和FETCH指令直接或间接寻址。STORE指令将通用寄存器sX中的内容写到64个空间中的某个地址,FETCH的操作与STORE相反,读出64个空间中某个数到寄存器sX中。此RAM的6位地址可以用立即数指定,也可以通过一个通用寄存器指定,仅低6位有效,地址范围00~3F。

(7) 输入/输出(Input/Output):PORT_ID指定输入/输出的地址,它为8位,因此可以扩展256个输入口和256个输出口。输入时,PicoBlaze从输入口IN_PORT 读数据存入sX 中; 输出时, PicoBlaze 将sX 中数据送到OUT_PORT。

(8) 程序计数器(Program Counter,PC):PC 指向下一条将要执行的指令。默认情况下,PC 自动指向下一条指令所存储的位置。仅JUMP 、CALL、RETURN、RETURNI、中断和复位指令会改变这种默认行为。PC 不会直接被
应用程序改变。PC 为10 位宽,因此最大寻址空间为1024,当PC 达到3FF hex 时,会返回到00 地址。

(9) 程序流控制(Program Flow Control):程序的默认执行顺序可以通过改变条件或非条件流控指令来改变。JUMP 可以跳转到1024 个空间的任何位置。

CALL 指令指定了子程序的起始地址, 同时返回地址被保存在CALL/RETURN 堆栈中。如果程序中使能了中断,那么,当中断发生时,程序的返回地址也会保存在CALL/RETURN 堆栈中,同时中断向量3FF(Hex)装入PC。中断用RETURNI 返回,而不是RETURN。

(10) 堆栈(CALL/RETURN):CALL/RETURN 堆栈最大可以存储31 个指令地址,允许31 级子程序嵌套。由于中断也会占用此堆栈,因此,如果程序中使能了中断,则至少需要保留一级空间给中断用。此堆栈是一个轮转型的结
构,如果堆栈满,再装入地址时,最早进入的地址就会溢出。没有指令可以控制堆栈或堆栈的指针,也没有程序空间供堆栈应用。

(11) 中断(Interrupt):PicoBlaze 提供一个中断输入,且这个中断是异步的,它可以发生在指令周期的任何时候。然而,一般的设计规则建议用时钟同步PicoBlaze 的所有输入。中断响应时间小于5 个时钟周期。

(12) 复位(Reset):PicoBlaze 在FPGA 配置完成后立即自动复位。复位强制PicoBlaze 器进入初始状态,PC=0,标志位清零,中断禁止,CALL/RETURN堆栈也被复位。但是数据寄存器和Scrachpad RAM 不受复位的影响。

12.2.2 PicoBlaze 接口信号

本节介绍PicoBlaze 微控制器的接口信号,如图12-2 所示。

PicoBlaze 微控制器接口连接

图12-2 PicoBlaze 微控制器接口连接

IN_PORT[7:0]:数据输入。在执行INPUT 指令期间,有效的输入数据将出现在此端口。INTERRUPT:中断输入。如果中断使能位被应用程序置位,那么,当此中断输入口有一个持续至少2 个时钟周期的高电平,则PicoBlaze 会进入中断服务程序。如果中断使能标志位清零,则PicoBlaze 会忽略中断引脚上的信号。RESET:复位输入。为了复位微控制器,产生一个复位事件,只需要使RESET口输入一个至少一个时钟宽度的高电平。随着FPGA配置的完成,会自动产生一个复位信号。CLK:时钟输入。CLK最高频率由ISE综合结果决定。没有占空比的要求。OUT_PORT[7:0]:数据输出。在执行OUTPUT指令期间,输出数据出现在此端口,并持续两个时钟周期。FPGA内部逻辑可以在CLK上升沿当WRITE_STROBE为高时采样该数据。PORT_ID[7:0]:输出端口地址。在执行INPUT/OUTPUT指令期间,此端口信号保持两个时钟周期。READ_STROBE:读控制信号。此信号为高,在执行INPUT指令期间,表明IN_PORT[7:0]已经被采样到指定的数据寄存器中。该信号在双周期输入指令INPUT的第二个时钟周期有效。该信号常被用来作为读FIFO操作的握手信号。WRITE_STROBE:写控制信号。在执行OUTPUT指令期间,此信号为高时OUT_PORT[7:0]数据有效。此信号在OUTPUT指令的第二个CLK周期有效。在FPGA内,当WRITE_STROBE有效时在CLK上升沿采样OUT_PORT[7:0]数据。INTERRUPT_ACK:中断响应输出。此信号为高时,响应中断事件。在双周期的中断事件的第二个时钟周期此信号有效。它经常被用来清除中断源INTERRUPT的输入。

12.2.3 PicoBlaze指令集

PicoBlaze微控制器的指令包括程序控制指令、算术指令、逻辑指令、移位和旋转指令、中断指令、存储指令和输入/输出指令等,如图12-3所示。

PicoBlaze指令集

图12-3 PicoBlaze指令集

子程序调用和返回支持深度为31的堆栈。x和y表示寄存器,范围是0~F。kk代表立即数,范围是00~FF。aaa代表地址,范围是000~3FF。pp代表端口地址,范围是00~FF。ss代表暂存器地址,范围是00~3F。
表12-1是PicoBlaze微控制器各指令操作的简要说明。这些指令都是按照KCPSM3的语法(括号中为pBlazIDE的语法)进行说明,每条指令包括了基本描述、功能描述以及对进位位和零标志位的影响。

表12-1 PicoBlaze指令列表

PicoBlaze指令列表

PicoBlaze指令列表

PicoBlaze指令列表

sX:16个通用寄存器中的任何一个,s0~sF。sY:16个通用寄存器中的任何一个,s0~sF。aaa:10 位地址,为立即数,或者为一个三位的16 进制数000~3FF,或者为标号。kk:8 位端口地址,或者为立即数,或者为两位16 进制数00~FF。pp:8 位端口地址,或者为立即数,或者为两位16 进制数00~FF。ss:6 位暂存器地址,或者为立即数,或者为两位16 进制数00~3F。RAM[n]:地址为n 的暂存器内容。TOS:存在于堆栈顶的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值