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
@ 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 ;-)
Das ist ja Klasse! Danke Lothar! Ich hab dir noch eine persönliche Nachricht geschickt!
Dirk wrote:
> Hoffentlich mit einer angemessenen Vergütung.
Ein "Danke" ist oft viel mehr wert als Geld. ;-)
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.