本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正。
这个是我这个学期FPGA的期末大作业,老师说是给两周的时间去写,其实还是在最后一周匆匆赶制出来的
不到DDL不开工。其实吧,要我自己评价是挺不满意的,主要是结构缩水了太多,为了节省代码量,我们甚至连PC指针砍掉,并且将ALU和Control Unit强行拼在了一起,变成了一个单地址指令结构的(严格来说应该也算不上)CPU。可能唯一的优点就是执行快吧…
设计原理
看的出来其实我们设计的这个原理十分简单,一个只剩下指令寄存器的控制单元,不用计算PC指针,还和运算单元结合在了一起,连在顶层文件中的连接都省了。由于是在家里上课,也没有上板之类的,只要ModuleSim能跑就行,所以把外围内存都删了(其实原理也挺简单的),直接看输入输出波形就完事了。但是内部的存储单元还是得要,不然有许多操作的中间值没地方放,自己写一个就行了,也不要什么IP Core之类的。
指令列表
输入信号为16位数 别问,问就是强迫症,高8位为指令码,低8位为操作数。
总共就九个指令,全部围绕寄存器A进行:
- in_ram:将A中的数写入RAM,地址为输入数据低8位所指的空间
- load_num:从外部输入数据到A
- out_ram:将RAM中的数写入A,地址为输入数据低8位所指的空间
- clr:清空A
- inc:A中的数自加1
- dec:A中的数自减1
- stay:等待指令
- add:将A中的数与输入数据低8位相加
- min:将A中的数与输入数据低8位相减
代码设计
工程总共有4个文件:输入模块,运算控制模块,RAM模块以及顶层模块
输入模块(IDEC.v)
输入模块负责将输入的16位二进制数分割为2个8位二进制数,高8位为指令,低8位为操作数或者RAM地址。