️This article has been over 2 years since the last update.
随着开源软件的兴起,传统的芯片领域也不断地被侵蚀,本文简要介绍利用开源工具实现数字电路到BES综合的流程。
背景
芯片开发与软件中的CURD写Controller类似,并没有"全栈"的任务,相反每个人反而更加原子化。未来随着开源化,芯片设计同样将廉价化,造芯片将和造车一样遍地都是。
本文介绍的流程
1 | Chisel --(sbt)--> RTL --(syn)--> Netlist --(后端)---> 后端暂时不介绍 |
详细流程
前端数字设计
准备工作
我们以这个标准的scala项目为例
1 | git clone https://github.com/jlpteaching/dinocpu.git |
然后安装
1 | brew install sbt scala |
若需要配置SBT镜像库,详见mirrors
编译构建
如下将下载Chisel等依赖,并在根目录生成Top.v
1 | sbt "runMain dinocpu.elaborate single-cycle" |
Chisel的定位类似预综合,可以降低Verilog的编写门槛。
综合(synthesis)
参考 http://www.clifford.at/yosys/files/yosys_presentation.pdf
简单介绍:RTL代码 + Cell库 -> 网表
安装yosys
直接brew安装即可
1 | brew install yosys |
什么是 standard cell库
电路的各种物理约束,大部分是闭源格式,你应该找EDA厂商/Fab厂商去要
这些Cell与具体的工艺、厂商、IP绑定。比如台积电会优先与Synopsys共同开发新的5nm的lib库,而你没有这种库的话,从综合这一步开始就要被“卡脖子”了。
开源的格式类似于yaml,详见https://www.physicaldesigninsight.com/post/liberty-file-format
1 | # 下载lib库(standard cell library) |
综合命令
如下是综合脚本,与官网一致
1 | # read design |
它会生成逻辑上的CPU modules
最终生成的v文件(netlist)是机器反复优化的产物,虽然仍然是文本,但是编辑将很费劲了,如果强行编辑,这种叫做“ECO”,并需要FM形式化证明。
当前遇到一个问题,我的Mac版CPU只有一个core在工作,导致真八核只跑了一个核,没找到类似makefile的j8这种参数。同时内存至少给8G,否则后续优化跑不动。
这个文件将上百MB,可以用verdi等商用或者开源工具打开,也可以用show命令渲染,或者用这个svg项目查看
总结
上述只是用现成的工具拼接而成的产物
- 没有涉及验证、SIMU、EMU等前端流程
- 没有涉及DFT、PT、FM等BES流程
- 不能只跑Top,而不跑别的Design。
所以本文只跑了一个入门大概流程。后续还有Place and routing等流程,最终才能交付制造。