From b1b208d97c5a47c4651ec0c15ba41a0b3db93723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Stro=CC=88mbergson?= Date: Thu, 16 Aug 2018 19:04:03 +0200 Subject: Adding delay cycle to API regs to match the latency for accessing the blockRAM. Added test case that checks access to the API regs. --- src/rtl/keywrap.v | 93 +++++++++++++++++++++++++++++------------------------ src/tb/tb_keywrap.v | 24 ++++++++++++++ 2 files changed, 75 insertions(+), 42 deletions(-) diff --git a/src/rtl/keywrap.v b/src/rtl/keywrap.v index 58d40c0..885578b 100644 --- a/src/rtl/keywrap.v +++ b/src/rtl/keywrap.v @@ -92,7 +92,7 @@ module keywrap( localparam CORE_NAME0 = 32'h6b657920; // "key " localparam CORE_NAME1 = 32'h77726170; // "wrap" - localparam CORE_VERSION = 32'h302e3730; // "0.70" + localparam CORE_VERSION = 32'h302e3731; // "0.71" //---------------------------------------------------------------- @@ -123,6 +123,9 @@ module keywrap( reg [31 : 0] key_reg [0 : 7]; reg key_we; + reg [31 : 0] api_rd_delay_reg; + reg [31 : 0] api_rd_delay_new; + reg valid_reg; reg ready_reg; @@ -198,23 +201,25 @@ module keywrap( for (i = 0 ; i < 8 ; i = i + 1) key_reg[i] <= 32'h0; - init_reg <= 1'h0; - next_reg <= 1'h0; - encdec_reg <= 1'h0; - keylen_reg <= 1'h0; - r_bank_reg <= 7'h0; - rlen_reg <= 13'h0; - valid_reg <= 1'h0; - ready_reg <= 1'h0; - a0_reg <= 32'h0; - a1_reg <= 32'h0; + init_reg <= 1'h0; + next_reg <= 1'h0; + encdec_reg <= 1'h0; + keylen_reg <= 1'h0; + r_bank_reg <= 7'h0; + rlen_reg <= 13'h0; + valid_reg <= 1'h0; + ready_reg <= 1'h0; + a0_reg <= 32'h0; + a1_reg <= 32'h0; + api_rd_delay_reg <= 32'h0; end else begin - ready_reg <= core_ready; - valid_reg <= core_valid; - init_reg <= init_new; - next_reg <= next_new; + ready_reg <= core_ready; + valid_reg <= core_valid; + init_reg <= init_new; + next_reg <= next_new; + api_rd_delay_reg <= api_rd_delay_new; if (config_we) begin @@ -247,17 +252,24 @@ module keywrap( //---------------------------------------------------------------- always @* begin : api - init_new = 1'h0; - next_new = 1'h0; - config_we = 1'h0; - rlen_we = 1'h0; - r_bank_we = 1'h0; - key_we = 1'h0; - core_api_we = 1'h0; - a0_we = 1'h0; - a1_we = 1'h0; - tmp_read_data = 32'h0; - tmp_error = 1'h0; + init_new = 1'h0; + next_new = 1'h0; + config_we = 1'h0; + rlen_we = 1'h0; + r_bank_we = 1'h0; + key_we = 1'h0; + core_api_we = 1'h0; + a0_we = 1'h0; + a1_we = 1'h0; + tmp_read_data = 32'h0; + tmp_error = 1'h0; + api_rd_delay_new = 32'h0; + + // api_mux + if (address[7]) + tmp_read_data = core_api_rd_data; + else + tmp_read_data = api_rd_delay_reg; if (cs) begin @@ -290,41 +302,38 @@ module keywrap( if (address >= ADDR_R_DATA0 && address <= ADDR_R_DATA127) core_api_we = 1'h1; end // if (we) - else begin + // Read access if (address == ADDR_NAME0) - tmp_read_data = CORE_NAME0; + api_rd_delay_new = CORE_NAME0; if (address == ADDR_NAME1) - tmp_read_data = CORE_NAME1; + api_rd_delay_new = CORE_NAME1; if (address == ADDR_VERSION) - tmp_read_data = CORE_VERSION; + api_rd_delay_new = CORE_VERSION; if (address == ADDR_CTRL) - tmp_read_data = {28'h0, keylen_reg, encdec_reg, next_reg, init_reg}; + api_rd_delay_new = {28'h0, keylen_reg, encdec_reg, next_reg, init_reg}; if (address == ADDR_STATUS) - tmp_read_data = {30'h0, valid_reg, ready_reg}; + api_rd_delay_new = {30'h0, valid_reg, ready_reg}; if (address == ADDR_RLEN) - tmp_read_data = {19'h0, rlen_reg}; + api_rd_delay_new = {19'h0, rlen_reg}; if (address == ADDR_R_BANK) - tmp_read_data = {25'h0, r_bank_reg}; + api_rd_delay_new = {25'h0, r_bank_reg}; if (address == ADDR_A0) - tmp_read_data = core_a_result[63 : 32]; + api_rd_delay_new = core_a_result[63 : 32]; if (address == ADDR_A1) - tmp_read_data = core_a_result[31 : 0]; - - if (address >= ADDR_R_DATA0 && address <= ADDR_R_DATA127) - tmp_read_data = core_api_rd_data; - end - end - end // addr_decoder + api_rd_delay_new = core_a_result[31 : 0]; + end // else: !if(we) + end // if (cs) + end // block: api endmodule // keywrap //====================================================================== diff --git a/src/tb/tb_keywrap.v b/src/tb/tb_keywrap.v index c28b5a6..412bdb2 100644 --- a/src/tb/tb_keywrap.v +++ b/src/tb/tb_keywrap.v @@ -358,6 +358,28 @@ module tb_keywrap(); endtask // reset_dut + //---------------------------------------------------------------- + // test_core_access + // Simple test that we can perform read access to regs + // in the core. + //---------------------------------------------------------------- + task test_core_access; + begin : test_core_access + $display("** TC test_core_access START."); + + read_word(ADDR_NAME0); + $display("NAME0: %s", read_data); + read_word(ADDR_NAME1); + $display("NAME1: %s", read_data); + read_word(ADDR_VERSION); + $display("version: %s", read_data); + $display(""); + + $display("** TC test_core_access END."); + end + endtask // test_core_access + + //---------------------------------------------------------------- // test_kwp_ae_128_1 // Implements wrap test based on NIST KWP_AE 128 bit key @@ -949,6 +971,8 @@ module tb_keywrap(); reset_dut(); dump_dut_state(); + test_core_access(); + test_kwp_ae_128_1(); test_kwp_ad_128_1(); test_kwp_ae_128_2(); -- cgit v1.2.3 -top: 1px solid #ccc; background-color: #fff; } .markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-body img { max-width: 100%; -moz-box-sizing: border-box; box-sizing: border-box; } .markdown-body span.frame { display: block; overflow: hidden; } .markdown-body span.frame>span { border: 1px solid #ddd; display: block; float: left; overflow: hidden; margin: 13px 0 0; padding: 7px; width: auto; } .markdown-body span.frame span img { display: block; float: left; } .markdown-body span.frame span span { clear: both; color: #333; display: block; padding: 5px 0 0; } .markdown-body span.align-center { display: block; overflow: hidden; clear: both; } .markdown-body span.align-center>span { display: block; overflow: hidden; margin: 13px auto 0; text-align: center; } .markdown-body span.align-center span img { margin: 0 auto; text-align: center; } .markdown-body span.align-right { display: block; overflow: hidden; clear: both; } .markdown-body span.align-right>span { display: block; overflow: hidden; margin: 13px 0 0; text-align: right; } .markdown-body span.align-right span img { margin: 0; text-align: right; } .markdown-body span.float-left { display: block; margin-right: 13px; overflow: hidden; float: left; } .markdown-body span.float-left span { margin: 13px 0 0; } .markdown-body span.float-right { display: block; margin-left: 13px; overflow: hidden; float: right; } .markdown-body span.float-right>span { display: block; overflow: hidden; margin: 13px auto 0; text-align: right; } .markdown-body code, .markdown-body tt { margin: 0 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; } .markdown-body code { white-space: nowrap; } .markdown-body pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } .markdown-body .highlight pre, .markdown-body pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; border-radius: 3px; } .markdown-body pre code, .markdown-body pre tt { margin: 0; padding: 0; background-color: transparent; border: none; } pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #ffffff; } .highlight .c { color: #888 } /* Comment */ .highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */ .highlight .k { color: #080; font-weight: bold } /* Keyword */ .highlight .ch { color: #888 } /* Comment.Hashbang */ .highlight .cm { color: #888 } /* Comment.Multiline */ .highlight .cp { color: #C00; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888 } /* Comment.Single */ .highlight .cs { color: #C00; font-weight: bold; background-color: #FFF0F0 } /* Comment.Special */ .highlight .gd { color: #000; background-color: #FDD } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #A00 } /* Generic.Error */ .highlight .gh { color: #333 } /* Generic.Heading */ .highlight .gi { color: #000; background-color: #DFD } /* Generic.Inserted */ .highlight .go { color: #888 } /* Generic.Output */ .highlight .gp { color: #555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666 } /* Generic.Subheading */ .highlight .gt { color: #A00 } /* Generic.Traceback */ .highlight .kc { color: #080; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #080; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #080; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #080 } /* Keyword.Pseudo */ .highlight .kr { color: #080; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #00D; font-weight: bold } /* Literal.Number */ .highlight .s { color: #D20; background-color: #FFF0F0 } /* Literal.String */ .highlight .na { color: #369 } /* Name.Attribute */ .highlight .nb { color: #038 } /* Name.Builtin */ .highlight .nc { color: #B06; font-weight: bold } /* Name.Class */ .highlight .no { color: #036; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555 } /* Name.Decorator */ .highlight .ne { color: #B06; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #06B; font-weight: bold } /* Name.Function */ .highlight .nl { color: #369; font-style: italic } /* Name.Label */ .highlight .nn { color: #B06; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #369; font-weight: bold } /* Name.Property */ .highlight .nt { color: #B06; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #369 } /* Name.Variable */ .highlight .ow { color: #080 } /* Operator.Word */ .highlight .w { color: #BBB } /* Text.Whitespace */ .highlight .mb { color: #00D; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #00D; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #00D; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #00D; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #00D; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #D20; background-color: #FFF0F0 } /* Literal.String.Affix */ .highlight .sb { color: #D20; background-color: #FFF0F0 } /* Literal.String.Backtick */ .highlight .sc { color: #D20; background-color: #FFF0F0 } /* Literal.String.Char */ .highlight .dl { color: #D20; background-color: #FFF0F0 } /* Literal.String.Delimiter */ .highlight .sd { color: #D20; background-color: #FFF0F0 } /* Literal.String.Doc */ .highlight .s2 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Double */ .highlight .se { color: #04D; background-color: #FFF0F0 } /* Literal.String.Escape */ .highlight .sh { color: #D20; background-color: #FFF0F0 } /* Literal.String.Heredoc */ .highlight .si { color: #33B; background-color: #FFF0F0 } /* Literal.String.Interpol */ .highlight .sx { color: #2B2; background-color: #F0FFF0 } /* Literal.String.Other */ .highlight .sr { color: #080; background-color: #FFF0FF } /* Literal.String.Regex */ .highlight .s1 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Single */ .highlight .ss { color: #A60; background-color: #FFF0F0 } /* Literal.String.Symbol */ .highlight .bp { color: #038 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #06B; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #369 } /* Name.Variable.Class */ .highlight .vg { color: #D70 } /* Name.Variable.Global */ .highlight .vi { color: #33B } /* Name.Variable.Instance */ .highlight .vm { color: #369 } /* Name.Variable.Magic */ .highlight .il { color: #00D; font-weight: bold } /* Literal.Number.Integer.Long */