Gast
#1131482
Hallo, beim Schreiben eines komplexeren VHDL Programms (ohne viel Erfahrung ;) ) bin ich auf der Suche nach einer extrem schnellen Schaltung auf folgende Konstruktion gestoßen: ********************************************** entity Latch_Register is port ( clk: in std_logic; sel: in std_logic_vector(1 downto 0); input : in std_logic_vector(127 downto 0); output: out std_logic_vector(31 downto 0) ); end Latch_Register; architecture Behavioral of Latch_Register is signal intern : std_logic_vector(31 downto 0); begin intern <= input(127 downto 96) when sel = "00" else input(95 downto 64) when sel = "01" else input(63 downto 32) when sel = "10"; proc1 : process (clk) begin if rising_edge(clk) and sel /= "11" then output <= intern; end if; end process; end Behavioral; ***************************************************** Offensichtlich synthetisiert Xilinx das zu einem Latch (resultierend aus dem unvollständigen Multiplexer) mit einem hintergeschaltenen Register. In meiner Schaltung ergibt eine solche Konstruktion einen Zeitgewinn von etwa 40% bezüglich der maximalen Frequenz. Es funktioniert auch einwandfrei auf meinem FPGA (der Latches unterstützt). Meine Frage ist nun: Wie genau funktioniert diese Schaltung? Und, falls es jemand weiß: Warum ist sie um so vieles schneller als eine LUT oder eine vergleichbare Schaltung ohne zwischengeschaltetem Latch (zumindest theoretisch)? Vielen Dank für Antworten im Voraus, Latcher/Ledger ;)
