Forum: FPGA, VHDL & Co. HILFE! Problem mit VHDL-Projekt


von JUMH (Gast)


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;

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

von Morin (Gast)


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.

von Morin (Gast)


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.

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.