OpenCores
URL https://opencores.org/ocsvn/aes-128_pipelined_encryption/aes-128_pipelined_encryption/trunk

Subversion Repositories aes-128_pipelined_encryption

[/] [aes-128_pipelined_encryption/] [trunk/] [sim/] [Top_PipelinedCipher_tb.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Amr_Salah
/*
2
Project        : AES
3
Standard doc.  : FIPS 197
4
Module name    : Top_AES_PipelinedCipher testbench
5
Dependancy     :
6
Design doc.    :
7
References     :
8
Description    :
9
Owner          : Amr Salah
10
*/
11
 
12
`timescale 1 ns/1 ps
13
 
14
module Top_PipelinedCipher_tb();
15
 
16
parameter DATA_W = 128;            //data width
17
parameter KEY_L = 128;             //key length
18
parameter NO_ROUNDS = 10;          //number of rounds
19
parameter Clk2Q = 2;               //Clk-Q delay
20
parameter No_Patterns = 284;       //number of patterns
21
 
22
reg clk;
23
reg reset;
24
reg data_valid_in;
25
reg cipherkey_valid_in;
26
reg [KEY_L-1:0] cipher_key;
27
reg [DATA_W-1:0] plain_text;
28
wire valid_out;
29
wire[DATA_W-1:0]cipher_text;
30
reg dut_error;
31
reg [DATA_W-1:0] data_expected;
32
reg [DATA_W-1:0] data_input_vectors [0:No_Patterns-1] ;
33
reg [DATA_W-1:0] cipherkey_input_vectors [0:No_Patterns-1] ;
34
reg [DATA_W-1:0] output_vectors [0:No_Patterns-1] ;
35
 
36
integer i;
37
 
38
Top_PipelinedCipher  U            //connecting DUT
39
(
40
.clk(clk),
41
.reset(reset),
42
.data_valid_in(data_valid_in),
43
.cipherkey_valid_in(cipherkey_valid_in),
44
.cipher_key(cipher_key),
45
.plain_text(plain_text),
46
.valid_out(valid_out),
47
.cipher_text(cipher_text)
48
);
49
 
50
event terminate_sim;
51
event reset_enable;
52
 
53
initial begin                    //reading input data and cipherkey vectors and expected output vectors        
54
 
55
$readmemh("topcipher_data_test_inputs.txt",data_input_vectors);
56
$readmemh("topcipher_key_test_inputs.txt",cipherkey_input_vectors);
57
$readmemh("topcipher_test_outputs.txt",output_vectors);
58
 
59
end
60
 
61
initial begin
62
    $display ("###################################################");
63
    clk = 0;
64
    reset = 1;
65
    data_valid_in = 0;
66
          cipherkey_valid_in = 0;
67
    dut_error = 0;    //design error counter
68
end
69
 
70
always
71
  #5  clk =  !clk;   //clock generator
72
 
73
`ifndef GATES     //if not gate simulation 
74
initial begin
75
    $dumpfile("Top_PipelinedCipher.vcd");
76
    $dumpvars;
77
end
78
`endif
79
 
80
initial
81
forever @ (terminate_sim)  begin                  //simulation  termination logic
82
 $display ("Terminating simulation");
83
 if (dut_error == 0) begin
84
   $display ("Simulation Result : PASSED");
85
 end
86
 else begin
87
   $display ("Simulation Result : FAILED");
88
 end
89
 $display ("###################################################");
90
 #1 $stop;
91
 
92
end
93
 
94
event reset_done;
95
 
96
initial                       //reset logic
97
forever begin
98
 @ (reset_enable);
99
 @ (negedge clk)
100
 $display ("Applying reset");
101
   reset = 0;
102
   data_expected = 'b0;
103
 @ (negedge clk)
104
   reset = 1;
105
 $display ("Came out of Reset");
106
 -> reset_done;
107
end
108
 
109
initial begin
110
  #10 -> reset_enable;
111
  @ (reset_done);
112
 
113
  for (i=0;i< No_Patterns;i=i+1) begin      //apply inputs
114
  @ (posedge clk)
115
  #Clk2Q
116
  data_valid_in = 1;                       //assert valid signals
117
  cipherkey_valid_in = 1;
118
  plain_text = data_input_vectors[i];
119
  cipher_key = cipherkey_input_vectors[i];
120
  end
121
 
122
  @(posedge clk)
123
  data_valid_in = 0;                      //deassert valid signals
124
  cipherkey_valid_in = 0;
125
 
126
end
127
 
128
integer j;
129
 
130
initial @(reset_done) begin
131
 
132
repeat((4 * NO_ROUNDS)+1) begin          //waiting for first output (latency)
133
@(posedge clk);
134
end
135
 
136
for(j=0;j< No_Patterns;j=j+1) begin     //assign expected outputs
137
@(posedge clk)
138
data_expected = output_vectors[j];
139
end
140
 
141
end
142
 
143
 
144
//compare logic
145
 
146
always @ (posedge clk) begin
147
if (valid_out || (!reset)) begin
148
  if(data_expected != cipher_text) begin
149
  $display ("DUT ERROR AT TIME%d",$time);
150
  $display ("Expected Data value %h, Got Data Value %h", data_expected, cipher_text);
151
  dut_error = 1;
152
   -> terminate_sim;                //stop simulation when error occures
153
  end
154
end
155
if(j == No_Patterns) begin         //terminate  simulation after the end of output vectors
156
   -> terminate_sim;
157
end
158
 end
159
endmodule

powered by: WebSVN 2.1.0

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