Неожиданный вывод Testbench (всегда stx и красная линия) - PullRequest
1 голос
/ 27 мая 2020

Я хочу попробовать сделать функциональную реализацию мультиплексора 16x1. Кажется, все в порядке, но когда я тестирую свой проект на тестовом стенде, вывод m представляет собой красную строку и всегда пишет stx. Мне нужны известные результаты вместо stx.

2x1 Multiplexer

module mux_2x1(y,d0,d1,s);

input d0,d1,s;
output y;
wire t0,t1;

and(t0,d0,~s);
and(t1,d1,s);
or(y,t1,t2);

endmodule

4x1 Multiplexer

module mux_4x1(y,d0,d1,d2,d3,s0,s1);

input d0,d1,d2,d3,s0,s1;
output y;
wire t0,t1;

mux_2x1 m1(t0,d0,d1,s0);
mux_2x1 m2(t1,d2,d3,s0);

mux_2x1 m3(y,t0,t1,s1);

endmodule

8x1 Multiplexer

module mux_8x1(y,d,s0,s1,s2);

input [0:7]d;
input s0,s1,s2;
output y;

wire [0:5]t;

mux_2x1 m1(t[0],d[0],d[1],s0);
mux_2x1 m2(t[1],d[2],d[3],s0);
mux_2x1 m3(t[2],d[4],d[5],s0);
mux_2x1 m4(t[3],d[6],d[7],s0);

mux_2x1 m5(t[4],t[0],t[1],s1);
mux_2x1 m6(t[5],t[2],t[3],s1);

mux_2x1 m7(y,t[4],t[5],s2);

endmodule

16x1 Multiplexer

module mux_16x1(y,d,s0,s1,s2,s3);

input [0:15]d;
input s0,s1,s2,s3;
output y;

wire [0:3]t;

mux_8x1 m1(t[0],d,s1,s2,s3);

mux_4x1 m2(t[1],d[8],d[9],d[10],d[11],s2,s3);
mux_4x1 m3(t[2],d[12],d[13],d[14],d[15],s2,s3);

mux_2x1 m4(t[3],t[1],t[2],s1);

mux_2x1 m5(y,t[0],t[3],s0);

endmodule

Код Verilog, реализация функции

module mux_16x1_imp(m,a,b,c,d);

input a,b,c,d;
output m;

//module mux_16x1(y,d,s0,s1,s2,s3);
mux_16x1 m1(m,{1'b0,1'b0,1'b1,1'b1,1'b0,1'b1,1'b0,1'b1,1'b1,1'b1,1'b1,1'b1,1'b0,1'b0,1'b0,1'b0},a,b,c,d);

endmodule

Вот мой код тестовой среды

module mux_16x1_imp_test();

reg a,b,c,d;
wire m;

mux_16x1_imp TestBench(m,a,b,c,d);

initial begin

a=1'b0; b=1'b0; c=1'b0; d=1'b0; #100    
a=1'b0; b=1'b0; c=1'b0; d=1'b1; #100
a=1'b0; b=1'b0; c=1'b1; d=1'b0; #100
a=1'b0; b=1'b0; c=1'b1; d=1'b1; #100
a=1'b0; b=1'b1; c=1'b0; d=1'b0; #100
a=1'b0; b=1'b1; c=1'b0; d=1'b1; #100
a=1'b0; b=1'b1; c=1'b1; d=1'b0; #100
a=1'b0; b=1'b1; c=1'b1; d=1'b1; #100
a=1'b1; b=1'b0; c=1'b0; d=1'b0; #100    
a=1'b1; b=1'b0; c=1'b0; d=1'b1; #100
a=1'b1; b=1'b0; c=1'b1; d=1'b0; #100
a=1'b1; b=1'b0; c=1'b1; d=1'b1; #100
a=1'b1; b=1'b1; c=1'b0; d=1'b0; #100
a=1'b1; b=1'b1; c=1'b0; d=1'b1; #100
a=1'b1; b=1'b1; c=1'b1; d=1'b0; #100
a=1'b1; b=1'b1; c=1'b1; d=1'b1; 

end

endmodule

Моделирование

enter image description here

1 Ответ

1 голос
/ 27 мая 2020

Я получил предупреждения о компиляции на 2 разных симуляторах, и они указали мне на эти 2 строки кода.

В mux_2x1 вы использовали необъявленный t2 вместо t0. Замените:

or(y,t1,t2);

на:

or(y,t1,t0);

In mux_16x1, измените:

mux_8x1 m1(t[0],d,s1,s2,s3);

на:

mux_8x1 m1(t[0],d[0:7],s1,s2,s3);

Эти изменения исправляют предупреждения и избавляются от крестиков.

Если вы не получили никаких предупреждений, вы можете попробовать свой код на нескольких симуляторах на edaplayground .

...