aboutsummaryrefslogtreecommitdiff
path: root/src/rtl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rtl')
-rw-r--r--src/rtl/chacha_core.v12
-rw-r--r--src/rtl/chacha_qr.v29
2 files changed, 41 insertions, 0 deletions
diff --git a/src/rtl/chacha_core.v b/src/rtl/chacha_core.v
index 5f496a4..d68f783 100644
--- a/src/rtl/chacha_core.v
+++ b/src/rtl/chacha_core.v
@@ -191,6 +191,9 @@ module chacha_core(
// Instantiation of the qr modules.
//----------------------------------------------------------------
chacha_qr qr0(
+ .clk(clk),
+ .reset_n(reset_n),
+
.a(qr0_a),
.b(qr0_b),
.c(qr0_c),
@@ -203,6 +206,9 @@ module chacha_core(
);
chacha_qr qr1(
+ .clk(clk),
+ .reset_n(reset_n),
+
.a(qr1_a),
.b(qr1_b),
.c(qr1_c),
@@ -215,6 +221,9 @@ module chacha_core(
);
chacha_qr qr2(
+ .clk(clk),
+ .reset_n(reset_n),
+
.a(qr2_a),
.b(qr2_b),
.c(qr2_c),
@@ -227,6 +236,9 @@ module chacha_core(
);
chacha_qr qr3(
+ .clk(clk),
+ .reset_n(reset_n),
+
.a(qr3_a),
.b(qr3_b),
.c(qr3_c),
diff --git a/src/rtl/chacha_qr.v b/src/rtl/chacha_qr.v
index 42e644c..e1ddbd8 100644
--- a/src/rtl/chacha_qr.v
+++ b/src/rtl/chacha_qr.v
@@ -40,6 +40,9 @@
//======================================================================
module chacha_qr(
+ input wire clk,
+ input wire reset_n,
+
input wire [31 : 0] a,
input wire [31 : 0] b,
input wire [31 : 0] c,
@@ -52,6 +55,13 @@ module chacha_qr(
);
//----------------------------------------------------------------
+ // Registers including update variables and write enable.
+ //----------------------------------------------------------------
+ reg [31 : 0] a0_reg;
+ reg [31 : 0] a0_new;
+
+
+ //----------------------------------------------------------------
// Wires.
//----------------------------------------------------------------
reg [31 : 0] internal_a_prim;
@@ -70,6 +80,23 @@ module chacha_qr(
//----------------------------------------------------------------
+ // reg_update
+ //----------------------------------------------------------------
+ always @ (posedge clk)
+ begin : reg_update
+ if (!reset_n)
+ begin
+ a0_reg <= 32'h0;
+ end
+
+ else
+ begin
+ a0_reg <= a0_new;
+ end
+ end // reg_update
+
+
+ //----------------------------------------------------------------
// qr
//
// The actual quarterround function.
@@ -93,6 +120,8 @@ module chacha_qr(
reg [31 : 0] d3;
a0 = a + b;
+ a0_new = a + b;
+
d0 = d ^ a0;
d1 = {d0[15 : 0], d0[31 : 16]};
c0 = c + d1;