环形计数器左移

Left Shift In Ring Counter

module RingCounter(

input logic Clock,

input logic Reset,

output logic [3:0] Count

);


always_ff @(posedge Clock, posedge Reset)

begin

if (Reset) 

Count <= 4’d1;

else 

Count <= {Count[2:0], Count[3]};

end

endmodule

我在 SystemVerilog 中有上面的 4 位环形计数器的工作代码,但我不确定它的一行是如何工作的,因为它在讲座中没有清楚地解释。

Count <= {Count[2:0], Count[3]};

如果能帮助您准确解释该行的作用,我们将不胜感激。

花括号 {} 是串联运算符。他们将多个位连接成一条总线。

在非阻塞赋值 (<=) 的左侧,您有 Count,这是编写 4 位总线的简写方式:Count[3:0] .

在作业的右侧,您将 3 位信号 Count[2:0] 与 1 位信号 Count[3] 连接在一起。

另一种写入 RHS 的方法是按以下顺序作为 4 个单独的位:

{Count[2], Count[1], Count[0], Count[3]}

另一种写入 LHS 的方法是按以下顺序作为 4 个单独的位:

{Count[3], Count[2], Count[1], Count[0]}

因此,赋值将新的 Count[3] 设置为旧的 Count[2],等等

参考 IEEE Std 1800-2017,第 11.4.12 节 串联运算符