verilog/system verilog 中的最大连线位宽是多少
What is the maximum wire bit-width in verilog/system verilog
我正在尝试使用英特尔 Quartus 软件综合设计。在合成流程中,我收到一条警告 "Verilog declaration warning: vector has more than 2**16 bits"。由于项目规范,线长超过 2^16 位。我真的需要担心这个警告吗? Verilog/System Verilog 中是否有任何关于线路最大位宽的限制?
是的,根据 the SystemVerilog LRM 它可以受到限制,并且由于您的综合工具正在发出警告,如果您的项目未来出现任何问题,您应该记住这一点。
对于打包数组(第 7.4.1 节),根据警告您可能指的是上述 LRM:
The maximum size of a packed array can be limited, but shall be at least 65 536 (2^16) bits.
对于解压缩的数组(第 7.4.2 节),它表示:
Implementations may limit the maximum size of an array, but they shall allow at least 16 777 216 (2^24) elements.
但是,您真的需要 2^16 位宽的向量吗?如果您有一个 16 位变量(例如 logic [15:0]
),您可以处理最大 2^16-1 = 65535
的无符号值。如果你有一个 2^16 位宽的向量(例如 logic [65535:0]
),你可以显示最大 2^(2^16)-1 ≈ 2.00 × 10^19728
的值。
你能不能把你的电线分成几根更小的电线?
Verilog/SystemVerilog 语言本身没有定义最大矢量宽度。我依稀记得 IEEE1364 / IEEE1800 LRM 某处提到的最低模拟。
由于各种原因,合成器可能有其自身的局限性;例如软件复杂性、物理 mapping/routing、业务策略(“购买此其他工具”)等。您收到警告的事实可能表明物理 mapping/routing,因为大多数合成器都试图将所有位保存在一个向量中一起;从而使整体路由和时钟树缓冲更容易。
2^16 位很多,您的设计超出了这个范围。从理论上讲,您可以将整个矢量拆分为更易于管理的块(例如左、右),这可能会为您提供更好的路由和时间安排。如果您的设计满足所有要求,则可以忽略该警告。当它突然无法再被忽视时,请准备好做出改变。
是的,您应该担心这些消息。这意味着您可能对某些内容进行了错误编码,因为我不相信您真的需要一个具有 2^16 位的整数向量(压缩数组)。这意味着要表示一个大到 2^16^2 = 1.1579209e+77 的数字。您可能需要一个未压缩的位或字节数组。
我正在尝试使用英特尔 Quartus 软件综合设计。在合成流程中,我收到一条警告 "Verilog declaration warning: vector has more than 2**16 bits"。由于项目规范,线长超过 2^16 位。我真的需要担心这个警告吗? Verilog/System Verilog 中是否有任何关于线路最大位宽的限制?
是的,根据 the SystemVerilog LRM 它可以受到限制,并且由于您的综合工具正在发出警告,如果您的项目未来出现任何问题,您应该记住这一点。
对于打包数组(第 7.4.1 节),根据警告您可能指的是上述 LRM:
The maximum size of a packed array can be limited, but shall be at least 65 536 (2^16) bits.
对于解压缩的数组(第 7.4.2 节),它表示:
Implementations may limit the maximum size of an array, but they shall allow at least 16 777 216 (2^24) elements.
但是,您真的需要 2^16 位宽的向量吗?如果您有一个 16 位变量(例如 logic [15:0]
),您可以处理最大 2^16-1 = 65535
的无符号值。如果你有一个 2^16 位宽的向量(例如 logic [65535:0]
),你可以显示最大 2^(2^16)-1 ≈ 2.00 × 10^19728
的值。
你能不能把你的电线分成几根更小的电线?
Verilog/SystemVerilog 语言本身没有定义最大矢量宽度。我依稀记得 IEEE1364 / IEEE1800 LRM 某处提到的最低模拟。
由于各种原因,合成器可能有其自身的局限性;例如软件复杂性、物理 mapping/routing、业务策略(“购买此其他工具”)等。您收到警告的事实可能表明物理 mapping/routing,因为大多数合成器都试图将所有位保存在一个向量中一起;从而使整体路由和时钟树缓冲更容易。
2^16 位很多,您的设计超出了这个范围。从理论上讲,您可以将整个矢量拆分为更易于管理的块(例如左、右),这可能会为您提供更好的路由和时间安排。如果您的设计满足所有要求,则可以忽略该警告。当它突然无法再被忽视时,请准备好做出改变。
是的,您应该担心这些消息。这意味着您可能对某些内容进行了错误编码,因为我不相信您真的需要一个具有 2^16 位的整数向量(压缩数组)。这意味着要表示一个大到 2^16^2 = 1.1579209e+77 的数字。您可能需要一个未压缩的位或字节数组。