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

(решено) тест мультиплексора 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

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

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

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...