Advertisement
Guest User

Untitled

a guest
Apr 30th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     Interface for accelerated vgg16 IP Core
  3. */
  4. module vgg16Interface (
  5.     // Avalon Clock Input
  6.     input logic CLK,
  7.    
  8.     // Avalon Reset Input
  9.     input logic RESET,
  10.    
  11.     // Avalon-MM Slave Signals
  12.     input  logic AVL_READ,                  // Avalon-MM Read
  13.     input  logic AVL_WRITE,                 // Avalon-MM Write
  14.     input  logic AVL_CS,                        // Avalon-MM Chip Select
  15.     input  logic [3:0] AVL_BYTE_EN,     // Avalon-MM Byte Enable
  16.     input  logic [13:0] AVL_ADDR,           // Avalon-MM Address
  17.     input  logic [31:0] AVL_WRITEDATA,  // Avalon-MM Write Data
  18.     output logic [31:0] AVL_READDATA,   // Avalon-MM Read Data
  19.    
  20.     // Exported Conduit
  21.     output logic [31:0] EXPORT_DATA     // Exported Conduit Signal to LEDs
  22. );
  23.  
  24. // 3*3*128 = 1152
  25.  
  26. // an unpacked array of 32-bit registers
  27. logic [31:0] reggy [4607:0];
  28.  
  29. // register for Done Signal
  30. logic [31:0] startReg;
  31.  
  32. // register for Start Signal
  33. logic [31:0] doneReg;
  34.  
  35. // Assign variables for the AES interface variables
  36. logic [127:0] AES_MSG_DEC;
  37. // just for debugging
  38. logic VGG16_DONE;
  39. logic VGG16_START;
  40. logic [127:0] AES_KEY;
  41. logic [127:0] AES_MSG_ENC;
  42.  
  43. assign AES_MSG_ENC = {reggy[4], reggy[5], reggy[6], reggy[7]};
  44. assign VGG16_START = startReg[0];
  45.  
  46.  
  47. // Instantiate AES interface to get AES_MSG_DEC
  48.  
  49. //AES aes(.*);
  50.  
  51. //convMult(.*);
  52.  
  53. always_ff @ (posedge CLK)
  54. begin
  55.     // Reset is active HIGH
  56.     if(RESET)
  57.     begin
  58.         // initialize register contents to 0
  59.         reggy[0] <= 32'b0;  
  60.     end
  61.     else if(AVL_CS)
  62.     begin
  63.         if(AVL_WRITE)
  64.         begin
  65.             // depending on which register is the destination register, load contents from data bus into
  66.             // that register
  67.             case(AVL_ADDR)
  68.                 14'd9216 : startReg <= AVL_WRITEDATA;
  69.                 default: reggy[AVL_ADDR] <= AVL_WRITEDATA;
  70.             endcase
  71.            
  72.            
  73.         end
  74.         else if(VGG16_DONE)
  75.         begin
  76.             // change to reggy <= output of convMult
  77.             reggy[11] <= AES_MSG_DEC[127:96];
  78.             reggy[10] <= AES_MSG_DEC[95:64];
  79.             reggy[9] <= AES_MSG_DEC[63:32];
  80.             reggy[8] <= AES_MSG_DEC[31:0];
  81.         end
  82.         else
  83.         begin
  84.             reggy <= reggy;
  85.         end
  86.     end
  87. end
  88.  
  89.  
  90. always_comb
  91. begin
  92.  
  93.             if(AVL_READ && AVL_CS)
  94.             begin
  95.                 case(AVL_ADDR)
  96.                     14'd9217 : AVL_READDATA = doneReg;
  97.                     default : AVL_READDATA = reggy[AVL_ADDR];
  98.                 endcase
  99.             end
  100.             else
  101.                 AVL_READDATA = 32'bx;
  102. end
  103.            
  104.            
  105.            
  106.  
  107. // this doesn't matter simply for LEDs
  108. assign EXPORT_DATA = {reggy[4][31:16] , reggy[7][15:0]};
  109.  
  110. assign doneReg = {31'b0, VGG16_DONE};
  111.  
  112. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement