Cleanup the build warnings and lint for vld/st test benches
Also convert them into cc_tests
Change-Id: Ie431bb5dd8b3bf1dac26ab0fe5ed395855f035e3
diff --git a/tests/verilator_sim/BUILD b/tests/verilator_sim/BUILD
index 5c346cd..2739fc1 100644
--- a/tests/verilator_sim/BUILD
+++ b/tests/verilator_sim/BUILD
@@ -167,7 +167,7 @@
],
)
-cc_binary(
+cc_test(
name = "vldst_tb",
srcs = [
"kelvin/vldst_tb.cc",
@@ -181,7 +181,7 @@
],
)
-cc_binary(
+cc_test(
name = "vld_tb",
srcs = [
"kelvin/vld_tb.cc",
@@ -221,7 +221,7 @@
],
)
-cc_binary(
+cc_test(
name = "vst_tb",
srcs = [
"kelvin/vst_tb.cc",
@@ -248,4 +248,3 @@
"@accellera_systemc//:systemc",
]
)
-
diff --git a/tests/verilator_sim/kelvin/vld_tb.cc b/tests/verilator_sim/kelvin/vld_tb.cc
index de47606..cfb8db6 100644
--- a/tests/verilator_sim/kelvin/vld_tb.cc
+++ b/tests/verilator_sim/kelvin/vld_tb.cc
@@ -194,21 +194,32 @@
io_axi_data_bits_id = r.id;
io_axi_data_bits_data = rdata;
-#define IN_READ(idx) \
- Input(io_in_bits_##idx##_bits_m, \
- io_in_bits_##idx##_bits_op.read().get_word(0), \
- io_in_bits_##idx##_bits_f2.read().get_word(0), \
- io_in_bits_##idx##_bits_sz.read().get_word(0), \
- io_in_bits_##idx##_bits_vd_valid, \
- io_in_bits_##idx##_bits_vd_addr.read().get_word(0), \
- io_in_bits_##idx##_bits_sv_addr.read().get_word(0), \
- io_in_bits_##idx##_bits_sv_data.read().get_word(0));
+#define IN_READ(idx) \
+ { \
+ Input(io_in_bits_##idx##_bits_m, \
+ io_in_bits_##idx##_bits_op.read().get_word(0), \
+ io_in_bits_##idx##_bits_f2.read().get_word(0), \
+ io_in_bits_##idx##_bits_sz.read().get_word(0), \
+ io_in_bits_##idx##_bits_vd_valid, \
+ io_in_bits_##idx##_bits_vd_addr.read().get_word(0), \
+ io_in_bits_##idx##_bits_sv_addr.read().get_word(0), \
+ io_in_bits_##idx##_bits_sv_data.read().get_word(0)); \
+ cmd_count_ += io_in_bits_##idx##_bits_m ? 4 : 1; \
+ }
if (io_in_valid && io_in_ready) {
- if (io_in_bits_0_valid) { IN_READ(0); cmd_count_ += io_in_bits_0_bits_m ? 4 : 1; }
- if (io_in_bits_1_valid) { IN_READ(1); cmd_count_ += io_in_bits_1_bits_m ? 4 : 1; }
- if (io_in_bits_2_valid) { IN_READ(2); cmd_count_ += io_in_bits_2_bits_m ? 4 : 1; }
- if (io_in_bits_3_valid) { IN_READ(3); cmd_count_ += io_in_bits_3_bits_m ? 4 : 1; }
+ if (io_in_bits_0_valid) {
+ IN_READ(0);
+ }
+ if (io_in_bits_1_valid) {
+ IN_READ(1);
+ }
+ if (io_in_bits_2_valid) {
+ IN_READ(2);
+ }
+ if (io_in_bits_3_valid) {
+ IN_READ(3);
+ }
}
#define IN_RAND(idx) \
@@ -217,7 +228,6 @@
const int op = vld; \
const bool m = rand_bool(); \
const int vd_addr = rand_uint32() & (m ? 60 : 63); \
- const bool vd_valid = op == vld; \
const uint8_t f2 = rand_int(0, 7); \
const bool stride = (f2 >> 1) & 1; \
const uint32_t mask = ~((1u << kAlignedLsb) - 1); \
@@ -252,7 +262,7 @@
wreg_t ref, dut;
check(wreg_.read(ref), "wreg empty");
dut.addr = io_write_addr.read().get_word(0);
- uint32_t* dst = (uint32_t*)dut.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(dut.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = io_write_data.read().get_word(i);
}
@@ -266,7 +276,6 @@
if (io_axi_addr_valid && io_axi_addr_ready) {
raxi_t ref, dut;
- int cnt = raxi_.count();
check(raxi_.read(ref), "axi empty");
raxi_count_++;
dut.addr = io_axi_addr_bits_addr.read().get_word(0);
@@ -333,15 +342,8 @@
const bool length = (f2 >> 0) & 1;
const int sm = m ? 4 : 1;
- uint32_t offset = 0;
- uint32_t remain = 0;
-
- if (stride) {
- offset = data * sz;
- } else {
- offset = VLENB;
- }
-
+ uint32_t offset = stride ? data * sz : VLENB;
+ uint32_t remain;
if (length) {
switch (sz) {
case 1:
@@ -364,16 +366,20 @@
for (int i = 0; i < (m ? 4 : 1); ++i) {
wreg_t w;
w.addr = vd_addr;
- uint32_t* dst = (uint32_t*)w.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(w.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = rand_uint32();
}
+ // Turn off the warning for the debug code.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-variable"
const int n = RAxi(0, op, offset, stride, w, addr, remain);
+#pragma GCC diagnostic pop
#if 0 // Do not use
// Write register lane zeroing.
- uint8_t* src = (uint8_t*)w.data;
+ uint8_t* src = reinterpret_cast<uint8_t*>(w.data);
for (int i = 0; i < kVector / 8; ++i) {
if (i < n) continue;
src[i] = 0;
@@ -395,7 +401,7 @@
const uint32_t lsb_addr = addr & ((kVector / 8) - 1);
const uint8_t* src = (const uint8_t*)w.data;
- uint8_t* dst = (uint8_t*)r.data;
+ uint8_t* dst = reinterpret_cast<uint8_t*>(r.data);
for (int i = 0; i < kVector / 8; ++i) {
const int idx = (i + lsb_addr) % (kVector / 8);
dst[idx] = src[i];
diff --git a/tests/verilator_sim/kelvin/vldst_tb.cc b/tests/verilator_sim/kelvin/vldst_tb.cc
index 7863d39..28d8fa3 100644
--- a/tests/verilator_sim/kelvin/vldst_tb.cc
+++ b/tests/verilator_sim/kelvin/vldst_tb.cc
@@ -201,8 +201,6 @@
const int vd_addr = rand_uint32() & (m ? 60 : 63); \
const int vs_addr = rand_uint32() & (m ? 60 : 63); \
const int vs_tag = rand_uint32(); \
- const bool vd_valid = op == vld; \
- const bool vs_valid = op == vst || op == vstq; \
uint32_t sv_addr = std::min(rand_uint32() & ~0x80000000, 0x7fffff00u); \
uint32_t sv_data = (rand_uint32() >> rand_int(0, 31)); \
sv_data = std::min(((0x80000000u - sv_addr) / 64), sv_data); \
@@ -281,7 +279,7 @@
wreg_t ref, dut;
check(wreg_.read(ref), "wreg empty");
dut.addr = io_write_addr.read().get_word(0);
- uint32_t* dst = (uint32_t*)dut.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(dut.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = io_write_data.read().get_word(i);
}
@@ -301,7 +299,7 @@
dut.size = io_dbus_size.read().get_word(0);
dut.last = io_last;
dut.write = io_dbus_write;
- uint32_t* dst = (uint32_t*)dut.wdata;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(dut.wdata);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = io_dbus_wdata.read().get_word(i);
}
@@ -409,8 +407,6 @@
assert(!(op == vstq && (vd_valid || !vs_valid)));
assert(!(op == vld && (!vd_valid || vs_valid)));
- rreg_t r;
-
const bool stride = (f2 >> 1) & 1;
const bool length = (f2 >> 0) & 1;
@@ -448,7 +444,7 @@
if (vs_valid) {
r.addr = vs_addr;
r.tag = vs_tag >> (vs_addr & 3);
- uint32_t* dst = (uint32_t*)r.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(r.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = rand_uint32();
}
@@ -457,7 +453,7 @@
wreg_t w;
if (vd_valid) {
w.addr = vd_addr;
- uint32_t* dst = (uint32_t*)w.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(w.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = rand_uint32();
}
@@ -479,7 +475,7 @@
// Write register lane zeroing.
if (vd_valid) {
- uint8_t* src = (uint8_t*)w.data;
+ uint8_t* src = reinterpret_cast<uint8_t*>(w.data);
for (int i = 0; i < kVector / 8; ++i) {
if (i < n) continue;
src[i] = 0;
@@ -510,16 +506,16 @@
if (d.write) {
const uint8_t* src = (const uint8_t*)r.data;
- uint8_t* dst = (uint8_t*)d.wdata;
+ uint8_t* dst = reinterpret_cast<uint8_t*>(d.wdata);
for (int i = 0; i < kVector / 8; ++i) {
const int idx0 = (i + lsb_addr) % (kVector / 8);
const int idx1 = (i + lsb_ashf) % (kVector / 8);
- d.wmask[idx0] = i < d.size;
+ d.wmask[idx0] = static_cast<uint8_t>(static_cast<uint32_t>(i) < d.size);
dst[idx1] = src[i];
}
} else {
const uint8_t* src = (const uint8_t*)w.data;
- uint8_t* dst = (uint8_t*)d.rdata;
+ uint8_t* dst = reinterpret_cast<uint8_t*>(d.rdata);
for (int i = 0; i < kVector / 8; ++i) {
const int idx = (i + lsb_addr) % (kVector / 8);
dst[idx] = src[i];
diff --git a/tests/verilator_sim/kelvin/vst_tb.cc b/tests/verilator_sim/kelvin/vst_tb.cc
index 053cd01..9c5aafb 100644
--- a/tests/verilator_sim/kelvin/vst_tb.cc
+++ b/tests/verilator_sim/kelvin/vst_tb.cc
@@ -213,22 +213,35 @@
io_axi_resp_bits_resp = 0;
io_axi_resp_bits_id = w.id;
-#define IN_READ(idx) \
- Input(io_in_bits_##idx##_bits_m, \
- io_in_bits_##idx##_bits_op.read().get_word(0), \
- io_in_bits_##idx##_bits_f2.read().get_word(0), \
- io_in_bits_##idx##_bits_sz.read().get_word(0), \
- io_in_bits_##idx##_bits_vs_valid, \
- io_in_bits_##idx##_bits_vs_addr.read().get_word(0), \
- io_in_bits_##idx##_bits_vs_tag.read().get_word(0), \
- io_in_bits_##idx##_bits_sv_addr.read().get_word(0), \
- io_in_bits_##idx##_bits_sv_data.read().get_word(0));
+#define IN_READ(idx) \
+ { \
+ Input(io_in_bits_##idx##_bits_m, \
+ io_in_bits_##idx##_bits_op.read().get_word(0), \
+ io_in_bits_##idx##_bits_f2.read().get_word(0), \
+ io_in_bits_##idx##_bits_sz.read().get_word(0), \
+ io_in_bits_##idx##_bits_vs_valid, \
+ io_in_bits_##idx##_bits_vs_addr.read().get_word(0), \
+ io_in_bits_##idx##_bits_vs_tag.read().get_word(0), \
+ io_in_bits_##idx##_bits_sv_addr.read().get_word(0), \
+ io_in_bits_##idx##_bits_sv_data.read().get_word(0)); \
+ cmd_count_ += \
+ (io_in_bits_##idx##_bits_m ? 4 : 1) * \
+ (io_in_bits_##idx##_bits_op.read().get_word(0) == vstq ? 4 : 1); \
+ }
if (io_in_valid && io_in_ready) {
- if (io_in_bits_0_valid) { IN_READ(0); cmd_count_ += (io_in_bits_0_bits_m ? 4 : 1) * (io_in_bits_0_bits_op.read().get_word(0) == vstq ? 4 : 1); }
- if (io_in_bits_1_valid) { IN_READ(1); cmd_count_ += (io_in_bits_1_bits_m ? 4 : 1) * (io_in_bits_1_bits_op.read().get_word(0) == vstq ? 4 : 1); }
- if (io_in_bits_2_valid) { IN_READ(2); cmd_count_ += (io_in_bits_2_bits_m ? 4 : 1) * (io_in_bits_2_bits_op.read().get_word(0) == vstq ? 4 : 1); }
- if (io_in_bits_3_valid) { IN_READ(3); cmd_count_ += (io_in_bits_3_bits_m ? 4 : 1) * (io_in_bits_3_bits_op.read().get_word(0) == vstq ? 4 : 1); }
+ if (io_in_bits_0_valid) {
+ IN_READ(0);
+ }
+ if (io_in_bits_1_valid) {
+ IN_READ(1);
+ }
+ if (io_in_bits_2_valid) {
+ IN_READ(2);
+ }
+ if (io_in_bits_3_valid) {
+ IN_READ(3);
+ }
}
#define IN_RAND(idx) \
@@ -238,11 +251,10 @@
const bool m = rand_bool(); \
const int vs_addr = rand_uint32() & (m ? 60 : 63); \
const int vs_tag = rand_uint32(); \
- const bool vs_valid = op == vst || op == vstq; \
const uint8_t f2 = rand_int(0, 7); \
const bool stride = (f2 >> 1) & 1; \
- const uint32_t mask = ~(op == vst ? (1u << kAlignedLsb) - 1 : \
- (1u << (kAlignedLsb - 2)) - 1); \
+ const uint32_t mask = ~(op == vst ? (1u << kAlignedLsb) - 1 \
+ : (1u << (kAlignedLsb - 2)) - 1); \
uint32_t addr = (rand_uint32() & mask) | 0x80000000u; \
uint32_t data = rand_uint32() >> rand_int(0, 32); \
data = std::min(((0xffffffffu - addr) / 64), data); \
@@ -293,7 +305,7 @@
}
sc_bv<kVector> rbits;
- const uint32_t* src = (const uint32_t*)r.data;
+ const uint32_t* src = reinterpret_cast<const uint32_t*>(r.data);
for (int i = 0; i < kVector / 32; ++i) {
rbits.set_word(i, src[i]);
}
@@ -306,7 +318,7 @@
waxi_count_++;
dut.addr = io_axi_addr_bits_addr.read().get_word(0);
dut.id = io_axi_addr_bits_id.read().get_word(0);
- uint32_t* dst = (uint32_t*)dut.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(dut.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = io_axi_data_bits_data.read().get_word(i);
}
@@ -325,7 +337,7 @@
}
}
-private:
+ private:
struct waxi_t {
uint32_t addr;
uint32_t id;
@@ -371,8 +383,6 @@
void Input(bool m, uint8_t op, uint8_t f2, uint8_t sz, bool vs_valid,
uint8_t vs_addr, uint8_t vs_tag, uint32_t addr, uint32_t data) {
- rreg_t r;
-
const bool stride = (f2 >> 1) & 1;
const bool length = (f2 >> 0) & 1;
@@ -410,7 +420,7 @@
if (vs_valid) {
r.addr = vs_addr;
r.tag = vs_tag >> (vs_addr & 3);
- uint32_t* dst = (uint32_t*)r.data;
+ uint32_t* dst = reinterpret_cast<uint32_t*>(r.data);
for (int i = 0; i < kVector / 32; ++i) {
dst[i] = rand_uint32();
}
@@ -441,19 +451,19 @@
const uint32_t lsb_addr = addr & ((kVector / 8) - 1);
const uint32_t vstq_quad = step;
const uint32_t vstq_offset = vstq_quad << (kAlignedLsb - 2);
- const uint8_t* src = (const uint8_t*)r.data;
+ const uint8_t* src = reinterpret_cast<const uint8_t*>(r.data);
waxi_t w;
w.addr = addr & ~0x80000000 & ~(VLENB - 1); // align to line
w.size = std::min(remain, is_vstq ? VLENB / 4 : VLENB);
w.id = r.addr;
- uint8_t* dst = (uint8_t*)w.data;
+ uint8_t* dst = reinterpret_cast<uint8_t*>(w.data);
for (int i = 0; i < kVector / 8; ++i) {
const int idx0 = (i + lsb_addr) % (kVector / 8);
const int idx1 = is_vstq ? (i % (kVector / 8 / 4)) + vstq_offset : i;
- w.strb[idx0] = i < w.size;
+ w.strb[idx0] = static_cast<uint8_t>(static_cast<uint32_t>(i) < w.size);
dst[i] = src[idx1];
}