diff --git a/src/main/scala/uk/ac/soton/ecs/can/config/CanCoreConfiguration.scala b/src/main/scala/uk/ac/soton/ecs/can/config/CanCoreConfiguration.scala index e17b7319c99fe62d59c5ae6523c869449ed9081c..c6acc2b6bcdd19f3a27f2bccdf56923396dc9eee 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/config/CanCoreConfiguration.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/config/CanCoreConfiguration.scala @@ -10,5 +10,6 @@ case class CanCoreConfiguration( syncReadMemory: Boolean, regAfterBlockInitializer: Boolean, regBetweenRounds: Boolean, - regAfterAdder: Boolean + regAfterAdder: Boolean, + quarterRoundType: Int ) diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/BaseRound.scala b/src/main/scala/uk/ac/soton/ecs/can/core/BaseRound.scala index e05e6ed3aa3f8d5023bde73c703b704f552ed9fb..f92a53ad364647ae4f8db999111f7e3c6cc3b37f 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/core/BaseRound.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/core/BaseRound.scala @@ -4,8 +4,10 @@ package uk.ac.soton.ecs.can.core import chisel3._ +import uk.ac.soton.ecs.can.config.CanCoreConfiguration -abstract class BaseRound extends MultiIOModule { +abstract class BaseRound(implicit cfg: CanCoreConfiguration) + extends MultiIOModule { val in = IO(Input(UInt(512.W))) val out = IO(Output(UInt(512.W))) @@ -15,7 +17,13 @@ abstract class BaseRound extends MultiIOModule { protected def wire(wireBox: Seq[Seq[Int]]): Unit = wireBox.foreach { wireSeq => - val quarterRound = Module(new CombinationalQuarterRound) + val quarterRound = cfg.quarterRoundType match { + case 1 => Module(new CombinationalQuarterRound) + case 2 => Module(new TwoStageQuarterRound) + case 8 => Module(new EightStageQuarterRound) + case _ => + throw new Exception("quarterRoundType should be either 1, 2, or 8") + } quarterRound.in.zip(quarterRound.out).zip(wireSeq).foreach { case ((i, o), w) => i := _in(w) diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/ColumnarRound.scala b/src/main/scala/uk/ac/soton/ecs/can/core/ColumnarRound.scala index d44203d2aed9d4a02176ff52934360942f95e2b8..7b4e05a2478c03f2c45c1ff1582d680d4b59a1a5 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/core/ColumnarRound.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/core/ColumnarRound.scala @@ -3,7 +3,9 @@ package uk.ac.soton.ecs.can.core -class ColumnarRound extends BaseRound { +import uk.ac.soton.ecs.can.config.CanCoreConfiguration + +class ColumnarRound(implicit cfg: CanCoreConfiguration) extends BaseRound { wire( Seq( Seq(0, 4, 8, 12), diff --git a/src/main/scala/uk/ac/soton/ecs/can/core/DiagonalRound.scala b/src/main/scala/uk/ac/soton/ecs/can/core/DiagonalRound.scala index a95747372f0ee087dc44837bc9568253b05e3608..f6da699abd2717af475c93c660fe99e8270dbac0 100644 --- a/src/main/scala/uk/ac/soton/ecs/can/core/DiagonalRound.scala +++ b/src/main/scala/uk/ac/soton/ecs/can/core/DiagonalRound.scala @@ -3,7 +3,9 @@ package uk.ac.soton.ecs.can.core -class DiagonalRound extends BaseRound { +import uk.ac.soton.ecs.can.config.CanCoreConfiguration + +class DiagonalRound(implicit cfg: CanCoreConfiguration) extends BaseRound { wire( Seq( Seq(0, 5, 10, 15),