设计一个自己专用处理器该怎么完成?
,这个过程并不像看起来那么简单,处理器建模的门槛不低。而且,工具赋予你的灵活性越高,掌握这种工具的门槛也越高。ASIP designer的处理器建模需要使用一种专门的语言,即nML,对处理器的指令集和架构进行高层次建模;此外还需要很多和编译器相关的设计,(具体的信息大家可以访问synopsys网站)。所以,即使你能买得起,要玩好这套工具,还得具备两个条件:第一,是你必须熟悉处理器架构和编译方面知识;第二,是要学习这套建模语言和工具。
总的来说,如果你有专用处理器设计的需求,足够的资金和学习的耐心,可以考虑引入这类辅助设计工具。在经历过一定的学习周期后,你不仅可以完成一个设计,还能获得快速、高效设计处理器的能力。
穷玩法
看了上面的介绍,你是不是也对“自动”设计专用处理器的方法很眼馋呢?可惜,你可能没有足够的资金来购买这样的工具,或者是你的目标收益还不值得做出这样的投资。这种情况下,我建议你从开源的处理器(或者指令集)开始做你自己的专用处理器。其实这也算是废话吧。所以还是得给个具体的例子,假设你想在RSIC-V的基础上做定制处理器。RSIC-V是现在一个相对成熟的开源处理器指令,已经有很多相关实现和非常活跃的社区。相信大家都听说过,就不科普了。这里得说明一下,我并没有对RISC-V进行过深入的研究和尝试,以下的说法基本上是纸上谈兵,不对的地方请大家批评指正。
首先,你要好好学习一下RISC-V指令集手册中的“Chapter 10 Extending RISC-V”,这里明确介绍了给RISC-V指令集增加指令的规则。
第二,在现有的RISC-V的硬件实现基础上,增加新指令对应的硬件。可能需要增加专用的寄存器,运算单元,pipeline寄存器,控制信号等等。或者,你可以按照新的指令集(假设叫“RISC-V++ ISA”)自己做完整的硬件实现。其实我觉得第二种方法还更靠谱一点。很多时候,修改别人的东西,要比自己做困难的多。
第三,在RISC-V原有的工具链(比如GNU或者LLVM的编译器)基础上做出修改,支持新的指令。相对来说,这项工作是有比较完善的规则的,只要按照编译工具的规则就可以把新增的指令加进去。当然,如果你增加的指令比较特殊,比如是向量操作,那么工具链的设计会困难很多。这种情况下的一个选择是在高级程序语言的编译器中不增加对新指令的支持,这些新的指令以汇编或者intrinsic的方法实现。
最后,这套方法是不是也能支持在第二节中所说的快速design space exploration呢?基本的思路也是差不多的。你可以先用基本指令集来仿真你的算法;根据profiling的结果(比如性能指标,指令效率,code size等)考虑对指令集进行的修改;然后更新相应的硬件实现和工具链,再编译和仿真你的算法,并不断迭代。现在你实现这个过程没有自动化工具的帮忙,可能需要更长的时间才能完成,特别是需要对功耗面积等implementation结果进行优化的情况。当然,如果现在RSIC-V的生态中已经有了辅助设计工具,那么可能情况会轻松一些。
这种方法看起来行的通,不过中间的坑非常多,要求你对基础处理器(比如RISC-V)非常熟悉。适合那些已经完整的做过RISC-V实现的玩家尝试。否则,也许有的坑你根本过不去。
最后,我写这篇文章并不是想鼓励大家都自己做专用处理器,而是希望大家清楚做这件事情要付出的代价。
专用处理器 相关文章:
- 设计自己专用处理器该怎么完成?(07-11)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)