`default_nettype none module top; reg [1:0] index; reg [7:0] element; wire [31:0] arrayData; reg enable, clock, clear; Array #(.ELEMENTS(4), .WIDTH(8)) arrayInstance( .index(index), .element(element), .array(arrayData), .clock(clock), .clear(clear), .enable(enable) ); wire [7:0] result; ArrayOrReduction #(.SIZE(4), .WIDTH(8)) reduction( .inputs(arrayData), .result(result) ); initial begin clock = 1; forever #5 clock = ~clock; end initial begin $monitor($time, " arrayData: %h result: %h", arrayData, result); clear = 1'b1; index = 2'b0; element = 8'h0; enable = 1'b0; repeat(3) @(posedge clock); clear = 1'b0; element = 8'haa; enable = 1'b1; @(posedge clock); element = 8'h11; index = 2'd1; @(posedge clock); element = 8'h72; index = 2'd2; @(posedge clock); element = 8'h88; index = 3'd3; @(posedge clock); element = 8'hff; index = 3'd0; enable = 1'b0; @(posedge clock); element = 8'h00; enable = 1'b1; @(posedge clock); element = 8'h00; index = 3'd1; @(posedge clock); enable = 1'b0; index = 3'd2; @(posedge clock); enable = 1'b1; index = 3'd3; @(posedge clock); enable = 1'b0; repeat(5) @(posedge clock); $finish; end endmodule