aboutsummaryrefslogtreecommitdiff
path: root/rv64cpu/tb/CMakeLists.txt
blob: 67d3c7a9042da422cbd581656e8323911b31cccb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# ─── Testbench CMake ──────────────────────────────────────────────────────────────
#
# Each testbench is registered as a Verilator simulation target + CTest.
#
# To add a new unit test, call:
#   add_verilator_target(
#       NAME        tb_<module>
#       TOP_MODULE  <module>
#       SOURCES     ${RTL_CORE_DIR}/<module>.sv  [... dependencies ...]
#       INCLUDE_DIRS ${RTL_INCLUDE_DIR}
#       TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_<module>.cpp
#   )
#

enable_testing()

# ─── Collect common RTL include dirs ─────────────────────────────────────────────
set(RTL_COMMON_INCLUDES
    ${RTL_INCLUDE_DIR}
)

# ─── Collect all RTL sources for SoC-level sim ───────────────────────────────────
file(GLOB_RECURSE ALL_RTL_SOURCES
    ${RTL_DIR}/*.sv
)

# ═══════════════════════════════════════════════════════════════════════════════════
# Unit Tests
# ═══════════════════════════════════════════════════════════════════════════════════
#
# Uncomment and fill in as you implement each module, for example:
#
add_verilator_target(
    NAME        tb_alu
    TOP_MODULE  alu
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/alu.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_alu.cc
)

add_verilator_target(
    NAME        tb_decoder
    TOP_MODULE  decoder
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/decoder.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_decoder.cc
)

add_verilator_target(
    NAME        tb_regfile
    TOP_MODULE  regfile
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/regfile.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_regfile.cc
)

add_verilator_target(
    NAME        tb_branch
    TOP_MODULE  branch_unit
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/branch_unit.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_branch.cc
)

add_verilator_target(
    NAME        tb_if_stage
    TOP_MODULE  if_stage
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/if_stage.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_if_stage.cc
)

add_verilator_target(
    NAME        tb_id_stage
    TOP_MODULE  id_stage
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/decoder.sv
                ${RTL_CORE_DIR}/regfile.sv
                ${RTL_CORE_DIR}/id_stage.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_id_stage.cc
)

add_verilator_target(
    NAME        tb_if_id_reg
    TOP_MODULE  if_id_reg
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/if_id_reg.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_if_id_reg.cc
)

add_verilator_target(
    NAME        tb_id_ex_reg
    TOP_MODULE  id_ex_reg
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/id_ex_reg.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_id_ex_reg.cc
)

add_verilator_target(
    NAME        tb_ex_stage
    TOP_MODULE  ex_stage
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/alu.sv
                ${RTL_CORE_DIR}/branch_unit.sv
                ${RTL_CORE_DIR}/ex_stage.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_ex_stage.cc
)

add_verilator_target(
    NAME        tb_ex_mem_reg
    TOP_MODULE  ex_mem_reg
    SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
                ${RTL_CORE_DIR}/ex_mem_reg.sv
    INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
    TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_ex_mem_reg.cc
)
#
# add_verilator_target(
#     NAME        tb_csr
#     TOP_MODULE  csr_unit
#     SOURCES     ${RTL_CORE_DIR}/include/rv64_pkg.sv
#                 ${RTL_CORE_DIR}/include/csr_pkg.sv
#                 ${RTL_CORE_DIR}/csr_unit.sv
#     INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
#     TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/unit/tb_csr.cc
# )

# ═══════════════════════════════════════════════════════════════════════════════════
# Core Integration Test
# ═══════════════════════════════════════════════════════════════════════════════════
#
# add_verilator_target(
#     NAME        tb_core
#     TOP_MODULE  richard_core
#     SOURCES     ${ALL_RTL_SOURCES}
#     INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
#     TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/core/tb_core.cc
# )

# ═══════════════════════════════════════════════════════════════════════════════════
# SoC Integration Test
# ═══════════════════════════════════════════════════════════════════════════════════
#
# add_verilator_target(
#     NAME        tb_soc
#     TOP_MODULE  richard_soc
#     SOURCES     ${ALL_RTL_SOURCES}
#     INCLUDE_DIRS ${RTL_COMMON_INCLUDES}
#     TB_SOURCES  ${CMAKE_CURRENT_SOURCE_DIR}/soc/tb_soc.cc
#     EXTRA_FLAGS --threads 2
# )

# ═══════════════════════════════════════════════════════════════════════════════════
# Compliance Tests
# ═══════════════════════════════════════════════════════════════════════════════════
#
# add_subdirectory(compliance)