APP下载

KCPSM6PicoBlaze的原理与应用※

2013-08-27魏厚刚杨宽泗孙武张开锋

单片机与嵌入式系统应用 2013年2期
关键词:嵌入式器件指令

魏厚刚,杨宽泗,孙武,张开锋

(中国人民解放军75576部队,海口570236)

引 言

PicoBlaze 8位嵌入式处理器是Xilinx公司为Virtex、Spartan系列FPGA 和CoolRunner-II系列CPLD设计的嵌入式处理器软核。针对不同的器件,Xilinx公司共推出了3 个版本的PicoBlaze,包括KCPSM3(目标器件为Spartan 3、Virtex II、Virtex II PRO、Virtex 4和Virtex 5),CPLD版(目标器件为CoolRunner-II)和最新推出的KCPSM6(目标器件为Spartan 6、Virtex 6 和7 系列FPGA)。KCPSM6针对Spartan 6、Virtex 6和7系列FPGA 进行了特殊优化,增加了一些新特性,在开发和调试方法上也与KCPSM3 有所不同。本文分析对比了其异同,对KCPSM6在开发调试中的注意事项进行总结,并在Avnet Spartan 6 MicroBoard上进行了实例验证。

1 KCPSM6PicoBlaze的体系结构

KCPSM6PicoBlaze(以下简称KCPSM6)8位嵌入式处理器是Xilinx公司为Spartan 6、Virtex 6和7系列FPGA 设计的嵌入式处理器软核,它具有效率高、占用资源少等优点,可以方便地嵌入到硬件系统设计中,实现与其他功能模块的无缝连接[1]。它仅占用26个Slice和1个BRAM,占XC6SLX4器件4.3%的资源、XC6SLX150T 器件不到0.11%的资源。KCPSM6嵌入式处理器具有高达52~120 MIPS的指令执行速度,具体速度取决于所选用的FPGA 所属系列和器件速度等级。

KCPSM6微处理器主要由以下几个单元组成:

◆两组16个8位通用寄存器;

◆最高支持4KB的程序存储单元;

◆8 位算术逻辑单元,带有CARRY 和ZERO标志位;

◆64、128或256字节内部暂存RAM;

◆256个输入和256个输出端口,方便扩展应用;

◆中断控制单元;

◆休眠模式,进一步降低系统功耗。

KCPSM6嵌入式处理器的原理框图如图1所示。

KCPSM6新增的特性和功能总结如下:

(1)新增引脚

图1 KCPSM6嵌入式处理器原理框图

sleep引脚。当sleep引脚电平由低变高时,KCPSM6在执行完最后一条已读取指令后,进入休眠模式,以降低系统功耗。若将sleep引脚一直置低电平,则KCPSM6一直处于正常工作状态。

K_write_strobe为常量输出触发信号,与OUTPUTK指令配合使用,可用一条指令即可完成向输出端口输出常量值,而无需寄存器的干预。

bram_enable为程序存储单元BRAM 使能信号,可进一步降低系统功耗。

Address[11:10]为程序存储单元高位地址线,最大支持4KB程序存储。

(2)新增属性

KCPSM6新增了3个属性,分别是hwbuild(与HWBULID指令配合使用,可用于定义软件版本等功能)、interrupt_vector(定义中断矢量,默认为0x3FF)和scratch_pad_memory_size(定义内部暂存RAM 大小,默认为64B)。

(3)新增指令

KCPSM6指令集向下兼容KCPSM3的指令集,并新增了9 条指令,分别是TESTCY、COMPARECY、REGBANK、STAR、OUTPUTK、JUMP @、CALL @、LOAD&RETURN 和HWBULID。新指令的扩展,极大地改善了KCPSM6的编程灵活性和代码效率。例如,向端口0x01 输出0x5A,在KCPSM3 中需执行两条指令:“LOAD s0,5A”和“OUPUT s0,01”。而在KCPSM6 中,只需执行“OUTPUTK 5A01”即可。其他新增指令的详细功能,见参考文献[1]。

2 KCPSM6开发与调试

KCPSM6 的开发流程与 KCPSM3 基本相同。KCPSM6的开发流程如图2所示。

图2 KCPSM6开发流程示意图

如图2所示,用户程序和ROM 模块经编译器KCPSM6Assembler编译后,生成包含程序代码的ROM模块。在顶层模块中例化ROM 模块和KCPSM6 模块,然后综合、实现并生成比特流下载到FPGA 中。在程序调试过程中,经常需要对用户程序进行反复修改,如果采用常规的方法,则每次修改用户程序,都要重新综合、布局布线,生成新的比特文件,往往需要几分钟到十几分钟,耗时耗力[2],给调试带来了极大不便。为此,与KCPSM3类似,Xilinx公司也为KCPSM6提供了JTAG Loader工具,而采用JTAG Loader进行调试则无需重新综合、布局布线,通过JTAG 接口直接修改PicoBlaze的程序BRAM,只需几秒即可完成程序更新,大大加快了调试进度。

JTAG Loader的使用步骤如下:

①将代码中的C_JTAG_LOADER_ENABLE属性设为“1”。

②综合、实现生成比特流并下载到FPGA 中。

③将JTAG Loader.exe复制到当前工程目录下。

④打开命令提示符,并切换到当前目录,运行JTAG Loader(如果是64位操作系统则运行JTAG Loader64),JTAG Loader自行识别目标FPGA,如果报错显示未知器件,则需要输入其IR_Length参数,该参数可以在ISE安装目录下查到,如:C:\Xilinx\13.2\ISE_DS\ISE\acecf\data\xccace.bsd文件中的attribute INSTRUCTION_LENGTH of XCCACE:entity is 8,其他器件的查阅方法类似。

⑤修改用户程序,并用kcpsm6.exe重新编译程序。

⑥运行jtagloader–l your_program.hex,即可实现一键更新程序。

另外,值得注意的是,使用JTAG Loader之前,必须正确设置系统的环境变量,具体方法是运行ISE安装目录下C:\Xilinx\13.2\ISE_DS文件夹内的settings32.bat批处理文件即可。

3 应用实例

为了验证KCPSM6的新增功能及JTAG Loader的使用方法,本文在FPGA 开发板上实现了8 位LED 的控制——编者注:工程文件详见本刊网站www.mesnet.com.cn。综合结果显示,本设计共占用了35个Slice和2个RAMB 16BWERs单元,仅占XC6SLX75T-3FGG676总Slice数和BRAM 单元的1%。最后,将生成的比特流下载到开发板上进行验证,LED 能够按预期要求闪烁。修改用户程序,重新编译后,能够用JTAG Loader快速更新程序。

结 语

本文简要阐述了Xilinx公司最新推出的KCPSM6软核的结构及原理,并与KCPSM3进行了对比分析。介绍了KCPSM6的开发调试流程,并进行了实例验证。本文对已有KCPSM3 使用经验的设计者快速熟悉KCPSM6的应用开发具有积极意义。

[1]Xilinx.PicoBlaze 8-bit Embedded Microcontroller User Guide[EB/OL].(2011-07-22)[2010-09].http://www.xilinx.com/support/documentation/ip_documentation/ug129.pdf.

[2]郑嘉平,孙迪锋,刘传,等.PicoBlaze软核的仿真与调试[J].单片机与嵌入式系统应用,2011(3):74-75.

猜你喜欢

嵌入式器件指令
TS系列红外传感器在嵌入式控制系统中的应用
ARINC661显控指令快速验证方法
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
杀毒软件中指令虚拟机的脆弱性分析
旋涂-蒸镀工艺制备红光量子点器件
面向高速应用的GaN基HEMT器件
中断与跳转操作对指令串的影响
一种加载集总器件的可调三维周期结构
高分辨率遥感相机CCD器件精密热控制