【问题标题】:Difference between shift operation using concatenate operator {} and shift operator << in verilog在verilog中使用连接运算符{}的移位操作和移位运算符<<之间的区别
【发布时间】:2022-01-01 09:13:00
【问题描述】:
reg [3:0]a;
reg in;
a <= {a[2:0],in}; //1- Using Concatenate
Operator
a <= a<<1; //2- Using Shift operator
1 和 2 有什么区别:
a) 运行速度。
b) 综合中的硬件实现。
一般首选哪一个?
【问题讨论】:
标签:
verilog
hardware
system-verilog
synthesis
vlsi
【解决方案1】:
<< 移位运算符将位左移指定的数字。它将在最低有效位上移动0:
a: 0011 << 1 --> 0110
^ -- shifted in bit
您示例中的 concat 运算符连接来自 a 和 in 值的一些位:
a: 0011
in: 1
{a[2:0], in} --> 0111
但是,以下内容与移位相同:
{a[2:0], 1'b0} --> 0110
【解决方案2】:
假设您将 in 替换为 1'b0 以使这两个示例的行为相同,则它们将使用任何现代综合工具合成到完全相同的硬件实现。如果存在模拟性能差异,我会感到惊讶,但无论如何我都不会担心。我建议使用您认为最易读的语法。