Anophele 0 7 февраля, 2018 Опубликовано 7 февраля, 2018 (изменено) · Жалоба Закройте, пожалуйста, тему. Нашел ошибку самостоятельно. Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами 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] тестбенч 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 результат модуляции Еще прошу подсказать, как во время теста с самопроверкой нужно проводить модуляцию. При использовании конструкции assert (data == 1) else $error("1 failed."); я даже специально вводил в тест на проверку неправильные данные, а никакого предупреждения не вылезало. Кстати modelSim в том проекте давал корректный результат, но его было трудоемко проверять Заранее благодарю за помощь Изменено 7 февраля, 2018 пользователем Anophele Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 8 февраля, 2018 Опубликовано 8 февраля, 2018 · Жалоба Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами y и s Не переменные, а сигналы, и не в функцию, а в модуль. Интересно, как он может не иметь значения? А чтобы не путаться в порядке, используйте назначение портов по имени. Писать чуть больше, но зато повышается читаемость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться