diff --git a/.bazelrc b/.bazelrc
index 5b3d13f..7ff5627 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1 +1,4 @@
 build --cxxopt=-std=c++17
+
+# Disable the low signal-to-noise ratio warnings
+build --copt=-Wno-unused-function
diff --git a/tests/verilator_sim/BUILD b/tests/verilator_sim/BUILD
index 59b6710..0476a57 100644
--- a/tests/verilator_sim/BUILD
+++ b/tests/verilator_sim/BUILD
@@ -128,9 +128,6 @@
     srcs = [
         "kelvin/vconvctrl_tb.cc",
     ],
-    copts = [
-        "-Wno-unused-function",
-    ],
     deps = [
         ":kelvin_if",
         ":sim_libs",
diff --git a/tests/verilator_sim/kelvin/core_tb.cc b/tests/verilator_sim/kelvin/core_tb.cc
index e2a6e10..c449816 100644
--- a/tests/verilator_sim/kelvin/core_tb.cc
+++ b/tests/verilator_sim/kelvin/core_tb.cc
@@ -1,3 +1,5 @@
+// Copyright 2023 Google LLC
+
 #include "tests/verilator_sim/sysc_tb.h"
 
 #include "VCore.h"
@@ -21,7 +23,7 @@
 
 static void Core_run(const char* name, const char* bin, const bool trace) {
   VCore core(name);
-  Core_tb tb("Core_tb", 100000000, random);
+  Core_tb tb("Core_tb", 100000000, /* random= */ false);
   Core_if mif("Core_if", bin);
   Debug_if dbg("Debug_if", &mif);
 
diff --git a/tests/verilator_sim/kelvin/debug_if.h b/tests/verilator_sim/kelvin/debug_if.h
index e35a27a..370501d 100644
--- a/tests/verilator_sim/kelvin/debug_if.h
+++ b/tests/verilator_sim/kelvin/debug_if.h
@@ -1,3 +1,5 @@
+// Copyright 2023 Google LLC
+
 #ifndef TESTS_VERILATOR_SIM_KELVIN_DEBUG_IF_H_
 #define TESTS_VERILATOR_SIM_KELVIN_DEBUG_IF_H_
 
@@ -46,7 +48,7 @@
     }
   }
 
-private:
+ private:
 #ifndef TIME_DISABLE
   const char* KNRM = "\x1B[0m";
   const char* KRED = "\x1B[31m";
@@ -83,13 +85,12 @@
       char buf[BUFFERLIMIT];
       char sbuf[ARGMAX * BUFFERLIMIT];
 
-      mm_->Read(data, BUFFERLIMIT, (uint8_t*) buf);
+      mm_->Read(data, BUFFERLIMIT, reinterpret_cast<uint8_t*>(buf));
       buf[sizeof(buf) - 1] = '\0';
 
-      sprintf(sbuf, buf, arg_[0], arg_[1], arg_[2], arg_[3],
-              arg_[4], arg_[5], arg_[6], arg_[7],
-              arg_[8], arg_[9], arg_[10], arg_[11],
-              arg_[12], arg_[13], arg_[14], arg_[15]);  // ARGMAX
+      snprintf(sbuf, sizeof(sbuf), buf, arg_[0], arg_[1], arg_[2], arg_[3],
+               arg_[4], arg_[5], arg_[6], arg_[7], arg_[8], arg_[9], arg_[10],
+               arg_[11], arg_[12], arg_[13], arg_[14], arg_[15]);  // ARGMAX
 
       int len = strlen(sbuf);
 #ifndef TIME_DISABLE
@@ -140,9 +141,7 @@
       }
     } else if (cmd == KLOG) {
       arg_[argpos_] = (uint64_t) str_[argpos_];
-      uint8_t *buf = str_[argpos_];
-      char c = 0;
-      int pos = 0;
+      uint8_t* buf = str_[argpos_];
       mm_->Read(data, BUFFERLIMIT, buf);
       argpos_++;
     } else {
diff --git a/tests/verilator_sim/kelvin/memory_if.h b/tests/verilator_sim/kelvin/memory_if.h
index ebe7fc1..733bd33 100644
--- a/tests/verilator_sim/kelvin/memory_if.h
+++ b/tests/verilator_sim/kelvin/memory_if.h
@@ -1,9 +1,14 @@
+// Copyright 2023 Google LLC
+
 #ifndef TESTS_VERILATOR_SIM_KELVIN_MEMORY_IF_H_
 #define TESTS_VERILATOR_SIM_KELVIN_MEMORY_IF_H_
 
 #include <stdint.h>
 #include <stdio.h>
 
+#include <algorithm>
+#include <map>
+
 #include "tests/verilator_sim/sysc_module.h"
 
 // A memory model base class
@@ -29,7 +34,7 @@
     fclose(f);
 
     if (limit > 0 && fsize > limit) {
-      printf("***ERROR Memory_if limit exceeded [%d > %d]\n", fsize, limit);
+      printf("***ERROR Memory_if limit exceeded [%ld > %d]\n", fsize, limit);
       exit(-1);
     }
 
@@ -68,7 +73,7 @@
       addr += len;
       data += len;
       bytes -= len;
-      assert (bytes >= 0);
+      assert(bytes >= 0);
     }
   }
 
@@ -99,11 +104,11 @@
       addr += len;
       data += len;
       bytes -= len;
-      assert (bytes >= 0);
+      assert(bytes >= 0);
     }
   }
 
-protected:
+ protected:
   void ReadSwizzle(const uint32_t addr, const int bytes, uint8_t* data) {
     const int mask = bytes - 1;
     const int alignment = (bytes - (addr & mask)) & mask;  // left shuffle
@@ -136,7 +141,7 @@
     }
   }
 
-private:
+ private:
   std::map<uint32_t, memory_page_t> page_;
 
   bool HasPage(const uint32_t addr) {
diff --git a/tests/verilator_sim/sysc_tb.h b/tests/verilator_sim/sysc_tb.h
index 9fb2aed..b097a7d 100644
--- a/tests/verilator_sim/sysc_tb.h
+++ b/tests/verilator_sim/sysc_tb.h
@@ -1,15 +1,20 @@
+// Copyright 2023 Google LLC
+
 #ifndef TESTS_VERILATOR_SIM_SYSC_TB_H_
 #define TESTS_VERILATOR_SIM_SYSC_TB_H_
 
 // A SystemC baseclass for constrained random testing of Verilated RTL.
+#include <systemc.h>
 
-#include <systemc>
-using namespace sc_core;
-using sc_dt::sc_bv;
 #include <iostream>
+#include <string>
 
-#include "fifo.h"
-#include "verilated_vcd_c.h"
+#include "tests/verilator_sim/fifo.h"
+// sc_core needs to be included before verilator header
+using namespace sc_core;      // NOLINT(build/namespaces)
+#include "verilated_vcd_c.h"  // NOLINT(build/include_subdir): From verilator.
+
+using sc_dt::sc_bv;
 
 const char *vcd_path_ = "/tmp/kelvin/vcd";
 
@@ -97,8 +102,8 @@
         clock("clock", 1, SC_NS),
         reset("reset"),
         resetn("resetn"),
-        loops_(loops),
-        random_(random) {
+        random_(random),
+        loops_(loops) {
     loop_ = 0;
     error_ = false;
 
@@ -168,9 +173,9 @@
   }
 
  protected:
-  virtual void init(){};
-  virtual void posedge(){};
-  virtual void negedge(){};
+  virtual void init() {}
+  virtual void posedge() {}
+  virtual void negedge() {}
 
   bool check(bool v, const char *s = "") {
     const char *KRED = "\x1B[31m";
@@ -191,15 +196,17 @@
 
   bool rand_bool() {
     // Do not allow any 'io_in_valid' controls to be set during reset.
-    return !reset && (!random_ || (rand() & 1));
+    return !reset &&
+           (!random_ || (rand() & 1));  // NOLINT(runtime/threadsafe_fn)
   }
 
   int rand_int(int min = 0, int max = (1 << 31)) {
-    return (rand() % (max - min + 1)) + min;
+    return (rand() % (max - min + 1)) + min;  // NOLINT(runtime/threadsafe_fn)
   }
 
   uint32_t rand_uint32(uint32_t min = 0, uint32_t max = 0xffffffffu) {
-    uint32_t r = (rand() & 0xffff) | (rand() << 16);
+    uint32_t r = (rand() & 0xffff) |  // NOLINT(runtime/threadsafe_fn)
+                 (rand() << 16);      // NOLINT(runtime/threadsafe_fn)
     if (min == 0 && max == 0xffffffff) return r;
     return (r % (max - min + 1)) + min;
   }
