Verwendung von Look-Up-Tabellen
(EN google-translate)
(PL google-translate)
Anstatt Logische Verknüpfungen über typische Digitale Bausteine, wie UND-Gatter, NICHT-Gatter oder ODER-Gatter zu beschreiben, ist es oft ein direkterer Weg, eine Wahrheitstabelle auf den FPGA zu übertragen, indem ein Look-Up-Table (LUT) verwendet wird.
Als beispielhafte Umsetzung, bietet sich an, den Zwei-Bit-Vergleicher aus Kapitel 5.3 mit Hilfe eines LUT-Elementes aus der UNISIM-Library aufzubauen.
Wieder wird das ursprüngliche Projekt in einen Unterordner kopiert und die betreffenden Programmteile ausgetauscht:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mustervergleich is Port ( A1 : in STD_LOGIC; A0 : in STD_LOGIC; B1 : in STD_LOGIC; B0 : in STD_LOGIC; C : out STD_LOGIC); end mustervergleich; architecture Behavioral of mustervergleich is begin C <= (A1 xnor B1) and (A0 xnor B0); end Behavioral;
Code 0-1: Ursprünglicher Quelltext aus Kapitel 5.3 ohne Verwendung einer LUT.
Umsetzung mit LUT
Bild 0-1: LUT4 - Look-Up-Table mit 4 Eingängen und einem Ausgang, Quelle: spartan3e_hdl.pdf.
Die gewünschte Logik kann im Bereich "generic map" über ein Initialisierungsbitmuster der vordefinierten Initialisierungs-Variablen "INIT" vorgegeben werden.
Man gibt einfach die Bitfolge der Ausgänge an, die in ihrer natürlichen Reihenfolge den Eingangskombinationen zugeordnet werden sollen (vergl. nachfolgende Tabelle):
Bild 0-2: Zuordnungstabelle zwischen Eingängen und den in INIT gemerkten Werten für den Ausgang.
In unserem Fall wäre die für INIT vorzugebende Bitabfolge: ACHTUNG: MSB zuerst! - wg. Symmetrie hier nicht erkennbar.
INIT => "1000010000100001"
Code 0-2: Bitabfolge für INIT
Projektumsetzung
muster_lut.zip - Xilinx ISE 9.1 - Projekt zur Verwendung eines LUT4-Elements zur Realisierung eines Zwei-Bit-Vergleichers.library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library UNISIM; use UNISIM.VComponents.all; entity mustervergleich is Port ( A1 : in STD_LOGIC; A0 : in STD_LOGIC; B1 : in STD_LOGIC; B0 : in STD_LOGIC; C : out STD_LOGIC); end mustervergleich; architecture Behavioral of mustervergleich is begin LUT4_instanz : LUT4 generic map ( INIT => "1000010000100001" ) port map (O => C,I0 => A0,I1 => A1,I2 => B0,I3 => B1); end Behavioral;
Code 0-3: mustervergleich.vhd - VHDL-Quelltext zur Realisierung des Zwei-Bit-Vergleichers mit einem LUT4-Element.
Die Constraints und die Hardware-Beschaltung sind die gleichen, wie im ersten Projekt unter Kapitel 5.3.