博客首页 | 排行榜 |

萤火虫的博客

沒有月亮,我們可以看星光;失去星光,還有溫暖的眼光;抱著希望,等待就少點感傷;彷彿不覺

个人档案
博文分类
[FPGA博客大赛]硬件软件化之mcu软核编程[5]  2010-03-13 11:52

理解picoblaze-ug129观后感
最近又看了一遍picoblaze的用户手册。学到点东西,和大家分享一下。
一、简介
下图是picoblaze的内部
框图,我们很容易看出它是由几个大的部份组成的:
1k个18位指令空间;
64个字节可写的RAM;
关于port的三个部分PORTID,INPORT,OUTPORT;
一个中断;
16个字节的寄存器;
一个ALU;
两个标记:ZERO和CARRY。
看着不是很复杂。exter1.jpg下图是picoblaze的外部接口图和上面比多了一个reset和clk信号。
二、指令
指令集就不介绍了,太多了。说一下注意的地方:
1.取反操作:由于PicoBlaze里没有取反指令,所以可以用XOR代替,我们知道一个数和0进行XOR是它本身,和1
进行XOR则是1变成0,0变成1.具体代码如下 :
LOAD S0,AA
XOR S0,FF
第一行将S0寄存器放入值0AAH,第二行对S0寄存器进行取反操作,结果为55H。
2.寄存器清0:同样PICOBLAZE也没有提供对某一个寄存器清0的指令,我们可以用XOR它本身来操作。如下指令对
SX寄存器进行清0:
XOR SX,SX
也可以用load sx,0实现,不过这样就不会将zero-flag置位。
3.关于NOP:
PICOBLAZE没有NOP指令,所以在一些需要延时的情况,我们可以用以下两种方式实现:
将寄存器值装入它本身做为NOP指令:
nop:
load sx,sx
用一个空的jump指令实现NOP操作:
jump next
next:
三、中断
PICOBLAZE规定中断向量地址为指令空间的最后,也就是地址3FFH,所以如果指令代码没有写满地址空间的情况,
一般用一个跳转指令放到中断向量地址,这个跳转指令可以指向中断程序,而中断子程序则可以到到地址空间的
任意位置,如下图中断流所示,当第二步中断发生时,第三步跳到中断向量表,而第四步则会自动跳到中断服务
程序。中断程序最后必须用RETURNI返回,后面的参数表示是否还允许后面的中断被打开。
 

类别:fpga |
上一篇:[FPGA博客大赛]硬件软件化之mcu软核编程[6] | 下一篇:[FPGA博客大赛]硬件软件化之mcu软核编程[4]
以下网友评论只代表其个人观点,不代表本网站的观点或立场