blob: 115abc8c55b8328daab5e5c0a55a680de0840bcc [file] [log] [blame]
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2021 Tamas Hubai
`default_nettype none
module prog_mux_tb();
parameter CORES=4;
parameter LOG_CORES=2;
parameter PC_WIDTH=4;
parameter INSTR_WIDTH=8;
reg we;
reg [LOG_CORES-1:0] sel;
reg [PC_WIDTH-1:0] waddr;
reg [INSTR_WIDTH-1:0] wdata;
wire [CORES-1:0] cwe_raw;
wire [CORES*PC_WIDTH-1:0] cwaddr_raw;
wire [CORES*INSTR_WIDTH-1:0] cwdata_raw;
prog_mux #(
.CORES(CORES),
.LOG_CORES(LOG_CORES),
.PC_WIDTH(PC_WIDTH),
.INSTR_WIDTH(INSTR_WIDTH)
) prog_mux_dut (
.we(we),
.sel(sel),
.waddr(waddr),
.wdata(wdata),
.cwe(cwe_raw),
.cwaddr(cwaddr_raw),
.cwdata(cwdata_raw)
);
wire cwe[CORES-1:0];
wire [PC_WIDTH-1:0] cwaddr[CORES-1:0];
wire [INSTR_WIDTH-1:0] cwdata[CORES-1:0];
generate genvar core;
for (core=0; core<CORES; core=core+1) begin:g_core
assign cwe[core] = cwe_raw[core];
assign cwaddr[core] = cwaddr_raw[core*PC_WIDTH +: PC_WIDTH];
assign cwdata[core] = cwdata_raw[core*INSTR_WIDTH +: INSTR_WIDTH];
end
endgenerate
initial begin
$monitor("time=%4t we=%d sel=%d waddr=%d wdata=%d cwe0=%d cwaddr0=%d cwdata0=%d cwe1=%d cwaddr1=%d cwdata1=%d",
$time, we, sel, waddr, wdata, cwe[0], cwaddr[0], cwdata[0], cwe[1], cwaddr[1], cwdata[1]);
we = 0;
#10
we = 1;
sel = 0;
waddr = 3;
wdata = 11;
#10
we = 0;
#10
we = 1;
sel = 1;
waddr = 5;
wdata = 25;
#10
sel = 0;
waddr = 0;
wdata = 1;
#10
$stop;
end
endmodule
`default_nettype wire