高级会员
- 积分
- 735
- 金钱
- 735
- 注册时间
- 2015-7-9
- 在线时间
- 135 小时
|
本帖最后由 wgui 于 2021-12-26 21:38 编辑
先上效果!
运行效果:https://www.bilibili.com/video/BV1eS4y1M76n?share_source=copy_web
视频的编译器附件(含演示程序代码,不含编译器源码):
链接:https://pan.baidu.com/s/1PcQ-pa7DAu9u8Ifzy0Z09w
提取码:1234
想利用FPGA模拟一个自己的CPU,一个作显示图形处理,又没有找到更完整的指令集和CPU架构运作流程资料。然后只有C51在STC文档时有详细指令介绍,但C51只支持16位地址空间,也就是只能访问64KB内存,显得很格格不入。
于是利用空余时间制作了一套属于自己的编译器,CPU指令集是自已根据需要定义的常规指令,目前FPGA逻辑资源量只做到了16位CPU,32位运算,然后制定汇编编译器。
编译器语法是用C语言编写的,编译语言也是根据C语言格式描述就行了,但又未能完全支持所有复杂的描述方式。在原C基础上整合了二进制表示常量,如B10010,所有变量或寄存器支持类似单片机的sbit位定义直接修改变量位。目前支持二维二维数组,指针结构,枚举等的特殊语法。视频中的程序就是在此编译上编译。
然后C语言编译时又会生成一个中间代码,就是把单项运行流程给分解了,然后中间代码编译器根据对应代码查找汇编库的对应的功能代码,转换成相应的汇编代码,汇编编译器转成机械码。
理论上来说,按照同样的运作流程更换汇编指令库就可以移植到其它不同CPU上。
关于汇编编译器,因为之前弄过几个不同指令集又不满意,又需要更换结构,因此显得汇编编译器需要重写,或重更改?这一来就很多麻烦。于是汇编编译器又加上一项可组织不同形式汇编指令的功能,就是一个可以编程汇编指令的汇编编译器,这样一来,更改指令就不需要重新整改汇编编译器了,只需用文本编译你需要的指令结构描述就可以了。这会不会影响汇编编译速度?实际运行,占用编译时间的是C解释编译,汇编编译速度还是挻快的。
浮点运算如何实现?浮点实现是需要自行编译源代码实现,有了基础编译功能,在C语言上用利用非浮点数方法写浮点数运算原理。编译出汇编,放到汇编功能库中,此时在浮点运算时会调用对应的浮点库。即可实现浮点运算,目前实现了浮点加减乘。除法还存在一位差的问题未能解决,所以使用FPGA的IP核运算。
|
-
空战
-
贪吃蛇
|