OpenCores
URL https://opencores.org/ocsvn/xtea/xtea/trunk

Subversion Repositories xtea

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 2 to Rev 3
    Reverse comparison

Rev 2 → Rev 3

/trunk/testbench.v
0,0 → 1,265
module cipher_testbench (clock, reset, all_done_encipher, all_done_decipher, data_out_encipher1, data_out_encipher2, data_out_decipher1, data_out_decipher2, data_in_encipher1, data_in_encipher2, data_in_decipher1, data_in_decipher2, key_out, result, reset_out);
 
input clock, reset, all_done_encipher, all_done_decipher;
input[31:0] data_in_encipher1, data_in_encipher2, data_in_decipher1, data_in_decipher2;
output result, reset_out;
output[31:0] data_out_encipher1, data_out_encipher2, data_out_decipher1, data_out_decipher2;
output[127:0] key_out;
 
reg result, reset_out, test_ciphertext, test_plaintext;
reg[7:0] state;
reg[31:0] data_out_encipher1, data_out_encipher2, data_out_decipher1, data_out_decipher2, tempdata1, tempdata2;
reg[127:0] key_out;
 
parameter s0 = 0, s1 = 1, s2 = 2, s3 = 3, s4 = 4, s5 = 5, s6 = 6, s7 = 7, s8 = 8, s9 = 9,
s10 = 10, s11 = 11, s12 = 12, s13 = 13, s14 = 14, s15 = 15, s16 = 16, s17 = 17, s18 = 18, s19 = 19,
s20 = 20, s21 = 21, s22 = 22, s23 = 23, s24 = 24, s25 = 25, s26 = 26, s27 = 27, s28 = 28, s29 = 29,
s30 = 30, s31 = 31, s32 = 32, s33 = 33, s34 = 34, s35 = 35, s36 = 36, s37 = 37, s38 = 38, s39 = 39,
s40 = 40, s41 = 41, s42 = 42, s43 = 43, s44 = 44, s45 = 45, s46 = 46, s47 = 47, s48 = 48, s49 = 49;
 
always @(posedge clock or posedge reset)
begin
if (reset)
state = s0;
else
begin
case (state)
s0: state = s1;
s1: state = s2;
s2: state = all_done_encipher ? s3 : s2;
s3: state = s4;
s4: state = s5;
s5: state = all_done_decipher ? s6 : s5;
s6: state = s7;
s7: state = s8;
s8: state = s9;
s9: state = all_done_encipher ? s10 : s9;
s10: state = s11;
s11: state = s12;
s12: state = all_done_decipher ? s13 : s12;
s13: state = s14;
s14: state = s15;
s15: state = s16;
s16: state = all_done_encipher ? s17 : s16;
s17: state = s18;
s18: state = s19;
s19: state = all_done_decipher ? s20 : s19;
s20: state = s21;
s21: state = s22;
s22: state = s23;
s23: state = all_done_encipher ? s24 : s23;
s24: state = s25;
s25: state = s26;
s26: state = all_done_decipher ? s27 : s26;
s27: state = s28;
s28: state = s29;
s29: state = s30;
s30: state = all_done_encipher ? s31 : s30;
s31: state = s32;
s32: state = s33;
s33: state = all_done_decipher ? s34 : s33;
s34: state = s35;
s35: state = s36;
s36: state = s37;
s37: state = all_done_encipher ? s38 : s37;
s38: state = s39;
s39: state = s40;
s40: state = all_done_decipher ? s41 : s40;
s41: state = s42;
s42: state = s43;
s43: state = s44;
s44: state = all_done_encipher ? s45 : s44;
s45: state = s46;
s46: state = s47;
s47: state = all_done_decipher ? s48 : s47;
s48: state = s49;
s49: state = s49;
default: state = 1'bz;
endcase
end
end
 
always @(posedge clock or posedge reset)
begin
if (reset)
begin
result = 1'b0;
reset_out = 1'b0;
test_ciphertext = 1'b0;
test_plaintext = 1'b0;
data_out_encipher1 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
data_out_encipher2 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
data_out_decipher1 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
data_out_decipher2 = 32'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
key_out = 128'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
end
else begin
case (state)
//Test 1
s1: begin
reset_out = 1'b1;
data_out_encipher1 = 32'h00000000;
data_out_encipher2 = 32'h00000000;
key_out = 128'h00000000000000000000000000000000;
end
s2: reset_out = 1'b0;
s3: begin
test_ciphertext = ((data_in_encipher1 == 32'hdee9d4d8) && (data_in_encipher2 == 32'hf7131ed9));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s4: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s5: reset_out = 1'b0;
s6: test_plaintext = ((data_in_decipher1 == 32'h00000000) && (data_in_decipher2 == 32'h00000000));
s7: result = (test_ciphertext && test_plaintext);
//Test 2
s8: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'h00000000;
data_out_encipher2 = 32'h00000000;
key_out = 128'h11111111222222223333333344444444;
end
s9: reset_out = 1'b0;
s10: begin
test_ciphertext = ((data_in_encipher1 == 32'hf07ac290) && (data_in_encipher2 == 32'h23c92672));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s11: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s12: reset_out = 1'b0;
s13: test_plaintext = ((data_in_decipher1 == 32'h00000000) && (data_in_decipher2 == 32'h00000000));
s14: result = (test_ciphertext && test_plaintext);
//Test 3
s15: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'h12345678;
data_out_encipher2 = 32'h9abcdeff;
key_out = 128'h6a1d78c88c86d67f2a65bfbeb4bd6e46;
end
s16: reset_out = 1'b0;
s17: begin
test_ciphertext = ((data_in_encipher1 == 32'h99bbb92b) && (data_in_encipher2 == 32'h3ebd1644));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s18: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s19: reset_out = 1'b0;
s20: test_plaintext = ((data_in_decipher1 == 32'h12345678) && (data_in_decipher2 == 32'h9abcdeff));
s21: result = (test_ciphertext && test_plaintext);
//Test 4
s22: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'h00000001;
data_out_encipher2 = 32'h00000001;
key_out = 128'h62ee209f69b7afce376a8936cdc9e923;
end
s23: reset_out = 1'b0;
s24: begin
test_ciphertext = ((data_in_encipher1 == 32'he57220dd) && (data_in_encipher2 == 32'h2622745b));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s25: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s26: reset_out = 1'b0;
s27: test_plaintext = ((data_in_decipher1 == 32'h00000001) && (data_in_decipher2 == 32'h00000001));
s28: result = (test_ciphertext && test_plaintext);
//Test 5
s29: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'h77777777;
data_out_encipher2 = 32'h98765432;
key_out = 128'hbc3a7de2845846cf2794a1276b8ea8b8;
end
s30: reset_out = 1'b0;
s31: begin
test_ciphertext = ((data_in_encipher1 == 32'hda6b0b0a) && (data_in_encipher2 == 32'ha15e9758));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s32: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s33: reset_out = 1'b0;
s34: test_plaintext = ((data_in_decipher1 == 32'h77777777) && (data_in_decipher2 == 32'h98765432));
s35: result = (test_ciphertext && test_plaintext);
//Test 6
s36: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'hffffffff;
data_out_encipher2 = 32'hffffffff;
key_out = 128'h6a1d78c88c86d6712a65bfbeb4bd6e46;
end
s37: reset_out = 1'b0;
s38: begin
test_ciphertext = ((data_in_encipher1 == 32'h674e0539) && (data_in_encipher2 == 32'h5ad31ab8));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s39: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s40: reset_out = 1'b0;
s41: test_plaintext = ((data_in_decipher1 == 32'hffffffff) && (data_in_decipher2 == 32'hffffffff));
s42: result = (test_ciphertext && test_plaintext);
//Test 7
s43: begin
result = 1'b0;
reset_out = 1'b1;
data_out_encipher1 = 32'hffffffff;
data_out_encipher2 = 32'hffffffff;
key_out = 128'hffffffffffffffffffffffffffffffff;
end
s44: reset_out = 1'b0;
s45: begin
test_ciphertext = ((data_in_encipher1 == 32'h28fc2891) && (data_in_encipher2 == 32'he623566a));
tempdata1 = data_in_encipher1;
tempdata2 = data_in_encipher2;
end
s46: begin
reset_out = 1'b1;
data_out_decipher1 = tempdata1;
data_out_decipher2 = tempdata2;
end
s47: reset_out = 1'b0;
s48: test_plaintext = ((data_in_decipher1 == 32'hffffffff) && (data_in_decipher2 == 32'hffffffff));
s49: result = (test_ciphertext && test_plaintext);
//End tests
default: begin
reset_out = 1'b1;
data_out_encipher1 = 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
data_out_encipher2 = 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
data_out_decipher1 = 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
data_out_decipher2 = 32'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
key_out = 128'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
result = 1'bz;
end
endcase
end
end
 
endmodule
trunk/testbench.v Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.