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


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. (Firma: Titel) (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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.