Проверка схемы триггера Verilog - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь построить структурную реализацию схемы, которая состоит из триггера объявления, он имеет входы x и y, x и y являются исключительными или, и этот результат является исключительным или будет с текущим состоянием, и используется в качестве входа для d триггера. и он будет использовать состояние результата из триггера при следующем запуске и т. д. Но я не слишком уверен, как его построить.

Схема выглядит так: enter image description here

module dff(D,clk,q);
input D,clk;
output q;
reg q;
always @ (posedge clk)
 begin
  q<=D;
 end
endmodule

Я почти уверен, что код d триггера верен, но когда я пытаюсь проверить это, мои значения d и состояния по какой-то причине равны x. Когда я вставляю разные значения x и y в моем тестовом стенде, ничего не происходит, «state» и «d» просто всегда говорят, что в симуляции имеет значение «1'hx». Почему это происходит и как я могу присвоить им значение?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Все сигналы в симуляции verilog инициализируются как 'x'. Так же как и значения A и D. Ваш второй xor применяется к xoy ^ A. Поскольку A равно x, результат этого xor всегда равен x. вам нужно разорвать этот цикл, как предложил oldfart.

Обычный способ сделать это - ввести reset на флопе, синхронном или асинхронном. Вот пример синхронного сброса флопа:

always @(posedge clk)
    if (reset)
        q <= 0;
    else 
        q <= D;

Итак, теперь, если вы установите сброс на «1» хотя бы для одного этапа clk, а затем установите его на «0», вы прервете цикл, выдвинув не-x значение в пути данных ,

0 голосов
/ 12 ноября 2018

Вы не очищаете свой D-FF. В начале вывод X, и при использовании в контуре обратной связи он остается X.

Это: wire state=1'b0; не очищает вас FF. Вы должны очистить «д».

...