Syntheseergebnis: RTL vs. Technology Map Viewer

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      

Geben Sie hier die Bildbeschreibung ein

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.

Antworten (4)

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:

Inhalt der Zelle

Die Kammzelle:

Invertierte Eingänge

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:

Gleichungsansicht

Hier sehen wir, dass die Gleichung wird:

P _ A ¯ A

Hallo Danke. Ich sehe es jetzt. nur ein weiterer Zweifel. In Technology Map gibt es zwei Blasen, eine für Port A und eine für Port B. Aber warum die Gleichung nur geschrieben wird als: <c> keyboard~1 = !DATAA & DATAB während in F tab ist, ist sinnvoller. Es gibt nur eine Blase in Post B und die Gleichung lautet: <c> F = DATAA & !DATAB
@Codelearner777 Die FTab-Gleichung sagt Ihnen, was sich in der LUT befindet. Die keypad~1Registerkarte beschreibt die LUT selbst.
Nehmen Sie das 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
Danke nochmal. Jetzt ist alles klar. Dies ist das erste Mal, dass ich das Synthesis CAD Tool verwende. Ich habe Ihre Antwort bereits als Antwort ausgewählt.
@Codelearner777 Wenn Sie zufrieden sind, dass Ihre Frage beantwortet wird, können Sie sie positiv bewerten und akzeptieren .

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

( A B ) A

( A B ¯ + A ¯ B ) B

A A B ¯ + A A ¯ B

A B ¯ + 0 ( A A ¯ ist 0, also ist die rechte Seite 0)

A B ¯

die Technologiekartenansicht zeigt es als (!B UND p_b).
Hmm. Versuchen Sie zu sehen, ob ein Eingang einen Inverter enthält
ja, das ist die einzige möglichkeit. aber ich kann die Dokumentation bisher nicht finden. Ich werde morgen nochmal danach suchen. trotzdem danke.

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.

Wenn wir die Eigenschaften von logic_cell_comb sehen, können wir die genaue Schaltung oder ihre logische Gleichung sehen.
Ich weiß nicht. Ich habe Xilinx und Synopsys für ASICs verwendet. Alle diese Tools funktionieren auf die gleiche Weise. Ich hatte nie das Bedürfnis, in sie hineinzuschauen.