基于Yosys的OpenTitan RTL综合

2020-05-02 22:45:19

OpenTitan是第一个为硅信任根(ROT)芯片构建透明的、高质量的参考设计和集成指南的开源项目。Yosys是一个免费/libre和开源的RTL合成工具框架。它目前拥有广泛的Verilog-2005支持,并为各种应用领域提供了一套基本的综合算法。OpenTitan是一个SystemVerilog项目,但目前yosys只支持SystemVerilog的一小部分。所以我们需要sv2v来转换.。

sv2v提供了预建的二进制文件,我们可以根据自己的系统从[发布页面](https://github.com/zachjs/sv2v/releases))下载,然后解压到可执行路径。

我们也可以从源代码开始构建。由于sv2v是Haskell项目,我们需要在我们的计算机上安装Haskell的构建系统,请参阅Stack。通过下面的命令,我们可以获得sv2v的源代码并构建一个可执行文件。

命令完成后,可执行文件位于./bin/sv2v。将可执行文件复制到可执行路径,安装完成。

如果您的系统没有提供yosys,您可以从源代码安装。构建yosys需要一些必备条件,您可以使用以下命令安装:

sudo apt-get install build-Essential clang bison flex\libreadline-dev gawk tcl-dev libffi-dev git\raphviz xdot pkg-config python3 libboot-system-dev\libost-python-dev libost-filessystem-dev zlib1g-dev。

然后您需要获取yosys的源代码,通过以下命令获取:

OpenTitan是一个复杂的项目,它有一些辅助程序来自动生成一些代码。通过阅读文档,我们可以通过以下命令获得所需的源代码:

sudo apt-get install autoconf bison build-Essential clang-format curl flke8\flex g++git libelf1 libelf-dev libftdi1-2 libftdi1-dev libssl-dev\libusb-1.0-0 make ninja-build pkgconf python3python3-pip\python3-setuptools python3-yaml sRecords tree。

注意:执行上述fusesoc会导致错误,需要进行以下更正:

diff--git a/hw/ip/prim/util/primgen.py b/hw/ip/prim/util/primgen.pyindex 49e73436..d22b3214 100755-a/hw/ip/prim/util/primgen.py+b/hw/ip/prim/util/primgen.py@@-364,8+364,8@@def_GENERATE_ASTERAL_。,-DEFAULT_FLOW_STYLE=FALSE,-SORT_KEYS=FALSE)+DEFAULT_FLOW_STYLE=FALSE)#,+#SORT_KEYS=FALSE)打印(";核心文件写入%s";%(Summary_prim_core_filepath,))。

SystemVerilog中有很多声明性语句,这些语句的sv2v转换不会生成任何代码。而且opentitan项目的源代码缺少include语句,sv2v找不到一些声明和定义,会造成一些错误。所以我需要创建一个包含所有源代码的文件,下面是我使用的文件(opentitan.sv):

`Include";build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_prim_all_0.1/rtl/prim_cipher_pkg.sv";`Include";build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ip_rstmgr_pkg_0.1/rtl/rstmgr_pkg.sv";`Include";build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ibex_ibex_pkg_0.1/rtl/ibex_pkg.sv";`Include";build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_top_earlgrey_pinmux_reg_0.1/rtl/autogen/pinmux_reg_pkg.sv";`Include";build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ip_hmac_0.1/rtl/hmac_pkg.sv";..。

#";合成";宏用于条件编译,以删除一些不可合成的代码v2v-DSYNTHESIS-I build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_prim_assert_0.1/rtl opentitan.sv>;opentitan.v。

sv2v生成的代码不能直接使用,有一些问题需要修复。以下是我的修改:

Diff-r低风险系统_TOP_earlGrey_Verilator_0.1~/workspaces/opentitan/build/lowrisc_systems_top_earlgrey_verilator_0.1 Diff-r lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ibex_ibex_core_0.1/rtl/ibex_id_stage.sv/home/merle/workspaces/opentitan/build/lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ibex_ibex_core_0.1/rtl/ibex_id_stage.sv 958c958<;->;/*1021c1021<;->;*/diff-r lowrisc_systems_top_earlgrey_verilator_0.1/src/lowrisc_ibex_ibex_tracer_0.1/rtl/ibex_tracer.sv.。

由于Assert语句不可综合,因此不会生成任何代码。但是源代码中有一些基于条件的断言,这将生成空的IF语句。Yosys不接受空的IF语句。

在SystemVerilog中,流歌剧