【博文连载】超小型CPU设计(Tiny CPU)完成
承接《超小型CPU设计(Tiny CPU)刍思》,大概一个月前我已经完成TPU设计,并用于实际工程,比我预计的时间要快很多。按套路最终的设计和原版的想法有一般的出入。
--------------------------------------------------------------------------------------------------------
我最后设计出什么样的特性
1、超小型,指令集小于32,最终资源在500-1500lut之间,取决于cpu功能裁剪,一般1-2kRAM,取决于设计需求,当然最大支持很大的ram,可以上G,不过这么大的ram不是本设计所需
2、动态可裁剪,我新引入的很棒的特性,CPU结构根据当前的运行需求自动裁剪增加,比如CPU的位宽,RAM的大小,是否使用加法器,乘法器,除法器等,会根据具体的编译代码,实行自动控制。
3、DSL,定制编程语言,我用Ruby实现了对TPU的DSL,可以不用去写汇编,完全可以把汇编封装成函数调用。并且内置了一些通用函数。
4、拓展性,迁移能力,可以把具体功能封装成api,直接include就可以拥有,而且很容易自己封装,我已经实现SPI,IIC,axi4,axi stream,axilite,udp,对原装支持axi4,而且是长burst支持,即使现在的MicroBlaze都不支持长burst。
5、动态更新,可以在运行时更新程序。
6、内建性,TPU可以直接控制和读取FPGA内部信号
缺陷:
1、还没有单步调试功能,因为实现起来有点困难,你要在电脑上实现一个完全的TPU模型,而且我也不需要。
2、没办法用纯代码,RAM必须用IP,这个锅xilinx来背,xilinx dpram 初始文件加载有BUG。
未来方向
1、多核,TPU有天生多核优势,我目前还没往这方便的项目使用。
2、功能强化,是不是可以加一个TCP,Flash等的API
3、算法,是否可以加一些复杂算法?