1 概述
PicoBlaze 8位微处理器是Xilinx公司为Virtex系列FPGA、Spartan-Iitxi系列FPGA和CoolRunner-II系列CPLD器件设计嵌入式专用IP Core。它解决了常量编码可编程状态机(KCPSM)的问题。这一模块只占用SpartanIIE的76个小区(slice),占最小的XC2S50E器件9%的资源,占XC2S300E器件不到2%的资源。在这一模块中还包括一个用于存储指令的由Block RAM组成的ROM,最多可存储256条指令。PicoBlaze只用了如此少的资源,但其速度却可达到40MIPS以上。
PicoBlaze提供49个不同的指令,16个寄存器(CPLD为8个),256个直接或间接的可设定地址的端口,1个可屏蔽的、速率为35MIPS的中断。它的性能超过了传统独立元器件组成的微处理器,而且成本低,使得PicoBlaze在数据处理和控制算法领域有着广泛的应用前景 。由于可编程部分也完成嵌入,PicoBlaze可与子程序和外围设备结合起来完成特殊的设计。其基本应用框架如图1所示。
PicoBlaze模块由VHDL语言设计,不需要预编译,可直接由布局布线工具嵌入到容量大一点的器件中;可以认为PicoBlaze几乎不占资源,而且一个设计中可以包括多个PicoBlaze。PicoBlaze适用于复杂的但对时间要求不太高的系统中,并可以简华设计。
2 PicoBlaze原理与结构分析
PicoBlaze 8位微处理器内部结构如图2所示。
PicoBlaze处理器IP Core由全局寄存器、计算逻辑单元(ALU)、程序流控制标志和复位逻辑、输入/输出(I/O)、中断控制器等几大部分构成。
全局寄存器:16个8位全局寄存器,s0~sf。寄存器的操作是非常灵活的;没有为特殊任务保留寄存器,任何寄存器的优先权都是一样的。
算术逻辑单元(ALU):提供了8位处理器需要的所有简单操作。执行所有的操作都是用任意一个寄存器提供的操作数完成。若操作需两个操作数,则有另一寄存器指定或在指令中嵌入一8位常量值。在不增加程序大小的前提下,指不定期任意常量值,增强了简单的指令特性。更明白地说,ADD1与INCREMENT指令是等价的。若操作超过8位,则有一选项(增加或减少)可供选择。二进制操作码(LOAD、AND、OR、XOR)可操作和测试二进制数,还包括SHIFT和ROTATE指令集合。
程序流控制标志:ALU操作后的结果影响ZERO和CARRY两个标记。用有条件的或无条件的程序流控制指令决定程序执行的顺序。JUMP指令指定在程序空间内的绝对地址。CALL指令将程序定位到用一段代码写的子程序的绝对地址,同时将返回地址压栈。嵌套CALL指令使用的栈为15层,对于程序大小足够了。
复位逻辑:复位信号强迫程序回到初始状态,即程序从地址00开始执行,中断被屏蔽,状态标记和堆栈也同时复位,但寄存器中内容不受影响。
输入/输出(I/O):PicoBlaze提供256个输入端口和256个输出端口。由端口总线提供一个8位地址值与一个READ或WRITE选通脉冲信号,一起指定访问端口。这个端口地址值或为一确定值或由任意一寄存器中内容指定。当访问一由分布式或块状RAM组成的内存时,最好用直接寻址。当进行输入操作时,输入端口上的值被输出一个READ_STROBE输出脉冲时,即表示进行了一次输入操作。
中断控制器:PicoBlaze提供一中断输入信号。只要用一些简单的组合逻辑,多个信号就可进行组合并被应用于这一中断。程序中可定义此中断是否被屏蔽,默认值是中断被屏蔽。一被激活的中断信号使程序执行“CALL FF”指令(FF即256,程序存储器的最后一个位置),然后设计者为此定义的放在此处的一段程序被执行。一般在此地址放一JUMP指令,跳转到中断服务程序。中断进程屏蔽其它中断,RETURNI指令保证在中断程序结束后,标记和控制指令回到原先的状态。
3 PicoBlaze的指令集和调试器
表1列举了所有代表十六进制的PicoBlaze操作码的指令,其中:
①“X”和“Y”代表寄存器,“s”,范围为0~F;
②“kk”代表常量,“aa”代表地址,“pp”代表端口地址,范围均为00~FF。
pBlazIDE(Integrated Development Environment)是PicoBlaze汇编程序的编辑、调试、汇编集成环境。利用它可以方便地仿真所写程序的输入输出、寄存器内值的变化及程序指令的顺序执行过程,便于检查程序的错误。PicoBlaze处理器IP Core应用的VHDL源代码和调试器pBlazeIDE可以从Xilinx网站上直接下载。
4 PicoBlaze的应用系统设计
应用于Spartan-II和Virtex-E器件的PicoBlaze处理器IP Core,外挂一个可存储256条指令的RAM,共同工作。若是用户需要更多的程序存储空间以便执行更加复杂的操作,有以下几种解决方案。
*Xilinx针对Virtex-E器件特别设计了KCPSM2模块,提供1024个地址,且操作32个寄存器。
*若用户的程序超过了256条指令,则可以考虑将设计分解为几个过程,每一个过程由一个单独的PicoBlaze模块(每个拥有自己的RAM)完成。在一些设计中,以一个PicoBlaze为主(Master),其它一个或多个PicoBlaze为辅(Slave)。双端口分布式存储器是在处理器间交换数据的一个很好的选择。
*可选择将超过256个指令的程序分解到两个或多个块状RAM中,用一个选择开关来选择存储了要执行的指令的RAM。最简单的是使用一个被一触发器输出控制的二选一选择器来选择RAM,如图3所示。
这种方法的缺点是:二路选择器占用8个slice,且加大了程序执行的延时,降低了程序最大执行速率。一个更好的方法是将二路选择器放到RAM中,一条指令被分别存放在两个512×8的RAM中,用switch信号和8位地址信号组成9位信号,选择要执行的指令。图4列举了一个利用PicoBlaze实现控制四个七段数据管显示的例子,左边两个从0变到99,右边情形相同,变化的间隔均为1s。但同时刻只有一个计数器增加,而选择哪一个计数器增加则由DIP switch输入控制。
结语
PicoBlaze是一个典型的8位微处理器。与传统的8位MCU相比,它是一个由VHDL实现的软处理器IP Core,可以在各种FPGA和CoolRunnerII CPLD上实现,设计灵活方便;因此,PicoBlaze将在基于可编程逻辑和MCU的应用领域中发挥积极的作用。其较高的处理性能和较少的资源占用,预示其具有更加广泛的应用前景。