如何在没有 # 的情况下对 Verilog 中的延迟建模?那个可以合成

How to Model a delay in Verilog without # ? That can be synthesized

我想创建一个与门,它在延迟 10 纳秒后得到结果,我的时钟是 500 ps。我将如何在不使用 # delays 的情况下延迟作业?

我试图制作一个递增的计数器,但如何对其建模,以便它仅在我的输入更改时启动。在评估和分配第一个输出之前,输入也不会改变。初始计数器为 0,假设延迟为 3'b111,所以我希望计数器从 1 变为 3'b111,然后将其分配给 y。与门的输入是 a 和 b。

always@(posedge clk)begin
  if (!reset) begin y <=0; counter <=0; end
  else begin
   counter <= counter +1'b1;
   if(counter==delay)begin
     y <= a & b;
     counter <=0;
  end
end

好吧,如果您的时钟周期是 500 ps,那么您将需要计数到更高的值才能达到 10ns。我重写了你的代码,还添加了一个测试平台供你尝试。有点马虎,我一般写vhdl,不会写verilog。希望这个帮助ps.

//Module

module count_and (
    input clk,
    input reset,
    input a,
    input b,
    output reg y,
    output reg [4:0] counter
);

reg ready;

always@(posedge clk)begin
  if (!reset) begin 
    y <=0; 
    counter <=0; 
    ready <= 0;
  end
  else if (ready == 1'b1) begin
   counter <= counter +1'b1;
   if (counter==5'b10011) begin
     y <= a & b;
     counter <=0;
     ready <= 0; //turn it off after passing to y
   end
  end
 end

always @(a,b) begin
  ready <= 1'b1;
 end

endmodule

    //TestBench
`timescale 1ps/1ps
module tb_count ();

reg a,b;
reg clk;
reg reset;
wire [4:0] counter;
wire y;

initial begin
clk = 1'b1;
reset = 1'b0;
a = 1'b0;
b = 1'b0;
end

always begin
reset <= #50 1'b1;
clk = #250 ~clk;


a <= #1000 1'b1;
b <= #1000 1'b1;
end


count_and count_and_inst (
    .clk(clk),
    .reset(reset),
    .a(a),
    .b(b),
    .y(y),
    .counter(counter)
);

endmodule