在 Verilog 和 VHDL 中,`logic[19:4]` 和 `logic[15:0]` 到底有什么区别?

In Verilog and VHDL, what exactly is the difference between `logic[19:4]` and `logic[15:0]`?

当然还有 VHDL 中的等效语法?

索引下限是索引的下限吗?在具有不同界限但相同宽度的信号之间分配会发生什么?

假设您的意思是宽度相同...

...因此,在 Verilog 中,我们假设您的意思是

logic [19:4] v19_4;
logic [15:0] v15_0;

在 Verilog 模拟 中,除非尝试对位进行索引,否则您不会体验到任何差异。

如果你索引这些位,你会发现

  • 在第一种情况下,左边的位是第19位(即v19_4[19]),而在第二种情况下,左边的位是第15位(即v15_0[15]);

  • 在第一种情况下,右边的位是位 4(即 v19_4[4]),而在第二种情况下,右边的位是位 0(即 v15_0[0]).

在Verilog中,调用左边位"the MSB"和右边位"the LSB"是有效的。

您将在 VHDL 中遇到完全相同的行为。在 VHDL 中,我们假设您的意思是

signal v19_4 : std_logic_vector(19 downto 4);
signal v15_0 : std_logic_vector(15 downto 0);

同样,在 VHDL 仿真中,除非尝试索引位 ,否则您不会体验到任何差异。如果你索引这些位,你会发现

  • 在第一种情况下,左边的位是第19位(即v19_4(19)),而在第二种情况下,左边的位是第15位(即v15_0(15));

  • 在第一种情况下,右边的位是第4位(即v19_4(4)),而在第二种情况下,右边的位是第0位(即v15_0(0)).

使用 synthesis 您可能会看到不同之处。 通常建议从 0 开始对向量进行索引以进行综合,以消除合成比您需要的更多位的可能性。但是,我认为大多数综合器会优化掉多余的逻辑。