Перейти к содержанию

    

(решено) тест мультиплексора ModelSim

Закройте, пожалуйста, тему. Нашел ошибку самостоятельно.

Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами 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

 

результат модуляции

BAdywAImQpi5uUNHNZO2Mw.png

 

Еще прошу подсказать, как во время теста с самопроверкой нужно проводить модуляцию.

При использовании конструкции

 assert (data == 1) else $error("1 failed.");

я даже специально вводил в тест на проверку неправильные данные, а никакого предупреждения не вылезало. Кстати modelSim в том проекте давал корректный результат, но его было трудоемко проверять

 

Заранее благодарю за помощь

 

 

Изменено пользователем Anophele

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами y и s

Не переменные, а сигналы, и не в функцию, а в модуль.

Интересно, как он может не иметь значения? А чтобы не путаться в порядке, используйте назначение портов по имени. Писать чуть больше, но зато повышается читаемость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация