本单循环MCU完全根据教材代码编写,仅对小部分内容进行了必要的改写。MCU支持AND, ORR, ADD, SUB, MOV, LDR, STR, B, MUL 指令。除MUL指令外均按照32bit ARM标准进行编码,并支持放置NZCV标记 (e.g., SUBS) 和条件判定 (e.g., ADDEQ)。MUL指令为定制的指令,为有符号乘法,输入为两个16bit补码数,输出也为两个16bit补码数。MUL指令编码模式类似于ADD,唯一的区别是CMD部分编码为1000。
经测试,支持的指令均能够正常运行,并且能够通过通用指令集测试和向量内积测试。
本项目为最终实测版本,通过一些必要的步骤即可上传至FPGA测试,但使用者需要清楚,由于版本和测试环境的不同,本项目可能需要一些修改。更多细节请参阅实验报告。
在您下载此开源项目时即代表您同意此协议。尽管此协议并不具有法律效应,但是希望您能够自觉遵守此协议。
数电实验已开展多年,在过去的几年内通过率(通过通用指令集的概率)均不高于50%,然而今年内卷风气尤为严重,最终通过率竟高于80%。不仅通过率显著提升,各种有效或无效的优化也层出不穷,多个datapath、多个核心、多流水都被很多组采用。但是实际上,大道至简,大部分的优化都是没有用处的。在一个月内学习硬件描述语言到开发完成ARM指令MCU,本就是非常不合理且难以完成的任务,加之当下日益严重的内卷风气,作者深感无力和痛心。
为了破除这种内卷风气,并为今后的同学们提供尽可能多的便利,作者决定开源此项目。使用本项目代表完整地使用本项目,将本项目用作参考或者使用其中的部分代码不属于使用本项目。使用本项目者不能对本项目进行本质上的修改,包括但不限于添加datapath、添加核心、添加ALU、添加流水等,但添加指令作为特例被允许。
希望您能够理解项目作者学业繁忙,不能再提供更多技术援助。也希望您能够理解项目作者水平有限,项目中存在错误或考虑不周之处均属于正常现象。
项目作者享有对此协议的最终解释权。