一个真正的初级问题,希望是一个初级答案,关于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
答案 0 :(得分:3)
您需要查看目标FPGA的用户指南,并了解一个'逻辑元素'中包含的内容(Xilinx术语中的'slice')。一般而言,FPGA不会通过连接像AND,OR等离散门来实现组合逻辑。相反,逻辑元件将包含一个或多个“查找表”,通常为四个(但现在在一些较新的设备中为6个)投入。此查找表(LUT)的输入是逻辑功能的输入,输出是函数输出的一个。然后将LUT编程为ROM,允许输入信号作为地址。每个可能的输入组合都有一个ROM条目,结果是预期的逻辑功能。
具有多个输出的函数将简单地并行使用其中几个LUT,具有相同的输入,每个函数输出一个LUT。需要比LUT更多输入的功能(例如,7个输入,其中LUT仅有4个),简单地将两个LUT并联组合,使用多路复用器在两个LUT的输出之间进行选择。最后的多路复用器使用其中一个输入信号作为控制,并且再次考虑每个可能的输入组合。
这对于创建像AND门这样简单的东西来说听起来效率低,但好处是这个简单的构建块(LUT)可以绝对实现任何组合功能。值得注意的是,FPGA工具链非常擅长优化逻辑功能以简化它们,并更好地将它们映射到FPGA中。 LUT为这些工具提供了一个非常通用的元素。
逻辑元素还将包含一些专用资源,用于不太适合LUT方法的函数。这些可能包括用于加法器的专用进位链,用于组合多个LUTS的输出的多路复用器,寄存器(大多数设计是同步的)。 LUT有时也可以配置为小型移位寄存器或RAM元件。在逻辑元件外部,将有更多特定的块,如大型乘法器,更大的存储器,PLL等,其中没有一个可以使用LUT资源有效地实现。同样,这将在目标FPGA的用户指南中进行解释。
答案 1 :(得分:0)
在当天,您的代码将被实现为单个74150 TTL电路,这是一个16:1的多路复用器。你有一个4位选择(INPUT
),这将选择芯片的16个输入之一,它被路由到单个输出('EW_NS`)。 74150已经过时,我找不到任何数据表,但很容易找到8对1多路复用器的图表(例如here)。 16→1是相同的,但是一切都更宽。我的旧TI数据手册基本上显示了此链接上的图表翻了一倍。
但是 - 等等。您的问题更容易,因为您没有将实际输入路由到输出 - 您只是设置固定数据值。在'150,你可以通过将16个输入中的5个连接到1,将剩下的11个连接到0来实现这一点。这使得逻辑更加容易。
74150具有与4输入查找表基本完全相同的功能(固定查找数据与'150输入端的固定电平相同),因此实现整个电路非常简单根据scary_jeff的答案,FPGA中的单个LUT,而不是使用NAND级实现。但是,在一个合适的芯片中,它将被实现为产品之和或类似的东西(恰好是链接图中的内容)。在这种情况下,绘制K-map并找到最小解。我在信封背面的2分钟内出现了三个3输入AND门,驱动一个3输入OR门。我会把它作为练习留给你检查一下:)