Регистрация | Вход
Сvoid matrix_multiplier( int *A, int *B, int *C, int MATRIX_SIZE) { for (int i = 0; i < MATRIX_SIZE; i++) { for (int j = 0; j < MATRIX_SIZE; j++) { int temp_sum = 0; for (int k = 0; k < MATRIX_SIZE; k++) { temp_sum += A[i * MATRIX_SIZE + k] * B[k * MATRIX_SIZE + j]; } C[i * MATRIX_SIZE + j] = temp_sum; } }}
verilogmodule matrix_multiplier #( parameter DATA_WIDTH = 8, parameter MATRIX_SIZE = 4) ( input wire [DATA_WIDTH * MATRIX_SIZE * MATRIX_SIZE - 1 : 0] A, input wire [DATA_WIDTH * MATRIX_SIZE * MATRIX_SIZE - 1 : 0] B, output reg [DATA_WIDTH * 2 * MATRIX_SIZE * MATRIX_SIZE - 1 : 0] C); integer i, j, k; reg [DATA_WIDTH * 2 - 1 : 0] temp_sum; always @(*) begin for (i = 0; i < MATRIX_SIZE; i = i + 1) begin for (j = 0; j < MATRIX_SIZE; j = j + 1) begin temp_sum = 0; for (k = 0; k < MATRIX_SIZE; k = k + 1) begin temp_sum = temp_sum + A[(i * MATRIX_SIZE + k) * DATA_WIDTH +: DATA_WIDTH] * B[(k * MATRIX_SIZE + j) * DATA_WIDTH +: DATA_WIDTH]; end C[(i * MATRIX_SIZE + j) * DATA_WIDTH * 2 +: DATA_WIDTH * 2] <= temp_sum; end end endendmodule