diff --git a/src/rtl/neuron_matrix.sv b/src/rtl/neuron_matrix.sv index 1dea4b82282376d21d640d6f186cdc223204f2a9..57107df25361bdcc91bbc030b21afd06cd6e6a78 100644 --- a/src/rtl/neuron_matrix.sv +++ b/src/rtl/neuron_matrix.sv @@ -57,21 +57,27 @@ module neuron_matrix #( // wires for wiring the network together wire [NUMBER_NEURONS_W-1:0][values_layer+1:0]translated_address; - for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin - assign translated_address[gv] = address-gv*values_layer; - end + generate + for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin : translate_addr_m + assign translated_address[gv] = address-gv*values_layer; + end + endgenerate wire[NUMBER_NEURONS_W-1:0][NUMBER_NEURONS_H-1:0] layer_output_array; wire [NUMBER_NEURONS_W-1:0] read_enable_array; - for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin - assign read_enable_array[gv] = (translated_address[gv]<values_layer) && read_enable; - end + generate + for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin : re_arr_m + assign read_enable_array[gv] = (translated_address[gv]<values_layer) && read_enable; + end + endgenerate wire [NUMBER_NEURONS_W-1:0] write_enable_array; - for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin - assign write_enable_array[gv] = (translated_address[gv]<values_layer) && write_enable; - end + generate + for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin : rw_arr_m + assign write_enable_array[gv] = (translated_address[gv]<values_layer) && write_enable; + end + endgenerate wire[NUMBER_NEURONS_W-1:0] inference_done_array; wire[NUMBER_NEURONS_W-1:0] backprop_done_array; @@ -101,35 +107,37 @@ module neuron_matrix #( end genvar gv; - for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin - layer #( - .NUMBER_SYNAPSES(NUMBER_SYNAPSES), - .NUMBER_NEURONS(NUMBER_NEURONS_H) - ) - hidden_layer( - .clk(clk), - .rst(rst), - // Enable inference - .run_inference((gv==0)?run_inference:inference_done_array[gv-1]), - .inference_done(inference_done_array[gv]), - // Data IO - .layer_inputs((gv==0)?layer_inputs:layer_output_array[gv-1]), - .layer_outputs(layer_output_array[gv]), - // Backprop - .backprop_in_port((gv==0)?backprop_in_port:backprop_ports[gv-1]), - .backprop_out_port(backprop_ports[gv]), - .backprop_done(backprop_done_array[gv]), - .backprop_enable(backprop_enable), - // Data interface - .write_enable(write_enable_array[gv]), - .read_enable(read_enable_array[gv]), - .write_done(write_done_array[gv]), - .read_done(read_done_array[gv]), - .address(translated_address[gv]), - .data_i(data_i), - .data_o(data_o_array[gv]) - ); - end + generate + for(gv=0;gv<NUMBER_NEURONS_W;gv=gv+1) begin : matrix_layers + layer #( + .NUMBER_SYNAPSES(NUMBER_SYNAPSES), + .NUMBER_NEURONS(NUMBER_NEURONS_H) + ) + hidden_layer( + .clk(clk), + .rst(rst), + // Enable inference + .run_inference((gv==0)?run_inference:inference_done_array[gv-1]), + .inference_done(inference_done_array[gv]), + // Data IO + .layer_inputs((gv==0)?layer_inputs:layer_output_array[gv-1]), + .layer_outputs(layer_output_array[gv]), + // Backprop + .backprop_in_port((gv==0)?backprop_in_port:backprop_ports[gv-1]), + .backprop_out_port(backprop_ports[gv]), + .backprop_done(backprop_done_array[gv]), + .backprop_enable(backprop_enable), + // Data interface + .write_enable(write_enable_array[gv]), + .read_enable(read_enable_array[gv]), + .write_done(write_done_array[gv]), + .read_done(read_done_array[gv]), + .address(translated_address[gv]), + .data_i(data_i), + .data_o(data_o_array[gv]) + ); + end + endgenerate assign backprop_out_port = backprop_ports[NUMBER_NEURONS_W-1]; assign layer_outputs = layer_output_array[NUMBER_NEURONS_W-1];