利用Digilent Spartan-3 优秀性能来实现Oberon系统 - FPGA/ASIC
赛灵思 Spartan-3开发板成为作者改进其软件教育用的Oberon 编程语言和编译器的基础。
1988 年,Jürg Gutknecht 和我一起完成并出版了Oberon 编程语言[1,2],其为我职业生涯早期开发的另外两种编程语言Pascal 和Modula-2 的后续版本。与Modula-2 相比,我们最初设计Oberon 编程语言力求更加精简和高效,以便能够更好地帮助教学人员为计算机科学专业的学生教授系统编程。我们再接再励,于1990 年针对可采用windows 系统和具有字处理能力的工作站开发了Oberon 操作系统(OS),以此作为工作站的现代实现方式。接着,我们出版了一本书,名为《Project Oberon》,详细讲解了Oberon 编译器以及与之同名的操作系统。此外,书中还包括详细的指令和源代码。
几年前,我的朋友Paul Reed 建议我重新修订并再次出版这本书,不仅因为这本书对系统设计教学具有重要价值,同时还因为这本书可以作为良好的切入点,帮助那些想要成为创新者的人们从零基础构建可靠的系统。
然而,我当时实际上是遇到了很大的困难。我最初开发的编译器是将已基本消失了的处理器作为目标。因此,我的解决办法就是为现代处理器重新编写编译器。但在做了不少研究之后,我无法找到一款能够在清晰度、规律性和简洁性上符合我标准的处理器。因此,我自己设计了这款编译器。而我之所以能够将该想法付诸实现,都是因为现代FPGA 能够帮助我设计硬件以及系统软件。更重要的是,选择赛灵思FPGA 能帮助我更新系统,同时让设计尽可能接近自1990 年以来的原始版本。
实现在低成本Digilent Spartan®-3开发板上的新型处理器RISC 负责托管1MB 静态RAM (SRAM) 内存。我唯一添加的系统硬件就是一个鼠标接口和一个用来替换旧系统中硬盘驱动器的SD 卡。
这本书和面向整个系统的源代码可在projectoberon.com[3,4,5] 中查阅,也可在该网站上名为 S3RISCinstall.zip. 的单个文件中进行查阅。该文件包含指令、SD 卡文件系统图像和FPGA 配置比特文件(对于Spartan-3开发板的 Platform Flash,此为PROM文件形式),以及SD 卡/ 鼠标接口硬件的构造详图。
RISC处理器
该处理器由算术逻辑单元、由16 个32 位寄存器组成的阵列和带指令寄存器、IR 及程序计数器PC 的控制单元组成。Verilog 模块RISC5 就是该处理器的典型代表。
该处理器具有20 种指令:4 种用于移动、偏移和旋转;4 种用于逻辑运算;4 种用于整数运算;4 种用于浮点运算;2 种用于存储器访问;2 种用于分支。
RISC5 通过运行环境RISC5Top导入。该运行环境包括到各种(内存映射)器件和SRAM(256M&TImes;32 位)的接口。整个系统(图1)包括以下Verilog 模块(见行统计):
图1 – 该系统及其所含Verilog模块的方框图
我将内存映射到黑白VGA 显示器中,这样它只占用1024&TImes;768&TImes;1位/ 像素=98304 字节,基本上占 1MB 可用主内存的10%。该SD 卡将取代初始系统中80MB 的硬盘驱动器,其可通过能够接受并序列化字节或32 位字的标准SPI 接口进行存取。键盘和鼠标通过标准PS-2 串行接口连接。此外,还提供一根串行异步的RS-232 线和一个通用8 位并行的I/O接口。模块RISC5Top 还带有一个每毫秒采用增量式计数的计数器。
OBERON操作系统
该操作系统软件由包括内存分配器(带垃圾回收器)的内核、文件系统以及引导载入程序、文本系统、浏览器系统和文本编辑器组成。
名为“Oberon”的模块是中心任务调度程序,而“System”是基础命令模块。通过点击显示器上任何浏览器文本“M.P”上的中间按钮即可触发动作,其中P 是模块M 声明的程序名。如果M 不存在,则会自动加载。但是,大多数文本编辑命令是通过简单的鼠标点击触发的。其中,左边一栏按钮用来设置" 脱字" 符,标记文本位置,右边一栏按钮用来选择文本字段(text stretch)。
“Kernel”模块包括磁盘存储管理和垃圾回收器。我保证观察浏览器是平铺的,不重叠。标准布局显示了多个浏览器的两条垂直轨迹。只需拖动标题栏,就可以放大、缩小或移动它们。图2 显示了在显示器上运行的用户界面以及Spartan-3 开发板、键盘及鼠标。
图2 - 显示用户界面的显示器(Spartan-3开发板在右侧)