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] - Rev 2

Compare with Previous | Blame | View Log

/**
 * Module aes128_ecb_fpga_wrap contains:
 *    - clkgen - IP Xilinx Clocking Wizard which creates system clock 100MHz from input 200 MHz clock
 *    - enc - aes-128-ecb encoder
 *    - uartlite - IP Xilinx UARTLITE operates on 100MHz system clock and 38400 UART Baud Rate
 *    - sys_mngr - System manager received commands and data via uart from external CPU and transmits ciphered data
 *
 *  Copyright 2020 by Vyacheslav Gulyaev <v.gulyaev181@gmail.com>
 *
 *  Licensed under GNU General Public License 3.0 or later. 
 *  Some rights reserved. See COPYING, AUTHORS.
 *
 * @license GPL-3.0+ <http://spdx.org/licenses/GPL-3.0+>
 */


module aes128_ecb_fpga_wrap(
                        input  CLK_IN_P,
                        input  CLK_IN_N,
                        input  rst_i,

                        output uart_tx,
                        input  uart_rx,
                        
                        output rst_o,
                        output clk_o,

                        output startup_pause_complete,
                        output key_set_complete_o
                        
                   );

    wire          sys_clk;
    wire          clk_locked;
    wire          rstn;
    
    wire [127:0]  plain_text_data;
    wire          plain_text_data_valid;
    wire [127:0]  key;
    
    wire [127:0]  cipher_data;
    wire          cipher_data_valid;
    
    wire          interrupt;
    
    logic [1:0]   clk_div;
    
    axi_interface axi_if();
    
    clk_gen clkgen
        (// Clock in ports
            .clk_in1_p        ( CLK_IN_P   ),    // IN
            .clk_in1_n        ( CLK_IN_N   ),    // IN
    
            // Clock out ports
            .clk_out1         ( sys_clk    ),     // OUT
    
            // Status and control signals
            .reset            ( rst_i      ),     // IN
            .locked           ( clk_locked )
        );

    assign rstn = ~rst_i & clk_locked;
    
    aes128_enc enc(
                    .clk_i    ( sys_clk               ),
                    .rstn_i   ( rstn                  ),
        
                    .data_i   ( plain_text_data       ),
                    .key_i    ( key                   ),
                    .valid_i  ( plain_text_data_valid ),
        
                    .data_o   ( cipher_data           ),
                    .valid_o  ( cipher_data_valid     )
        );
    
                           
    axi_uartlite_module uartlite (
                                     .s_axi_aclk       ( sys_clk        ),  // input wire s_axi_aclk
                                     .s_axi_aresetn    ( rstn           ),  // input wire s_axi_aresetn
                                     .interrupt        ( interrupt      ),  // output wire interrupt

                                     .s_axi_awaddr     ( axi_if.awaddr  ),  // input wire [3 : 0] s_axi_awaddr
                                     .s_axi_awvalid    ( axi_if.awvalid ),  // input wire s_axi_awvalid
                                     .s_axi_awready    ( axi_if.awready ),  // output wire s_axi_awready

                                     .s_axi_wdata      ( axi_if.wdata   ),  // input wire [31 : 0] s_axi_wdata
                                     .s_axi_wstrb      ( axi_if.wstrb   ),  // input wire [3 : 0] s_axi_wstrb
                                     .s_axi_wvalid     ( axi_if.wvalid  ),  // input wire s_axi_wvalid
                                     .s_axi_wready     ( axi_if.wready  ),  // output wire s_axi_wready

                                     .s_axi_bresp      ( axi_if.bresp   ),  // output wire [1 : 0] s_axi_bresp
                                     .s_axi_bvalid     ( axi_if.bvalid  ),  // output wire s_axi_bvalid
                                     .s_axi_bready     ( axi_if.bready  ),  // input wire s_axi_bready

                                     .s_axi_araddr     ( axi_if.araddr  ),  // input wire [3 : 0] s_axi_araddr
                                     .s_axi_arvalid    ( axi_if.arvalid ),  // input wire s_axi_arvalid
                                     .s_axi_arready    ( axi_if.arready ),  // output wire s_axi_arready

                                     .s_axi_rdata      ( axi_if.rdata   ),  // output wire [31 : 0] s_axi_rdata
                                     .s_axi_rresp      ( axi_if.rresp   ),  // output wire [1 : 0] s_axi_rresp
                                     .s_axi_rvalid     ( axi_if.rvalid  ),  // output wire s_axi_rvalid
                                     .s_axi_rready     ( axi_if.rready  ),  // input wire s_axi_rready

                                     .rx               ( uart_rx        ),  // input wire rx
                                     .tx               ( uart_tx        )   // output wire tx
                                   );
    
    
    system_manager sys_mngr(
                                .clk_i                        ( sys_clk               ),
                                .rstn_i                       ( rstn                  ),
                            
                                .plain_text_data_o            ( plain_text_data       ),
                                .plain_text_data_valid_o      ( plain_text_data_valid ),
                                .key_o                        ( key                   ),
                                
                                .startup_pause_complete       ( startup_pause_complete ),
                                .key_set_complete_o           ( key_set_complete_o    ),
                            
                                .cipher_data_i                ( cipher_data           ),
                                .cipher_data_valid_i          ( cipher_data_valid     ),
                                            
                                .interrupt_i                  ( interrupt             ),
                                
                                .m_axi                        ( axi_if                )
                            );
    
    assign rst_o = ~rstn;
    assign clk_o = clk_div[1];
    always @(posedge sys_clk or negedge rstn) begin
        if (~rstn) begin
            clk_div <= 2'b00;
        end else begin
            clk_div <= clk_div + 1;
        end
    end

endmodule

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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