VHDL并发选择性赋值综合

VHDL concurrent selective assignment synthesis

一个真正的初级问题,希望有一个初级答案,关于 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;

我为什么要问?好吧,我以前以错误的方式处理事情,即在制作所需组件的框图之前先在 VHDL 上描述事情。我会设想这被合成为一组和门逻辑​​? 任何帮助都会非常有帮助。 感谢 D

您需要查看目标 FPGA 的用户指南,并了解一个 'logic element'(Xilinx 术语中的'slice')中包含的内容。通常,FPGA 不会通过连接离散门(如 AND、OR 等)来实现组合逻辑。相反,一个逻辑元件将包含一个或多个 'look-up tables',通常有四个(但现在在一些较新的设备中有 6 个)输入.此查找 table (LUT) 的输入是逻辑函数的输入,输出是函数输出的 one。然后将 LUT 编程为 ROM,允许您的输入信号用作地址。每一种可能的输入组合都有一个 ROM 条目,结果是预期的逻辑功能。

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

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

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

在过去,您的代码将实现为单个 74150 TTL 电路,这是一个 16 对 1 多路复用器。你有一个 4 位 select (INPUT),这个 select 是芯片的 16 个输入之一,它被路由到一个输出 ('EW_NS` ). 74150 已过时,我找不到任何数据表,但很容易找到 8 对 1 多路复用器的外观图(例如 here)。 16->1 是相同的,但一切都更宽。我的旧 TI 数据手册基本上完全准确地显示了这个 link 双倍的图表。

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

74150 具有与 4 输入 look-up table 基本完全相同的功能(其中固定 look-up 数据与 '150 输入的固定电平相同) ,因此根据 scary_jeff 的回答,在 FPGA 的单个 LUT 中实现整个电路是微不足道的,而不是使用 NAND-level 实现。但是,在适当的芯片中,它将实现为 sum-of-products 或类似的东西(正是 linked 图中的内容)。这种情况下,画一个K-map,求一个最小解。我在信封背面的 2 分钟内得出了三个 3 输入与门,驱动一个 3 输入或门。我会把它作为练习留给你检查:)