| `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 |