做芯片规划的各位,在某个时刻,你或许会发生一个主意,“为什么不自己规划一个处理器呢?”或许是手头的处理器并不好用;或许是想用的处理器贵的离谱;或许是你期望做出差异化的产品;又或许仅仅因为它是个诱人的应战,你想测验一下…既然如此,我很快乐能和你讨论一下怎样完结这个使命。
交给物
咱们先从成果说起,也便是这项使命的终究交给物。这儿无妨参阅ARM处理器核的deliverables。当然,假如仅仅一个自己用的专用处理器,不必定要有这么完好的交给物。
硬件:首要是处理器相关的RTL代码,验证环境,EDA东西的脚本,文档等等。
东西:首要包含编译东西(compiler),调试东西(debugger),仿真东西(simulator)和功用剖析东西(profiler)。下图是ARM的编译东西的比方,首要包含armclang(C编译器),armasm(汇编器),armlink(链接器)和fromelf(image东西)。
仿真东西一般至少包含一个指令仿真器 instruction set simulator (ISS),做的好的有cycle-accurate ISS。
模型:此外,现在一般的处理器IP还会供给一些处理器的模型来支撑体系级规划,比方用于虚拟渠道(virtual platform的处理器model。虚拟渠道能够在没有硬件的状况下支撑软件开发,它能够模仿一个完好的芯片或许一个硬件板卡,比方ARM的Fixed Virtual Platform (FVP)。而专用的处理器模型(比方ARM的Fast Model)是虚拟渠道的重要组成部分,和总线模型以及其它IP模型一同模仿体系的功用。
在上述交给物中,赤色为必不可少的内容。即便你做的专用处理器功用简略,没有这几部分它也几乎是无法正常运用的。当然,你能够说,我不需求ISS做指令验证,不需求debugger做调试,不需求C编译器而只用汇编,我也只能“呵呵”了。
看到这一大堆作业,假如你没有害怕,而是觉得很有意思。那么我也很乐意给你点协助,看看是不是能够把你的主意变成实际。其实办法也很简略 — 自己做不了就找“他人”协助呗。
详细来说,依据你的预算状况,能够分为“穷”和“富”两种玩法。我先说说有钱的玩法吧。
富玩法
其实,不止你一个人想做专用处理器,许多大公司也有这样的需求。所以,就有人为这种需求专门供给了解决方案,比方Synopsys的ASIP-designer东西和Cadence的Xtensa可扩展处理器(拜见Cadence(Tensilica)的可定制处理器),都是为了满足定制处理器的需求而规划的。
其间Cadence的可扩展处理器是在一个根底处理器上给你供给了装备(configure)和扩展(extension)的办法和东西。它供给的功用能够通过下图感受一下。
这套东西的输入包含三个部分:1)一个处理器模板(Processor Template);2)用户装备(Configuratoin Options);3)定制的指令(Custom Instructions)。最简略的状况,你只需选一个处理器模板扔给东西就能够了。假如这个不能满足要求,那么你或许要做一些装备。这个也很简略,底子是菜单挑选。最有技术含量的是第三种状况,你要规划一些定制的指令。有了这些输入,剩余的作业就都交给东西了。咱们在榜首节说的那些交给物,都能够主动生成。
那么咱们怎样知道要不要自己定制指令呢?东西也供给了办法。首要,输入你的算法程序输入,通过编译,进行仿真和profiling,得到功用评价的成果。然后判别是否满足需求。答案是NO的话,就测验更新Configuration;假如仍是不可,再测验定制指令的办法,直到满足停止。因为东西协助你做了大部分作业,这个迭代的进程(也能够看作是Design Space Exploration)会十分快。
为了完结定制指令(对原有指令集进行扩展),Cadence(Tensilica)规划了一种专用的描绘言语:Tensilica Instruction Extension (TIE) language。因为Xtensa处理器有一个底子的架构模板,运用TIE言语对它进行扩展是有必定的约束,不是说你想做的指令和架构改动都能够完结。
Synopsys供给的东西直接就叫ASIP designer,ASIP(Application-Specific Processor)专用处理器规划东西。和Tensilica的可扩展处理器不同,ASIP designer支撑从零开端规划和完结一个专用处理器。相应的,它比Tensilica可扩展处理器有更高的灵活性。你能够十分自在的规划指令集和微结构,掩盖从Extensible processor,到Application-specific uP/DSP,到Programmable datapath这样一个更大的架构空间,如下图所示。这儿也能够看出,这个东西的方针并不是规划通用处理器。
下图是这个东西完好的办法学。
它的输入便是两个,算法(C/C++代码)和处理器模型(Processor Model),输出则是一个处理器相关的一切规划和东西链。从输入到输出的进程同样是主动化完结的。当然,这个进程并不像看起来那么简略,处理器建模的门槛不低。并且,东西赋予你的灵活性越高,把握这种东西的门槛也越高。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完结的玩家测验。不然,或许有的坑你底子过不去。
最终,我写这篇文章并不是想鼓舞我们都自己做专用处理器,而是期望我们清楚做这件作业要支付的价值。