#随笔 一个8位MCU学习(基于PIC16F72X)

  首先,这个8位MCU的指令集是基于PIC16,不过省去了SLEEP。因此,可以使用MPLAB来实现编译,通过软硬件协同测试来进行验证。

  这是一个基于嵌入式的指令集,相对于传统的取址,译码,执行,访存和写回的五级流水操作,只有取址,译码,执行和写回这四步。它主要的指令格式有三种,分别是针对字节的文件寄存器操作,针对位的文件寄存器操作以及立即数和控制操作,其中,指令一共有35条(包含NOP,CLRWDT,SLEEP)。下图是指令的通用格式:

  

 

  大部分指令可以在一个指令周期内完成,除非条件测试指令或指令执行改变PC值,这种情况需要两个指令周期,并且第二个指令是NOP。

  在自己设计的PIC内核中,主要分为IAU(取址),IRU(译码),EU(执行),STATUS(状态寄存器)以及STK_CTRL(堆栈和读写REG控制)。本内核采用的是八个硬核堆栈,并且将取址译码放在同一级流水,执行写回在第二级流水。在两级流水中,分别有对数据存储器的读写操作,由于可能出现连续两条指令出现,对同一个寄存器出现先写后读的操作,会导致出现数据冒险。因此,对于这种情况,在硬件上设置了旁路,可以直接将执行输出值,送到下一级的操作数上。

  由于我们的数据存储器是单口RAM,并且由于流水线操作,所以存在在同一时钟周期,对数据存储器进行读写操作。因此,我们将数据存储器的时钟设置为指令执行时钟的2倍,从而避免了结构冒险。最后对于控制冒险,分支跳转指令则是通过插入NOP来实现的。

 

转载于:https://www.cnblogs.com/xm-9466/p/9608074.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值