verilate_command
# verilator-specific
verilate_command := $(verilator) --no-timing verilator_config.vlt \
-f core/Flist.cva6 \
core/cva6_rvfi.sv \
$(filter-out %.vhd, $(ariane_pkg)) \
$(filter-out core/fpu_wrap.sv, $(filter-out %.vhd, $(filter-out %_config_pkg.sv, $(src)))) \
+define+$(defines)$(if $(TRACE_FAST),+VM_TRACE)$(if $(TRACE_COMPACT),+VM_TRACE+VM_TRACE_FST) \
corev_apu/tb/common/mock_uart.sv \
+incdir+corev_apu/axi_node \
$(if $(verilator_threads), --threads $(verilator_threads)) \
--unroll-count 256 \
-Wall \
-Werror-PINMISSING \
-Werror-IMPLICIT \
-Wno-fatal \
-Wno-PINCONNECTEMPTY \
-Wno-ASSIGNDLY \
-Wno-DECLFILENAME \
-Wno-UNUSED \
-Wno-UNOPTFLAT \
-Wno-BLKANDNBLK \
-Wno-style \
$(if ($(PRELOAD)!=""), -DPRELOAD=1,) \
$(if $(PROFILE),--stats --stats-vars --profile-cfuncs,) \
$(if $(DEBUG), --trace-structs,) \
$(if $(TRACE_COMPACT), --trace-fst $(VL_INC_DIR)/verilated_fst_c.cpp) \
$(if $(TRACE_FAST), --trace $(VL_INC_DIR)/verilated_vcd_c.cpp) \
-LDFLAGS "-L$(RISCV)/lib -L$(SPIKE_INSTALL_DIR)/lib -Wl,-rpath,$(RISCV)/lib -Wl,-rpath,$(SPIKE_INSTALL_DIR)/lib -lfesvr -lriscv -ldisasm -lyaml-cpp $(if $(PROFILE), -g -pg,) -lpthread $(if $(TRACE_COMPACT), -lz,)" \
-CFLAGS "$(CFLAGS)$(if $(PROFILE), -g -pg,) -DVL_DEBUG -I$(SPIKE_INSTALL_DIR)" \
$(if $(SPIKE_TANDEM), +define+SPIKE_TANDEM, ) \
--cc --vpi \
$(list_incdir) --top-module ariane_testharness \
--threads-dpi none \
--Mdir $(ver-library) -O3 \
--exe corev_apu/tb/ariane_tb.cpp corev_apu/tb/dpi/SimDTM.cc corev_apu/tb/dpi/SimJTAG.cc \
corev_apu/tb/dpi/remote_bitbang.cc corev_apu/tb/dpi/msim_helper.cc
这个 verilate_command
变量定义了一个非常复杂的 Verilator 命令,用于仿真和编译 RISC-V CPU 项目。
1. $(verilator) --no-timing verilator_config.vlt
:
$(verilator)
:是 Verilator 编译器的调用。--no-timing
:禁用定时仿真。verilator_config.vlt
:指定 Verilator 配置文件。
2. -f core/Flist.cva6
:
-f
:从文件中读取 Verilog 源文件列表。core/Flist.cva6
:包含所有需要编译的 Verilog 文件列表。
3. core/cva6_rvfi.sv
:
core/cva6_rvfi.sv
:指定需要编译的单个 Verilog 文件。
4. $(filter-out %.vhd, $(ariane_pkg))
:
- 过滤掉扩展名为
.vhd
的文件,只保留 Verilog 文件。
5. $(filter-out core/fpu_wrap.sv, $(filter-out %.vhd, $(filter-out %_config_pkg.sv, $(src))))
:
- 从
$(src)
列表中过滤掉指定的文件,保留需要的 Verilog 文件。
6. +define+$(defines)$(if $(TRACE_FAST),+VM_TRACE)$(if $(TRACE_COMPACT),+VM_TRACE+VM_TRACE_FST)
:
+define+$(defines)
:定义预处理宏。$(if $(TRACE_FAST),+VM_TRACE)
:如果启用了快速跟踪,则添加+VM_TRACE
定义。$(if $(TRACE_COMPACT),+VM_TRACE+VM_TRACE_FST)
:如果启用了紧凑跟踪,则添加+VM_TRACE+VM_TRACE_FST
定义。
7. corev_apu/tb/common/mock_uart.sv
:
- 指定需要编译的单个 Verilog 文件。
8. +incdir+corev_apu/axi_node
:
- 指定包含目录。
9. $(if $(verilator_threads), --threads $(verilator_threads))
:
- 如果设置了
$(verilator_threads)
,则指定 Verilator 线程数。
10. --unroll-count 256
:
- 指定循环展开的次数。
11. -Wall
:
- 启用所有警告。
12. -Werror-*
:
- 将特定警告视为错误,停止编译。
13. -Wno-*
:
- 禁用特定警告。
14. $(if ($(PRELOAD)!=""), -DPRELOAD=1,)
:
- 如果 `PRELOAD` 不为空,则定义 `PRELOAD` 宏为 1。
15. $(if $(PROFILE),--stats --stats-vars --profile-cfuncs,)
:
- 如果启用了 `PROFILE`,则启用统计和函数配置文件。
16. $(if $(DEBUG), --trace-structs,)
:
- 如果启用了 `DEBUG`,则启用结构体跟踪。
17. $(if $(TRACE_COMPACT), --trace-fst $(VL_INC_DIR)/verilated_fst_c.cpp)
:
- 如果启用了紧凑跟踪,使用 FST 格式进行跟踪。
18. $(if $(TRACE_FAST), --trace $(VL_INC_DIR)/verilated_vcd_c.cpp)
:
- 如果启用了快速跟踪,使用 VCD 格式进行跟踪。
19. -LDFLAGS "...
:
- 指定链接器标志:
- `-L$(RISCV)/lib`:指定 RISC-V 库路径。
- `-L$(SPIKE_INSTALL_DIR)/lib`:指定 SPIKE 库路径。
- `-Wl,-rpath,...`:设置运行时库路径。
- `-lfesvr -lriscv -ldisasm -lyaml-cpp`:链接特定库。
- `$(if $(PROFILE), -g -pg,)`:如果启用了 `PROFILE`,则启用调试和性能分析标志。
- `-lpthread`:链接 pthread 库。
- `$(if $(TRACE_COMPACT), -lz,)`:如果启用了紧凑跟踪,则链接 zlib 库。
20. -CFLAGS "...
:
- 指定编译器标志:
- `$(CFLAGS)`:使用全局编译标志。
- `$(if $(PROFILE), -g -pg,)`:如果启用了 `PROFILE`,则启用调试和性能分析标志。
- `-DVL_DEBUG`:定义 `VL_DEBUG` 宏。
- `-I$(SPIKE_INSTALL_DIR)`:指定包含目录。
21. $(if $(SPIKE_TANDEM), +define+SPIKE_TANDEM, )
:
- 如果启用了 `SPIKE_TANDEM`,则定义 `SPIKE_TANDEM` 宏。
22. --cc --vpi
:
- 生成 C++ 模型。
- 启用 VPI 接口。
23. $(list_incdir)
:
- 指定包含目录列表。
24. --top-module ariane_testharness
:
- 指定顶层模块为 `ariane_testharness`。
25. --threads-dpi none
:
- 禁用 DPI 线程。
26. --Mdir $(ver-library) -O3
:
- 指定输出目录为 `$(ver-library)`。
- 启用第三级优化。
27. --exe ...
:
- 指定需要编译的 C++ 文件列表。
编译命令输出
make -C
/home/cva6/ verilate verilator="verilator --no-timing" target=cv32a65x defines=
make[1]: Entering directory '/home/cva6'
Makefile:153: XCELIUM_HOME not set which is necessary for compiling DPIs when using XCELIUM
[Verilator] Building Model
verilator --no-timing --no-timing verilator_config.vlt
-f core/Flist.cva6 core/cva6_rvfi.sv
/home/cva6/corev_apu/tb/ariane_axi_pkg.sv
/home/cva6/corev_apu/tb/axi_intf.sv
/home/cva6/corev_apu/register_interface/src/reg_intf.sv
/home/cva6/corev_apu/tb/ariane_soc_pkg.sv
/home/cva6/corev_apu/riscv-dbg/src/dm_pkg.sv
/home/cva6/corev_apu/tb/ariane_axi_soc_pkg.sv
/home/cva6/core/cva6_rvfi.sv
/home/cva6/corev_apu/src/ariane.sv
/home/cva6/corev_apu/bootrom/bootrom.sv
/home/cva6/corev_apu/clint/axi_lite_interface.sv
/home/cva6/corev_apu/clint/clint.sv
/home/cva6/corev_apu/fpga/src/axi2apb/src/axi2apb_64_32.sv
/home/cva6/corev_apu/fpga/src/axi2apb/src/axi2apb.sv
/home/cva6/corev_apu/fpga/src/axi2apb/src/axi2apb_wrap.sv
/home/cva6/corev_apu/fpga/src/apb_timer/apb_timer.sv
/home/cva6/corev_apu/fpga/src/apb_timer/timer.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_ar_buffer.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_aw_buffer.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_b_buffer.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_r_buffer.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_single_slice.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_slice.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_slice_wrap.sv
/home/cva6/corev_apu/fpga/src/axi_slice/src/axi_w_buffer.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_res_tbl.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_amos_alu.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_amos.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_atomics.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_atomics_wrap.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_lrsc.sv
/home/cva6/corev_apu/src/axi_riscv_atomics/src/axi_riscv_lrsc_wrap.sv
/home/cva6/corev_apu/axi_mem_if/src/axi2mem.sv
/home/cva6/corev_apu/riscv-dbg/src/dm_csrs.sv
/home/cva6/corev_apu/riscv-dbg/src/dmi_cdc.sv
/home/cva6/corev_apu/riscv-dbg/src/dmi_jtag.sv
/home/cva6/corev_apu/riscv-dbg/src/dmi_jtag_tap.sv
/home/cva6/corev_apu/riscv-dbg/src/dm_mem.sv
/home/cva6/corev_apu/riscv-dbg/src/dm_sba.sv
/home/cva6/corev_apu/riscv-dbg/src/dm_top.sv
/home/cva6/corev_apu/rv_plic/rtl/rv_plic_target.sv
/home/cva6/corev_apu/rv_plic/rtl/rv_plic_gateway.sv
/home/cva6/corev_apu/rv_plic/rtl/plic_regmap.sv
/home/cva6/corev_apu/rv_plic/rtl/plic_top.sv
/home/cva6/corev_apu/riscv-dbg/debug_rom/debug_rom.sv
/home/cva6/corev_apu/register_interface/src/apb_to_reg.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_multicut.sv
/home/cva6/vendor/pulp-platform/common_cells/src/rstgen_bypass.sv
/home/cva6/vendor/pulp-platform/common_cells/src/rstgen.sv
/home/cva6/vendor/pulp-platform/common_cells/src/addr_decode.sv
/home/cva6/vendor/pulp-platform/common_cells/src/stream_register.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_cut.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_join.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_delayer.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_to_axi_lite.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_id_prepend.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_atop_filter.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_err_slv.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_mux.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_demux.sv
/home/cva6/vendor/pulp-platform/axi/src/axi_xbar.sv
/home/cva6/vendor/pulp-platform/common_cells/src/cdc_2phase.sv
/home/cva6/vendor/pulp-platform/common_cells/src/spill_register_flushable.sv
/home/cva6/vendor/pulp-platform/common_cells/src/spill_register.sv
/home/cva6/vendor/pulp-platform/common_cells/src/deprecated/fifo_v1.sv
/home/cva6/vendor/pulp-platform/common_cells/src/deprecated/fifo_v2.sv
/home/cva6/vendor/pulp-platform/common_cells/src/stream_delay.sv
/home/cva6/vendor/pulp-platform/common_cells/src/lfsr_16bit.sv
/home/cva6/vendor/pulp-platform/tech_cells_generic/src/deprecated/cluster_clk_cells.sv
/home/cva6/vendor/pulp-platform/tech_cells_generic/src/deprecated/pulp_clk_cells.sv
/home/cva6/vendor/pulp-platform/tech_cells_generic/src/rtl/tc_clk.sv
/home/cva6/corev_apu/tb/ariane_testharness.sv
/home/cva6/corev_apu/tb/ariane_peripherals.sv
/home/cva6/corev_apu/tb/rvfi_tracer.sv
/home/cva6/corev_apu/tb/common/uart.sv
/home/cva6/corev_apu/tb/common/SimDTM.sv
/home/cva6/corev_apu/tb/common/SimJTAG.sv
+define+ corev_apu/tb/common/mock_uart.sv
+incdir+corev_apu/axi_node
--unroll-count 256 -Wall -Werror-PINMISSING -Werror-IMPLICIT -Wno-fatal
-Wno-PINCONNECTEMPTY -Wno-ASSIGNDLY -Wno-DECLFILENAME
-Wno-UNUSED -Wno-UNOPTFLAT -Wno-BLKANDNBLK -Wno-style
-DPRELOAD=1 -LDFLAGS "-L/home/RISCV_TOOLS/lib
-L/home/cva6/tools/spike/lib
-Wl,-rpath,/home/RISCV_TOOLS/lib
-Wl,-rpath,/home/cva6/tools/spike/lib
-lfesvr -lriscv -ldisasm -lyaml-cpp -lpthread "
-CFLAGS "-I/include
-I/include
-I/home/cva6/tools/verilator-v5.008/share/verilator/include/vltstd
-I/home/RISCV_TOOLS/include
-I/home/cva6/tools/spike/include -std=c++17
-I/home/cva6/corev_apu/tb/dpi -O3 -DVL_DEBUG
-I/home/cva6/tools/spike" --cc --vpi
+incdir+/home/cva6/vendor/pulp-platform/common_cells/include/
+incdir+/home/cva6/vendor/pulp-platform/axi/include/
+incdir+/home/cva6/corev_apu/register_interface/include/
+incdir+/home/cva6/corev_apu/tb/common/
+incdir+/home/cva6/vendor/pulp-platform/axi/include/
+incdir+/home/cva6/verif/core-v-verif/lib/uvm_agents/uvma_rvfi/
+incdir+/home/cva6/verif/core-v-verif/lib/uvm_components/uvmc_rvfi_reference_model/
+incdir+/home/cva6/verif/core-v-verif/lib/uvm_components/uvmc_rvfi_scoreboard/
+incdir+/home/cva6/verif/core-v-verif/lib/uvm_agents/uvma_core_cntrl/
+incdir+/home/cva6/verif/tb/core/
+incdir+/home/cva6/core/include/
+incdir+/home/cva6/tools/spike/include/disasm/
--top-module ariane_testharness --threads-dpi none --Mdir work-ver -O3
--exe corev_apu/tb/ariane_tb.cpp
corev_apu/tb/dpi/SimDTM.cc
corev_apu/tb/dpi/SimJTAG.cc
corev_apu/tb/dpi/remote_bitbang.cc
corev_apu/tb/dpi/msim_helper.cc
变量赋值
-
verilator:
verilator="verilator --no-timing"
-
XCELIUM_HOME:
未设置,导致错误信息 "XCELIUM_HOME not set which is necessary for compiling DPIs when using XCELIUM"
文件列表
core/
core/Flist.cva6
core/cva6_rvfi.sv
corev_apu/tb/
ariane_axi_pkg.sv
axi_intf.sv
ariane_soc_pkg.sv
ariane_axi_soc_pkg.sv
ariane_testharness.sv
ariane_peripherals.sv
rvfi_tracer.sv
common/uart.sv
common/SimDTM.sv
common/SimJTAG.sv
corev_apu/register_interface/
src/reg_intf.sv
src/apb_to_reg.sv
corev_apu/bootrom/
bootrom.sv
corev_apu/clint/
axi_lite_interface.sv
clint.sv
corev_apu/fpga/
src/axi2apb/src/axi2apb_64_32.sv
src/axi2apb/src/axi2apb.sv
src/axi2apb/src/axi2apb_wrap.sv
src/apb_timer/apb_timer.sv
src/apb_timer/timer.sv
src/axi_slice/src/axi_ar_buffer.sv
src/axi_slice/src/axi_aw_buffer.sv
src/axi_slice/src/axi_b_buffer.sv
src/axi_slice/src/axi_r_buffer.sv
src/axi_slice/src/axi_single_slice.sv
src/axi_slice/src/axi_slice.sv
src/axi_slice/src/axi_slice_wrap.sv
src/axi_slice/src/axi_w_buffer.sv
corev_apu/src/
ariane.sv
axi_riscv_atomics/src/axi_res_tbl.sv
axi_riscv_atomics/src/axi_riscv_amos_alu.sv
axi_riscv_atomics/src/axi_riscv_amos.sv
axi_riscv_atomics/src/axi_riscv_atomics.sv
axi_riscv_atomics/src/axi_riscv_atomics_wrap.sv
axi_riscv_atomics/src/axi_riscv_lrsc.sv
axi_riscv_atomics/src/axi_riscv_lrsc_wrap.sv
axi_mem_if/src/axi2mem.sv
corev_apu/riscv-dbg/
src/dm_pkg.sv
src/dm_csrs.sv
src/dmi_cdc.sv
src/dmi_jtag.sv
src/dmi_jtag_tap.sv
src/dm_mem.sv
src/dm_sba.sv
src/dm_top.sv
debug_rom/debug_rom.sv
corev_apu/rv_plic/rtl/
rv_plic_target.sv
rv_plic_gateway.sv
plic_regmap.sv
plic_top.sv
vendor/pulp-platform/axi/src/
axi_multicut.sv
axi_cut.sv
axi_join.sv
axi_delayer.sv
axi_to_axi_lite.sv
axi_id_prepend.sv
axi_atop_filter.sv
axi_err_slv.sv
axi_mux.sv
axi_demux.sv
axi_xbar.sv
vendor/pulp-platform/common_cells/src/
rstgen_bypass.sv
rstgen.sv
addr_decode.sv
stream_register.sv
cdc_2phase.sv
spill_register_flushable.sv
spill_register.sv
deprecated/fifo_v1.sv
deprecated/fifo_v2.sv
stream_delay.sv
lfsr_16bit.sv
vendor/pulp-platform/tech_cells_generic/src/
deprecated/cluster_clk_cells.sv
deprecated/pulp_clk_cells.sv
rtl/tc_clk.sv
编译标志
-
CFLAGS:
-I/include \ -I/include \ -I/home/cva6/tools/verilator-v5.008/share/verilator/include/vltstd \ -I/home/RISCV_TOOLS/include \ -I/home/cva6/tools/spike/include -std=c++17 \ -I/home/cva6/corev_apu/tb/dpi -O3 -DVL_DEBUG \ -I/home/cva6/tools/spike
-
LDFLAGS:
-L/home/RISCV_TOOLS/lib \ -L/home/cva6/tools/spike/lib \ -Wl,-rpath,/home/RISCV_TOOLS/lib \ -Wl,-rpath,/home/cva6/tools/spike/lib \ -lfesvr -lriscv -ldisasm -lyaml-cpp -lpthread
包含目录
- include:
+incdir+/home/cva6/vendor/pulp-platform/common_cells/include/ \ +incdir+/home/cva6/vendor/pulp-platform/axi/include/ \ +incdir+/home/cva6/corev_apu/register_interface/include/ \ +incdir+/home/cva6/corev_apu/tb/common/ \ +incdir+/home/cva6/vendor/pulp-platform/axi/include/ \ +incdir+/home/cva6/verif/core-v-verif/lib/uvm_agents/uvma_rvfi/ \ +incdir+/home/cva6/verif/core-v-verif/lib/uvm_components/uvmc_rvfi_reference_model/ \ +incdir+/home/cva6/verif/core-v-verif/lib/uvm_components/uvmc_rvfi_scoreboard/ \ +incdir+/home/cva6/verif/core-v-verif/lib/uvm_agents/uvma_core_cntrl/ \ +incdir+/home/cva6/verif/tb/core/ \ +incdir+/home/cva6/core/include/ \ +incdir+/home/cva6/tools/spike/include/disasm/
其他参数
-
unroll count:
--unroll-count 256
-
warnings:
-Wall \ -Werror-PINMISSING \ -Werror-IMPLICIT \ -Wno-fatal \ -Wno-PINCONNECTEMPTY \ -Wno-ASSIGNDLY \ -Wno-DECLFILENAME \ -Wno-UNUSED \ -Wno-UNOPTFLAT \ -Wno-BLKANDNBLK \ -Wno-style
-
defines:
-DPRELOAD=1
-
top module:
--top-module ariane_testharness
-
threads DPI:
--threads-dpi none
-
Mdir:
--Mdir work-ver
-
optimization level:
-O3
-
executables:
--exe corev_apu/tb/ariane_tb.cpp \ corev_apu/tb/dpi/SimDTM.cc \