今天晚上把指令集定了一下,编写了一串机器码测试了一下计算结果,是对的。
先放几个图片,需要做的内容还很多,外设现在只加了ram和rom,后续要丰富起来。
哈佛结构
单流水线,取指、译码、执行:
下图可以看出PC每3个机器周期+1,开始下一条指令的执行:
![](http://www.techbulo.com/wp-content/uploads/2020/02/20-1-1024x332.png)
以下是指令集介绍,共分了4类指令:
1、特殊指令
2、立即数操作指令
3、访存指令
4、跳转指令
所有指令都是24位(有些浪费,大多数指令只需要16位,为了考虑跳转指令方便实现暂时把指令都定为了24位)
![](http://www.techbulo.com/wp-content/uploads/2020/02/13-768x1024.jpg)
![](http://www.techbulo.com/wp-content/uploads/2020/02/12-768x1024.jpg)
![](http://www.techbulo.com/wp-content/uploads/2020/02/16-819x1024.jpg)
下图是MCU顶层视图:
![](http://www.techbulo.com/wp-content/uploads/2020/02/2-5-1024x570.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/Core-1024x614.png)
上图为Core的组成,有取指模块、译码模块、执行模块、控制模块(相当于微指令发生器)、寄存器模块(共5个寄存器:PC、ACC、DR、SR、IR),后续要加上debug模块,方便在线下载程序。
以下是一些内部模块综合完成后的RTL视图:
![](http://www.techbulo.com/wp-content/uploads/2020/02/3-4.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/4-4-1024x549.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/5-3-1024x478.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/6-3.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/7-3-1024x450.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/8-3.png)
![](http://www.techbulo.com/wp-content/uploads/2020/02/9-1-1024x749.png)
下面是一个计算的例子:
![](http://www.techbulo.com/wp-content/uploads/2020/02/11-768x1024.jpg)
![](http://www.techbulo.com/wp-content/uploads/2020/02/10-2-1024x239.png)
手工编写机器码,写入ROM初始化文件中,下一步开始仿真
![](http://www.techbulo.com/wp-content/uploads/2020/02/1-4-1024x507.png)
仿真结果是正确的 00001101 = 00001010+00000011
![](http://www.techbulo.com/wp-content/uploads/2020/02/loop-1024x326.png)
从上图可以看出,执行完计算之后,PC的值在3和4之间一直跳动,证明死循环正在执行,实现了程序逻辑。