diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rtl/chacha.v | 128 | ||||
-rw-r--r-- | src/tb/tb_chacha.v | 188 |
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. //---------------------------------------------------------------- |