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.