将 1'b1 添加到 8 位寄存器在 Verilog 中如何工作?
How does adding 1'b1 to 8 bit reg work in Verilog?
我是 Verilog 的初学者,我想知道加法语句在这段程序中是如何工作的。
reg [7:0] hcount;
...
always @(posedge clk) begin
if(!n_rst) begin
hcount <= 'd0;
end else if(hcount== (WIDTH-1)) begin
hcount <= 'd0;
end else begin
hcount <= hcount + 1'b1;
end
end
我知道 1'b1
扩展为 8'b1
因为 hcount 有 8 位宽度,现在计算可以使用 8 位。但这种加法究竟是如何起作用的呢?非常感谢您的帮助。
Verilog 在某种意义上是一种硬件描述语言,它试图描述真实硬件的行为。现代硬件的属性之一是时钟。时钟驱动触发器,在不同的硬件设备之间同步数据。
verilog 中的时钟行为由 posedge clk
(或 negede)模拟,这意味着相应的 always 块将在且仅当 clk 切换到 1
来自任何其他值 (x, z, 0);.
因此,在您的情况下,应该有一个时钟 (clk) 在测试台的某处生成。它周期性地在 0 和 1 之间切换。
一旦它切换 0 -> 1
它就会被执行。如果条件正确,将执行 hcount <= hcount + 1'b1
。正如您提到的,编译器会将 1'b1 零扩展为 8 位值 00000001。其余部分与任何编程语言相同,hcount 将递增。
非阻塞分配有一定的语义,<=
,但这将是一个不同的问题。就您的问题而言,这无关紧要。
因此,除非 n_rst 为“0”,否则结果将是每个时钟周期执行一次增量。此外,一旦计数器达到 WIDH - 1,它将被设置为“0”。在一个时钟边沿只允许一个操作。
我是 Verilog 的初学者,我想知道加法语句在这段程序中是如何工作的。
reg [7:0] hcount;
...
always @(posedge clk) begin
if(!n_rst) begin
hcount <= 'd0;
end else if(hcount== (WIDTH-1)) begin
hcount <= 'd0;
end else begin
hcount <= hcount + 1'b1;
end
end
我知道 1'b1
扩展为 8'b1
因为 hcount 有 8 位宽度,现在计算可以使用 8 位。但这种加法究竟是如何起作用的呢?非常感谢您的帮助。
Verilog 在某种意义上是一种硬件描述语言,它试图描述真实硬件的行为。现代硬件的属性之一是时钟。时钟驱动触发器,在不同的硬件设备之间同步数据。
verilog 中的时钟行为由 posedge clk
(或 negede)模拟,这意味着相应的 always 块将在且仅当 clk 切换到 1
来自任何其他值 (x, z, 0);.
因此,在您的情况下,应该有一个时钟 (clk) 在测试台的某处生成。它周期性地在 0 和 1 之间切换。
一旦它切换 0 -> 1
它就会被执行。如果条件正确,将执行 hcount <= hcount + 1'b1
。正如您提到的,编译器会将 1'b1 零扩展为 8 位值 00000001。其余部分与任何编程语言相同,hcount 将递增。
非阻塞分配有一定的语义,<=
,但这将是一个不同的问题。就您的问题而言,这无关紧要。
因此,除非 n_rst 为“0”,否则结果将是每个时钟周期执行一次增量。此外,一旦计数器达到 WIDH - 1,它将被设置为“0”。在一个时钟边沿只允许一个操作。