自定义指令集的CPU设计
前言:
本人刚刚大学毕业,集成电路专业。初入芯片设计行业,对芯片设计流程有所了解,在此分享一下这方面技巧,希望能够给同样学习中的人带来启发,另外如果有任何意见、建议、批评,指正。
本设计采用VERILOG 语言作为基础,由于集成电路专业同学大都掌握verilog语言,所以本文不过多介绍,如有需要请查看相关介绍。
本文采用VCS编译平台,加VERDI组合,完成设计和测试。本人水平有限,文中难免出现错误,欢迎指正!
组成结构:
如图 1,CPU组成一般包括运算器,存储器,和控制器。还需要各个外设模块。
图 1
运算器:
运算器需要实现加法,减法等算数功能,还需要与,或,非,移位等逻辑操作功能,所以需要根据其设计目的,首先制作设计功能表。
如图 2 为运算器模块设计框图,包括如输入输出类型,位宽。
根据模块图设计真值表
加减法器的实现:
多位加法器由一位加法器多次调用得到,所以只需要设计一个一位加法器即可。
减法器,5-1,可以表示为5+(-1),所以只需要能表示负数,在调用加法器即可,所以采用补码的方式运算即可。
如图4 为一个加法器。
经过多次调用,得到多位加法器。
根据真值表,确定使用什么功能。在使用加法时直接输入。在使用减法功能时,将被减数取反得到反码,在使用加法器得到商。
逻辑运算:
逻辑运算就是与或非,直接根据真值表实现即可。
总体设计:
最后将它们组合在一起,完成运算器的设计
.
最终IO
存储器:
存储器主要是由4个通用寄存器,加一个状态寄存器组成。这部分比较简单,只需要设计一个寄存器,例化5次即可。
如图 为单个寄存器写法
最终IO 有 5个状态输入,D端输入,两个Q端输入,读写信号等组成
控制器
控制器需要根据自己定义好的指令来控制运算器和存储器的工作,首先要先制定指令。
根据控制字来控制运算器与存储器,由于控制字过多占用bit太大,所以使用译码器,用8bit来控制。
如上图 全部指令为20bit,通过每个20BIT的数据就可以使CPU动作了。
具体详细设计见附件。
外设:
GPIO 控制器, CPU通过总线配置GPIO内部的控制寄存器来实现IO口的不同功能。
其具体配置见附件;
UART 控制器, CPU通过总线配置内部的控制寄存器来实现不同功能。
其具体配置见附件;
CPU综合:
程序需要预先存储到RAM中,所以需要一个可以将程序加载模块。
BOOT通过UART 将程序写入RAM中,写入完成返回DONE信号,CPU接到DONE信号后开始读取指令。
下图为BOOT接口
我们现在已经有运算器,存储器,外设,控制器,还有可以下载程序的BOOT,将其组合便可以完成一个简单的CPU设计。
最终模块图
BOOT与CPU连接图
仿真:
通过UART向内部写入指令。
测试使用指令功能:
通过UART将GPIO采集到的数据发送出去。
具体指令见附件
仿真图:
CPU读指令之后执行:
总结:
这只是一个非常简单的CPU模型。当现在CPU设计思路大体相同,希望能够抛砖引玉,给同学们一些启发。
所以设计文件在附件之中,可随时下载。
附件:
http://download.****.net/detail/qq_29196023/9879493