//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
////
|
////
|
////
|
////
|
//// AES CORE BLOCK
|
//// AES CORE BLOCK
|
////
|
////
|
////
|
////
|
////
|
////
|
//// This file is part of the APB to AES128 project
|
//// This file is part of the APB to AES128 project
|
////
|
////
|
//// http://www.opencores.org/cores/apbtoaes128/
|
//// http://www.opencores.org/cores/apbtoaes128/
|
////
|
////
|
////
|
////
|
////
|
////
|
//// Description
|
//// Description
|
////
|
////
|
//// Implementation of APB IP core according to
|
//// Implementation of APB IP core according to
|
////
|
////
|
//// aes128_spec IP core specification document.
|
//// aes128_spec IP core specification document.
|
////
|
////
|
////
|
////
|
////
|
////
|
//// To Do: Things are right here but always all block can suffer changes
|
//// To Do: Things are right here but always all block can suffer changes
|
////
|
////
|
////
|
////
|
////
|
////
|
////
|
////
|
////
|
////
|
//// Author(s): - Felipe Fernandes Da Costa, fefe2560@gmail.com
|
//// Author(s): - Felipe Fernandes Da Costa, fefe2560@gmail.com
|
////
|
////
|
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
////
|
////
|
////
|
////
|
//// Copyright (C) 2009 Authors and OPENCORES.ORG
|
//// Copyright (C) 2009 Authors and OPENCORES.ORG
|
////
|
////
|
////
|
////
|
////
|
////
|
//// This source file may be used and distributed without
|
//// This source file may be used and distributed without
|
////
|
////
|
//// restriction provided that this copyright statement is not
|
//// restriction provided that this copyright statement is not
|
////
|
////
|
//// removed from the file and that any derivative work contains
|
//// removed from the file and that any derivative work contains
|
//// the original copyright notice and the associated disclaimer.
|
//// the original copyright notice and the associated disclaimer.
|
////
|
////
|
////
|
////
|
//// This source file is free software; you can redistribute it
|
//// This source file is free software; you can redistribute it
|
////
|
////
|
//// and/or modify it under the terms of the GNU Lesser General
|
//// and/or modify it under the terms of the GNU Lesser General
|
////
|
////
|
//// Public License as published by the Free Software Foundation;
|
//// Public License as published by the Free Software Foundation;
|
//// either version 2.1 of the License, or (at your option) any
|
//// either version 2.1 of the License, or (at your option) any
|
////
|
////
|
//// later version.
|
//// later version.
|
////
|
////
|
////
|
////
|
////
|
////
|
//// This source is distributed in the hope that it will be
|
//// This source is distributed in the hope that it will be
|
////
|
////
|
//// useful, but WITHOUT ANY WARRANTY; without even the implied
|
//// useful, but WITHOUT ANY WARRANTY; without even the implied
|
////
|
////
|
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
////
|
////
|
//// PURPOSE. See the GNU Lesser General Public License for more
|
//// PURPOSE. See the GNU Lesser General Public License for more
|
//// details.
|
//// details.
|
////
|
////
|
////
|
////
|
////
|
////
|
//// You should have received a copy of the GNU Lesser General
|
//// You should have received a copy of the GNU Lesser General
|
////
|
////
|
//// Public License along with this source; if not, download it
|
//// Public License along with this source; if not, download it
|
////
|
////
|
//// from http://www.opencores.org/lgpl.shtml
|
//// from http://www.opencores.org/lgpl.shtml
|
////
|
////
|
////
|
////
|
///////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////
|
module AES_GLADIC_tb;
|
module AES_GLADIC_tb;
|
|
|
|
|
reg PCLK;
|
reg PCLK;
|
wire PRESETn;
|
wire PRESETn;
|
wire PSEL;
|
wire PSEL;
|
wire PENABLE;
|
wire PENABLE;
|
wire PWRITE;
|
wire PWRITE;
|
|
|
wire [31:0] PWDATA;
|
wire [31:0] PWDATA;
|
wire [31:0] PADDR;
|
wire [31:0] PADDR;
|
wire [31:0] PRDATA;
|
wire [31:0] PRDATA;
|
|
|
|
|
wire PREADY;
|
wire PREADY;
|
wire PSLVERR;
|
wire PSLVERR;
|
|
|
wire int_ccf;
|
wire int_ccf;
|
wire int_err;
|
wire int_err;
|
wire dma_req_wr;
|
wire dma_req_wr;
|
wire dma_req_rd;
|
wire dma_req_rd;
|
|
|
|
|
wire [3:0] core_addr;
|
wire [3:0] core_addr;
|
|
|
assign core_addr = PADDR[5:2];
|
assign core_addr = PADDR[5:2];
|
|
|
aes_ip DUT (
|
aes_ip DUT (
|
|
|
.PCLK (PCLK),
|
.PCLK (PCLK),
|
.PRESETn (PRESETn),
|
.PRESETn (PRESETn),
|
.PENABLE (PENABLE),
|
.PENABLE (PENABLE),
|
.PSEL (PSEL),
|
.PSEL (PSEL),
|
.PWDATA (PWDATA),
|
.PWDATA (PWDATA),
|
.PADDR (core_addr),
|
.PADDR (core_addr),
|
.PWRITE(PWRITE),
|
.PWRITE(PWRITE),
|
.PRDATA (PRDATA),
|
.PRDATA (PRDATA),
|
.PREADY (PREADY),
|
.PREADY (PREADY),
|
.PSLVERR (PSLVERR),
|
.PSLVERR (PSLVERR),
|
.int_ccf(int_ccf),
|
.int_ccf(int_ccf),
|
.int_err(int_err),
|
.int_err(int_err),
|
.dma_req_wr(dma_req_wr),
|
.dma_req_wr(dma_req_wr),
|
.dma_req_rd(dma_req_rd)
|
.dma_req_rd(dma_req_rd)
|
);
|
);
|
|
|
integer i;
|
integer i,a;
|
|
|
initial
|
initial
|
begin
|
begin
|
$dumpfile("AES_GLADIC_tb.vcd");
|
$dumpfile("AES_GLADIC_tb.vcd");
|
$dumpvars(0,AES_GLADIC_tb);
|
$dumpvars(0,AES_GLADIC_tb);
|
$init;
|
$init;
|
$init_reset;
|
$init_reset;
|
end
|
end
|
|
|
initial PCLK = 1'b0;
|
initial PCLK = 1'b0;
|
always #(5) PCLK = ~PCLK;
|
always #(5) PCLK = ~PCLK;
|
|
|
//ECB
|
//ECB
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ecb_aes128;
|
$bfm_encryption_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ecb_dma_aes128;
|
$bfm_encryption_ecb_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ccfie_ecb_aes128;
|
$bfm_encryption_ccfie_ecb_aes128;
|
|
|
//CBC
|
//CBC
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_cbc_aes128;
|
$bfm_encryption_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_cbc_dma_aes128;
|
$bfm_encryption_cbc_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ccfie_cbc_aes128;
|
$bfm_encryption_ccfie_cbc_aes128;
|
|
|
//CTR
|
//CTR
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ctr_aes128;
|
$bfm_encryption_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ctr_dma_aes128;
|
$bfm_encryption_ctr_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_encryption_ccfie_ctr_aes128;
|
$bfm_encryption_ccfie_ctr_aes128;
|
|
|
|
|
//ECB
|
//ECB
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_ecb_aes128;
|
$bfm_key_generation_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_dma_ecb_aes128;
|
$bfm_key_generation_dma_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_ccfie_ecb_aes128;
|
$bfm_key_generation_ccfie_ecb_aes128;
|
|
|
//CBC
|
//CBC
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_cbc_aes128;
|
$bfm_key_generation_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_dma_cbc_aes128;
|
$bfm_key_generation_dma_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_ccfie_cbc_aes128;
|
$bfm_key_generation_ccfie_cbc_aes128;
|
|
|
//CTR
|
//CTR
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_ctr_aes128;
|
$bfm_key_generation_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_dma_ctr_aes128;
|
$bfm_key_generation_dma_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_key_generation_ccfie_ctr_aes128;
|
$bfm_key_generation_ccfie_ctr_aes128;
|
|
|
//ECB
|
//ECB
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ecb_aes128;
|
$bfm_decryption_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ecb_dma_aes128;
|
$bfm_decryption_ecb_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ccfie_ecb_aes128;
|
$bfm_decryption_ccfie_ecb_aes128;
|
|
|
//CBC
|
//CBC
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_cbc_aes128;
|
$bfm_decryption_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_cbc_dma_aes128;
|
$bfm_decryption_cbc_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ccfie_cbc_aes128;
|
$bfm_decryption_ccfie_cbc_aes128;
|
|
|
//CTR
|
//CTR
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ctr_aes128;
|
$bfm_decryption_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ctr_dma_aes128;
|
$bfm_decryption_ctr_dma_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_decryption_ccfie_ctr_aes128;
|
$bfm_decryption_ccfie_ctr_aes128;
|
|
|
//ECB
|
//ECB
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_ecb_aes128;
|
$bfm_derivation_decryption_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_dma_ecb_aes128;
|
$bfm_derivation_decryption_dma_ecb_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_ccfie_ecb_aes128;
|
$bfm_derivation_decryption_ccfie_ecb_aes128;
|
|
|
//CTR
|
//CTR
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_ctr_aes128;
|
$bfm_derivation_decryption_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_dma_ctr_aes128;
|
$bfm_derivation_decryption_dma_ctr_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_ccfie_ctr_aes128;
|
$bfm_derivation_decryption_ccfie_ctr_aes128;
|
|
|
//CBC
|
//CBC
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_cbc_aes128;
|
$bfm_derivation_decryption_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_dma_cbc_aes128;
|
$bfm_derivation_decryption_dma_cbc_aes128;
|
|
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_derivation_decryption_ccfie_cbc_aes128;
|
$bfm_derivation_decryption_ccfie_cbc_aes128;
|
|
|
//
|
//SUFLE
|
|
always@(posedge PCLK)
|
|
$bfm_sufle_aes128;
|
|
|
|
//WRITE READ REGISTERS
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_wr_aes128;
|
$bfm_wr_aes128;
|
|
|
|
//TRY TO WRITE ON DINR WHILE CR[0] EQUAL 1
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_wr_error_dinr_aes128;
|
$bfm_wr_error_dinr_aes128;
|
|
|
|
//TRY TO READ/WRITE ON DOUTR/DINR WHILE CR[0] EQUAL 1
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_wr_error_doutr_aes128;
|
$bfm_wr_error_doutr_aes128;
|
|
|
//
|
//CHOOSE WHAT BFM WILL BE ENABLED
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$bfm_generate_type;
|
$bfm_generate_type;
|
|
|
//
|
//RESET DUT A FEW TIMES TO GO TO RIGHT STATE
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
$reset_aes128;
|
$reset_aes128;
|
|
|
//
|
//THIS CATCH INFORMATION FROM INPUT and CHECK IT
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
|
begin
|
$monitor_aes;
|
$monitor_aes;
|
|
@(posedge PENABLE);
|
|
end
|
|
|
//
|
//THIS MAKE REGISTER INITIAL ASSIGNMENT
|
always@(negedge PRESETn)
|
always@(negedge PRESETn)
|
$init;
|
$init;
|
|
|
|
//FLAG USED TO FINISH SIMULATION PROGRAM
|
always@(posedge PCLK)
|
always@(posedge PCLK)
|
begin
|
begin
|
while( i != 1)
|
|
begin
|
wait(i == 1);
|
@(posedge PCLK);
|
|
end
|
|
$finish();
|
$finish();
|
end
|
end
|
|
|
|
|
|
|
endmodule
|
endmodule
|
|
|