aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoachim StroĢˆmbergson <joachim@secworks.se>2015-04-30 13:03:52 +0200
committerJoachim StroĢˆmbergson <joachim@secworks.se>2015-04-30 13:03:52 +0200
commit549b75a635817ce263c368c9b8b5b0b07f90ec21 (patch)
treed7566e34a911b2e386d9942c4080050bc898ed18 /src
parent5786690490aa94f76309f6b101883c13fdc96896 (diff)
(1) Added api addresses and constants for core name and version. (2) Changed addresses for control, status and config to match the ct standard. (3) Updated the testbench to use the changed addresses.
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.
//----------------------------------------------------------------