HILFE! Problem mit VHDL-Projekt

Gast #1302450
Lesenswert?

Hey, liebe Mikrocontrolercommunity! Ich hocke jetzt mehrere Stunden über 
einem Projekt für die Uni und bin so langsam recht ratlos, weil das 
letzte mal VHDL bei mir schon über ein Semester her ist.

"Erstellen Sie ein Projekt mit einem RS-Latch, einem D-Latch und einem 
D-Flipflop
und implementieren sie alle als VHDL-Entities und testen Sie ihre 
Entities mittels Simulator
in einer gemeinsamen VHDL-Datei."

Mir fehlt jetzt jeglicher Ansatz, wie ich das zusammen vermatschen (bzw 
ein projekt draus machen) soll und hoffe jetzt einfach mal, dass ihr mir 
dabei vielleicht weiter helfen könnt.
Arbeiten tu ich mit quartus.




------------------------------------------------------------------------ 
---------

library ieee;
use ieee.std_logic_1164.all;

entity dlatch is port(                     -- d latch
clk,d: in std_logic;
q: out std_logic);
end dlatch;

architecture beh_dlatch of dlatch is
begin
  process(clk)
  begin
     if(clk'event and clk='1') then
         q <= d;
       end if;
     end process;
end beh_dlatch;


library ieee;
use ieee.std_logic_1164.all;

entity z_dff is port(                        -- d flipflop
   clk,d: in std_logic;
   q: buffer std_logic);
 end z_dff;

 architecture beh_dff of z_dff is
 begin
    process (clk,d)
 begin
        if(clk='1') then
        q <= d;
        end if;
    end process;
 end beh_dff;


 library ieee;
use ieee.std_logic_1164.all;

entity rsl is                -- rs latch
  port (s,r: in std_ulogic;
    q, qm: buffer std_ulogic);
end entity rsl;

architecture dataflow of rsl is
begin
q  <= '1' when r = '0' else
      '0' when s = '0' else q;
qm <= '1' when s = '0' else
      '0' when r = '0' else qm;
end architecture dataflow;

------------------------------------------------------------------------ 
---------
Gast #1303836
Lesenswert?

> Mir fehlt jetzt jeglicher Ansatz, wie ich das zusammen vermatschen (bzw
> ein projekt draus machen) soll und hoffe jetzt einfach mal, dass ihr mir
> dabei vielleicht weiter helfen könnt.
> Arbeiten tu ich mit quartus.

Der Ansatz als 3 getrennte Entities für DFF/DL/RSL ist schon mal gut. 
Besser kann man es bei einer solch dehnbaren Aufgabenstellung wie "ein 
Projekt mit..." kaum machen ;)

Bzgl D-Latch und D-Flipflop: Sind prinzipiell richtig aber vertauscht. 
Soll heißen, wo bei dir "D-FF" dransteht ist ein D-Latch drin und 
umgekehrt.

SR-Latch: Hat einen Fehler und vielleicht einen zweiten. Der erste 
Fehler ist, dass deine Implementierung zwar bei S=1,R=0 setzt und bei 
S=0,R=1 zurücksetzt. Aber: Halten tut sie bei S=1,R=1, was aber S=0,R=0 
sein sollte. Hier könnte allerdings auch das Problem vorliegen, dass 
sowohl Eingänge als auch Ausgänge als Active-Low gemeint sind, soll 
heißen S=0,R=1 bedeutet "Setzen auf 0" und S=1,R=1 bedeutet weder Setzen 
noch Zurücksetzen.

Das Zweite Problem ist, dass es ein SR-Latch nur ungenau modelliert: Die 
vierte Eingabemöglichkeit, "setzen und zurücksetzen" (die verboten aber 
natürlich möglich ist), wird nicht nachgebildet. Kann aber sein, dass 
das nicht verlangt ist.
Gast #1303844
Lesenswert?

Noch etwas: Mit als "buffer" deklarierten Ausgängen begibt man sich IIRC 
auf dünnes Eis was die Synthese angeht. Dass man Ausgabesignale in VHDL 
nicht verwenden kann ist doof, aber nicht zu ändern. Statt "buffer" 
benutze lieber ein internes Hilfssignal, welches du dann lesen und 
schreiben kannst und dem entsprechenden Ausgang direkt zuweist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren