Advertisement
Guest User

Untitled

a guest
May 2nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /************************************************************************
  2. Avalon-MM Interface for Convolution IP Core
  3.  
  4. Register Map:
  5.  
  6.  0-3 : 4x 32bit AES Key
  7.  4-7 : 4x 32bit AES Encrypted Message
  8.  8-11: 4x 32bit AES Decrypted Message
  9.    12: Not Used
  10.     13: Not Used
  11.    14: 32bit Start Register
  12.    15: 32bit Done Register
  13.  
  14. ************************************************************************/
  15.  
  16. module avalon_conv_interface (
  17.     // Avalon Clock Input
  18.     input logic CLK,
  19.    
  20.     // Avalon Reset Input
  21.     input logic RESET,
  22.    
  23.     // Avalon-MM Slave Signals
  24.     input  logic AVL_READ,                  // Avalon-MM Read
  25.     input  logic AVL_WRITE,                 // Avalon-MM Write
  26.     input  logic AVL_CS,                        // Avalon-MM Chip Select
  27.     input  logic [3:0] AVL_BYTE_EN,     // Avalon-MM Byte Enable
  28.     input  logic [6:0] AVL_ADDR,            // Avalon-MM Address
  29.     input  logic [31:0] AVL_WRITEDATA,  // Avalon-MM Write Data
  30.     output logic [31:0] AVL_READDATA,   // Avalon-MM Read Data
  31.    
  32.     // Exported Conduit
  33.     output logic [31:0] EXPORT_DATA     // Exported Conduit Signal to LEDs
  34. );
  35.  
  36. // inputs to mat_mul_accl module
  37. logic MM_START;
  38. logic MM_DONE;
  39. logic SUM;
  40. // what goes to conv2d
  41. logic [31:0] mat1 [74:0];
  42. logic [31:0] mat2 [26:0];
  43. logic [31:0] outmat [8:0];
  44.  
  45.  
  46. logic [31:0] reggy [112:0];
  47. logic [31:0] startReg;
  48. logic [31:0] doneReg;
  49.  
  50. assign MMStart = startReg[0];
  51.  
  52. mat1[0] = reggy[0];
  53. mat1[1] = reggy[1];
  54. mat1[2] = reggy[2];
  55. mat1[3] = reggy[3];
  56. mat1[4] = reggy[4];
  57. mat1[5] = reggy[5];
  58. mat1[6] = reggy[6];
  59. mat1[7] = reggy[7];
  60. mat1[8] = reggy[8];  
  61. mat1[9] = reggy[9];  
  62. mat1[10] = reggy[10];
  63. mat1[11] = reggy[11];
  64. mat1[12] = reggy[12];
  65. mat1[13] = reggy[13];
  66. mat1[14] = reggy[14];
  67. mat1[15] = reggy[15];
  68. mat1[16] = reggy[16];
  69. mat1[17] = reggy[17];
  70. mat1[18] = reggy[18];
  71. mat1[19] = reggy[19];
  72. mat1[20] = reggy[20];
  73. mat1[21] = reggy[21];  
  74. mat1[22] = reggy[22];
  75. mat1[23] = reggy[23];
  76. mat1[24] = reggy[24];
  77.  
  78. mat1[25] = reggy[25];
  79. mat1[26] = reggy[26];
  80. mat1[27] = reggy[27];
  81. mat1[28] = reggy[28];
  82. mat1[29] = reggy[29];
  83. mat1[30] = reggy[30];
  84. mat1[31] = reggy[31];
  85. mat1[32] = reggy[32];
  86. mat1[33] = reggy[33];  
  87. mat1[34] = reggy[34];  
  88. mat1[35] = reggy[35];
  89. mat1[36] = reggy[36];
  90. mat1[37] = reggy[37];
  91. mat1[38] = reggy[38];
  92. mat1[39] = reggy[39];
  93. mat1[40] = reggy[40];
  94. mat1[41] = reggy[41];
  95. mat1[42] = reggy[42];
  96. mat1[43] = reggy[43];
  97. mat1[44] = reggy[44];
  98. mat1[45] = reggy[45];
  99. mat1[46] = reggy[46];  
  100. mat1[47] = reggy[47];
  101. mat1[48] = reggy[48];
  102. mat1[49] = reggy[49];
  103.  
  104. mat1[50] = reggy[50];
  105. mat1[51] = reggy[51];
  106. mat1[52] = reggy[52];
  107. mat1[53] = reggy[53];
  108. mat1[54] = reggy[54];
  109. mat1[55] = reggy[55];
  110. mat1[56] = reggy[56];
  111. mat1[57] = reggy[57];
  112. mat1[58] = reggy[58];  
  113. mat1[59] = reggy[59];  
  114. mat1[60] = reggy[60];
  115. mat1[61] = reggy[61];
  116. mat1[62] = reggy[62];
  117. mat1[63] = reggy[63];
  118. mat1[64] = reggy[64];
  119. mat1[65] = reggy[65];
  120. mat1[66] = reggy[66];
  121. mat1[67] = reggy[67];
  122. mat1[68] = reggy[68];
  123. mat1[69] = reggy[69];
  124. mat1[70] = reggy[70];
  125. mat1[71] = reggy[71];  
  126. mat1[72] = reggy[72];
  127. mat1[73] = reggy[73];
  128. mat1[74] = reggy[74];
  129.  
  130. mat2[0] = reggy[75];
  131. mat2[1] = reggy[76];
  132. mat2[2] = reggy[77];
  133. mat2[3] = reggy[78];
  134. mat2[4] = reggy[79];
  135. mat2[5] = reggy[80];
  136. mat2[6] = reggy[81];
  137. mat2[7] = reggy[82];
  138. mat2[8] = reggy[83];
  139. mat2[9] = reggy[84];
  140. mat2[10] = reggy[85];
  141. mat2[11] = reggy[86];
  142. mat2[12] = reggy[87];
  143. mat2[13] = reggy[88];
  144. mat2[14] = reggy[89];
  145. mat2[15] = reggy[90];
  146. mat2[16] = reggy[91];
  147. mat2[17] = reggy[92];
  148. mat2[18] = reggy[93];
  149. mat2[19] = reggy[94];
  150. mat2[20] = reggy[95];
  151. mat2[21] = reggy[96];
  152. mat2[22] = reggy[97];
  153. mat2[23] = reggy[98];
  154. mat2[24] = reggy[99];
  155. mat2[25] = reggy[100];
  156. mat2[26] = reggy[101];
  157.  
  158. // reggy[0:8] - input1 and reggy[9:17] - input2
  159. // reggy[18:26] - output?
  160. //mat_mul_accl matmult(.*);
  161.  
  162. assign doneReg[0] = MM_DONE;
  163. always_ff @ (posedge CLK)
  164. begin
  165.     // Reset is active HIGH
  166.     if(RESET)
  167.     begin
  168.         for(int i = 0; i < 32; i++)
  169.         begin
  170.             reggy[i] <= 32'b0;
  171.         end
  172.     end
  173.     else if(AVL_CS)
  174.     begin
  175.         if(AVL_WRITE)
  176.         begin
  177.             // depending on which register is the destination register, load contents from data bus into that register
  178.             case(AVL_ADDR)
  179.                 4'd27 : startReg[0] <= AVL_WRITEDATA;
  180.                 default: reggy[AVL_ADDR] <= AVL_WRITEDATA;
  181.             endcase
  182.            
  183.         end
  184.  
  185.     end
  186. end
  187.  
  188.     // depending on SR1 register, output corresponding register contents to SR1_OUT
  189.    
  190.    
  191.     // Should this be in an always_comb block?
  192.     // How do you account for 0 cycle wait latency?
  193.     assign EXPORT_DATA = {reggy[4][31:16], reggy[7][15:0]};
  194.  
  195. always_comb
  196. begin
  197.     if(AVL_CS & AVL_READ)
  198.     begin
  199.         // depending on which register is the destination register, load contents from data bus into
  200.         // that register
  201.         case(AVL_ADDR)
  202.             4'd28 : AVL_READDATA = doneReg[0];
  203.             default: AVL_READDATA = reggy[AVL_ADDR];
  204.         endcase
  205.     end
  206.     else
  207.     begin
  208.         AVL_READDATA = 32'bx;
  209.     end
  210. end
  211.  
  212. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement