Verilog Деление на два счетчика из D Flip Flops не работает

У меня есть рабочий DFF под модулем ниже.

d_flip_flop_edge_triggered DFFT(Q, Qn, C, D);

Однако, когда я переключаю вход «D» на «Qn» — чтобы сделать счетчик деления на 2 — на выходе тестового стенда не отображается ни Q, ни Qn. Он красный, как будто произошла ошибка.

Вот полный код:

module divBy2UsingDFF(Q, Qn, C, D
    );
   output Q;
   output Qn;
   input  C;
   input  D;
    wire Qn;
    d_flip_flop_edge_triggered DFFT(Q, Qn, C, Qn);

endmodule

Я новичок в Verilog, и я предполагаю, что это проблема синтаксиса.


person Serg    schedule 20.03.2016    source источник


Ответы (1)


Проверьте значение Q в симуляторе, поскольку красный, вероятно, означает X, что указывает на то, что значение данных триггера не определено, что обычно имеет место после сброса.

Есть несколько способов решить эту проблему:

  • Используйте триггер с асинхронным сбросом
  • Добавьте синхронную нагрузку для триггера данных

Кстати. вместо создания экземпляра DFFT вы можете написать делитель триггера с always. Также wire Qn; не требуется.

person Morten Zilmer    schedule 20.03.2016
comment
Да, значение Q равно X. Я определил ввод C в симуляторе, поэтому не знаю, почему он это показывает. У него тоже нет сброса. Я думаю, проблема может быть в том, что я использую Qn и как выход, и как вход? Я не уверен, что вы имеете в виду, когда пишете это всегда? - person Serg; 20.03.2016
comment
Нет, использование выхода Qn для подачи на вход — это нормально, но проблема в том, что внутренняя память триггера изначально не определена, поэтому после запуска ее нужно определить либо как 0, либо как единицу. Подумайте о себе; каково начальное значение триггера после включения питания? - person Morten Zilmer; 20.03.2016
comment
Начальное значение не определено! Ах, я вижу, что вы говорите. Есть ли способ инициировать переменную из кода? - person Serg; 20.03.2016
comment
Предложения по инициализации: использовать FF с асинхронным сбросом или изначально загрузить значение, как указано в пунктах для Существует несколько способов решить эту проблему: - person Morten Zilmer; 21.03.2016
comment
Наконец-то заработало благодаря вашим советам. Спасибо - person Serg; 21.03.2016