环形计数器左移
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 节 串联运算符。
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 节 串联运算符。