Verilog代码在仿真中可以很好地工作,但不能在basys3板上生成输出

时间:2019-02-27 04:20:08

标签: verilog

我是一名学生,正在学习verilog。我需要创建一个D闩锁模拟。我的代码和测试平台非常适合仿真。但是,当我将其实现到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

这是我的模拟。 enter image description here

1 个答案:

答案 0 :(得分:4)

assign #2 D_i = ~D;

延迟无法合成-FPGA中没有硬件可用于构建可预测的无时钟延迟。请勿在测试平台之外使用它们。

如果您确实想要D锁存器(并且不能使用FPGA原语),则需要使用always块来描述其行为,例如

reg Q;
always @(D or Enable)
  if (Enable)
    Q <= D;

请注意,这将在许多综合工具中生成警告-闩锁被认为是不受欢迎的,因为它们经常会导致时序问题。