Meine Hausaufgabe

Gast #1074098
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1074154
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 ;-)
Gast #1074560
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
Moderator (Firma: Titel) Persönliche Seite #1074703
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)

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