注:本文原来发帖在21ic上,结果21ic的反应一如既往地让我失望。现连同回复,全部转帖在此,望与懂行者交流。
==============无奈的分割线===============
mercell 发表于 2007-12-3 14:14 楼主:
FPGA计算机,应该是什么样子?
作为典型的非冯·诺伊曼计算架构之一,用FPGA构成的计算系统无疑是很有吸引力的。现有的此类解决方案,其实都没有离开冯·诺伊曼机的框架,比如用 FPGA作为传统CPU的可重构协处理器,或者在FPGA内做出软核CPU(冯·诺伊曼虚拟机)。何时FPGA计算平台能摆脱这种局限,真正用自身的特质来构成未来的先进计算平台,是值得期待的。
基于FPGA的计算平台应该具备如下特征:
1.动态局部重配置。这个局部可以是一个FPGA芯片内的部分逻辑,也可以是一个FPGA芯片阵列中的部分芯片。系统根据需求,时刻分配新的逻辑资源,构成新的逻辑部件,来完成新的计算任务,并释放已经完成的任务所占用的逻辑资源。这种切换的最佳时间粒度还有待确定,和传统CPU的多任务切换将会有所区别。未来我们将会用new/delete来分配整块逻辑电路,new的过程就是从RAM的指定地址(代码段?)加载配置数据到FPGA配置存储器的指定地址,并将该块配置存储器标记为已经使用,delete则清除这种标记。随着抽象的提高,引入垃圾收集似将成为一种必然。
2.新结构的主存和辅存。主存一如既往由大量DRAM充当,但其结构细节和使用方式与传统将会有所改变。典型之一是数据口的宽度,由于FPGA不再具备传统CPU的次序读写特征,而是以大块地读写配置数据为主,粒度在KB~MB级别,而计算过程中的小规模、频度高的数据存储任务,则大量由FPGA内部的 SRAM单元担当。这种使用方式使DRAM倾向于具备更宽的数据端口,和更粗粒度的编址方式。比如主存可能按页(4KB)编址,给出页面号之后,即以高度优化的DMA方式一次完成整页数据的读写。而主存的高速缓存也会做出类似改变。系统的辅存和传统一样,以硬盘和闪存为主,只是可执行文件中保存的不再是指令序列,而是配置数据集合。当我们双击可执行文件的图标,系统会加载代码段和数据段到主存,并根据进程调度,在合适的时刻将进程映像加载到FPGA中。时间片到之后,映像会被写回主存,等待下次被调度。鉴于进程调度牵涉到的数据传输量远大于传统系统,一种有效的新的进程切换机制将会被引入。
3.最少的周边I/O设备。各种I/O控制器的数量将会大幅减少,因为一切都可以在FPGA内部做出来,并具备远远更高的灵活性。需要外围电路的唯一理由,将会是对模拟信号的牵涉。各种数字信号接口可以简单地通过电平转换直接连到FPGA的I/O引脚,甚至键盘的防抖动处理都不需要专门的芯片。FPGA 内部与这些引脚直接连接的逻辑部分被称为硬件驱动,相关配置数据即是驱动软件。普通应用编写者不需要对接口细节感兴趣,只需要与这些驱动软件交互。
4.完善、分层次的新结构的软件系统。由逻辑信号构成的API将会形成标准的文档,应用软件编写者可以以简单的方式直接调用这些API而不用考虑硬件时序等低层次信息。程序设计的主导思想可以是状态机,也可以是更高层的抽象。高度并行是不变的主题,传统的顺序执行的编程模型将成为一种高度抽象,或称为“面向顺序的编程(SOP)”。 以上是目前的思考结果,与传统系统的兼容性暂不考虑。望与大家讨论,结识同道。