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

在VHDL中,声明一个大向量和使用它的切片与声明多个小向量之间有区别吗?,vhdl,fpga,Vhdl,Fpga,在FPGA内部如何实现、门/LUT使用、性能等方面,上述内容是否存在任何差异。 那么,当使用别名时,情况又如何呢 --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 d

在FPGA内部如何实现、门/LUT使用、性能等方面,上述内容是否存在任何差异。 那么,当使用别名时,情况又如何呢

--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);

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

VHDL语言没有指定如何在设备(如FPGA)中实现设计,因此合成工具可以使用它想要的任何资源,只要得到的实现与VHDL源等效

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

结果是,等效VHDL设计通常会导致相同的优化实现,特别是如果设计简单,那么合成算法可以构建完整的内部设计结构。根据这些保留意见,简短的回答是:

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

这样做的结果是,您通常可以对易于编写、阅读、审查和测试的设计结构进行优先级排序,从而将错误数量和时间开销降至最低,然后让合成工具处理实现


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

从未看到任何区别。查看综合报告的“资源使用情况”部分以了解情况。每次在ISE中都会得到一个新的校验和,因为place&route使用一个随机的“种子”值。在FPGA中放置两个寄存器,就可以将它们放置在何处以及如何进行路由留下了很多可能性。@BrianDrummond是的,资源使用情况看起来是一样的。@jeff每次将设计放置在一个随机点上的目的是什么。延长FPGA的使用寿命?但是,一旦一个设计被写入闪存,它将始终使用相同的LUT和路由,对吗?在place&route算法中使用随机种子的目的是,如果你有一个设计,对于是否可能完全适合设备来说是边缘的,使用新的算法种子进行重建可能会使您得到一个合适的结果。我相信,您还可以指定手动固定值种子。这与生活毫无关系。
--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);