Verilog:给定时钟为10ns,添加1到10位寄存器需要多长时间?
请参阅下面的verilog代码。时钟是一个10ns的时钟。将设置计时器\u 10ns=采样周期[9:0])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中,我们不会在设计中使用主动低电平重置,因为这会
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