#[test(test_binary_mux)]
module test_binary_mux {
inst u_clock: $tb::clock_gen;
var s: logic<4> ;
var a: logic<16, 4>;
var b: logic<4> ;
var c: logic<16, 4>;
inst u_mux: mux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::BINARY,
) (
i_select: s,
i_data : a,
o_data : b,
);
inst u_demux: demux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::BINARY,
) (
i_select: s,
i_data : b,
o_data : c,
);
initial {
for i in 0..16 {
a[i] = (i + 1) as 4;
}
for i in 0..16 {
s = i;
u_clock.next(1);
for j in 0..16 {
let exp: logic<4> = if j == i ? a[j] : 0;
$assert(c[j] == exp);
}
}
$finish();
}
}
#[test(test_vector_mux)]
module test_vector_mux {
inst u_clock: $tb::clock_gen;
var s: logic<16> ;
var a: logic<16, 4>;
var b: logic<4> ;
var c: logic<16, 4>;
inst u_mux: mux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::VECTOR,
) (
i_select: s,
i_data : a,
o_data : b,
);
inst u_demux: demux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::VECTOR,
) (
i_select: s,
i_data : b,
o_data : c,
);
initial {
for i in 0..16 {
a[i] = (i + 1) as 4;
}
for i in 0..16 {
s = 1 << i;
u_clock.next(1);
for j in 0..16 {
let exp: logic<4> = if j == i ? a[j] : 0;
$assert(c[j] == exp);
}
}
$finish();
}
}
#[test(test_onehot_mux)]
module test_onehot_mux {
inst u_clock: $tb::clock_gen;
var s: logic<16> ;
var a: logic<16, 4>;
var b: logic<4> ;
var c: logic<16, 4>;
inst u_mux: mux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::ONEHOT,
) (
i_select: s,
i_data : a,
o_data : b,
);
inst u_demux: demux #(
WIDTH : 4 ,
ENTRIES: 16 ,
KIND : selector_pkg::selector_kind::ONEHOT,
) (
i_select: s,
i_data : b,
o_data : c,
);
initial {
for i in 0..16 {
a[i] = (i + 1) as 4;
}
for i in 0..16 {
s = 1 << i;
u_clock.next(1);
for j in 0..16 {
let exp: logic<4> = if j == i ? a[j] : 0;
$assert(c[j] == exp);
}
}
$finish();
}
}