Ответы на вопросы по лекции 26.11.2009

Ответы на вопросы по лекции 26.11.2009

Сообщение sash » 27 ноя 2009, 16:16

1. Всегда ли требуется описывать тип входов UDP? Можно ли закомментировать вторую строчку кода
Код: Выделить всё
primitive dummy(o, i1, i2);
    input i1, i2;
    ...
endprimitive


Типы портов UDP требуется описывать всегда.

2. Можно ли не описывать цепи latch_out, dff_out и mux_out в коде
Код: Выделить всё
module Testbench;
    reg channel;
    reg clk, data;

    wire latch_out, dff_out, mux_out;

    mux   multiplexor(mux_out, channel, latch_out, dff_out);
    latch dlatch(latch_out, clk, data);
    d_ff  dff(dff_out, clk, data);
   
    ...
endmodule


Можно. Стандарт Verilog-2001 допускает неявное описание цепи, если ее имя встречается в списке подключений примитива или модуля, как приведенном примере. То есть, строчку "wire latch_out, dff_out, mux_out;" можно закомментировать.

3. Какой смысл имеет тело wait?

wait может не иметь тела:
Код: Выделить всё
...
wait(condition);
statement1

В этом случае wait() ждет выполнения условия condition и блокирует до этих пор выполнение statement1. Точно такой же эффект будет при использовании statement1 в качестве тела wait:
Код: Выделить всё
...
wait(condition)
   statement1

Полезность помещения statement1 в тело wait может возникнуть, когда wait используется в блоке fork..join:
Код: Выделить всё
fork
   statement2;
   wait(condition)
      statement1;
   statement3;
join

В этом случае выполнение statement2 и statement3 не задерживается, тогда как statement1 дожидается условия condition.

Вообще польза wait() проявляется тогда, когда он находится в теле цикла:
Код: Выделить всё
forever
    wait(condition)
        statement

Здесь выполнение statement будет блокироваться до тех пор, пока не будет выполнено condition. Однако если condition истинно, statement будет выполняться при каждом витке цикла до тех пор, пока condition снова не станет ложным. Это поведение отличается от списка событий:
Код: Выделить всё
forever
    @(condition)  statement

Здесь выполнение statement блокируется до тех пор, пока condition не изменится, и будет блокироваться при каждом витке цикла, не зависимо от значения condition. @ ждет перепада, тогда как wait() ждет уровня.
sash
 
Сообщения: 90
Зарегистрирован: 28 фев 2009, 20:56

Вернуться в Организация и проектирование встроенных вычислительных систем

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron