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

Subversion Repositories aes-128-ecb-encoder

[/] [aes-128-ecb-encoder/] [trunk/] [tb/] [tb.sv] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 vv_gulyaev
/**
2
 * Testbench for standalone simulation of AES-128-ECB encoder
3
 *
4
 *  Copyright 2020 by Vyacheslav Gulyaev 
5
 *
6
 *  Licensed under GNU General Public License 3.0 or later.
7
 *  Some rights reserved. See COPYING, AUTHORS.
8
 *
9
 * @license GPL-3.0+ 
10
 */
11
module tb ();
12
 
13
    logic clk = 1'b0;
14
    logic rstn = 1'b0;
15
 
16
    logic [127:0] plainTextData = 128'h0;
17
    logic         plainTextData_valid = 1'b0;
18
    logic [127:0] key = 128'h0;
19
 
20
    logic [127:0] cipherData;
21
    logic         cipherData_valid;
22
 
23
 
24
    initial begin
25
        rstn = 1'b0;
26
        #(1us) rstn = 1'b1;
27
        run_test;
28
        $stop;
29
    end
30
 
31
    always #(4167ps) clk = ~clk;
32
 
33
 
34
 
35
 
36
    aes128_enc dut(
37
                        .clk_i        ( clk                   ),
38
                        .rstn_i       ( rstn                  ),
39
 
40
                        .data_i       ( plainTextData         ),
41
                        .key_i        ( key                   ),
42
                        .valid_i      ( plainTextData_valid   ),
43
 
44
 
45
                        .data_o       ( cipherData            ),
46
                        .valid_o      ( cipherData_valid      )
47
 
48
                    );
49
 
50
 
51
    task run_test;
52
        int fd, fdo;
53
        logic [7:0] buff;
54
        static integer byte_cnt = 0;
55
        static logic [127:0] pt_data = 128'h0;
56
        static logic [127:0] ciph_data = 128'h0;
57
        static logic [127:0] k = 128'h00112233445566778899aabbccddeeff;
58
 
59
        fd = $fopen(`PLAIN_TEXT_PATH, "r");
60
        if (!fd) $error("Failed to open file %s", `PLAIN_TEXT_PATH);
61
        else   $display("Successfully opened file %s", `PLAIN_TEXT_PATH);
62
 
63
        fdo = $fopen(`OUTPUT_ENCR_TEXT_PATH, "wb");
64
        if (!fdo) $error("Failed to create and open file %s", `OUTPUT_ENCR_TEXT_PATH);
65
        else   $display("Successfully created and opened file %s", `OUTPUT_ENCR_TEXT_PATH);
66
 
67
        repeat (10) @(posedge clk);
68
        while (!$feof(fd)) begin
69
            buff = $fgetc(fd);
70
            if (buff==8'hff) continue;
71
            pt_data[127:0] = {pt_data[120:0], buff};
72
            if (byte_cnt==15) begin
73
                send_data(k, pt_data, ciph_data);
74
                save_data_to_file(fdo, ciph_data);
75
                pt_data = 128'h0;
76
                byte_cnt = 0;
77
            end else begin
78
                byte_cnt++;
79
            end
80
        end
81
 
82
        while (byte_cnt<16) begin
83
            pt_data[127:0] = {pt_data[120:0], 8'h0};
84
            byte_cnt++;
85
        end
86
        send_data(k, pt_data, ciph_data);
87
        save_data_to_file(fdo, ciph_data);
88
 
89
        $fclose(fd);
90
        $fclose(fdo);
91
 
92
        check_data();
93
 
94
        #100ns;
95
    endtask
96
 
97
    task save_data_to_file(int fd, logic [127:0] data);
98
        for (int i=0; i<16; i++) begin
99
            $fwrite(fd, "%c", data[127:120]);
100
            data[127:0] = {data[120:0], 8'h0};
101
        end
102
    endtask
103
 
104
    task check_data();
105
        int fdo, fde;
106
        static int index = 0;
107
        static int err_cnt = 0;
108
 
109
        logic [7:0] buffo;
110
        logic [7:0] buffe;
111
 
112
 
113
        fdo = $fopen(`OUTPUT_ENCR_TEXT_PATH, "r");
114
        if (!fdo) $error("Failed to open file %s", `OUTPUT_ENCR_TEXT_PATH);
115
        else      $display("Successfully opened file %s", `OUTPUT_ENCR_TEXT_PATH);
116
 
117
        fde = $fopen(`EXPECTED_ENCR_TEXT_PATH, "r");
118
        if (!fde) $error("Failed to open file %s", `EXPECTED_ENCR_TEXT_PATH);
119
        else      $display("Successfully opened file %s", `EXPECTED_ENCR_TEXT_PATH);
120
 
121
        while (!$feof(fde)) begin
122
            if ($feof(fdo)) begin
123
                err_cnt++;
124
                $warning("Encoded file is smaller than expected...");
125
                break;
126
            end
127
            buffe = $fgetc(fde);
128
            buffo = $fgetc(fdo);
129
            if (buffe!==buffo) begin
130
                $warning("%03d: Data compare failed!\nExpected: 0x%02H\nEcncoded: 0x%02H", index, buffe, buffo);
131
                err_cnt++;
132
            end
133
            index++;
134
        end
135
 
136
        if (!$feof(fdo)) begin
137
            $warning("Encoded file is bigger than expected...");
138
            err_cnt++;
139
        end
140
 
141
        $fclose(fdo);
142
        $fclose(fde);
143
 
144
        if (err_cnt==0) $display("Encoded and expected data files are completely match!");
145
 
146
    endtask
147
 
148
 
149
 
150
    task send_data(input logic[127:0] key_i, input logic [127:0] data_i, output logic[127:0] data_o);
151
        @(posedge clk)
152
        key = key_i;
153
        plainTextData = data_i;
154
        plainTextData_valid = 1'b1;
155
        $display("[%t]: Plain text data: %016h", $time, plainTextData);
156
        @(posedge clk);
157
        key = 128'h0;
158
        plainTextData = 128'h0;
159
        plainTextData_valid = 1'b0;
160
        wait(cipherData_valid);
161
        $display("[%t]: Ciphered data: %016h\n", $time, cipherData);
162
        data_o = cipherData;
163
    endtask
164
 
165
endmodule

powered by: WebSVN 2.1.0

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