aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rtl/chacha.v128
-rw-r--r--src/tb/tb_chacha.v188
2 files changed, 164 insertions, 152 deletions
diff --git a/src/rtl/chacha.v b/src/rtl/chacha.v
index 72792aa..497f51d 100644
--- a/src/rtl/chacha.v
+++ b/src/rtl/chacha.v
@@ -56,66 +56,74 @@ module chacha(
//----------------------------------------------------------------
// Internal constant and parameter definitions.
//----------------------------------------------------------------
- parameter ADDR_CTRL = 8'h00;
- parameter CTRL_INIT_BIT = 0;
- parameter CTRL_NEXT_BIT = 1;
-
- parameter ADDR_STATUS = 8'h01;
- parameter STATUS_READY_BIT = 0;
-
- parameter ADDR_KEYLEN = 8'h08;
- parameter KEYLEN_BIT = 0;
- parameter ADDR_ROUNDS = 8'h09;
- parameter ROUNDS_HIGH_BIT = 4;
- parameter ROUNDS_LOW_BIT = 0;
-
- parameter ADDR_KEY0 = 8'h10;
- parameter ADDR_KEY1 = 8'h11;
- parameter ADDR_KEY2 = 8'h12;
- parameter ADDR_KEY3 = 8'h13;
- parameter ADDR_KEY4 = 8'h14;
- parameter ADDR_KEY5 = 8'h15;
- parameter ADDR_KEY6 = 8'h16;
- parameter ADDR_KEY7 = 8'h17;
-
- parameter ADDR_IV0 = 8'h20;
- parameter ADDR_IV1 = 8'h21;
-
- parameter ADDR_DATA_IN0 = 8'h40;
- parameter ADDR_DATA_IN1 = 8'h41;
- parameter ADDR_DATA_IN2 = 8'h42;
- parameter ADDR_DATA_IN3 = 8'h43;
- parameter ADDR_DATA_IN4 = 8'h44;
- parameter ADDR_DATA_IN5 = 8'h45;
- parameter ADDR_DATA_IN6 = 8'h46;
- parameter ADDR_DATA_IN7 = 8'h47;
- parameter ADDR_DATA_IN8 = 8'h48;
- parameter ADDR_DATA_IN9 = 8'h49;
- parameter ADDR_DATA_IN10 = 8'h4a;
- parameter ADDR_DATA_IN11 = 8'h4b;
- parameter ADDR_DATA_IN12 = 8'h4c;
- parameter ADDR_DATA_IN13 = 8'h4d;
- parameter ADDR_DATA_IN14 = 8'h4e;
- parameter ADDR_DATA_IN15 = 8'h4f;
-
- parameter ADDR_DATA_OUT0 = 8'h80;
- parameter ADDR_DATA_OUT1 = 8'h81;
- parameter ADDR_DATA_OUT2 = 8'h82;
- parameter ADDR_DATA_OUT3 = 8'h83;
- parameter ADDR_DATA_OUT4 = 8'h84;
- parameter ADDR_DATA_OUT5 = 8'h85;
- parameter ADDR_DATA_OUT6 = 8'h86;
- parameter ADDR_DATA_OUT7 = 8'h87;
- parameter ADDR_DATA_OUT8 = 8'h88;
- parameter ADDR_DATA_OUT9 = 8'h89;
- parameter ADDR_DATA_OUT10 = 8'h8a;
- parameter ADDR_DATA_OUT11 = 8'h8b;
- parameter ADDR_DATA_OUT12 = 8'h8c;
- parameter ADDR_DATA_OUT13 = 8'h8d;
- parameter ADDR_DATA_OUT14 = 8'h8e;
- parameter ADDR_DATA_OUT15 = 8'h8f;
-
- parameter DEFAULT_CTR_INIT = 64'h0000000000000000;
+ localparam ADDR_NAME0 = 8'h00;
+ localparam ADDR_NAME1 = 8'h01;
+ localparam ADDR_VERSION = 8'h02;
+
+ localparam ADDR_CTRL = 8'h08;
+ localparam CTRL_INIT_BIT = 0;
+ localparam CTRL_NEXT_BIT = 1;
+
+ localparam ADDR_STATUS = 8'h09;
+ localparam STATUS_READY_BIT = 0;
+
+ localparam ADDR_KEYLEN = 8'h0a;
+ localparam KEYLEN_BIT = 0;
+ localparam ADDR_ROUNDS = 8'h0b;
+ localparam ROUNDS_HIGH_BIT = 4;
+ localparam ROUNDS_LOW_BIT = 0;
+
+ localparam ADDR_KEY0 = 8'h10;
+ localparam ADDR_KEY1 = 8'h11;
+ localparam ADDR_KEY2 = 8'h12;
+ localparam ADDR_KEY3 = 8'h13;
+ localparam ADDR_KEY4 = 8'h14;
+ localparam ADDR_KEY5 = 8'h15;
+ localparam ADDR_KEY6 = 8'h16;
+ localparam ADDR_KEY7 = 8'h17;
+
+ localparam ADDR_IV0 = 8'h20;
+ localparam ADDR_IV1 = 8'h21;
+
+ localparam ADDR_DATA_IN0 = 8'h40;
+ localparam ADDR_DATA_IN1 = 8'h41;
+ localparam ADDR_DATA_IN2 = 8'h42;
+ localparam ADDR_DATA_IN3 = 8'h43;
+ localparam ADDR_DATA_IN4 = 8'h44;
+ localparam ADDR_DATA_IN5 = 8'h45;
+ localparam ADDR_DATA_IN6 = 8'h46;
+ localparam ADDR_DATA_IN7 = 8'h47;
+ localparam ADDR_DATA_IN8 = 8'h48;
+ localparam ADDR_DATA_IN9 = 8'h49;
+ localparam ADDR_DATA_IN10 = 8'h4a;
+ localparam ADDR_DATA_IN11 = 8'h4b;
+ localparam ADDR_DATA_IN12 = 8'h4c;
+ localparam ADDR_DATA_IN13 = 8'h4d;
+ localparam ADDR_DATA_IN14 = 8'h4e;
+ localparam ADDR_DATA_IN15 = 8'h4f;
+
+ localparam ADDR_DATA_OUT0 = 8'h80;
+ localparam ADDR_DATA_OUT1 = 8'h81;
+ localparam ADDR_DATA_OUT2 = 8'h82;
+ localparam ADDR_DATA_OUT3 = 8'h83;
+ localparam ADDR_DATA_OUT4 = 8'h84;
+ localparam ADDR_DATA_OUT5 = 8'h85;
+ localparam ADDR_DATA_OUT6 = 8'h86;
+ localparam ADDR_DATA_OUT7 = 8'h87;
+ localparam ADDR_DATA_OUT8 = 8'h88;
+ localparam ADDR_DATA_OUT9 = 8'h89;
+ localparam ADDR_DATA_OUT10 = 8'h8a;
+ localparam ADDR_DATA_OUT11 = 8'h8b;
+ localparam ADDR_DATA_OUT12 = 8'h8c;
+ localparam ADDR_DATA_OUT13 = 8'h8d;
+ localparam ADDR_DATA_OUT14 = 8'h8e;
+ localparam ADDR_DATA_OUT15 = 8'h8f;
+
+ localparam DEFAULT_CTR_INIT = 64'h0000000000000000;
+
+ localparam CORE_NAME0 = 32'h63686163; // "chac"
+ localparam CORE_NAME1 = 32'h68612020; // "ha "
+ localparam CORE_VERSION = 32'h302e3830; // "0.80"
//----------------------------------------------------------------
diff --git a/src/tb/tb_chacha.v b/src/tb/tb_chacha.v
index 4322334..ac2d3b0 100644
--- a/src/tb/tb_chacha.v
+++ b/src/tb/tb_chacha.v
@@ -46,99 +46,103 @@ module tb_chacha();
//----------------------------------------------------------------
// Internal constant and parameter definitions.
//----------------------------------------------------------------
- parameter DEBUG = 0;
-
- parameter CLK_HALF_PERIOD = 2;
-
- parameter TC1 = 1;
- parameter TC2 = 2;
- parameter TC3 = 3;
- parameter TC4 = 4;
- parameter TC5 = 5;
- parameter TC6 = 6;
- parameter TC7 = 7;
- parameter TC8 = 8;
- parameter TC9 = 9;
- parameter TC10 = 10;
-
- parameter ONE = 1;
- parameter TWO = 2;
- parameter THREE = 3;
- parameter FOUR = 4;
- parameter FIVE = 5;
- parameter SIX = 6;
- parameter SEVEN = 7;
- parameter EIGHT = 8;
-
- parameter KEY_128_BITS = 0;
- parameter KEY_256_BITS = 1;
-
- parameter EIGHT_ROUNDS = 8;
- parameter TWELWE_ROUNDS = 12;
- parameter TWENTY_ROUNDS = 20;
-
- parameter DISABLE = 0;
- parameter ENABLE = 1;
+ localparam DEBUG = 0;
+
+ localparam CLK_HALF_PERIOD = 2;
+
+ localparam TC1 = 1;
+ localparam TC2 = 2;
+ localparam TC3 = 3;
+ localparam TC4 = 4;
+ localparam TC5 = 5;
+ localparam TC6 = 6;
+ localparam TC7 = 7;
+ localparam TC8 = 8;
+ localparam TC9 = 9;
+ localparam TC10 = 10;
+
+ localparam ONE = 1;
+ localparam TWO = 2;
+ localparam THREE = 3;
+ localparam FOUR = 4;
+ localparam FIVE = 5;
+ localparam SIX = 6;
+ localparam SEVEN = 7;
+ localparam EIGHT = 8;
+
+ localparam KEY_128_BITS = 0;
+ localparam KEY_256_BITS = 1;
+
+ localparam EIGHT_ROUNDS = 8;
+ localparam TWELWE_ROUNDS = 12;
+ localparam TWENTY_ROUNDS = 20;
+
+ localparam DISABLE = 0;
+ localparam ENABLE = 1;
// API for the dut.
- parameter ADDR_CTRL = 8'h00;
- parameter CTRL_INIT_BIT = 0;
- parameter CTRL_NEXT_BIT = 1;
-
- parameter ADDR_STATUS = 8'h01;
- parameter STATUS_READY_BIT = 0;
-
- parameter ADDR_KEYLEN = 8'h08;
- parameter KEYLEN_BIT = 0;
- parameter ADDR_ROUNDS = 8'h09;
- parameter ROUNDS_HIGH_BIT = 4;
- parameter ROUNDS_LOW_BIT = 0;
-
- parameter ADDR_KEY0 = 8'h10;
- parameter ADDR_KEY1 = 8'h11;
- parameter ADDR_KEY2 = 8'h12;
- parameter ADDR_KEY3 = 8'h13;
- parameter ADDR_KEY4 = 8'h14;
- parameter ADDR_KEY5 = 8'h15;
- parameter ADDR_KEY6 = 8'h16;
- parameter ADDR_KEY7 = 8'h17;
-
- parameter ADDR_IV0 = 8'h20;
- parameter ADDR_IV1 = 8'h21;
-
- parameter ADDR_DATA_IN0 = 8'h40;
- parameter ADDR_DATA_IN1 = 8'h41;
- parameter ADDR_DATA_IN2 = 8'h42;
- parameter ADDR_DATA_IN3 = 8'h43;
- parameter ADDR_DATA_IN4 = 8'h44;
- parameter ADDR_DATA_IN5 = 8'h45;
- parameter ADDR_DATA_IN6 = 8'h46;
- parameter ADDR_DATA_IN7 = 8'h47;
- parameter ADDR_DATA_IN8 = 8'h48;
- parameter ADDR_DATA_IN9 = 8'h49;
- parameter ADDR_DATA_IN10 = 8'h4a;
- parameter ADDR_DATA_IN11 = 8'h4b;
- parameter ADDR_DATA_IN12 = 8'h4c;
- parameter ADDR_DATA_IN13 = 8'h4d;
- parameter ADDR_DATA_IN14 = 8'h4e;
- parameter ADDR_DATA_IN15 = 8'h4f;
-
- parameter ADDR_DATA_OUT0 = 8'h80;
- parameter ADDR_DATA_OUT1 = 8'h81;
- parameter ADDR_DATA_OUT2 = 8'h82;
- parameter ADDR_DATA_OUT3 = 8'h83;
- parameter ADDR_DATA_OUT4 = 8'h84;
- parameter ADDR_DATA_OUT5 = 8'h85;
- parameter ADDR_DATA_OUT6 = 8'h86;
- parameter ADDR_DATA_OUT7 = 8'h87;
- parameter ADDR_DATA_OUT8 = 8'h88;
- parameter ADDR_DATA_OUT9 = 8'h89;
- parameter ADDR_DATA_OUT10 = 8'h8a;
- parameter ADDR_DATA_OUT11 = 8'h8b;
- parameter ADDR_DATA_OUT12 = 8'h8c;
- parameter ADDR_DATA_OUT13 = 8'h8d;
- parameter ADDR_DATA_OUT14 = 8'h8e;
- parameter ADDR_DATA_OUT15 = 8'h8f;
+ localparam ADDR_NAME0 = 8'h00;
+ localparam ADDR_NAME1 = 8'h01;
+ localparam ADDR_VERSION = 8'h02;
+
+ localparam ADDR_CTRL = 8'h08;
+ localparam CTRL_INIT_BIT = 0;
+ localparam CTRL_NEXT_BIT = 1;
+
+ localparam ADDR_STATUS = 8'h09;
+ localparam STATUS_READY_BIT = 0;
+
+ localparam ADDR_KEYLEN = 8'h0a;
+ localparam KEYLEN_BIT = 0;
+ localparam ADDR_ROUNDS = 8'h0b;
+ localparam ROUNDS_HIGH_BIT = 4;
+ localparam ROUNDS_LOW_BIT = 0;
+
+ localparam ADDR_KEY0 = 8'h10;
+ localparam ADDR_KEY1 = 8'h11;
+ localparam ADDR_KEY2 = 8'h12;
+ localparam ADDR_KEY3 = 8'h13;
+ localparam ADDR_KEY4 = 8'h14;
+ localparam ADDR_KEY5 = 8'h15;
+ localparam ADDR_KEY6 = 8'h16;
+ localparam ADDR_KEY7 = 8'h17;
+
+ localparam ADDR_IV0 = 8'h20;
+ localparam ADDR_IV1 = 8'h21;
+
+ localparam ADDR_DATA_IN0 = 8'h40;
+ localparam ADDR_DATA_IN1 = 8'h41;
+ localparam ADDR_DATA_IN2 = 8'h42;
+ localparam ADDR_DATA_IN3 = 8'h43;
+ localparam ADDR_DATA_IN4 = 8'h44;
+ localparam ADDR_DATA_IN5 = 8'h45;
+ localparam ADDR_DATA_IN6 = 8'h46;
+ localparam ADDR_DATA_IN7 = 8'h47;
+ localparam ADDR_DATA_IN8 = 8'h48;
+ localparam ADDR_DATA_IN9 = 8'h49;
+ localparam ADDR_DATA_IN10 = 8'h4a;
+ localparam ADDR_DATA_IN11 = 8'h4b;
+ localparam ADDR_DATA_IN12 = 8'h4c;
+ localparam ADDR_DATA_IN13 = 8'h4d;
+ localparam ADDR_DATA_IN14 = 8'h4e;
+ localparam ADDR_DATA_IN15 = 8'h4f;
+
+ localparam ADDR_DATA_OUT0 = 8'h80;
+ localparam ADDR_DATA_OUT1 = 8'h81;
+ localparam ADDR_DATA_OUT2 = 8'h82;
+ localparam ADDR_DATA_OUT3 = 8'h83;
+ localparam ADDR_DATA_OUT4 = 8'h84;
+ localparam ADDR_DATA_OUT5 = 8'h85;
+ localparam ADDR_DATA_OUT6 = 8'h86;
+ localparam ADDR_DATA_OUT7 = 8'h87;
+ localparam ADDR_DATA_OUT8 = 8'h88;
+ localparam ADDR_DATA_OUT9 = 8'h89;
+ localparam ADDR_DATA_OUT10 = 8'h8a;
+ localparam ADDR_DATA_OUT11 = 8'h8b;
+ localparam ADDR_DATA_OUT12 = 8'h8c;
+ localparam ADDR_DATA_OUT13 = 8'h8d;
+ localparam ADDR_DATA_OUT14 = 8'h8e;
+ localparam ADDR_DATA_OUT15 = 8'h8f;
//----------------------------------------------------------------
@@ -461,7 +465,7 @@ module tb_chacha();
//----------------------------------------------------------------
- // write_parameters()
+ // write_localparams()
//
// Write key, iv and other parameters to the dut.
//----------------------------------------------------------------