Forum: FPGA, VHDL & Co. Meine Hausaufgabe


von VHDL-Rookie (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe VHDL-Profis,

ich habe richtig Probleme mit der Lösung meiner Hausaufgabe.

Ich poste mal schnell die Angabe als Anhang hier und würde mich super 
freuen, wenn mir jemand helfen könnte.

Besten Dank vorab!

Martin

von Klaus R. (klaus2)


Lesenswert?

Ja, meld dich in 2 Stden nochmal, ich mach dir das kurz fertig!!!

Klaus.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@ VHDL-Rookie (Gast)
Wenn du sowieso keinen Takt, sondern nur Kombinatorik hast,
warum machst du das dann nicht concurrent.

Lies dir mal die Aufgabe genau durch und streich das Gelaber weg.
Dann bleibt das Auge schon mal an dieser Zeile hängen:
>> Im Regelfall sind die Steuersignale WR und RD gelöscht;
>> alle andere hier aufgeführten Signale sind dann irrelevant.
Das heißt im Umkehrschluss, dass du diesen Fall gar nicht beachten mußt.
Also ist deine 1. Zeile schon mal ganz überflüssig   :-o
1
   if(WR=0 and RD=0) then

Hauptsächlich dreht es sich hier um die Multiplexerei der Daten, 
Adressen und dem Erzeugen des fetch_valid-Signals.


Versuch das mal zu verstehen:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity Mem_Interface is
6
Port (   Address : in std_logic_vector(31 downto 0);
7
         Data_WR : in std_logic_vector(31 downto 0);
8
         Data_RD : out std_logic_vector(31 downto 0); --??????
9
         WR : in std_logic;
10
         RD : in std_logic;
11
         PC : in std_logic_vector(9 downto 0);
12
         fetch_valid : out std_logic;
13
         Instruction : out std_logic_vector(31 downto 0);
14
         
15
         -- Speicher: genügend schneller SRAM
16
         we_ram   : out std_logic;
17
         addr_ram : out std_logic_vector(9 downto 0);
18
         data_ram : inout std_logic_vector(31 downto 0)
19
     );
20
end Mem_Interface;
21
22
architecture Behavioral of Mem_Interface is
23
signal fetchvalid : std_logic;
24
signal instloc : std_logic_vector(31 downto 0);
25
signal drdloc  : std_logic_vector(31 downto 0);
26
27
begin
28
   fetchvalid  <= '1' when WR='1' or RD='1' else '0';
29
   fetch_valid <= fetchvalid;
30
   
31
   -- Interface zum RAM
32
   addr_ram    <= PC when fetchvalid='1' else Address(11 downto 2);
33
   we_ram      <= WR; -- high-aktiv
34
   data_ram    <= Data_WR when (wr='1') else (others=>'Z');
35
   
36
   
37
   -- hier wirds jetzt ohne weitere Info undurchsichtig:
38
   Data_RD     <= data_ram; -- ???? ich gehe mal davon aus, dass das
39
   Instruction <= data_ram; -- Timing von übergeordneter Stelle beachtet wird
40
   
41
   -- Alternativ können wir uns auch ein paar Latches einfangen :-(
42
   -- Takt gibt es ja keinen :-o
43
   drdloc      <= data_ram when RD='1' else drdloc; 
44
   instloc     <= data_ram when RD='0' and WR='0' else instloc; 
45
   Data_RD     <= drdloc;
46
   Instruction <= instloc;   
47
   
48
end Mem_Interface;
So ähnlich könnte das Ergebnis aussehen. Viel Spass damit.
BTW: bei der Klausur helfe ich dir nicht ;-)

von Martin G. (martingg)


Lesenswert?

Das ist ja Klasse!

Danke Lothar! Ich hab dir noch eine persönliche Nachricht geschickt!

von Dirk (Gast)


Lesenswert?

Hoffentlich mit einer angemessenen Vergütung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dirk wrote:
> Hoffentlich mit einer angemessenen Vergütung.
Ein "Danke" ist oft viel mehr wert als Geld.  ;-)

von martin (Gast)


Lesenswert?

hallo,

warum ist data_ram ein "inout"?

das verstehe ich nicht ganz

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

martin wrote:
> warum ist data_ram ein "inout"?
> das verstehe ich nicht ganz
An diesen Strippen hängt (mangels anderer Vorgabe) ein "richtiges" SRAM. 
Und das hat einen Datenbus, der entsprechend rd/wr umgeschaltet wird, 
also mal in und mal out ist.

von martin (Gast)


Lesenswert?

so, also mein Speicher-Modul heißt VHDLMEM und hat 5 Eingänge:

reset,clk,we(1Bit),addr(10Bit) und di(32Bit)

und einen Ausgang:

do(32Bit)

dann muss also Mem_Interface um einen Eingang do_in(32Bit) erweitert 
werden.

ändert sich dann was radikal an dem code?

viele grüße

martin

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> do_in
Wenn di Data-In wäre, und do Data-Out, was wäre dann do_in?

> VHDLMEM hat 5 Eingänge: reset,clk,we(1Bit),addr(10Bit) und di(32Bit)
> und einen Ausgang: do(32Bit)
Damit ist m.E. bisher nur das Interface nach innen (zum Prozessorkern 
hin) beschrieben. Das Interface zum Ram fehlt völlig und ist:
1
   -- Speicher: genügend schneller SRAM
2
   we_ram   : out std_logic;
3
   addr_ram : out std_logic_vector(9 downto 0);
4
   data_ram : inout std_logic_vector(31 downto 0)

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.