Hi all!
I found myself stuck into a simple problem I cannot describe in verilog!
I have 12 buses, each 16 bit wide, and I should 'or' them to create a single, 16 bit wide bus:
wire [15:0] this_sixteen_bits_data[11:0];
wire [15:0] output_data;
this_sixteen_bits_data[0]=some_logic_instance_0;
this_sixteen_bits_data[1]=some_logic_instance_1;
...
this_sixteen_bits_data[11]=some_logic_instance_11;
assign output_data = this_sixteen_bits_data[0] | this_sixteen_bits_data[1] | ... | this_sixteen_bits_data[11];
Trying not to go this verbose, a generate loop should be the way to go:
wire [15:0] this_sixteen_bits_data[11:0];
wire [15:0] output_data;
genvar i;
generate
for (i=0; i<12; i=i+1) begin : wide_or_genvar
this_sixteen_bits_data[i]=some_logic[i];
output_data = ??? this_sixteen_bits_data[i];
end
endgenerate
How can you describe this parallel wide-or inside a generate loop?