如何在没有#的情况下对Verilog中的延迟进行建模?这是可以合成的

如何在没有#的情况下对Verilog中的延迟进行建模?这是可以合成的,verilog,delay,clock,Verilog,Delay,Clock,我希望创建一个AND门,在延迟10 ns后得到结果,比如说,我的时钟是500 ps。我如何在不使用#延迟的情况下延迟作业 我试着做一个计数器,它会递增,但如何建模,使它只在输入发生变化时启动。此外,在第一个输出被评估和分配之前,输入不会改变。初始计数器为0,假设延迟为3'b111,所以我希望计数器从1变为3'b111,然后将其分配给y。输入是到与门的a和b always@(posedge clk)begin if (!reset) begin y <=0; counter <=0

我希望创建一个AND门,在延迟10 ns后得到结果,比如说,我的时钟是500 ps。我如何在不使用#延迟的情况下延迟作业

我试着做一个计数器,它会递增,但如何建模,使它只在输入发生变化时启动。此外,在第一个输出被评估和分配之前,输入不会改变。初始计数器为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
始终@(posedge clk)开始

如果(!reset)开始y如果时钟周期为500 ps,则需要计数到更高的值才能达到10 ns。我重写了您的代码,还添加了一个测试台供您尝试。这有点草率,我通常写vhdl而不是verilog。希望这有帮助

//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
//模块
模块计数和(
输入时钟,
输入复位,
输入a,
输入b,
输出寄存器y,
输出寄存器[4:0]计数器
);
reg就绪;
始终@(posedge clk)开始
如果(!重置)开始

嘿,拉伯茨,谢谢你的详细帮助。但除了明显的错误,更高的计数值。我关心的是,我的计数器将根据时钟增加,但每当我的输入A和B发生变化时,计数器应增加,从该点开始,它应启动计数器,直到达到延迟值。这在我们的代码中并没有发生。在我们的例子中,计数器是从复位信号开始的。如果我的输入在从重置点开始一段时间后开始,该怎么办。此时,我的计数器已经启动,并且接近延迟值,它将提前给出输出。我修改了我的原始帖子,以满足您的要求。我将其设置为重置计数器并停止,直到a或b再次改变。如果你想让柜台继续营业。刚刚删除了“准备好了,谢谢拉伯茨,这对我很有效!我没有想到两个总是阻止做必要的任务。”。