【问题标题】: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】:

    &lt;&lt; 移位运算符将位左移指定的数字。它将在最低有效位上移动0

    a: 0011 << 1 --> 0110
                        ^ -- shifted in bit
    

    您示例中的 concat 运算符连接来自 ain 值的一些位:

    a: 0011
    in: 1
    {a[2:0], in} --> 0111
    

    但是,以下内容与移位相同:

    {a[2:0], 1'b0} --> 0110
    

    【讨论】:

      【解决方案2】:

      假设您将 in 替换为 1'b0 以使这两个示例的行为相同,则它们将使用任何现代综合工具合成到完全相同的硬件实现。如果存在模拟性能差异,我会感到惊讶,但无论如何我都不会担心。我建议使用您认为最易读的语法。

      【讨论】:

        猜你喜欢
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 2014-08-22
        • 2014-05-26
        • 2012-04-15
        • 2011-02-02
        相关资源
        最近更新 更多