@ 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
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 ;-)