如何在 Verilog 中添加 1'b1 到 8 位注册?



我是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)模拟,这意味着当且仅当clk从任何其他值(x, z, 0)切换到1时,将执行相应的always块;

因此,在您的情况下,应该有一个时钟(clk)在测试台架的某个地方生成。周期性地在0和1之间切换。

一旦切换到0 -> 1,它就会被执行。如果condition正确,则执行hcount <= hcount + 1'b1。正如您提到的,编译器将零扩展1'b1到8位值00000001。其余部分与任何编程语言相同,hcount将递增。

与非阻塞赋值<=有一定的语义关联,但这将是另一个问题。就你的问题而言,这无关紧要。

因此,结果将是每个时钟周期进行一次增量,除非n_rst为'0'。此外,一旦计数器达到WIDH - 1,它将被设置为'0'。在一个时钟边只允许一个操作。

最新更新