VHDL并发选择分配综合

VHDL并发选择分配综合,vhdl,Vhdl,关于VHDL的一个主要赋值(并发选择赋值),这是一个真正的初级问题,希望有一个初级答案。谁能解释一下VHDL编译器会将以下描述合成什么 LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.numeric_std.ALL; ENTITY Q2 IS PORT (a,b,c,d : IN std_logic; EW_NS : OUT std_logic ); END

关于VHDL的一个主要赋值(并发选择赋值),这是一个真正的初级问题,希望有一个初级答案。谁能解释一下VHDL编译器会将以下描述合成什么

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY Q2 IS
PORT (a,b,c,d           :   IN  std_logic;
        EW_NS           :   OUT std_logic
        );
END ENTITY Q2;

ARCHITECTURE hybrid OF Q2 IS
SIGNAL INPUT                        :   std_logic_vector(3 DOWNTO 0);
SIGNAL EW_NS                        :   std_logic;

BEGIN
INPUT <= (a & b & c & d); -- concatination

WITH (INPUT) SELECT
        EW_NS <= '1' WHEN "0001"|"0010"|"0011"|"0110"|"1011",
                 '0' WHEN OTHERS;
END ARCHITECTURE hybrid;
IEEE库;
使用IEEE.std_logic_1164.ALL;
使用IEEE.numeric_std.ALL;
实体Q2为
端口(a、b、c、d:std_逻辑中;
EW\U NS:输出标准逻辑
);
最终实体Q2;
Q2的混合架构是
信号输入:标准逻辑向量(3到0);
信号电路:标准逻辑;
开始

输入您需要查看目标FPGA的用户指南,了解一个“逻辑元素”(Xilinx术语中的“切片”)中包含的内容。一般来说,FPGA不会通过连接诸如AND、OR等离散门来实现组合逻辑。相反,逻辑元素将包含一个或多个“查找表”,通常有四个(但现在在一些较新的设备中为6个)输入。此查找表(LUT)的输入是逻辑函数的输入,输出是函数的输出之一。然后,LUT被编程为ROM,允许输入信号作为地址使用。每个可能的输入组合都有一个ROM条目,其结果是预期的逻辑功能

具有多个输出的函数将简单地并行使用多个LUT,具有相同的输入,每个函数的输出一个LUT。需要比LUT更多输入的功能(例如,7个输入,其中一个LUT只有4个)简单地并行组合两个LUT,使用多路复用器在两个LUT的输出之间进行选择。最后的多路复用器使用一个输入信号作为控制,并且再次考虑输入的每个可能组合

对于创建简单的AND门来说,这听起来效率很低,但好处是这个简单的构建块(LUT)可以实现绝对任何组合函数。还值得注意的是,FPGA工具链非常擅长优化逻辑函数,以简化它们,并更好地将它们映射到FPGA中。LUT为这些工具的目标提供了一个高度通用的元素


逻辑元素还将包含一些专用资源,用于不适合LUT方法的函数。这些可能包括用于加法器的专用进位链、用于组合多个LUT输出的多路复用器、寄存器(大多数设计是同步的)。LUT有时也可以配置为小型移位寄存器或RAM元件。在逻辑元件外部,将有更具体的块,如大乘法器、大存储器、PLL等,其中没有一个可以使用LUT资源高效地实现。同样,这些都将在目标FPGA的用户指南中解释。

您需要查看目标FPGA的用户指南,了解一个“逻辑元素”(Xilinx术语中的“切片”)中包含的内容。一般来说,FPGA不会通过连接诸如AND、OR等离散门来实现组合逻辑。相反,逻辑元素将包含一个或多个“查找表”,通常有四个(但现在在一些较新的设备中为6个)输入。此查找表(LUT)的输入是逻辑函数的输入,输出是函数的输出之一。然后,LUT被编程为ROM,允许输入信号作为地址使用。每个可能的输入组合都有一个ROM条目,其结果是预期的逻辑功能

具有多个输出的函数将简单地并行使用多个LUT,具有相同的输入,每个函数的输出一个LUT。需要比LUT更多输入的功能(例如,7个输入,其中一个LUT只有4个)简单地并行组合两个LUT,使用多路复用器在两个LUT的输出之间进行选择。最后的多路复用器使用一个输入信号作为控制,并且再次考虑输入的每个可能组合

对于创建简单的AND门来说,这听起来效率很低,但好处是这个简单的构建块(LUT)可以实现绝对任何组合函数。还值得注意的是,FPGA工具链非常擅长优化逻辑函数,以简化它们,并更好地将它们映射到FPGA中。LUT为这些工具的目标提供了一个高度通用的元素


逻辑元素还将包含一些专用资源,用于不适合LUT方法的函数。这些可能包括用于加法器的专用进位链、用于组合多个LUT输出的多路复用器、寄存器(大多数设计是同步的)。LUT有时也可以配置为小型移位寄存器或RAM元件。在逻辑元件外部,将有更具体的块,如大乘法器、大存储器、PLL等,其中没有一个可以使用LUT资源高效地实现。同样,这些都将在目标FPGA的用户指南中进行解释。

回到过去,您的代码将被实现为单个74150 TTL电路,这是一个16对1的多路复用器。您有一个4位选择(
输入
),它选择芯片16个输入中的一个,该芯片被路由到单个输出('EW_NS')。74150已经过时,我找不到任何数据表,但很容易找到8对1多路复用器的外观图(例如)。16->1是相同的,但所有内容都更宽。我的旧TI数据手册基本上准确地显示了这个链接的图表

但是,等等。您的问题更容易,因为您没有将实际的输入路由到输出-您只是设置固定的数据值。在'150上,您可以通过将16个输入中的5个连接到1,将其余11个连接到0来实现这一点。这使得逻辑更加简单

74150具有基本上完全相同的功能