在 VHDL 中,声明一个大向量和使用它的切片与声明多个小向量之间有区别吗?

In VHDL is there a difference between declaring one large vector and using slices of it verses declaring multiple small vectors?

--Example 1:
    signal x : STD_LOGIC_VECTOR(15 downto 0);
    --do something with x(15 downto 8);
    --do soemthing else with x(7 downto 0);

--Example 2:
    signal x0 : STD_LOGIC_VECTOR(7 downto 0);
    signal x1 : STD_LOGIC_VECTOR(7 downto 0);
    --do something with x0(7 downto 0);
    --do something else with x1(7 downto 0);

在 FPGA 内部的实现方式、gate/LUT 用法、性能等方面,上述内容是否存在差异? 当像这样使用别名时呢?

--Example 3:
    signal x : STD_LOGIC_VECTOR(15 downto 0);
    alias x0 is x(15 downto 8);
    alias x1 is x(7 downto 0);
    --do something with x0(7 downto 0);
    --do something else with x1(7 downto 0);

我是新手所以不知道如何自己验证它,因为在 Xilinx ISE 中即使我在相同的源代码上重新生成位文件两次,生成的位文件的校验和总是在变化。我猜它会在位文件中添加时间戳或一些随机数?

VHDL 语言没有指定如何在设备中实现设计,例如FPGA,所以综合工具可以使用它想要的任何资源,只要最终实现与 VHDL 源代码等效。

工具供应商,例如Xilinx或Altera,通常不指定实现方法,但工具通常非常擅长优化设计,从而实现尽可能小的实现。

结果是等效的 VHDL 设计通常会产生相同的最佳实现,特别是如果设计很简单,因此综合算法可以构建完整的内部设计结构。基于这些保留意见,简短的回答是:

假设所有 3 种设计都是等效的,因此它们将具有相同的实现。

这样做的结果是,您通常可以优先考虑易于编写、阅读、审查和测试的设计结构,从而最大限度地减少错误数量和时间花费,然后让综合工具处理执行。

最后,艺术就是理解什么时候 通常 不适用,因此您必须编写适合工具和设备的设计以获得最大性能和填充.