Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами y и s
Код
mplex8 dut(d0, d1, d2, d3, d4, d5, d6, d7[b], y, s);[/b]
Здравствуйте, только познаю азы, выполняю разные упражнения из учебника харрисов
Написал восьмивходовой мультиплесор, но при модуляции выходной сигнал почему-то оказывается в неопределенных значениях. Прошу помочь разобраться почему.
код на SystemVerilog, делал двумя способами, закоментил один из них, разницы никакой
Код
module mplex8
(
input logic [2:0] d0, d1, d2, d3, d4, d5, d6, d7,
input logic [2:0] s,
output logic [2:0] y
);
always_comb
case(s)
3'b000: y = d0;
3'b001: y = d1;
3'b010: y = d2;
3'b011: y = d3;
3'b100: y = d4;
3'b101: y = d5;
3'b110: y = d6;
3'b111: y = d7;
endcase
/*assign y = s[2] ? (s[1] ? (s[0] ? d7 : d6)
: (s[0] ? d5 : d4) )
: (s[1] ? (s[0] ? d3 : d2)
: (s[0] ? d1 : d0) );*/
endmodule
[spoiler]
(
input logic [2:0] d0, d1, d2, d3, d4, d5, d6, d7,
input logic [2:0] s,
output logic [2:0] y
);
always_comb
case(s)
3'b000: y = d0;
3'b001: y = d1;
3'b010: y = d2;
3'b011: y = d3;
3'b100: y = d4;
3'b101: y = d5;
3'b110: y = d6;
3'b111: y = d7;
endcase
/*assign y = s[2] ? (s[1] ? (s[0] ? d7 : d6)
: (s[0] ? d5 : d4) )
: (s[1] ? (s[0] ? d3 : d2)
: (s[0] ? d1 : d0) );*/
endmodule
[spoiler]
тестбенч
Код
module tb1 ();
logic [2:0] s;
logic [2:0] d0, d1, d2, d3, d4, d5, d6, d7;
logic [2:0] y;
mplex8 dut(d0, d1, d2, d3, d4, d5, d6, d7, y, s);
initial begin
d0 = 0; d1 = 1; d2 = 2; d3 = 3; d4 = 4; d5 = 5; d6 = 7; d7 = 7;
s = 3'b000; #10;
s = 3'b001; #10;
s = 3'b010; #10;
s = 3'b011; #10;
s = 3'b100; #10;
s = 3'b101; #10;
s = 3'b110; #10;
s = 3'b111; #10;
end
endmodule
logic [2:0] s;
logic [2:0] d0, d1, d2, d3, d4, d5, d6, d7;
logic [2:0] y;
mplex8 dut(d0, d1, d2, d3, d4, d5, d6, d7, y, s);
initial begin
d0 = 0; d1 = 1; d2 = 2; d3 = 3; d4 = 4; d5 = 5; d6 = 7; d7 = 7;
s = 3'b000; #10;
s = 3'b001; #10;
s = 3'b010; #10;
s = 3'b011; #10;
s = 3'b100; #10;
s = 3'b101; #10;
s = 3'b110; #10;
s = 3'b111; #10;
end
endmodule
результат модуляции

Еще прошу подсказать, как во время теста с самопроверкой нужно проводить модуляцию.
При использовании конструкции
Код
assert (data == 1) else $error("1 failed.");
я даже специально вводил в тест на проверку неправильные данные, а никакого предупреждения не вылезало. Кстати modelSim в том проекте давал корректный результат, но его было трудоемко проверять
Заранее благодарю за помощь