2017-08-29 23 views
0

Ich bin auf ein logisches Design gestoßen, wo ich einige Fragen habe. Die erste Frage ist, ob es in diesem Design zwei separate SR-Flipflops gibt. Die zweite Frage ist, ob eine Uhr normalerweise verwendet wird, um die Eingaben durch das Design zu übertragen oder ob dies kombinatorisch genannt werden kann. Weil ich Schwierigkeiten habe zu verstehen, wie viele Taktzyklen benötigt werden, um eine Eingabe an den Ausgang zu übertragen. Wenn ich es richtig verstehe, wird es zuerst einen Taktzyklus nehmen, um sich durch den ersten Teil des Entwurfs (das erste Flipflop?) Auszubreiten, und dann wird der zweite Taktzyklus die neuen Eingaben in den zweiten Teil des Entwurfs (zweites Flip Flops?).Synchron vs asynchron Logik - SR-Flipflop

logical design

Ich versuche, diesen Entwurf in VHDL zu implementieren, aber nicht ganz sicher, ob ich kann etwas tun:

entity logic_design is 
    port(
    R  : in std_logic; 
    S1 : in std_logic; 
    R1 : in std_logic; 
    A  : in std_logic; 

    Q  : out std_logic; 
    Q_bar : out std_logic 
); 
end logic_design; 

architecture Behavioral of logic_design is 

signal sig_Q1_out  : std_logic; 
signal sig_Q1_bar_out : std_logic; 
signal sig_Q2_out  : std_logic; 
signal sig_Q2_bar_out : std_logic; 

begin 

process(S1, R1) 
begin 

    sig_Q1_out  <= S1 nand sig_Q1_bar_out; 
    sig_Q1_bar_out <= R1 nand sig_Q1_out; 

    sig_Q2_out  <= sig_Q1_out nor sig_Q2_bar_out; 
    sig_Q2_bar_out <= (sig_Q2_out nor A) nor R; 

end process; 

Q  <= signal_Q2_out; 
Q_bar <= signal_Q2_bar_out; 

Auch gibt es Beispiele, wo solche Konstruktion angewandt wird . Ich habe gelesen, dass dies ziemlich häufig ist, wenn man Schalter und Tasten benutzt, ohne richtig zu verstehen, wie dies dazu beitragen kann, das Springen zu vermeiden.

+2

Ihr Diagramm und VHDL-Code stimmen nicht überein. *** ... Ich habe Schwierigkeiten zu verstehen, wie viele Taktzyklen benötigt werden, um eine Eingabe an den Ausgang zu übermitteln. *** Es gibt keine erkennbare Uhr in beiden. Deine Frage ist unklar. Haben Sie überlegt zu simulieren? Sie zeigen uns nicht, wie es benutzt wird. – user1155120

+1

2 downvotes ?! Warum? Dies ist eine vollkommen vernünftige Frage zur kombinatorischen Logik und zeigt einige Forschungsanstrengungen und ist * weit * besser als die große Mehrheit von VHDL- oder Verilog-Fragen zu SO. – EML

Antwort

0

Gegenwärtig ist Ihr Entwurf kombinatorisch, weil Sie keine Uhr darin noch ein Schieberegisterflipflop haben. Das heißt, wenn Sie die Eingänge ändern, werden die Ausgänge direkt aktualisiert, es kann zu einer Verzögerung kommen, sie wird jedoch während einer Simulation nicht berücksichtigt.

Wenn Sie möchten, dass Ihr Design sequentiell ist, müssen Sie Register (aka D Flip Flop) hinzufügen, um temporäre Ergebnisse zu speichern. Das Verhalten eines DFF besteht darin, die Eingabe zu speichern und sie als Ausgabe an einen Takt mit ansteigender Flanke zu übergeben.

D Flip Flop behavior

den D Anbetracht der Eingang und der Ausgang Q ist man sehen, dass man die nächste steigende Flanke des Takts warten muß, um das Eingangssignal auf den Ausgang oder in einem kombinatorischen Design zu propagieren. So machen Sie eine Schaltung synchron und erstellen Pipelines übrigens.

Ich rate Ihnen zu versuchen, ein D-Flip-Flop selbst mit der Art des Verhaltens zu implementieren und fügen Sie einen vor jedem Eingang und einen nach jeder Ausgabe. Um diesen Entwurf zu erhalten: Synchronous circuit principle

Dann sollten Sie es simulieren, und Sie werden sehen, dass Ihre Ausgaben auf eine steigende Flanke Uhr nur ändern, auch Sie werden sehen, Sie nur einen Taktzyklus zwischen der Änderung des Eingangs haben und die Aktualisierung der Ausgabe. Auch dies ist das Prinzip, wie man eine synchrone Schaltung erzeugt.

Wenn Sie mehr Zyklen benötigen (um beispielsweise die Taktfrequenz zu erhöhen), müssen Sie Ihr Design in zwei kombinatorische Designs aufteilen und ein DFF zwischen ihnen hinzufügen. Zum Beispiel zwischen Q1 und S2. Wenn Sie dies tun, berechnet der erste Taktzyklus Q1 von Ihren Eingängen und speichert ihn im mittleren DFF und der zweite Taktzyklus berechnet die Ausgänge von Q1.

Ich denke, Sie sollten nach einigen Büchern oder Lektionen suchen, die erklären, wie man solche Designs macht, es ist eine notwendige Basis, wenn Sie eine digitale Schaltung machen wollen.

1

Es gibt zwei kaskadierte SR Verriegelungen im Design, nicht Flip-Flops. Beide sind klassische kreuzgekoppelte NAND-Latches (Sie können dies sehen, wenn Sie das zweite Latch de-Morganisieren).

Dies ist eine vollständig kombinatorische Schaltung; es gibt keine Uhren, und man muss in kombinatorischer, nicht getakteter/sequentieller Logik denken.

Was es tatsächlich tut, bin ich mir nicht sicher. Im Allgemeinen sind S1 und R1 Aktiv-Niedrig-Steuereingänge und Q2 ist ein Aktiv-Niedrig-Ausgang. S1 "setzt" (und forciert) Q2 (auf 0), aber das Zurücksetzen (auf 1) ist komplizierter - Sie müssen R1 freigeben und dann A oder R2 setzen, und es ist nicht offensichtlich, was der Punkt davon ist. Es ist vermutlich Teil einer größeren Schaltung - möglicherweise eine Flip-Flop-Implementierung irgendeiner Art (beachte, dass alles, was Sie als "getaktete" Logik betrachten, im Grunde genommen eine asynchrone kombinatorische Schaltung ist, wie diese). Ein einzelner SR-Latch kann zum Entprellen verwendet werden, aber dies ist für Board-Level-Design - das würden Sie nicht in einem Chip tun (Sie würden stattdessen alles getaktet machen).

Ihr VHDL ist ein guter Anfang, aber Sie brauchen A und R2 in der Empfindlichkeitsliste. Mit Ihrer aktuellen Logik sind sie tatsächlich abgetastet, wenn S1 oder R1 ändert (so haben Sie zwei Sampling-Schaltungen, dh. Flipflops). Ich würde es in zwei Prozesse aufteilen, wobei der erste für S1 und R1 empfindlich ist und der zweite empfindlich für Q1, A, R2 ist.

Sie könnten diese Schaltung möglicherweise in ein FPGA synthetisieren, aber Sie müssen vorsichtig mit dem Timing sein, oder es wird nicht funktionieren.

Verwandte Themen