首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PicoBlaze微控制器的使用技巧

PicoBlaze微控制器的使用技巧

PicoBlaze微控制器是赛灵思推出的一个高性能低成本的8位处理器软核,它由VHDL语言实现,可以在FPGA/CPLD上实现,具有设计灵活方便,运行速度快,占用资源少的特点。虽然现在32位处理器大为盛行,但在一些低速的复杂控制方面使用PicoBlaze微控制器具有较大的成本优势,在这些应用中使用PicoBlaze微控制器将是一个比较好的方案。并且个人认为,PicoBlaze微控制器的实现代码对用户是公开的,可使用户完全掌握设计中的所有细节,方便调试与使用,设计者甚至可以修改代码、增加和减少功能块来定制自己专用的处理器,体现了极大地灵活性,在低成本的场合使用还是相当不错的。下面介绍使用PicoBlaze微控制器方面的一点心得与技巧。
一、PicoBlaze结构概述
PicoBlaze微控制器由16 字节的通用寄存器、1K×18 BIT ROM、1个字节宽度ALU、64 字节的内部RAM和程序计数器等组成,具体框图如下图一所示(摘自赛灵思文档ug129.pdf):

PicoBlaze微控制器提供57条不同的指令,256个直接或间接的可设定地址的端口,1个可屏蔽的中断,依赖于具体实现的FPGA型号,可获得44~100 MIPS的性能。
对用户来说,我们比较的关心PicoBlaze微控制器输入和输出的信号接口,具体接口如下图二所示:

具体各信号功能说明如下表所示:

这里指令ROM是由FPGA的BRAM实现,由PicoBlaze微控制器输出取指地址ADDRESS,通过INSTRUCTION得到18位宽的指令,另外还要了解下PicoBlaze微控制器的指令集后我们就可以着手开发基于PicoBlaze的应用了,具体指令说明请参考赛灵思文档ug129:PicoBlaze 8-bit Embedded Microcontroller User Guide的第3章。
二、开发流程
主要分为两步:一是开发具体程序,PicoBlaze微控制器目前仅支持汇编语言编程。代码编好后,通过汇编的编译工具Xilinx KCPSM3或Mediatronix pBlazIDE编译成包含二进制代码的ROM文件。
二是在ISE工程中例化PicoBlaze软核与ROM文件,其它综合、布线、下载等步骤和普通ISE工程一样。
PicoBlaze微控制器的汇编程序以.psm为扩展名,使用Xilinx KCPSM3编译工具时拷贝KCPSM3.EXE, ROM_form.vhd, ROM_form.v和ROM_form.coe文件到工作目录,然后在WINDOWS的DOS命令行进入到工作目录,在工作目录下用kcpsm3 [.psm] 命令就可以编译代码了。
pblazeIDE是一个图形化的编译工具,但是与KCPSM3相比:一是语法有一点差别;二是对于端口,常量的定义不同 使用前首先要对pblazeIDE进行一下设定,在Settings-Options中开启语法高亮,在Settings的下拉菜单中,选择仿真的 pico核为Picoblaze 3就可以了,之后源文件输入既可以在File -> IMPORT中导入KCPSM3 Code的程序,也可以直接pblazeIDE格式编写程序后打开就可以,最简单的方法是直接在参考程序上修改,对初学者来说可以减少比较多的格式上的错误。具体指令写法上的差别可以参考赛灵思文档ug129.pdf的表10-2。
三、中断功能的使用
PicoBlaze微控制器只有一个中断,提供四个和中断有关的指令,分别为RETURNI DISABLE、RETURNI ENABLE、DISABLE INTERRUPT、ENABLE INTERRUPT。
RETURNI DISABLE和RETURNI ENABLE指令类似于RETURN(子程序返回)指令,中断返回时总是执行将程序堆栈中最后一个地址重新送给程序计数器的操作,并且中断返回也能够恢复中断时刻(中断现场)的进位和零标志位。指令中包含的中断使能(ENABLE)和中断屏蔽(DISABLE)控制位决定是否响应以后的中断。
PicoBlaze微控制器上电时默认的是中断不使能,可以通过DISABLE INTERRUPT和ENABLE INTERRUPT指令来控制中断的关闭和开启。
发生中断时,系统保存现场的进位和零标志位,并把中断使能位清零,把当前程序计数器的指针入栈,最后程序跳转到0x3FF处。所以程序在0x3FF处的指令应该是一条跳转到中断服务程序的指令。PicoBlaze微控制器从检测到中断发生到进入中断服务程序仅仅需要五个时钟周期,中断应答信号在从检测到中断发生后的两个时钟周期输出一个时钟周期的高电平脉冲。要使中断信号有效的识别,中断信号的高电平脉冲至少要持续两个时钟周期。
如要扩展中断,可以利用PicoBlaze微控制器的 IN PORT,把多个中断源进行编码,然后在中断服务程序中读出编码值来识别是哪个中断发生了。
如要定义最后一条在0x3FF处的跳转到中断服务程序的指令,用以下形式:
KCPSM3: ADDRESS 3FF
pBlazIDE: ORG $3FF
四、调试PicoBlaze程序
第一种方法是用ModelSim仿真,因为最终的ISE工程里PicoBlaze微控制器代码和程序ROM都是VHDL或Verilog HDL形式,用ModelSim仿真可以获得设计中最详细和精确的仿真结果,这对于有过FPGA逻辑设计经验的人员来说是最熟悉不过了,缺点是要仿真的时钟周期比较长时速度特别慢。
第二种方法是用pBlazIDE仿真,类似一般单片机的软件仿真器,可以设断点,查看寄存器内容比较方便,界面也比较直观。
以上都是软件调试方法,有时需要在实际系统上进行硬件级的调试,可以在系统中集成一些外设如LED显示,UART等方法进行调试,另外逻辑设计中的Chipscope逻辑分析仪也可以使用,可以提供强大的在线调试功能。
五、扩展ROM
目前PicoBlaze微控制器支持到1K大小的ROM,相比早期的256条指令的ROM已经提高了四倍,在一般的应用来说应该是足够的了,但随着应用功能的增多,有时也需要扩展更多的ROM空间,由于编译器和指令的限制,程序只能在1K内跳转,所以我们扩展ROM时只能采用分页的办法。具体做法是写两个程序分别编译位两个ROM文件,当需要调用另外一个ROM文件的子程序时要先设置页标志位。同样返回时也要出栈页标志位。两个ROM文件的输出通过页标志位来选择输入到PicoBlaze微控制器。多个ROM时类似,注意页标志位要通过OUT PORT来输出选择ROM文件的。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表