From 5bd73e7ece4ec8a86f4aed87b3035743d306786b Mon Sep 17 00:00:00 2001 From: Minyong Li <ml10g20@soton.ac.uk> Date: Wed, 7 Jul 2021 11:45:19 +0100 Subject: [PATCH] core.*Round: add quarter round type configs --- .../soton/ecs/can/config/CanCoreConfiguration.scala | 3 ++- .../scala/uk/ac/soton/ecs/can/core/BaseRound.scala | 12 ++++++++++-- .../uk/ac/soton/ecs/can/core/ColumnarRound.scala | 4 +++- .../uk/ac/soton/ecs/can/core/DiagonalRound.scala | 4 +++- 4 files changed, 18 insertions(+), 5 deletions(-) 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 e17b731..c6acc2b 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 e05e6ed..f92a53a 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 d44203d..7b4e05a 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 a957473..f6da699 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), -- GitLab