2017-08-29 10 views
0

Je suis tombé sur un design logique où j'ai quelques questions. La première question est de savoir s'il existe deux flip-flops SR distincts dans cette conception? La deuxième question est de savoir si une horloge est normalement utilisée pour propager les entrées à travers la conception ou si cela peut être appelé combinatoire? Parce que j'ai de la difficulté à comprendre combien de cycles d'horloge il faudra pour propager une entrée à la sortie. Si je comprends bien, il faudra d'abord un cycle d'horloge pour se propager à travers la première partie de la conception (la première bascule?) Et ensuite le deuxième cycle d'horloge propagera les nouvelles entrées à la deuxième partie de la conception (deuxième tongues?).Logique synchrone ou asynchrone - SR-Flipflop

logical design

Je suis en train de mettre en œuvre cette conception en VHDL, mais pas tout à fait sûr que si je ne peux faire quelque chose comme ceci:

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; 

Aussi, sont-il des exemples où une telle conception est appliquée . J'ai lu que c'est assez commun pour dénoncer en utilisant des commutateurs et des boutons sans comprendre correctement comment ceci peut aider à éviter le rebondissement.

+2

Votre diagramme et le code VHDL ne correspondent pas. *** ... J'ai du mal à comprendre combien de cycles d'horloge il faudra pour propager une entrée vers la sortie. *** Il n'y a pas non plus d'horloge discernable. Votre question n'est pas claire. Avez-vous envisagé de simuler? Vous ne nous montrez pas comment cela est utilisé. – user1155120

+1

2 downvotes ?! Pourquoi? C'est une question parfaitement raisonnable sur la logique combinatoire, et montre quelques efforts de recherche, et est * loin * mieux que la grande majorité des questions VHDL ou Verilog sur SO. – EML

Répondre

0

Actuellement votre dessin est combinatoire parce que vous n'avez pas d'horloge dedans ni de bascule de registre à décalage. Cela signifie que si vous changez les entrées, les sorties se mettront à jour directement, il peut y avoir un délai mais il n'est pas pris en compte lors d'une simulation.

Si vous voulez que votre conception soit séquentielle, vous devez ajouter des registres (alias D Flip Flop) pour stocker les résultats temporaires. Le comportement d'un DFF est de stocker l'entrée et de la transmettre comme sortie sur une horloge de front montant.

D Flip Flop behavior

Compte tenu de la D est l'entrée et Q est la sortie que vous voyez que vous avez besoin d'attendre le prochain front montant de l'horloge pour propager le signal d'entrée à la sortie ou dans une conception combinatoire. C'est ainsi que vous faites un circuit synchrone et que vous créez des pipelines en passant.

Je vous conseille d'essayer d'implémenter un D Flip Flop par vous-même avec le type de comportement et d'en ajouter un avant chaque entrée et un après chaque sortie. Pour obtenir cette conception: Synchronous circuit principle

Ensuite, vous devez simuler et vous verrez que vos sorties changent sur une horloge de front montant que, vous aussi vous voir avoir qu'un seul cycle d'horloge entre le changement de l'entrée et la mise à jour de la sortie. Aussi, c'est le principe sur la façon de créer un circuit synchrone.

Si vous voulez plus de cycles (pour augmenter la fréquence d'horloge par exemple) vous devez diviser votre conception en deux modèles combinatoires et ajouter un DFF entre eux. Entre Q1 et S2 par exemple. Si vous le faites, le premier cycle d'horloge calcule Q1 à partir de vos entrées et le stocke dans le DFF du milieu et le deuxième cycle d'horloge calcule les sorties de Q1.

Je pense que vous devriez chercher des livres ou des leçons qui expliquent comment faire de tels dessins, c'est une base nécessaire si vous voulez faire un circuit numérique.

1

Il y a deux verrous SR en cascade dans la conception, pas de bascules. Les deux sont des loquets NAND cross-couplés classiques (vous pouvez le voir si vous dé-Morganisez le second loquet).

Ceci est un circuit complètement combinatoire; il n'y a pas d'horloge, et vous devez penser en termes de logique combinatoire, non cadencée/séquentielle.Ce que cela fait réellement, cependant, je ne suis pas sûr. En général, S1 et R1 sont des entrées de contrôle actif-bas, et Q2 est une sortie active-basse. S1 'définit' (et force) Q2 (à 0), mais la réinitialisation (à 1) est plus compliquée - vous devez libérer R1, puis définir A ou R2, et le point n'est pas évident. Cela fait vraisemblablement partie d'un circuit plus grand - peut-être une implémentation de type «flip-flop» (notez que tout ce que vous considérez comme une logique «cadencée» est fondamentalement un circuit combinatoire asynchrone, comme celui-ci). Un seul verrou SR peut être utilisé pour le démontage, mais c'est pour la conception au niveau de la carte - vous ne le feriez pas dans une puce (vous feriez plutôt tout synchroniser).

Votre VHDL est un bon début, mais vous avez besoin de A et R2 dans la liste de sensibilité. Avec votre logique actuelle, ils sont effectivement échantillonnés lorsque S1 ou R1 change (vous avez donc ajouté deux circuits d'échantillonnage, soit des bascules). Je voudrais le diviser en deux processus, où le premier est sensible à S1 et R1, et le second est sensible à Q1, A, R2.

Vous pourriez éventuellement synthétiser ce circuit dans un FPGA, mais vous devez faire attention à la synchronisation, sinon cela ne fonctionnera pas.