我们以这个标准的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的编写门槛。
参考 http://www.clifford.at/yosys/files/yosys_presentation.pdf
简单介绍:RTL代码 + Cell库 -> 网表
直接brew安装即可
1 | brew install yosys |
电路的各种物理约束,大部分是闭源格式,你应该找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项目查看
上述只是用现成的工具拼接而成的产物
所以本文只跑了一个入门大概流程。后续还有Place and routing等流程,最终才能交付制造。