cmake_minimum_required(VERSION 3.20) project(uart_uvm LANGUAGES C CXX) # -------------------------------------------------- # DSim configuration # -------------------------------------------------- set(DSIM_EXECUTABLE dsim CACHE FILEPATH "Path to DSim binary") set(DSIM_TOP uart_tb_top CACHE STRING "Top-level module") set(DSIM_FLAGS "" CACHE STRING "Extra DSim flags") set(DSIM_FILELIST ${CMAKE_SOURCE_DIR}/filelist.f CACHE FILEPATH ".f file") set(DSIM_UVM_VER 1.2 CACHE STRING "UVM version") set(DSIM_HOME $ENV{DSIM_HOME} CACHE PATH "DSim root") set(UVM_TESTNAME uart_test CACHE STRING "UVM test name") # -------------------------------------------------- # Safety checks # -------------------------------------------------- if(NOT DSIM_HOME) message(FATAL_ERROR "DSIM_HOME is not set.") endif() if(NOT EXISTS "${DSIM_FILELIST}") message(FATAL_ERROR "DSIM_FILELIST not found: ${DSIM_FILELIST}") endif() # -------------------------------------------------- # Sources (for dependency tracking) # -------------------------------------------------- file(GLOB_RECURSE SV_SOURCES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/rtl/*.sv ${CMAKE_SOURCE_DIR}/verf/**/*.sv ${CMAKE_SOURCE_DIR}/*.svh ) file(GLOB_RECURSE FILELISTS CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/*.f ) # -------------------------------------------------- # Build image # -------------------------------------------------- set(DSIM_IMG sim_image) set(DSIM_STAMP ${CMAKE_BINARY_DIR}/.dsim_built.stamp) add_custom_command( OUTPUT ${DSIM_STAMP} COMMAND ${DSIM_EXECUTABLE} -work ${CMAKE_BINARY_DIR} -show-ld -genimage ${DSIM_IMG} -top ${DSIM_TOP} -uvm ${DSIM_UVM_VER} -F "${DSIM_FILELIST}" ${DSIM_FLAGS} COMMAND ${CMAKE_COMMAND} -E touch ${DSIM_STAMP} DEPENDS ${DSIM_FILELIST} ${FILELISTS} ${SV_SOURCES} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "DSim: compiling TOP:[${DSIM_TOP}]" VERBATIM ) add_custom_target(dsim_build ALL DEPENDS ${DSIM_STAMP}) # -------------------------------------------------- # Run simulation # -------------------------------------------------- add_custom_target(dsim_run COMMAND ${DSIM_EXECUTABLE} -image ${DSIM_IMG} -work ${CMAKE_BINARY_DIR} -show-ld -uvm ${DSIM_UVM_VER} -trace-dpi -sv_seed random ${DSIM_FLAGS} +UVM_TESTNAME=${UVM_TESTNAME} DEPENDS dsim_build WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Running UART UVM simulation" VERBATIM )