реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> (решено) тест мультиплексора ModelSim
Anophele
сообщение Feb 7 2018, 14:58
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 7-02-18
Пользователь №: 101 606



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

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



Сообщение отредактировал Anophele - Feb 7 2018, 15:01
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Feb 8 2018, 05:09
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 902
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Anophele @ Feb 7 2018, 17:58) *
Оказывается, что имеет значение порядок ввода переменных в функцию. Перепутал местами y и s

Не переменные, а сигналы, и не в функцию, а в модуль.
Интересно, как он может не иметь значения? А чтобы не путаться в порядке, используйте назначение портов по имени. Писать чуть больше, но зато повышается читаемость.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st May 2018 - 10:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.00842 секунд с 7
ELECTRONIX ©2004-2016