Verilog:给定时钟为10ns,添加1到10位寄存器需要多长时间?

Verilog:给定时钟为10ns,添加1到10位寄存器需要多长时间?,verilog,fpga,Verilog,Fpga,请参阅下面的verilog代码。时钟是一个10ns的时钟。将设置计时器\u 10ns=采样周期[9:0]) TimerCounter_10ns经过一些修改后,通常在fpga中,我们不会在设计中使用低电平复位,因为这会产生更多的LUT使用,并且它的实现方式并不高效。因此,我修改了代码以生成 reg[9:0]时间计数器; 注册系统; 始终@(posedge CLK、negedge xRST) 如果(~xRST)sys_rst经过一些修改,通常在fpga中,我们不会在设计中使用主动低电平重置,因为这会

请参阅下面的verilog代码。时钟是一个10ns的时钟。将设置计时器\u 10ns=采样周期[9:0])
TimerCounter_10ns经过一些修改后,通常在fpga中,我们不会在设计中使用低电平复位,因为这会产生更多的LUT使用,并且它的实现方式并不高效。因此,我修改了代码以生成

reg[9:0]时间计数器;
注册系统;
始终@(posedge CLK、negedge xRST)

如果(~xRST)sys_rst经过一些修改,通常在fpga中,我们不会在设计中使用主动低电平重置,因为这会产生更多的LUT使用,并且不是有效的实现方法

reg[9:0]时间计数器;
注册系统;
始终@(posedge CLK、negedge xRST)

如果(~xRST)sys_rst@toolic,为什么阻塞分配是一个问题?因为当您使用具有非阻塞分配的时钟时,您的模拟将只匹配真实硬件的行为。换句话说:如果你使用阻塞分配,你的模拟将与真实的硬件不匹配。@Oldfart不是每个都有不同的工作方式吗?我的verilog代码中的if条件在TimerCounter\u 10ns=TimerCounter\u 10ns+1完成之前不会执行吗?如果我将其更改为非阻塞赋值,If条件不会与increment by one语句同时执行吗?如果是这样,那么SamplePeriod[9:0]应该被合成吗?这是HDL,不是一些标准的C类编程语言。如果你想合成,你必须遵守规则!我可以写
a@toolic为什么阻塞分配是一个问题?因为当您使用具有非阻塞分配的时钟时,您的模拟将只匹配真实硬件的行为。换句话说:如果你使用阻塞分配,你的模拟将与真实的硬件不匹配。@Oldfart不是每个都有不同的工作方式吗?我的verilog代码中的if条件在TimerCounter\u 10ns=TimerCounter\u 10ns+1完成之前不会执行吗?如果我将其更改为非阻塞赋值,If条件不会与increment by one语句同时执行吗?如果是这样,那么SamplePeriod[9:0]应该被合成吗?这是HDL,不是一些标准的C类编程语言。如果你想合成,你必须遵守规则!我会写
a
reg [9:0] TimerCounter_10ns;
always @(posedge CLK, negedge xRST) begin
    if (~xRST)  begin
        ...
    end else begin
        TimerCounter_10ns = TimerCounter_10ns+1;
        if (imerCounter_10ns >= SamplePeriod[9:0])
            TimerCounter_10ns <= 0;
            .....
        end
    end
end
reg [9:0] TimerCounter_10ns;
reg       sys_rst;

always @(posedge CLK, negedge xRST)
    if(~xRST) sys_rst <= #1 1'b1;
    else      sys_rst <= #1 1'b0;

always @(posedge CLK, posedge sys_rst) begin
    if (sys_rst)  begin
        //...
    end else begin
            TimerCounter_10ns <= #1 (TimerCounter_10ns >= SamplePeriod[9:0]) ? 10'h0 :
                                     TimerCounter_10ns + 1'b1;
            //.....
        end
    end
end