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:

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:
1
library ieee; 
2
use ieee.std_logic_1164.all;
3
  
4
entity sr_latch is 
5
   port(
6
     r, s: in std_logic; 
7
     q, q_n: out std_logic
8
 ); 
9
end sr_latch;  
10
11
architecture struct of sr_latch is 
12
   signal x1, x2: std_logic;
13
begin 
14
15
16
   x1   <= s nor x2; 
17
   x2   <= r nor x1; 
18
19
   - option 2: nand gates
20
   -- x1   <= s nand x2; 
21
   -- x2   <= r nand x1; 
22
23
   q <= x1 ;
24
   q_n <= x2 ;
25
end struct ;

Die Testbench ist:
1
--- testbench for sequential 
2
3
4
library ieee;
5
use ieee.std_logic_1164.all ;
6
7
8
entity latch_tb is begin
9
end entity latch_tb ;
10
11
12
architecture arc of latch_tb is 
13
14
  component sr_latch is
15
    port (
16
      s : in std_logic;
17
      r : in std_logic;
18
      q : out std_logic ;
19
      q_n : out std_logic 
20
    );
21
  end component sr_latch;
22
23
  signal tb_s   : std_logic;
24
  signal tb_r   : std_logic;
25
  signal tb_q   : std_logic;
26
  signal tb_q_n : std_logic;
27
28
  signal clk : std_logic;
29
30
31
begin
32
33
  uut : sr_latch port map ( 
34
    s   => tb_s,
35
    r   => tb_r,
36
    q   => tb_q,
37
    q_n => tb_q_n
38
  );
39
40
  --- stimuli
41
  clk_proc: process
42
  begin
43
44
    clk <= not clk;
45
    -- wait for clk_period/2;
46
    wait for 5 ns;
47
48
  
49
    if NOW > 500 ns then
50
      wait;
51
    end if;
52
  end process clk_proc;
53
54
  stim_proc: process
55
  begin
56
    tb_s <= '1';
57
    tb_r <= '1'; 
58
    
59
    wait for 10 ns;
60
61
    tb_s <= '1'; 
62
    tb_r <= '0'; 
63
    
64
    wait for 10 ns;
65
66
    tb_s <= '1'; 
67
    tb_r <= '1'; 
68
    
69
    wait for 20 ns;
70
71
    tb_s <= '0'; 
72
    tb_r <= '1'; 
73
    
74
    wait for 20 ns;
75
    
76
    tb_s <= '1'; 
77
    tb_r <= '1'; 
78
    
79
    wait for 20 ns;
80
81
    tb_s <= '1'; 
82
    tb_r <= '0'; 
83
    
84
    wait for 10 ns;
85
86
    tb_s <= '0'; 
87
    tb_r <= '0'; 
88
    
89
    wait for 30 ns;
90
91
    tb_s <= '1'; 
92
    tb_r <= '1'; 
93
    
94
    wait for 10 ns;
95
96
    tb_s <= '1'; 
97
    tb_r <= '1'; 
98
99
    wait;
100
101
  end process stim_proc;
102
103
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:

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)


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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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