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/] [src/] [wrap/] [aes128_ecb_fpga_wrap.sv] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 vv_gulyaev
/**
2
 * Module aes128_ecb_fpga_wrap contains:
3
 *    - clkgen - IP Xilinx Clocking Wizard which creates system clock 100MHz from input 200 MHz clock
4
 *    - enc - aes-128-ecb encoder
5
 *    - uartlite - IP Xilinx UARTLITE operates on 100MHz system clock and 38400 UART Baud Rate
6
 *    - sys_mngr - System manager received commands and data via uart from external CPU and transmits ciphered data
7
 *
8
 *  Copyright 2020 by Vyacheslav Gulyaev 
9
 *
10
 *  Licensed under GNU General Public License 3.0 or later.
11
 *  Some rights reserved. See COPYING, AUTHORS.
12
 *
13
 * @license GPL-3.0+ 
14
 */
15
 
16
 
17
module aes128_ecb_fpga_wrap(
18
                        input  CLK_IN_P,
19
                        input  CLK_IN_N,
20
                        input  rst_i,
21
 
22
                        output uart_tx,
23
                        input  uart_rx,
24
 
25
                        output rst_o,
26
                        output clk_o,
27
 
28
                        output startup_pause_complete,
29
                        output key_set_complete_o
30
 
31
                   );
32
 
33
    wire          sys_clk;
34
    wire          clk_locked;
35
    wire          rstn;
36
 
37
    wire [127:0]  plain_text_data;
38
    wire          plain_text_data_valid;
39
    wire [127:0]  key;
40
 
41
    wire [127:0]  cipher_data;
42
    wire          cipher_data_valid;
43
 
44
    wire          interrupt;
45
 
46
    logic [1:0]   clk_div;
47
 
48
    axi_interface axi_if();
49
 
50
    clk_gen clkgen
51
        (// Clock in ports
52
            .clk_in1_p        ( CLK_IN_P   ),    // IN
53
            .clk_in1_n        ( CLK_IN_N   ),    // IN
54
 
55
            // Clock out ports
56
            .clk_out1         ( sys_clk    ),     // OUT
57
 
58
            // Status and control signals
59
            .reset            ( rst_i      ),     // IN
60
            .locked           ( clk_locked )
61
        );
62
 
63
    assign rstn = ~rst_i & clk_locked;
64
 
65
    aes128_enc enc(
66
                    .clk_i    ( sys_clk               ),
67
                    .rstn_i   ( rstn                  ),
68
 
69
                    .data_i   ( plain_text_data       ),
70
                    .key_i    ( key                   ),
71
                    .valid_i  ( plain_text_data_valid ),
72
 
73
                    .data_o   ( cipher_data           ),
74
                    .valid_o  ( cipher_data_valid     )
75
        );
76
 
77
 
78
    axi_uartlite_module uartlite (
79
                                     .s_axi_aclk       ( sys_clk        ),  // input wire s_axi_aclk
80
                                     .s_axi_aresetn    ( rstn           ),  // input wire s_axi_aresetn
81
                                     .interrupt        ( interrupt      ),  // output wire interrupt
82
 
83
                                     .s_axi_awaddr     ( axi_if.awaddr  ),  // input wire [3 : 0] s_axi_awaddr
84
                                     .s_axi_awvalid    ( axi_if.awvalid ),  // input wire s_axi_awvalid
85
                                     .s_axi_awready    ( axi_if.awready ),  // output wire s_axi_awready
86
 
87
                                     .s_axi_wdata      ( axi_if.wdata   ),  // input wire [31 : 0] s_axi_wdata
88
                                     .s_axi_wstrb      ( axi_if.wstrb   ),  // input wire [3 : 0] s_axi_wstrb
89
                                     .s_axi_wvalid     ( axi_if.wvalid  ),  // input wire s_axi_wvalid
90
                                     .s_axi_wready     ( axi_if.wready  ),  // output wire s_axi_wready
91
 
92
                                     .s_axi_bresp      ( axi_if.bresp   ),  // output wire [1 : 0] s_axi_bresp
93
                                     .s_axi_bvalid     ( axi_if.bvalid  ),  // output wire s_axi_bvalid
94
                                     .s_axi_bready     ( axi_if.bready  ),  // input wire s_axi_bready
95
 
96
                                     .s_axi_araddr     ( axi_if.araddr  ),  // input wire [3 : 0] s_axi_araddr
97
                                     .s_axi_arvalid    ( axi_if.arvalid ),  // input wire s_axi_arvalid
98
                                     .s_axi_arready    ( axi_if.arready ),  // output wire s_axi_arready
99
 
100
                                     .s_axi_rdata      ( axi_if.rdata   ),  // output wire [31 : 0] s_axi_rdata
101
                                     .s_axi_rresp      ( axi_if.rresp   ),  // output wire [1 : 0] s_axi_rresp
102
                                     .s_axi_rvalid     ( axi_if.rvalid  ),  // output wire s_axi_rvalid
103
                                     .s_axi_rready     ( axi_if.rready  ),  // input wire s_axi_rready
104
 
105
                                     .rx               ( uart_rx        ),  // input wire rx
106
                                     .tx               ( uart_tx        )   // output wire tx
107
                                   );
108
 
109
 
110
    system_manager sys_mngr(
111
                                .clk_i                        ( sys_clk               ),
112
                                .rstn_i                       ( rstn                  ),
113
 
114
                                .plain_text_data_o            ( plain_text_data       ),
115
                                .plain_text_data_valid_o      ( plain_text_data_valid ),
116
                                .key_o                        ( key                   ),
117
 
118
                                .startup_pause_complete       ( startup_pause_complete ),
119
                                .key_set_complete_o           ( key_set_complete_o    ),
120
 
121
                                .cipher_data_i                ( cipher_data           ),
122
                                .cipher_data_valid_i          ( cipher_data_valid     ),
123
 
124
                                .interrupt_i                  ( interrupt             ),
125
 
126
                                .m_axi                        ( axi_if                )
127
                            );
128
 
129
    assign rst_o = ~rstn;
130
    assign clk_o = clk_div[1];
131
    always @(posedge sys_clk or negedge rstn) begin
132
        if (~rstn) begin
133
            clk_div <= 2'b00;
134
        end else begin
135
            clk_div <= clk_div + 1;
136
        end
137
    end
138
 
139
endmodule

powered by: WebSVN 2.1.0

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