diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/Round.scala b/src/main/scala/uk/ac/soton/ecs/can/core/Round.scala
new file mode 100644
index 0000000000000000000000000000000000000000..34772476cf8c003745ecd2c890f8a0b037a6d5e9
--- /dev/null
+++ b/src/main/scala/uk/ac/soton/ecs/can/core/Round.scala
@@ -0,0 +1,20 @@
+// SPDX-FileCopyrightText: 2021 Minyong Li <ml10g20@soton.ac.uk>
+// SPDX-License-Identifier: CERN-OHL-W-2.0
+
+package uk.ac.soton.ecs.can.core
+
+import chisel3._
+import uk.ac.soton.ecs.can.config.CanCoreConfiguration
+
+class Round(implicit cfg: CanCoreConfiguration) extends MultiIOModule {
+  val roundSelect = IO(Input(Bool()))
+  val in = IO(Input(UInt(512.W)))
+  val out = IO(Output(UInt(512.W)))
+
+  private val columnarRound = Module(new ColumnarRound)
+  private val diagonalRound = Module(new DiagonalRound)
+
+  columnarRound.in := in
+  diagonalRound.in := in
+  out := Mux(roundSelect, columnarRound.out, diagonalRound.out)
+}