mikrocontroller.net

Forum: FPGA, VHDL & Co. SR Latch simulieren in VHDL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Patrick M. (Firma: na) (bitdiver)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde gerne eine SR Latch simulieren, um ein besseres Gefühl für 
"Memory" in einem digitalen System zu bekommen.

Der Code für die SR Latch is:
library ieee; 
use ieee.std_logic_1164.all;
  
entity sr_latch is 
   port(
     r, s: in std_logic; 
     q, q_n: out std_logic
 ); 
end sr_latch;  

architecture struct of sr_latch is 
   signal x1, x2: std_logic;
begin 


   x1   <= s nor x2; 
   x2   <= r nor x1; 

   - option 2: nand gates
   -- x1   <= s nand x2; 
   -- x2   <= r nand x1; 

   q <= x1 ;
   q_n <= x2 ;
end struct ; 


Die Testbench ist:

--- testbench for sequential 


library ieee;
use ieee.std_logic_1164.all ;


entity latch_tb is begin
end entity latch_tb ;


architecture arc of latch_tb is 

  component sr_latch is
    port (
      s : in std_logic;
      r : in std_logic;
      q : out std_logic ;
      q_n : out std_logic 
    );
  end component sr_latch;

  signal tb_s   : std_logic;
  signal tb_r   : std_logic;
  signal tb_q   : std_logic;
  signal tb_q_n : std_logic;

  signal clk : std_logic;


begin

  uut : sr_latch port map ( 
    s   => tb_s,
    r   => tb_r,
    q   => tb_q,
    q_n => tb_q_n
  );

  --- stimuli
  clk_proc: process
  begin

    clk <= not clk;
    -- wait for clk_period/2;
    wait for 5 ns;

  
    if NOW > 500 ns then
      wait;
    end if;
  end process clk_proc;

  stim_proc: process
  begin
    tb_s <= '1';
    tb_r <= '1'; 
    
    wait for 10 ns;

    tb_s <= '1'; 
    tb_r <= '0'; 
    
    wait for 10 ns;

    tb_s <= '1'; 
    tb_r <= '1'; 
    
    wait for 20 ns;

    tb_s <= '0'; 
    tb_r <= '1'; 
    
    wait for 20 ns;
    
    tb_s <= '1'; 
    tb_r <= '1'; 
    
    wait for 20 ns;

    tb_s <= '1'; 
    tb_r <= '0'; 
    
    wait for 10 ns;

    tb_s <= '0'; 
    tb_r <= '0'; 
    
    wait for 30 ns;

    tb_s <= '1'; 
    tb_r <= '1'; 
    
    wait for 10 ns;

    tb_s <= '1'; 
    tb_r <= '1'; 

    wait;

  end process stim_proc;

end architecture arc;




Bei den waveforms schaue auf auf S und R und würde erwarten, dass Q und 
Q_N komplementär verlaufen. Den erwarten Memory effekt sehe ich auch 
nicht. Aber evt ist es auch ein Verständnisproblem. Besten Dank für eure 
Hilfe.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Patrick M. schrieb:
> tb_s <= '1';
> tb_r <= '1';
Das ist beim NOR Latch der verbotene Zustand. Der speichernde 
Grundzustand ist, wenn beide Eingänge '0' sind. Das ist beim Screenshot 
deiner Waveform ganz am Schluss der Fall. Fazit: passt alles.

Mit der entsprechend korrigierten Testbench, die den nicht speicherbaren 
"11" Zustand nicht mehr verwendet, sieht man dann, dass noch die 
Ausgänge bzw. die Eingänge vertauscht sind: eine '1' am S setzt den 
negierten Ausgang.


Beim NAND Latch ist übrigens dann genau der "00" Zustand am Eingang 
verboten:
https://www.elektronik-kompendium.de/sites/dig/0209302.htm

: Bearbeitet durch Moderator
von Patrick M. (Firma: na) (bitdiver)


Bewertung
0 lesenswert
nicht lesenswert
Danke, ok verstehe.

Bei den Inputs zur Simulation habe ich rumprobiert, und kam dann in die 
Sackgasse.
Dann merke ich mir, wobei ich nicht sicher bin ob man Logik so 
ausdrücken kann: NOR Latch (NOR Gatter Logik gibt immer '0' ausser für 
"00"   ) => Set-Reset => "11" wird verboten.

NAND Latch (NAND Gatter Logik gibt immer '1' assuer für "11" ) => 
Set-Reset => "00" wird verboten.

Vermutlich muss ich es mir noch ein paar mal auf Papier aufzeichnen und 
nochmal simulieren bevor ich es verinnerliche.

Vielen Dank jedenfalls für deine Hilfe vorhin!

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.