core-v-verif系列之cva6 verilator Model编译命令详解

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 \
        
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值