Ich werte diesen Code unten aus. Aber ich habe gesehen, dass die Logikausgabe von RTL und Technology Map Viewer unterschiedlich ist. Ich benutze die Quartus Prime Elite Edition. Übersehe ich etwas?
das ist die wahrheitstabelle
RTL Technology Map
A (NOT A) p_a ((A XOR p_a) AND A) ((NOT A) AND p_a)
0 1 0 0 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
library ieee;
use ieee.std_logic_1164.all;
entity keypad is
port (
clk : in std_logic;
rst : in std_logic;
a : in std_logic;
b : in std_logic;
c : in std_logic;
d : in std_logic;
e : in std_logic;
keypad : out std_logic_vector (4 downto 0)
);
end entity keypad;
architecture rtl of keypad is
signal p_a, p_b, p_c, p_d, p_e : std_logic;
BEGIN
KEY: process(A, B, C, D, E, rst, clk)
begin
if rst = '1' then
p_a <= '0';
p_b <= '0';
p_c <= '0';
p_d <= '0';
p_e <= '0';
elsif clk'event AND clk='1' then
p_a <= A;
p_b <= B;
p_c <= C;
p_d <= D;
p_e <= E;
end if;
end process;
keypad(4) <= '1' when a /= p_a and a = '1' else '0';
keypad(3) <= (B XOR p_b) AND B;
END architecture;
Ich schätze jeden Vorschlag.
Sie werden dies häufig finden, wenn Sie die grafischen Netzlisten-Viewer verwenden. Der Compiler macht clevere Dinge, die Sie vielleicht nicht erwarten und die nicht immer sofort offensichtlich sind.
Der Grund ist, dass die kombinatorische Logikzelle in Ihrem Beispiel invertierende Eingänge hat. Sie müssen sowohl den Inhalt (F) als auch die Kammzelle selbst in der Eigenschaftenansicht überprüfen:
Dann der Inhalt:
Die Kammzelle:
Da sind Ihre fehlenden Wechselrichter. Die Kombizelle als "Active Low"-Eingänge, also muss die interne Logik sie invertieren.
Sie können sich die Gleichungsansicht ansehen, um dies zu bestätigen:
Hier sehen wir, dass die Gleichung wird:
Sie sind gleichwertig. Der Code/RTL-Viewer gibt die Gleichung als (B xor p_b) und B aus und die Technologiekartenansicht zeigt sie als B und !p_b an. Ersteres kann wie folgt zu letzterem vereinfacht werden
( ist 0, also ist die rechte Seite 0)
Beide sind gleichwertig. Der RTL-Viewer zeigt, welche digitale Logik von Ihrem HDL-Code implementiert wird. Es wäre, was Sie auf ein Papier zeichnen, wenn Sie eine digitale Schaltung entwerfen würden, die Ihre funktionalen Anforderungen erfüllt. Der Technology Viewer zeigt, wie diese digitale Schaltung im FPGA implementiert ist. Es hängt von der Technologie im FPGA ab. Für zB. Ein ODER-Gatter ist als einfache LTU im FPGA implementiert. Es zeigt, wie LUTs verwendet werden, welche IOBs verwendet wurden, ob Puffer auf Zeilen verwendet werden usw.
In Ihrem Technologie-Viewer zeigt es, dass die von zwei Logikgattern erzeugte Kombinationslogik als einzelne Wahrheitstabelle in einer LUT innerhalb des FPGA implementiert ist. So wie C_elegants geantwortet hat.
Der Logik-Mapper verwendet "funktionale" Symbole, das ist nur ein Quadrat mit der Funktion, die dieser Block erfüllt. Dies kann auf alle Arten von Logik abgebildet werden.
Wenn Sie zum Beispiel ein „+“ verwenden, ist die Funktion „Addierer“: ein Quadrat mit zwei Eingängen und einem Ausgang. Welche Karten auf zahlreichen Toren. Er kann auch auf verschiedene Gatter abgebildet werden, z. B. einen langsamen Ripple-Carry-Addierer oder einen schnelleren Carry-Look-Ahead-Addierer.
Ich erlaube einem Tool auch, mit einer Mischung aus zB Verilog und VHDL zu arbeiten. Sie verwenden zwei Compiler, um die Sprache auf funktionale Primitive abzubilden, und können dann mit einem Tool zu Gates gehen und optimieren.
Und sie können ein anderes Tool verwenden, um zu Gates zu gehen und für einen völlig anderen FPGA-Typ zu optimieren.
Codelearner777
Tom Tischler
F
Tab-Gleichung sagt Ihnen, was sich in der LUT befindet. Diekeypad~1
Registerkarte beschreibt die LUT selbst.Tom Tischler
F = DATAA & !DATAB
, invertieren Sie dann beide Eingänge, da die LUT aktive Low-Eingänge hat (siehe Registerkarte Ports). Ihre Gleichung wird dannF = !DATAA & !!DATAB = !DATAA & DATAB
Codelearner777
Tom Tischler