微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > Xilinx可编程逻辑器件设计与开发(基础篇)连载46:Spartan

Xilinx可编程逻辑器件设计与开发(基础篇)连载46:Spartan

时间:02-11 来源:网络整理 点击:

12.2.4 PicoBlaze中断

我们知道,PicoBlaze微控制器只提供一个中断输入口,如果设计中需要多个中断,可以在FPGA中用逻辑实现。图12-4 所示为一个简单的中断连接图,当有中断发生时,触发器的2端输出一个高电平, 当PicoBlaze响应中断信号INTERRUPT_ACK有效时,触发器3端为高电平,其输出被清零,外部中断被撤消。

图12-4 实现简单的中断

接下来,我们结合图12-5和图12-6来讨论中断的执行过程。

图12-5 所示为一段中断程序例程,程序中首先用ENABLE INTERRUPT 指令使能中断。一旦中断使能,中断信号必须持续至少2 个时钟周期才能确保被PicoBlaze 识别。当产生中断事件时,有效的中断使PicoBlaze 在执行完毕当前正在执行的指令(INPUT s1,01)后立即跳转到3FF 处继续执行指令。通常,3FF 处是一个跳转指令(JUMP isr),跳转到中断服务程序。中断服务程序会自动禁止中断,保存当前PC值、ZERO 和CARRY 标志。当执行完毕中断服务程序,退出中断服务程序之前,执行RETURNI 指令,暂存于CALL/RETURN 堆栈中的PC 值自动装入PC 寄存器中,同时,恢复ZERO 和CARRY 标志,程序回到进入中断前的指令处执行。

图12-5 中断流程<./center>

从图12-6 中可以清楚地看到此中断的执行过程。

图12-6 中断时序图

如果应用程序不需要中断,则可以使INTERRUPT 连接到低电平,所有1024个指令空间均可以被访问到。

在应用PicoBlaze的中断时,有以下几点需要注意。
? 如果指令空间不是1K,则中断发生时,PC会跳转到程序空间的最后一条指令处执行。
? 当程序进入中断服务程序时,微控制器会自动禁止所有中断,当退出中断服务程序时,用RETURNI ENABLE指令使能中断。
? 在对时间要求很严格的设计中,需要用DISABLE INTERRUPT和ENABLE INTERRUPT配合使用,以避免不必要的中断,如图12-5所示的criTIcal_TIming子程序。

12.2.5 PicoBlaze Scratchpad RAM──暂存器

PicoBlaze微控制器包含64字节的暂存器,通过STORE和FETCH指令访问,可以在数据寄存器和暂存器之间进行数据传输。支持直接和间接寻址。暂存器仅被Spartan-3/3E/3A/3AN、Virtex-II、Virtex-II Pro FPGA和Virtex-4/5/6支持。复位不会对暂存器产生影响。

一、 寻址模式

(1) 直接寻址。

立即数就是暂存器的地址,如图12-7所示,寄存器sX直接读/写暂存器。

(2) 间接寻址。

暂存器的地址为某个指定的寄存器的值。图12-8所示代码的作用是用0填充所有64个暂存器空间。

图12-8 间接寻址暂存器

二、 用暂存器实现查找表

这个例子是用暂存器实现一个查找表,将4位2进制输入转换为等效的16进制字符显示在7段LED上。这段代码读入外部4位开关量,产生一个2进制结果0000~1111,把它转换为16进制字符显示在7段LED上。暂存器中前16个位置存放LED字符表,输入的开关量作为暂存器的地址。如图12-9所示。

图12-9 暂存器实现查找表

三、 用暂存器实现堆栈

在PicoBlaze中,虽然有CALL/RETURN程序堆栈,但是没有数据堆栈,如果在程序调用或中断处理过程中需要暂存一些数据,则需要数据堆栈,这时,可以用暂存器来实现这个功能,如图12-10所示。

图12-10 暂存器实现数据堆栈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top