Коды Verilog хорошо работают в симуляции, но не генерируют выходной сигнал на плате basys3 - PullRequest
0 голосов
/ 27 февраля 2019

Я студент и учусь verilog.Мне нужно было создать симуляторы D-защелки.Мой код и testbench отлично работают для симуляции.Однако, когда я реализовал это на моей плате basys3, я не генерировал никаких выходных данных.

это мой источник дизайна:

module D_latch_dataflow(
input D,
input Enable,
output wire Q,
output wire Qbar
);
wire D_i;

assign #2 D_i = ~D;
assign #2 Q = ~(Enable & D_i |Qbar);
assign #2 Qbar = ~(Enable & D |Q);
endmodule

Я попытался изменить

output wire Q,
output wire Qbar

до

output Q,
output Qbar

Но это все равно не работает.В чем проблема ???

Это мой стенд:

module D_latch_dataflow_tb();
reg D;
reg Enable;
wire Q;
wire Qbar;

D_latch_dataflow DUT (.D(D), .Enable(Enable), .Q(Q), .Qbar(Qbar));

initial begin
    #120 $finish;
end

initial begin
    D = 0; Enable = 0;
    #10 D = 1;
    #10 Enable = 1;
    #10 D = 0;
    #10 D = 1;
    #10 Enable = 0;
    #10 D = 0;
    #10 D = 1;
    #10 D = 0;
    #10 Enable = 1;
    #10 D = 1;
    #10 D = 0;
    #20;
   end
  endmodule

Это мой симулятор. введите описание изображения здесь

1 Ответ

0 голосов
/ 27 февраля 2019
assign #2 D_i = ~D;

Задержки не могут быть синтезированы - в ПЛИС нет аппаратного обеспечения, которое можно было бы использовать для создания предсказуемой задержки без разгона.Их не следует использовать за пределами испытательных стендов.

Если вы действительно хотите использовать D-защелку (и не можете использовать примитивы FPGA), вам нужно будет описать ее поведение с помощью блока always, например

* 1006.*

Обратите внимание, что это будет генерировать предупреждения во многих инструментах синтеза - защелки считаются нежелательными, поскольку они часто вызывают проблемы с синхронизацией.

...