From 71ca3266826c281089f44fffaa561c7f28760aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Stro=CC=88mbergson?= Date: Thu, 27 Aug 2015 13:10:23 +0200 Subject: Added process to generate need seeds with differentg patterns and communicate with the DUT using the seed update protocol. Minor nits. --- src/tb/tb_csprng.v | 60 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/tb/tb_csprng.v b/src/tb/tb_csprng.v index 5cfb398..4e2efec 100644 --- a/src/tb/tb_csprng.v +++ b/src/tb/tb_csprng.v @@ -50,7 +50,7 @@ module tb_csprng(); //---------------------------------------------------------------- // Internal constant and parameter definitions. //---------------------------------------------------------------- - parameter DEBUG = 1; + parameter DEBUG = 1; parameter CLK_HALF_PERIOD = 1; parameter CLK_PERIOD = 2 * CLK_HALF_PERIOD; @@ -109,6 +109,7 @@ module tb_csprng(); reg tb_debug_update; reg [31 : 0] read_data; + reg [7 : 0] pbyte; //---------------------------------------------------------------- @@ -127,10 +128,9 @@ module tb_csprng(); .discard(tb_discard), .test_mode(tb_test_mode), - - .more_seed(tb_more_seed), .security_error(tb_security_error), + .more_seed(tb_more_seed), .seed_data(tb_seed_data), .seed_syn(tb_seed_syn), .seed_ack(tb_seed_ack), @@ -326,13 +326,36 @@ module tb_csprng(); tb_test_mode = 0; tb_seed_syn = 0; - tb_seed_data = {16{32'h00000000}}; + tb_seed_data = {8{64'h0000000000000000}}; tb_rnd_ack = 0; tb_debug_update = 0; + + pbyte = 8'h00; end endtask // init_sim + //---------------------------------------------------------------- + // seed_generator + // + // When a seed_syn is observed this process will provide a new + // seed to the DUT, assert SYN, wait for ACK and then update + // the seed pattern state. + //---------------------------------------------------------------- + always @ (posedge tb_more_seed) + begin : seed_generator + #(CLK_PERIOD); + tb_seed_data = {64{pbyte}}; + tb_seed_syn = 1'b1; + + while (!tb_seed_ack) + #(CLK_PERIOD); + + tb_seed_syn = 1'b0; + pbyte = pbyte + 8'h01; + end + + //---------------------------------------------------------------- // tc1_init_csprng() // @@ -381,9 +404,9 @@ module tb_csprng(); write_word(ADDR_NUM_BLOCKS_LOW, 32'h00000001); // Start pulling data. - tb_cs = 1'b1; - tb_we = 1'b0; - tb_address = ADDR_RND_DATA; + tb_cs = 1'b1; + tb_we = 1'b0; + tb_address = ADDR_RND_DATA; #(200 * CLK_PERIOD); @@ -392,6 +415,28 @@ module tb_csprng(); endtask // tc2_reseed_csprng + //---------------------------------------------------------------- + //---------------------------------------------------------------- + task test_gen_data(); + integer i; + begin + pbyte = 8'h00; + i = 0; + + $display("Generating seed patterns.\n"); + + while (i < 256) + begin + tb_seed_data = {64{pbyte}}; + $display("seed %03d: 0x%064x", i, tb_seed_data); + #(CLK_PERIOD); + i = i + 1; + pbyte = pbyte + 8'h01; + end + end + endtask // test_gen_data + + //---------------------------------------------------------------- // csprng_test // @@ -409,6 +454,7 @@ module tb_csprng(); reset_dut(); dump_dut_state(); + test_gen_data(); tc1_init_csprng(); tc2_reseed_csprng(); -- cgit v1.2.3