自己编译开源RISC-V CPU
2021-05-19 / modified at 2023-02-20 / 779 words / 3 mins
️This article has been over 1 years since the last update.

随着开源软件的兴起,传统的芯片领域也不断地被侵蚀,本文简要介绍利用开源工具实现数字电路到BES综合的流程。

背景

芯片开发与软件中的CURD写Controller类似,并没有"全栈"的任务,相反每个人反而更加原子化。未来随着开源化,芯片设计同样将廉价化,造芯片将和造车一样遍地都是。

本文介绍的流程

1
Chisel --(sbt)--> RTL --(syn)--> Netlist --(后端)---> 后端暂时不介绍

详细流程

$2synchiselstandard cell librarybuild.sbtscala filesdeveloperTop.vsynth.vwrite

前端数字设计

准备工作

我们以这个标准的scala项目为例

1
git clone https://github.com/jlpteaching/dinocpu.git

然后安装

1
brew install sbt scala

若需要配置SBT镜像库,详见mirrors

编译构建

如下将下载Chisel等依赖,并在根目录生成Top.v

1
2
3
sbt "runMain dinocpu.elaborate single-cycle"
# or
sbt "runMain dinocpu.elaborate pipelined"

Chisel的定位类似预综合,可以降低Verilog的编写门槛。

综合(synthesis)

参考 http://www.clifford.at/yosys/files/yosys_presentation.pdf

简单介绍:RTL代码 + Cell库 -> 网表

$2verilogsreaddesignsynthesis(yosys)linkoptnetlist.vStandardCell

安装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
2
# 下载lib库(standard cell library)
wget https://raw.githubusercontent.com/YosysHQ/yosys/master/manual/PRESENTATION_Intro/mycells.lib

综合命令

如下是综合脚本,与官网一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# read design 
read_verilog Top.v

# elaborate design hierarchy
hierarchy -check -top Top

# the high-level stuff
proc; opt; fsm; opt; memory; opt

# mapping to internal cell library
techmap; opt

# mapping flip-flops to mycells.lib
dfflibmap -liberty mycells.lib

# mapping logic to mycells.lib
# 需要数个小时,真正的BES开发要同时跑多个design,不能干等
abc -liberty mycells.lib

# cleanup
clean

# write synthesized design
write_verilog synth.v

它会生成逻辑上的CPU modules

$2TopDCombinMemPortICombinMemPortDualPortedCombinMemoryPipelinedCPUStageReg_6StageReg_5StageReg_4StageReg_3StageReg_2StageReg_1StageRegHazardUnitForwardingUnitAdderImmediateGeneratorALUALUControlRegisterFileControl

最终生成的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等流程,最终才能交付制造。