Vortex GPGPU的github流程跑通与功能模块波形探索
文章目录
- 前言
- 一、跟着官方文档走一遍
- 二、cache子模块的波形仿真
- 2.1 必要的文件内容解释
- 2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来
- 总结
前言
看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与功能模块的波形显示。这一节就开始尝试探索这块内容。
一、跟着官方文档走一遍
已经有博客做了流程尝试,看了是通过容器保存运行环境的,我呢,还是老老实实按照流程走!
主要还是参考这个文档:https://github.com/vortexgpgpu/vortex/blob/master/docs/install_vortex.md
我用的是ubuntu18.04镜像,能在vmware上跑通,但还是有些坑点(苦,用了一晚上从vmware开始搭建环境搭完测试例子,很久没接触了,一堆坑,果然代理还是有必要的),我在下面注释中会提到:
# step 1. 安装依赖
sudo apt-get install build-essential zlib1g-dev libtinfo-dev libncurses5 uuid-dev libboost-serialization-dev libpng-dev libhwloc-dev# step 2. 升级到g++-11和gcc-11
# 展开一下,ubuntu18.04默认的gcc和g++版本是7.4,没有11的ppa源,因此只能在添加ppa源以后再进行安装
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update & upgrade
sudo apt install gcc-11 g++-11
# 随后修改gcc和g++运行版本
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11# step 3. 下载vortex gpgpu包
git clone --depth=1 --recursive https://github.com/vortexgpgpu/vortex.git
# 多提一嘴,这个步骤有点麻烦,国内下载速度慢
# 我用了proxychains4和socks5通过主机代理加速下载,具体怎么配合不能说太多,我贴个链接
# https://blog.csdn.net/weixin_48915167/article/details/136705698
# 加速器方案自个儿确定
# 在有proxychains4的情况下,使用
proxychains4 git clone --depth=1 --recursive https://github.com/vortexgpgpu/vortex.git
# 可以加速下载# step4. build vortex
cd vortex
mkdir -p build
cd build
../configure --xlen=32 --tooldir=$HOME/tools
#./ci/toolchain_install.sh --all # 这一步略麻烦,需要下载包,否则不太能成功,建议改为如下:
proxychains4 ./ci/toolchain_install.sh --all
source ./ci/toolchain_env.sh
make -s
# 至此环境搭建完毕# step 5. 跑一个简单例子——Quick demo running vecadd OpenCL kernel on 2 cores
./ci/blackbox.sh --cores=2 --app=vecadd
跟官网大差不大,差异点只在于国内下载包速度不快而加了proxychains4(快到起飞)以及为gcc/g++升级而多做的事儿!
step 5跑完的结果如下:
root@ubuntu:/home/dention/vortex/vortex/build# ./ci/blackbox.sh --cores=2 --app=vecadd
CONFIGS=-DNUM_CLUSTERS=1 -DNUM_CORES=2 -DNUM_WARPS=4 -DNUM_THREADS=4
running: CONFIGS=-DNUM_CLUSTERS=1 -DNUM_CORES=2 -DNUM_WARPS=4 -DNUM_THREADS=4 make -C ./ci/../runtime/simx
running: make -C ./ci/../tests/opencl/vecadd run-simx
make: Entering directory '/home/dention/vortex/vortex/build/tests/opencl/vecadd'
g++ -std=c++11 -Wall -Wextra -Wfatal-errors -Wno-deprecated-declarations -Wno-unused-parameter -Wno-narrowing -pthread -I/root/tools/pocl/include -O2 -DNDEBUG -c /home/dention/vortex/vortex/tests/opencl/vecadd/main.cc -o main.cc.o
In file included from /root/tools/pocl/include/CL/cl.h:20,from /root/tools/pocl/include/CL/opencl.h:24,from /home/dention/vortex/vortex/tests/opencl/vecadd/main.cc:5:
/root/tools/pocl/include/CL/cl_version.h:22:104: note: ‘#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)’22 | TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")| ^g++ -std=c++11 -Wall -Wextra -Wfatal-errors -Wno-deprecated-declarations -Wno-unused-parameter -Wno-narrowing -pthread -I/root/tools/pocl/include -O2 -DNDEBUG main.cc.o -Wl,-rpath,/root/tools/llvm-vortex/lib -L/home/dention/vortex/vortex/build/runtime -lvortex -L/root/tools/pocl/lib -lOpenCL -o vecadd
cp /home/dention/vortex/vortex/tests/opencl/vecadd/kernel.cl kernel.cl
LD_LIBRARY_PATH=/root/tools/pocl/lib:/home/dention/vortex/vortex/build/runtime:/root/tools/llvm-vortex/lib: POCL_VORTEX_XLEN=32 LLVM_PREFIX=/root/tools/llvm-vortex POCL_VORTEX_BINTOOL="OBJCOPY=/root/tools/llvm-vortex/bin/llvm-objcopy /home/dention/vortex/vortex/kernel/scripts/vxbin.py" POCL_VORTEX_CFLAGS="-march=rv32imaf -mabi=ilp32f -O3 -mcmodel=medany --sysroot=/root/tools/riscv32-gnu-toolchain/riscv32-unknown-elf --gcc-toolchain=/root/tools/riscv32-gnu-toolchain -fno-rtti -fno-exceptions -nostartfiles -nostdlib -fdata-sections -ffunction-sections -I/home/dention/vortex/vortex/build/hw -I/home/dention/vortex/vortex/kernel/include -DXLEN_32 -DNDEBUG -Xclang -target-feature -Xclang +vortex -Xclang -target-feature -Xclang +zicond -mllvm -disable-loop-idiom-all" POCL_VORTEX_LDFLAGS="-Wl,-Bstatic,--gc-sections,-T/home/dention/vortex/vortex/kernel/scripts/link32.ld,--defsym=STARTUP_ADDR=0x80000000 /home/dention/vortex/vortex/build/kernel/libvortex.a -L/root/tools/libc32/lib -lm -lc /root/tools/libcrt32/lib/baremetal/libclang_rt.builtins-riscv32.a" VORTEX_DRIVER=simx ./vecadd -n64
Workload size=64
Create context
Allocate device buffers
Create program from kernel source
Upload source buffers
Execute the kernel
Elapsed time: 210 ms
Download destination buffer
Verify result
PASSED!
PERF: core0: instrs=5000, cycles=11921, IPC=0.419428
PERF: core1: instrs=5000, cycles=11922, IPC=0.419393
PERF: instrs=10000, cycles=11922, IPC=0.838785
make: Leaving directory '/home/dention/vortex/vortex/build/tests/opencl/vecadd'

官网的其他md还有一些测试例子,不举例了。但总结下来会发现,这些都是系统层面测试的例子(看结果出现了系统profiler的常见类型的结果),后面可能有探索的必要,先赊账。
目前先看verilog子模块的功能实现。
二、cache子模块的波形仿真
这个没啥.md文件当作参考了,只能看看unittest中有无线索。看一下文件结构:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# tree
.
├── cache
│ ├── cachesim.cpp
│ ├── cachesim.h
│ ├── Makefile
│ ├── ram.h
│ └── testbench.cpp
├── cache_top
│ ├── main.cpp
│ └── Makefile
├── common
│ └── vl_simulator.h
├── common.mk
├── core_top
│ ├── main.cpp
│ └── Makefile
├── generic_queue
│ ├── main.cpp
│ └── Makefile
├── issue_top
│ ├── main.cpp
│ └── Makefile
├── Makefile
└── mem_streamer├── Makefile├── memsim.cpp├── memsim.h├── ram.cpp└── ram.h7 directories, 21 files
2.1 必要的文件内容解释
主文件下的Makefile定义了项目的构建目标(如all、clean、run等)和一些特定的构建规则,通常包含了项目的构建逻辑,并且会调用其他Makefile或mk文件来包含共用的构建规则。其内容:
all:$(MAKE) -C cache$(MAKE) -C generic_queue$(MAKE) -C mem_streamer$(MAKE) -C cache_top$(MAKE) -C core_top$(MAKE) -C issue_toprun:$(MAKE) -C cache run$(MAKE) -C generic_queue run$(MAKE) -C mem_streamer run$(MAKE) -C cache_top run$(MAKE) -C core_top run$(MAKE) -C issue_top runclean:$(MAKE) -C cache clean$(MAKE) -C generic_queue clean$(MAKE) -C mem_streamer clean$(MAKE) -C cache_top clean$(MAKE) -C core_top clean$(MAKE) -C issue_top clean
很符合一般的Makefile编写规则,这里的$(MAKE)表示这里的make规则应该有自定义部分。在Makefile中使用$(MAKE)而不是直接写make有几个好处:
1. 可移植性:如果需要在不同的构建系统或环境中使用Makefile,可以通过改变MAKE变量的值来适应不同的构建工具。
2. 灵活性:可以在Makefile中定义MAKE变量的值,例如添加特定的参数或选项,以控制make的行为。
(这部分参考kimichat的回答。kimichat,打广告费,>.<)
接下来看下主文件夹下的common.mk,带注释的代码如下:
# 设置默认的安装目录为当前目录
DESTDIR ?= .# 配置和参数变量为空,可以在其他地方追加
CONFIGS +=
PARAMS +=# 设置C++编译器标志
CXXFLAGS += -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds
# 启用位置无关代码生成,关闭某些警告
CXXFLAGS += -fPIC -Wno-maybe-uninitialized
# 添加配置标志
CXXFLAGS += $(CONFIGS)# 链接器标志为空
LDFLAGS +=
# RTL包为空
RTL_PKGS +=
# RTL包含路径为空
RTL_INCLUDE +=# 定义调试标志
DBG_FLAGS += -DDEBUG_LEVEL=$(DEBUG) -DVCD_OUTPUT $(DBG_TRACE_FLAGS)# 定义Verilator的标志
VL_FLAGS = --exe
# 使用Verilog 2009标准,启用断言和所有警告
VL_FLAGS += --language 1800-2009 --assert -Wall -Wpedantic
# 禁用某些警告
VL_FLAGS += -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED
# 设置X初始化策略
VL_FLAGS += --x-initial unique --x-assign unique
# 定义模拟和SV DPI宏
VL_FLAGS += -DSIMULATION -DSV_DPI
# 添加配置和参数
VL_FLAGS += $(CONFIGS)
VL_FLAGS += $(PARAMS)
# 添加RTL包含路径
VL_FLAGS += $(RTL_INCLUDE)
# 添加RTL包
VL_FLAGS += $(RTL_PKGS)
# 指定顶层模块
VL_FLAGS += --cc $(TOP) --top-module $(TOP)# 启用Verilator多线程模拟
THREADS ?= $(shell python -c 'import multiprocessing as mp; print(mp.cpu_count())')
VL_FLAGS += -j $(THREADS)
#VL_FLAGS += --threads $(THREADS) # 另一种多线程选项# 调试配置
ifdef DEBUG# 启用Verilator跟踪和结构跟踪VL_FLAGS += --trace --trace-structs $(DBG_FLAGS)# 添加调试信息和优化级别CXXFLAGS += -g -O0 $(DBG_FLAGS)
else# 定义NDEBUG宏VL_FLAGS += -DNDEBUG# 设置优化级别CXXFLAGS += -O2 -DNDEBUG
endif# 性能计数器配置
ifdef PERFVL_FLAGS += -DPERF_ENABLECXXFLAGS += -DPERF_ENABLE
endif# 默认目标,构建项目
all: $(DESTDIR)/$(PROJECT)# 构建项目目标
$(DESTDIR)/$(PROJECT): $(SRCS)# 使用Verilator构建项目# $@ 是一个自动变量,它代表当前规则中的目标(target)文件名。当你在编写规则时,可以使用 $@ 来引用这个目标。# $< 是一个自动变量,它代表当前规则中的第一个依赖(dependency)文件名。在规则中使用 $< 可以引用规则依赖列表中的第一个文件。verilator --build $(VL_FLAGS) $^ -CFLAGS '$(CXXFLAGS)' -o ../$@# 运行项目目标
run: $(DESTDIR)/$(PROJECT)# 运行项目$(DESTDIR)/$(PROJECT)# 波形查看目标
waves: trace.vcd# 使用GTKwave查看波形gtkwave -o trace.vcd# 清理目标
clean:# 清理构建产物rm -rf *.vcd obj_dir $(DESTDIR)/$(PROJECT)
所以需要在ubuntu下安装gtkwave和verilator。
接下来看下主文件夹下的cache子文件夹,如下:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest/cache# tree
.
├── cachesim.cpp
├── cachesim.h
├── Makefile
├── ram.h
└── testbench.cpp0 directories, 5 files
看一下这里的Makefile:
# 获取工程的根目录,即上两级目录的绝对路径
ROOT_DIR := $(realpath ../../..)# 包含根目录下的配置文件
include $(ROOT_DIR)/config.mk# 定义项目名称
PROJECT := cache# 定义RTL源代码目录
RTL_DIR := $(VORTEX_HOME)/hw/rtl
# 定义DPI源代码目录
DPI_DIR := $(VORTEX_HOME)/hw/dpi# 定义单元测试源代码目录
SRC_DIR := $(VORTEX_HOME)/hw/unittest/$(PROJECT)# 设置C++编译器标志,包括头文件的搜索路径
CXXFLAGS := -I$(SRC_DIR) -I$(VORTEX_HOME)/hw/unittest/common -I$(VORTEX_HOME)/sim/common
# 添加硬件源代码目录到头文件搜索路径
CXXFLAGS += -I$(ROOT_DIR)/hw# 定义源文件列表
SRCS := $(DPI_DIR)/util_dpi.cpp
SRCS += $(SRC_DIR)/cachesim.cpp $(SRC_DIR)/testbench.cpp# 定义调试跟踪标志
DBG_TRACE_FLAGS := -DDBG_TRACE_CACHE# 定义RTL包路径
RTL_PKGS := $(RTL_DIR)/VX_gpu_pkg.sv# 设置RTL代码的头文件搜索路径
RTL_INCLUDE := -I$(RTL_DIR) -I$(DPI_DIR) -I$(RTL_DIR)/libs
RTL_INCLUDE += -I$(RTL_DIR)/interfaces -I$(RTL_DIR)/mem -I$(RTL_DIR)/cache# 定义顶层模块名称
TOP := VX_cache_top# 包含通用构建规则和变量定义
include ../common.mk
每个子模块下的Makefile都include了common.mk和根目录下的config.mk,都用于配置编译选项和指定依赖。所以比较直观的是,这些约束都用于unittest主文件下的Makefile文件。我们为了方便,减少编译内容,将Makefile削减为:
all:$(MAKE) -C cache#$(MAKE) -C generic_queue#$(MAKE) -C mem_streamer#$(MAKE) -C cache_top#$(MAKE) -C core_top#$(MAKE) -C issue_toprun:$(MAKE) -C cache run#$(MAKE) -C generic_queue run#$(MAKE) -C mem_streamer run#$(MAKE) -C cache_top run#$(MAKE) -C core_top run#$(MAKE) -C issue_top runclean:$(MAKE) -C cache clean#$(MAKE) -C generic_queue clean#$(MAKE) -C mem_streamer clean#$(MAKE) -C cache_top clean#$(MAKE) -C core_top clean#$(MAKE) -C issue_top clean
只仿真cache模块。

2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来
先在ubuntu安装gtkwave和verilator:
sudo apt-get install gtkwave verilator
改东西,先回到主目录:
root@ubuntu:/home/dention/vortex/vortex# tree -L 1
.
├── blackbox.simx.cache
├── build
├── ci
├── config.mk.in
├── configure
├── docs
├── hw
├── kernel
├── LICENSE
├── Makefile.in
├── miscs
├── perf
├── README.md
├── runtime
├── sim
├── tests
└── third_party11 directories, 6 files
修改俩文件名:
mv config.mk.in config.mk
mv Makefile.in Makefile
随后在./vortex/hw/unittest下运行makefile,报错:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make all
make -C cache
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
make[1]: *** No rule to make target '@VORTEX_HOME@/hw/dpi/util_dpi.cpp', needed by 'cache'. Stop.
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 2
原因是DPI_DIR变量使用了$(VORTEX_HOME),但错误信息显示@VORTEX_HOME@,这意味着 VORTEX_HOME没有被正确替换。接着改:
# 在cache目录下的Makefile中定义VORTEX_HOME
# 定义 VORTEX_HOME
VORTEX_HOME := $(ROOT_DIR)
# 测试一下路径
info-roots:@echo "ROOT_DIR is set to $(ROOT_DIR)"

直接在cache子目录下运行make即可:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest/cache# vim Makefile
root@ubuntu:/home/dention/vortex/vortex/hw/unittest/cache# make
ROOT_DIR is set to /home/dention/vortex/vortex
好了,没问题了,能找到!接着下一步!
make all
结果是:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make all
make -C cache
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
ROOT_DIR is set to /home/dention/vortex/vortex
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
#make -C generic_queue
#make -C mem_streamer
#make -C cache_top
#make -C core_top
#make -C issue_top
最起码不报错了,这一步应该输出不了什么东西!
接着运行make run:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make run
make -C cache run
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
verilator --build --exe --language 1800-2009 --assert -Wall -Wpedantic -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -j 1 -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG' -o ../cache
%Error: Invalid Option: --build
%Error: Command Failed /usr/bin/verilator_bin --build --exe --language 1800-2009 --assert -Wall -Wpedantic -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -j 1 -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG' -o ../cache
../common.mk:50: recipe for target 'cache' failed
make[1]: *** [cache] Error 10
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
Makefile:10: recipe for target 'run' failed
make: *** [run] Error 2
经过若干次对vortex/hw/unittest/common.mk的修改之后:
DESTDIR ?= .CONFIGS +=
PARAMS +=CXXFLAGS += -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds
CXXFLAGS += -fPIC -Wno-maybe-uninitialized
CXXFLAGS += $(CONFIGS)LDFLAGS +=
RTL_PKGS +=
RTL_INCLUDE +=DBG_FLAGS += -DDEBUG_LEVEL=$(DEBUG) -DVCD_OUTPUT $(DBG_TRACE_FLAGS)VL_FLAGS = --exe
VL_FLAGS += --language 1800-2009 --assert
VL_FLAGS += -Wno-DECLFILENAME -Wno-REDEFMACRO
VL_FLAGS += --x-initial unique --x-assign unique
VL_FLAGS += -DSIMULATION -DSV_DPI
VL_FLAGS += $(CONFIGS)
VL_FLAGS += $(PARAMS)
VL_FLAGS += $(RTL_INCLUDE)
VL_FLAGS += $(RTL_PKGS)
VL_FLAGS += --cc $(TOP) --top-module $(TOP)# Enable Verilator multithreaded simulation
THREADS ?= $(shell python -c 'import multiprocessing as mp; print(mp.cpu_count())')# Debugging
ifdef DEBUGVL_FLAGS += --trace --trace-structs $(DBG_FLAGS)CXXFLAGS += -g -O0 $(DBG_FLAGS)
elseVL_FLAGS += -DNDEBUGCXXFLAGS += -O2 -DNDEBUG
endif# Enable perf counters
ifdef PERFVL_FLAGS += -DPERF_ENABLECXXFLAGS += -DPERF_ENABLE
endifall: $(DESTDIR)/$(PROJECT)$(DESTDIR)/$(PROJECT): $(SRCS)verilator $(VL_FLAGS) $^ -CFLAGS '$(CXXFLAGS)' --output-split 20000@$(MAKE) -C obj_dir -f V$(TOP).mk -j $(THREADS)run: $(DESTDIR)/$(PROJECT)$(DESTDIR)/$(PROJECT)waves: trace.vcdgtkwave -o trace.vcdclean:rm -rf *.vcd obj_dir $(DESTDIR)/$(PROJECT)
还是报错:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make run
make -C cache run
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
verilator --exe --language 1800-2009 --assert -Wno-DECLFILENAME -Wno-REDEFMACRO --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG' --output-split 20000
%Error: /home/dention/vortex/vortex/hw/rtl/libs/VX_find_first.sv:31: Unknown verilator lint message code: IMPORTSTAR, in /*verilator lint_off IMPORTSTAR*/
%Error: /home/dention/vortex/vortex/hw/rtl/libs/VX_find_first.sv:34: Unknown verilator lint message code: IMPORTSTAR, in /*verilator lint_on IMPORTSTAR*/
%Error: Exiting due to 2 error(s)
%Error: Command Failed /usr/bin/verilator_bin --exe --language 1800-2009 --assert -Wno-DECLFILENAME -Wno-REDEFMACRO --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG' --output-split 20000
../common.mk:48: recipe for target 'cache' failed
make[1]: *** [cache] Error 10
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
Makefile:10: recipe for target 'run' failed
make: *** [run] Error 2
这里报错原因大概率就是verilator版本不对了,嗐,查一下已安装的verilator版本:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# verilator -V
Verilator 3.916 2017-11-25 rev verilator_3_914-65-g0478dbdCopyright 2003-2017 by Wilson Snyder. Verilator is free software; you can
redistribute it and/or modify the Verilator internals under the terms of
either the GNU Lesser General Public License Version 3 or the Perl Artistic
License Version 2.0.See http://www.veripool.org/verilator for documentationSummary of configuration:Compiled in defaults if not in environment:SYSTEMC = SYSTEMC_ARCH = SYSTEMC_INCLUDE = SYSTEMC_LIBDIR = VERILATOR_ROOT = /usr/share/verilatorEnvironment:PERL = SYSTEMC = SYSTEMC_ARCH = SYSTEMC_INCLUDE = SYSTEMC_LIBDIR = VERILATOR_ROOT = VERILATOR_BIN =
这版本太过古老,vortex gpgpu最新版(截止到2024-10-01)都有差不多快7年的差距了。卸了老版本的verilator,改用新版本的verilator,参考:https://verilator.org/guide/latest/install.html
# Prerequisites:
sudo apt-get install git help2man perl python3 make autoconf g++ flex bison ccache
sudo apt-get install libgoogle-perftools-dev numactl perl-doc
sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)git clone https://github.com/verilator/verilator # Only first time# Every time you need to build:
unsetenv VERILATOR_ROOT # For csh; ignore error if on bash
unset VERILATOR_ROOT # For bash
cd verilator
git pull # Make sure git repository is up-to-date
git tag # See what versions exist
#git checkout master # Use development branch (e.g. recent bug fixes)
#git checkout stable # Use most recent stable release
#git checkout v{version} # Switch to specified release versionautoconf # Create ./configure script
./configure # Configure and create Makefile
make -j `nproc` # Build Verilator itself (if error, try just 'make')
sudo make install
安装完后再测试一下版本
root@ubuntu:/home/dention/verilator# verilator -V
Verilator 5.029 devel rev v5.028-158-g03012da11Copyright 2003-2024 by Wilson Snyder. Verilator is free software; you can
redistribute it and/or modify the Verilator internals under the terms of
either the GNU Lesser General Public License Version 3 or the Perl Artistic
License Version 2.0.See https://verilator.org for documentationSummary of configuration:Compiled in defaults if not in environment:SYSTEMC = SYSTEMC_ARCH = SYSTEMC_INCLUDE = SYSTEMC_LIBDIR = VERILATOR_ROOT = /usr/local/share/verilatorSystemC system-wide = 0Environment:MAKE = PERL = PYTHON3 = SYSTEMC = SYSTEMC_ARCH = SYSTEMC_INCLUDE = SYSTEMC_LIBDIR = VERILATOR_BIN = VERILATOR_ROOT = /usr/local/share/verilatorSupported features (compiled-in or forced by environment):COROUTINES = 1SYSTEMC =
ok,接下来回到原版的common.mk文件,重新运行,还是出现报错:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make run
make -C cache run
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
verilator --build --exe --language 1800-2009 --assert -Wall -Wpedantic -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -j 1 -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG' -o ../cache
make[2]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache/obj_dir'
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -O2 -DNDEBUG -Os -c -o cachesim.o /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp
In file included from /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp:14:
/home/dention/vortex/vortex/hw/unittest/cache/cachesim.h:24:10: fatal error: VX_config.h: No such file or directory24 | #include <VX_config.h>| ^~~~~~~~~~~~~
compilation terminated.
VVX_cache_top.mk:69: recipe for target 'cachesim.o' failed
make[2]: *** [cachesim.o] Error 1
make[2]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache/obj_dir'
%Error: make -C obj_dir -f VVX_cache_top.mk -j 1 exited with 2
%Error: Command Failed ulimit -s unlimited 2>/dev/null; exec /usr/local/share/verilator/bin/verilator_bin --build --exe --language 1800-2009 --assert -Wall -Wpedantic -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -j 1 -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS -I/home/dention/vortex/vortex/hw/unittest/cache\ -I/home/dention/vortex/vortex/hw/unittest/common\ -I/home/dention/vortex/vortex/sim/common\ -I/home/dention/vortex/vortex/hw\ -std=c++17\ -Wall\ -Wextra\ -Wfatal-errors\ -Wno-array-bounds\ -fPIC\ -Wno-maybe-uninitialized\ \ -O2\ -DNDEBUG -o ../cache
../common.mk:50: recipe for target 'cache' failed
make[1]: *** [cache] Error 2
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
Makefile:10: recipe for target 'run' failed
make: *** [run] Error 2
错误信息显示编译过程中找不到文件VX_config.h,不过很简单用find命令确定一下是否存在:
find /home/<user_name>/vortex/vortex/ -name VX_config.h
我这边实际显示是:
/home/dention/vortex/vortex/build/hw/VX_config.h
那接下来很容易,就是.mk中指定该文件的地址,完整内容是:
DESTDIR ?= .CONFIGS +=
PARAMS +=# 添加 VX_config.h 文件的路径
CXXFLAGS += -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds
CXXFLAGS += -fPIC -Wno-maybe-uninitialized
CXXFLAGS += -I/home/dention/vortex/vortex/build/hw # 添加包含路径
CXXFLAGS += $(CONFIGS)LDFLAGS +=
RTL_PKGS +=
RTL_INCLUDE +=DBG_FLAGS += -DDEBUG_LEVEL=$(DEBUG) -DVCD_OUTPUT $(DBG_TRACE_FLAGS)VL_FLAGS = --exe
VL_FLAGS += --language 1800-2009 --assert -Wall -Wpedantic
VL_FLAGS += -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED
VL_FLAGS += --x-initial unique --x-assign unique
VL_FLAGS += -DSIMULATION -DSV_DPI
VL_FLAGS += $(CONFIGS)
VL_FLAGS += $(PARAMS)
VL_FLAGS += $(RTL_INCLUDE)
VL_FLAGS += $(RTL_PKGS)
VL_FLAGS += --cc $(TOP) --top-module $(TOP)# Enable Verilator multithreaded simulation
THREADS ?= $(shell python -c 'import multiprocessing as mp; print(mp.cpu_count())')
VL_FLAGS += -j $(THREADS)# Debugging
ifdef DEBUGVL_FLAGS += --trace --trace-structs $(DBG_FLAGS)CXXFLAGS += -g -O0 $(DBG_FLAGS)
elseVL_FLAGS += -DNDEBUGCXXFLAGS += -O2 -DNDEBUG
endif# Enable perf counters
ifdef PERFVL_FLAGS += -DPERF_ENABLECXXFLAGS += -DPERF_ENABLE
endifall: $(DESTDIR)/$(PROJECT)$(DESTDIR)/$(PROJECT): $(SRCS)verilator --build $(VL_FLAGS) $^ -CFLAGS '$(CXXFLAGS)' -o ../$@run: $(DESTDIR)/$(PROJECT)$(DESTDIR)/$(PROJECT)waves: trace.vcdgtkwave -o trace.vcdclean:rm -rf *.vcd obj_dir $(DESTDIR)/$(PROJECT)
接着
make clean
make run
当然了,不出意外还是报错,不过幸运的是不是配置问题:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest# make run
make -C cache run
make[1]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache'
verilator --build --exe --language 1800-2009 --assert -Wall -Wpedantic -Wno-DECLFILENAME -Wno-REDEFMACRO -Wno-GENUNNAMED --x-initial unique --x-assign unique -DSIMULATION -DSV_DPI -I/home/dention/vortex/vortex/hw/rtl -I/home/dention/vortex/vortex/hw/dpi -I/home/dention/vortex/vortex/hw/rtl/libs -I/home/dention/vortex/vortex/hw/rtl/interfaces -I/home/dention/vortex/vortex/hw/rtl/mem -I/home/dention/vortex/vortex/hw/rtl/cache /home/dention/vortex/vortex/hw/rtl/VX_gpu_pkg.sv --cc VX_cache_top --top-module VX_cache_top -j 1 -DNDEBUG /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp -CFLAGS '-I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG' -o ../cache
make[2]: Entering directory '/home/dention/vortex/vortex/hw/unittest/cache/obj_dir'
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -Os -c -o util_dpi.o /home/dention/vortex/vortex/hw/dpi/util_dpi.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -Os -c -o cachesim.o /home/dention/vortex/vortex/hw/unittest/cache/cachesim.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -Os -c -o testbench.o /home/dention/vortex/vortex/hw/unittest/cache/testbench.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -c -o verilated.o /usr/local/share/verilator/include/verilated.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -c -o verilated_dpi.o /usr/local/share/verilator/include/verilated_dpi.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -c -o verilated_threads.o /usr/local/share/verilator/include/verilated_threads.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -x c++-header VVX_cache_top__pch.h -o VVX_cache_top__pch.h.fast.gch
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top.o VVX_cache_top.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024root__DepSet_h9edbfabb__0.o VVX_cache_top___024root__DepSet_h9edbfabb__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024root__DepSet_h9edbfabb__1.o VVX_cache_top___024root__DepSet_h9edbfabb__1.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024root__DepSet_h763c9220__0.o VVX_cache_top___024root__DepSet_h763c9220__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024root__DepSet_h763c9220__1.o VVX_cache_top___024root__DepSet_h763c9220__1.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024root__DepSet_h763c9220__2.o VVX_cache_top___024root__DepSet_h763c9220__2.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top___024unit__DepSet_ha36da8de__0.o VVX_cache_top___024unit__DepSet_ha36da8de__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0.o VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0.o VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_hc66bcb2d__0.o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_hc66bcb2d__0.cpp
ccache g++ -Os -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.fast -c -o VVX_cache_top__Dpi.o VVX_cache_top__Dpi.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -x c++-header VVX_cache_top__pch.h -o VVX_cache_top__pch.h.slow.gch
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top__ConstPool_0.o VVX_cache_top__ConstPool_0.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024root__Slow.o VVX_cache_top___024root__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024root__DepSet_h9edbfabb__0__Slow.o VVX_cache_top___024root__DepSet_h9edbfabb__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024root__DepSet_h763c9220__0__Slow.o VVX_cache_top___024root__DepSet_h763c9220__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024root__DepSet_h763c9220__1__Slow.o VVX_cache_top___024root__DepSet_h763c9220__1__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024unit__Slow.o VVX_cache_top___024unit__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top___024unit__DepSet_h89ae607b__0__Slow.o VVX_cache_top___024unit__DepSet_h89ae607b__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_mem_bus_if__D4_T10__Slow.o VVX_cache_top_VX_mem_bus_if__D4_T10__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0__Slow.o VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_mem_bus_if__D40_T6__Slow.o VVX_cache_top_VX_mem_bus_if__D40_T6__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0__Slow.o VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__Slow.o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_h9ab0d52c__0__Slow.o VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_h9ab0d52c__0__Slow.cpp
ccache g++ -I. -MMD -I/usr/local/share/verilator/include -I/usr/local/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TIMING=0 -DVM_TRACE=0 -DVM_TRACE_FST=0 -DVM_TRACE_VCD=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-shadow -Wno-sign-compare -Wno-tautological-compare -Wno-uninitialized -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -I/home/dention/vortex/vortex/hw/unittest/cache -I/home/dention/vortex/vortex/hw/unittest/common -I/home/dention/vortex/vortex/sim/common -I/home/dention/vortex/vortex/hw -std=c++17 -Wall -Wextra -Wfatal-errors -Wno-array-bounds -fPIC -Wno-maybe-uninitialized -I/home/dention/vortex/vortex/build/hw -O2 -DNDEBUG -include VVX_cache_top__pch.h.slow -c -o VVX_cache_top__Syms.o VVX_cache_top__Syms.cpp
echo "" > VVX_cache_top__ALL.verilator_deplist.tmp
g++ util_dpi.o cachesim.o testbench.o verilated.o verilated_dpi.o verilated_threads.o VVX_cache_top__ALL.a -pthread -lpthread -latomic -o ../cache
rm VVX_cache_top__ALL.verilator_deplist.tmp
make[2]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache/obj_dir'
- V e r i l a t i o n R e p o r t: Verilator 5.029 devel rev v5.028-158-g03012da11
- Verilator: Built from 0.525 MB sources in 44 modules, into 8.925 MB in 25 C++ files needing 0.151 MB
- Verilator: Walltime 56.544 s (elab=0.371, cvt=2.312, bld=53.396); cpu 3.058 s on 1 threads; alloced 330.363 MB
./cache
[1] %Error: VX_cache_mshr.sv:224: Assertion failed in TOP.VX_cache_top.cache.banks[0].bank.cache_mshr: 1: *** -bank0-mshr invalid release: addr=0x7d3b9c00, id=7 (#0)
%Error: /home/dention/vortex/vortex/hw/rtl/cache/VX_cache_mshr.sv:224: Verilog $stop
Aborting...
../common.mk:54: recipe for target 'run' failed
make[1]: *** [run] Aborted (core dumped)
make[1]: Leaving directory '/home/dention/vortex/vortex/hw/unittest/cache'
Makefile:10: recipe for target 'run' failed
make: *** [run] Error 2
在VX_cache_mshr.sv的第224行,有一个断言检查失败,导致模拟程序终止。看下该文件:
// Copyright © 2019-2023
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.`include "VX_cache_define.vh"// This is an implementation of a MSHR for pipelined multi-banked cache.
// We allocate a free slot from the MSHR before processing a core request
// and release the slot when we get a cache hit. This ensure that we do not
// enter the cache bank pipeline when the MSHR is full.
// During a memory fill response, we initiate the replay sequence
// and dequeue all pending entries for the given cache line.
//
// Pending core requests stored in the MSHR are sorted by the order of
// arrival and are dequeued in the same order.
// Each entry has a next pointer to the next entry pending for the same cache line.
//
// During the fill operation, the MSHR will release the MSHR entry at fill_id
// which represents the first request in the pending list that initiated the memory fill.
//
// The dequeue operation directly follows the fill operation and will release
// all the subsequent entries linked to fill_id (pending the same cache line).
//
// During the allocation operation, the MSHR will allocate the next free slot
// for the incoming core request. We return the allocated slot id as well as
// the slot id of the previous entry for the same cache line. This is used to
// link the new entry to the pending list during finalization.
//
// The lookup operation is used to find all pending entries for a given cache line.
// This is used to by the cache bank to determine if a cache miss is already pending
// and therefore avoid issuing a memory fill request.
//
// The finalize operation is used to release the allocated MSHR entry if we had a hit.
// If we had a miss and finalize_pending is true, we link the allocated entry to
// its corresponding pending list (via finalize_prev).
//
// Warning: This MSHR implementation is strongly coupled with the bank pipeline
// and as such changes to either module requires careful evaluation.
//
// This architecture implements three pipeline stages:
// - Arbitration: cache bank arbitration before entering pipeline.
// fill and dequeue operations are executed at this stage.
// - stage 0: cache bank tag access stage.
// allocate and lookup operations are executed at this stage.
// - stage 1: cache bank tdatag access stage.
// finalize operation is executed at this stage.
//module VX_cache_mshr #(parameter `STRING INSTANCE_ID= "",parameter BANK_ID = 0,// Size of line inside a bank in bytesparameter LINE_SIZE = 16,// Number of banksparameter NUM_BANKS = 1,// Miss Reserv Queue Knobparameter MSHR_SIZE = 4,// Request debug identifierparameter UUID_WIDTH = 0,// MSHR parametersparameter DATA_WIDTH = 1,parameter MSHR_ADDR_WIDTH = `LOG2UP(MSHR_SIZE)
) (input wire clk,input wire reset,`IGNORE_UNUSED_BEGINinput wire[`UP(UUID_WIDTH)-1:0] deq_req_uuid,input wire[`UP(UUID_WIDTH)-1:0] lkp_req_uuid,input wire[`UP(UUID_WIDTH)-1:0] fin_req_uuid,
`IGNORE_UNUSED_END// memory fillinput wire fill_valid,input wire [MSHR_ADDR_WIDTH-1:0] fill_id,output wire [`CS_LINE_ADDR_WIDTH-1:0] fill_addr,// dequeueoutput wire dequeue_valid,output wire [`CS_LINE_ADDR_WIDTH-1:0] dequeue_addr,output wire dequeue_rw,output wire [DATA_WIDTH-1:0] dequeue_data,output wire [MSHR_ADDR_WIDTH-1:0] dequeue_id,input wire dequeue_ready,// allocateinput wire allocate_valid,input wire [`CS_LINE_ADDR_WIDTH-1:0] allocate_addr,input wire allocate_rw,input wire [DATA_WIDTH-1:0] allocate_data,output wire [MSHR_ADDR_WIDTH-1:0] allocate_id,output wire [MSHR_ADDR_WIDTH-1:0] allocate_prev,output wire allocate_ready,// lookupinput wire lookup_valid,input wire [`CS_LINE_ADDR_WIDTH-1:0] lookup_addr,output wire [MSHR_SIZE-1:0] lookup_pending,output wire [MSHR_SIZE-1:0] lookup_rw,// finalizeinput wire finalize_valid,input wire finalize_release,input wire finalize_pending,input wire [MSHR_ADDR_WIDTH-1:0] finalize_id,input wire [MSHR_ADDR_WIDTH-1:0] finalize_prev
);`UNUSED_PARAM (BANK_ID)reg [`CS_LINE_ADDR_WIDTH-1:0] addr_table [MSHR_SIZE-1:0];reg [MSHR_ADDR_WIDTH-1:0] next_index [MSHR_SIZE-1:0];reg [MSHR_SIZE-1:0] valid_table, valid_table_n;reg [MSHR_SIZE-1:0] next_table, next_table_x, next_table_n;reg [MSHR_SIZE-1:0] write_table;reg allocate_rdy, allocate_rdy_n;reg [MSHR_ADDR_WIDTH-1:0] allocate_id_r, allocate_id_n;reg dequeue_val, dequeue_val_n;reg [MSHR_ADDR_WIDTH-1:0] dequeue_id_r, dequeue_id_n;wire [MSHR_ADDR_WIDTH-1:0] prev_idx;wire allocate_fire = allocate_valid && allocate_ready;wire dequeue_fire = dequeue_valid && dequeue_ready;wire [MSHR_SIZE-1:0] addr_matches;for (genvar i = 0; i < MSHR_SIZE; ++i) beginassign addr_matches[i] = valid_table[i] && (addr_table[i] == lookup_addr);endVX_lzc #(.N (MSHR_SIZE),.REVERSE (1)) allocate_sel (.data_in (~valid_table_n),.data_out (allocate_id_n),.valid_out (allocate_rdy_n));VX_onehot_encoder #(.N (MSHR_SIZE)) prev_sel (.data_in (addr_matches & ~next_table_x),.data_out (prev_idx),`UNUSED_PIN (valid_out));always @(*) beginvalid_table_n = valid_table;next_table_x = next_table;dequeue_val_n = dequeue_val;dequeue_id_n = dequeue_id;if (fill_valid) begindequeue_val_n = 1;dequeue_id_n = fill_id;endif (dequeue_fire) beginvalid_table_n[dequeue_id] = 0;if (next_table[dequeue_id]) begindequeue_id_n = next_index[dequeue_id];end else begindequeue_val_n = 0;endendif (finalize_valid) beginif (finalize_release) beginvalid_table_n[finalize_id] = 0;endif (finalize_pending) beginnext_table_x[finalize_prev] = 1;endendnext_table_n = next_table_x;if (allocate_fire) beginvalid_table_n[allocate_id] = 1;next_table_n[allocate_id] = 0;endendalways @(posedge clk) beginif (reset) beginvalid_table <= '0;allocate_rdy <= 0;dequeue_val <= 0;end else beginvalid_table <= valid_table_n;allocate_rdy <= allocate_rdy_n;dequeue_val <= dequeue_val_n;endif (allocate_fire) beginaddr_table[allocate_id] <= allocate_addr;write_table[allocate_id] <= allocate_rw;endif (finalize_valid && finalize_pending) beginnext_index[finalize_prev] <= finalize_id;enddequeue_id_r <= dequeue_id_n;allocate_id_r <= allocate_id_n;next_table <= next_table_n;end`RUNTIME_ASSERT((~allocate_fire || ~valid_table[allocate_id_r]), ("%t: *** %s inuse allocation: addr=0x%0h, id=%0d (#%0d)", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(allocate_addr, BANK_ID), allocate_id_r, lkp_req_uuid))`RUNTIME_ASSERT((~finalize_valid || valid_table[finalize_id]), ("%t: *** %s invalid release: addr=0x%0h, id=%0d (#%0d)", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(addr_table[finalize_id], BANK_ID), finalize_id, fin_req_uuid))`RUNTIME_ASSERT((~fill_valid || valid_table[fill_id]), ("%t: *** %s invalid fill: addr=0x%0h, id=%0d", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(addr_table[fill_id], BANK_ID), fill_id))VX_dp_ram #(.DATAW (DATA_WIDTH),.SIZE (MSHR_SIZE),.LUTRAM (1)) entries (.clk (clk),.reset (reset),.read (1'b1),.write (allocate_valid),.wren (1'b1),.waddr (allocate_id_r),.wdata (allocate_data),.raddr (dequeue_id_r),.rdata (dequeue_data));assign fill_addr = addr_table[fill_id];assign allocate_ready = allocate_rdy;assign allocate_id = allocate_id_r;assign allocate_prev = prev_idx;assign dequeue_valid = dequeue_val;assign dequeue_addr = addr_table[dequeue_id_r];assign dequeue_rw = write_table[dequeue_id_r];assign dequeue_id = dequeue_id_r;// return pending entries for the given cache lineassign lookup_pending = addr_matches;assign lookup_rw = write_table;`UNUSED_VAR (lookup_valid)`ifdef DBG_TRACE_CACHEreg show_table;always @(posedge clk) beginif (reset) beginshow_table <= 0;end else beginshow_table <= allocate_fire || lookup_valid || finalize_valid || fill_valid || dequeue_fire;endif (allocate_fire)`TRACE(3, ("%d: %s allocate: addr=0x%0h, prev=%0d, id=%0d (#%0d)\n", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(allocate_addr, BANK_ID), allocate_prev, allocate_id, lkp_req_uuid));if (lookup_valid)`TRACE(3, ("%d: %s lookup: addr=0x%0h, matches=%b (#%0d)\n", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(lookup_addr, BANK_ID), lookup_pending, lkp_req_uuid));if (finalize_valid)`TRACE(3, ("%d: %s finalize release=%b, pending=%b, prev=%0d, id=%0d (#%0d)\n", $time, INSTANCE_ID,finalize_release, finalize_pending, finalize_prev, finalize_id, fin_req_uuid));if (fill_valid)`TRACE(3, ("%d: %s fill: addr=0x%0h, addr=0x%0h, id=%0d\n", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(addr_table[fill_id], BANK_ID), `CS_LINE_TO_FULL_ADDR(fill_addr, BANK_ID), fill_id));if (dequeue_fire)`TRACE(3, ("%d: %s dequeue: addr=0x%0h, id=%0d (#%0d)\n", $time, INSTANCE_ID,`CS_LINE_TO_FULL_ADDR(dequeue_addr, BANK_ID), dequeue_id_r, deq_req_uuid));if (show_table) begin`TRACE(3, ("%d: %s table", $time, INSTANCE_ID));for (integer i = 0; i < MSHR_SIZE; ++i) beginif (valid_table[i]) begin`TRACE(3, (" %0d=0x%0h", i, `CS_LINE_TO_FULL_ADDR(addr_table[i], BANK_ID)));if (write_table[i])`TRACE(3, ("(w)"));else`TRACE(3, ("(r)"));if (next_table[i])`TRACE(3, ("->%0d", next_index[i]));endend`TRACE(3, ("\n"));endend
`endifendmodule

大概率是这里的参数配置出了问题,后面琢磨一下。
可以看下输出文件的结构:
root@ubuntu:/home/dention/vortex/vortex/hw/unittest/cache# tree
.
├── cache
├── cachesim.cpp
├── cachesim.h
├── Makefile
├── obj_dir
│ ├── cachesim.d
│ ├── cachesim.o
│ ├── testbench.d
│ ├── testbench.o
│ ├── util_dpi.d
│ ├── util_dpi.o
│ ├── verilated.d
│ ├── verilated_dpi.d
│ ├── verilated_dpi.o
│ ├── verilated.o
│ ├── verilated_threads.d
│ ├── verilated_threads.o
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0.cpp
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0.d
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0.o
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0__Slow.cpp
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0__Slow.d
│ ├── VVX_cache_top___024root__DepSet_h763c9220__0__Slow.o
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1.cpp
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1.d
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1.o
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1__Slow.cpp
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1__Slow.d
│ ├── VVX_cache_top___024root__DepSet_h763c9220__1__Slow.o
│ ├── VVX_cache_top___024root__DepSet_h763c9220__2.cpp
│ ├── VVX_cache_top___024root__DepSet_h763c9220__2.d
│ ├── VVX_cache_top___024root__DepSet_h763c9220__2.o
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0.cpp
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0.d
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0.o
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0__Slow.cpp
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0__Slow.d
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__0__Slow.o
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__1.cpp
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__1.d
│ ├── VVX_cache_top___024root__DepSet_h9edbfabb__1.o
│ ├── VVX_cache_top___024root.h
│ ├── VVX_cache_top___024root__Slow.cpp
│ ├── VVX_cache_top___024root__Slow.d
│ ├── VVX_cache_top___024root__Slow.o
│ ├── VVX_cache_top___024unit__DepSet_h89ae607b__0__Slow.cpp
│ ├── VVX_cache_top___024unit__DepSet_h89ae607b__0__Slow.d
│ ├── VVX_cache_top___024unit__DepSet_h89ae607b__0__Slow.o
│ ├── VVX_cache_top___024unit__DepSet_ha36da8de__0.cpp
│ ├── VVX_cache_top___024unit__DepSet_ha36da8de__0.d
│ ├── VVX_cache_top___024unit__DepSet_ha36da8de__0.o
│ ├── VVX_cache_top___024unit.h
│ ├── VVX_cache_top___024unit__Slow.cpp
│ ├── VVX_cache_top___024unit__Slow.d
│ ├── VVX_cache_top___024unit__Slow.o
│ ├── VVX_cache_top__ALL.a
│ ├── VVX_cache_top_classes.mk
│ ├── VVX_cache_top__ConstPool_0.cpp
│ ├── VVX_cache_top__ConstPool_0.d
│ ├── VVX_cache_top__ConstPool_0.o
│ ├── VVX_cache_top.cpp
│ ├── VVX_cache_top.d
│ ├── VVX_cache_top__Dpi.cpp
│ ├── VVX_cache_top__Dpi.d
│ ├── VVX_cache_top__Dpi.h
│ ├── VVX_cache_top__Dpi.o
│ ├── VVX_cache_top.h
│ ├── VVX_cache_top.mk
│ ├── VVX_cache_top.o
│ ├── VVX_cache_top__pch.h
│ ├── VVX_cache_top__pch.h.fast.d
│ ├── VVX_cache_top__pch.h.fast.gch
│ ├── VVX_cache_top__pch.h.slow.d
│ ├── VVX_cache_top__pch.h.slow.gch
│ ├── VVX_cache_top__Syms.cpp
│ ├── VVX_cache_top__Syms.d
│ ├── VVX_cache_top__Syms.h
│ ├── VVX_cache_top__Syms.o
│ ├── VVX_cache_top__ver.d
│ ├── VVX_cache_top__verFiles.dat
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0.d
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0.o
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0__Slow.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0__Slow.d
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__DepSet_hd3f6db6d__0__Slow.o
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6.h
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__Slow.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__Slow.d
│ ├── VVX_cache_top_VX_mem_bus_if__D40_T6__Slow.o
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0.d
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0.o
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0__Slow.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0__Slow.d
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__DepSet_hb15d137d__0__Slow.o
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10.h
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__Slow.cpp
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__Slow.d
│ ├── VVX_cache_top_VX_mem_bus_if__D4_T10__Slow.o
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_h9ab0d52c__0__Slow.cpp
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_h9ab0d52c__0__Slow.d
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_h9ab0d52c__0__Slow.o
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_hc66bcb2d__0.cpp
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_hc66bcb2d__0.d
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__DepSet_hc66bcb2d__0.o
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1.h
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__Slow.cpp
│ ├── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__Slow.d
│ └── VVX_cache_top_VX_sp_ram__D15_S10_N1_R1__Slow.o
├── ram.h
└── testbench.cpp1 directory, 111 files
root@ubuntu:/home/dention/vortex/vortex/hw/unittest/cache# ls
cache cachesim.cpp cachesim.h Makefile obj_dir ram.h testbench.cpp
篇幅已经比较长了,博客继续输出已经开始卡住了。放在下一篇琢磨。
总结
本篇比较丝滑地跑通官网demo,但意义不大。目前还是想看清楚各个子模块的功能及其波形。
相关文章:
Vortex GPGPU的github流程跑通与功能模块波形探索
文章目录 前言一、跟着官方文档走一遍二、cache子模块的波形仿真2.1 必要的文件内容解释2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来 总结 前言 看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与…...
10.2 Linux_并发_进程相关函数
创建子进程 函数声明如下: pid_t fork(void); 返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid 注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程&…...
【深度学习基础模型】玻尔兹曼机BM|受限玻尔兹曼机RBM|深度置信网络DBN详细理解并附实现代码。
【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。 【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann m…...
滑动窗口->dd爱框框
1.题目: 2.题解: 2.1为什么用滑动窗口优化: 因为元素都是大于0的 所以:当找到大于等于x的值时,right可以不用返回 两个指针都往后走;因此可以使用滑动窗口优化暴力解法 2.2:滑动窗口具体使用步…...
Python从入门到高手4.1节-掌握条件控制语句
目录 4.1.1 理解条件控制 4.1.2 if, elif, else 4.1.3 条件表达式 4.1.4 条件控制可以嵌套 4.1.5 if语句的三元运算 4.1.6 国庆节快乐 4.1.1 理解条件控制 在日常生活中,我们常喜欢说如果, "如果怎么样,那么就会怎么样"。"如果&qu…...
使用Qt实现实时数据动态绘制的折线图示例
基于Qt的 QChartView 和定时器来动态绘制折线图。它通过动画的方式逐步将数据点添加到图表上,并动态更新坐标轴的范围,提供了一个可以实时更新数据的折线图应用。以下是对代码的详细介绍及其功能解析: 代码概述 该程序使用Qt的 QChartView…...
【人人保-注册安全分析报告-无验证方式导致安全隐患】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
Redis6 多线程模型
优质博文:IT-BLOG-CN 一、单线程的优缺点 对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非…...
Python的异步编程
什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…...
初识Linux · 进程等待
目录 前言: 进程等待是什么 为什么需要进程等待 进程等待都在做什么 前言: 通过上文的学习,我们了解了进程终止,知道终止是在干什么,终止的三种情况,以及有了退出码,错误码的概念ÿ…...
面向对象建模
UML 关系 UML 关系主要有:依赖、关联、聚合、组合、实现、继承。 类图 #mermaid-svg-jcAjcVcPmgmWDpcI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jcAjcVcPmgmWDpcI .error-icon{fill:#552222;}#m…...
MetaJUI v0.4 遇到的一些问题及解决办法记录
1、Unity3d 版本 2022.3.29f1。 2、MetaJUI v0.4 的下载,https://download.csdn.net/download/xingchengaiwei/89334848 3、将MetaJUI v0.4解压,用Unity3d 打开项目,会出现如下问题,按照图中提示操作即可。 4、打开工程后会出现…...
从零开始学习OMNeT++系列第二弹——新建一个OMNeT++的工程
上一篇第一弹介绍了OMNeT是什么以及如何安装OMNeT,现在来说一下如何新建一个自己的OMNeT的工程。 在 Omnet安装完成后,samples/tictoc 中有该例子的完整文件,你可以立刻运行该文件看他是怎么工作的,不过更推荐按接下来的步骤一步…...
【Android】布局优化—include,merge,ViewStub的使用方法
引言 1.重要性 在Android应用开发中,布局是用户界面的基础。一个高效的布局不仅能提升用户体验,还能显著改善应用的性能。随着应用功能的复杂性增加,布局的优化变得尤为重要。优化布局能够减少渲染时间,提高响应速度,…...
传奇外网架设教程带图文解说—Gee引擎
架设前准备工作: ①通过百度网盘下载版本、补丁、客户端和DBC2000。版本解压到D盘,客户端解压到D盘或是E盘,补丁先不解压 ②安装和配置DBC2000,有些版本不一定用的是DBC2000数据库,看引擎默认的数据库是哪个 DBC数据…...
MySQL | excel数据输出insert语句
需求 在日常生产运维过程中,有很多需要进行人工梳理的excel数据,到了研发这一侧需要转为sql语句进行数据修正,如何输出insert插入语句? 方案 在空白列插入,选择需要的列 "INSERT INTO tab_name1 (name, desc) …...
足球青训俱乐部管理:Spring Boot技术驱动
摘 要 随着社会经济的快速发展,人们对足球俱乐部的需求日益增加,加快了足球健身俱乐部的发展,足球俱乐部管理工作日益繁忙,传统的管理方式已经无法满足足球俱乐部管理需求,因此,为了提高足球俱乐部管理效率…...
一次实践:给自己的手机摄像头进行相机标定
文章目录 1. 问题引入2. 准备工作2.1 标定场2.2 相机拍摄 3. 基本原理3.1 成像原理3.2 畸变校正 4. 标定解算4.1 代码实现4.2 详细解析4.2.1 解算实现4.2.2 提取点位 4.3 解算结果 5. 问题补充 1. 问题引入 不得不说,现在的计算机视觉技术已经发展到足够成熟的阶段…...
【docker学习】Linux系统离线方式安装docker环境方法
centos7-linux安装docker(离线方式) 下载docker的安装文件 https://download.docker.com/linux/static/stable/x86_64/ 下载的是:docker-18.06.3-ce.tgz 这个压缩文件 将docker-18.06.3-ce.tgz文件上传到centos7-linux系统上,用ftp工具上传即可 解压…...
vscode开发uniapp安装插件指南
安装vuets的相关插件 首先是vue的相关插件,目前2024年9月应该是vue-offical 安装uniapp开发插件 uni-create-view :快速创建 uni-app 页面 安装uni-create-view之后修改插件拓展设置 勾选第一个选择创建视图时创建同名文件夹 选择第二个创建文件夹中生…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
