module top ( input clk, input rst, input start, output signed [31:0] y_bus, output busy, output done ); localparam DATA_WIDTH = 8; localparam N_INPUTS = 256; localparam N_NEURONS = 4; localparam PARALLEL = 2; localparam ACC_WIDTH = 32; reg signed [DATA_WIDTH*N_INPUTS-1:0] x_bus; reg signed [DATA_WIDTH*N_INPUTS*N_NEURONS-1:0] weights_bus; reg signed [DATA_WIDTH*N_NEURONS-1:0] bias_bus; integer i; initial begin x_bus = 0; weights_bus = 0; bias_bus = 0; // x[i] = 1 for (i = 0; i < N_INPUTS; i = i + 1) x_bus[i*DATA_WIDTH +: DATA_WIDTH] = 8'sd1; // Neurone 0: primi 32 pesi = +1 for (i = 0; i < 32; i = i + 1) weights_bus[ 0*N_INPUTS*DATA_WIDTH + i*DATA_WIDTH +: DATA_WIDTH ] = 8'sd1; // Neurone 1: tutti i pesi = 0, bias = 10 bias_bus[1*DATA_WIDTH +: DATA_WIDTH] = 8'sd10; // Neurone 2: tutti i pesi = -1 for (i = 0; i < N_INPUTS; i = i + 1) weights_bus[ 2*N_INPUTS*DATA_WIDTH + i*DATA_WIDTH +: DATA_WIDTH ] = -8'sd1; // Neurone 3: primi 32 pesi = +4 for (i = 0; i < 32; i = i + 1) weights_bus[ 3*N_INPUTS*DATA_WIDTH + i*DATA_WIDTH +: DATA_WIDTH ] = 8'sd4; end layer #( .DATA_WIDTH(DATA_WIDTH), .N_INPUTS(N_INPUTS), .N_NEURONS(N_NEURONS), .PARALLEL(PARALLEL), .ACC_WIDTH(ACC_WIDTH) ) u_layer ( .clk(clk), .rst(rst), .start(start), .x_bus(x_bus), .weights_bus(weights_bus), .bias_bus(bias_bus), .y_bus(y_bus), .busy(busy), .done(done) ); endmodule