mikrocontroller.net

Forum: FPGA, VHDL & Co. Meine Hausaufgabe


Autor: VHDL-Rookie (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, meld dich in 2 Stden nochmal, ich mach dir das kurz fertig!!!

Klaus.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
   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:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Mem_Interface is
Port (   Address : in std_logic_vector(31 downto 0);
         Data_WR : in std_logic_vector(31 downto 0);
         Data_RD : out std_logic_vector(31 downto 0); --??????
         WR : in std_logic;
         RD : in std_logic;
         PC : in std_logic_vector(9 downto 0);
         fetch_valid : out std_logic;
         Instruction : out std_logic_vector(31 downto 0);
         
         -- Speicher: genügend schneller SRAM
         we_ram   : out std_logic;
         addr_ram : out std_logic_vector(9 downto 0);
         data_ram : inout std_logic_vector(31 downto 0)
     );
end Mem_Interface;

architecture Behavioral of Mem_Interface is
signal fetchvalid : std_logic;
signal instloc : std_logic_vector(31 downto 0);
signal drdloc  : std_logic_vector(31 downto 0);

begin
   fetchvalid  <= '1' when WR='1' or RD='1' else '0';
   fetch_valid <= fetchvalid;
   
   -- Interface zum RAM
   addr_ram    <= PC when fetchvalid='1' else Address(11 downto 2);
   we_ram      <= WR; -- high-aktiv
   data_ram    <= Data_WR when (wr='1') else (others=>'Z');
   
   
   -- hier wirds jetzt ohne weitere Info undurchsichtig:
   Data_RD     <= data_ram; -- ???? ich gehe mal davon aus, dass das
   Instruction <= data_ram; -- Timing von übergeordneter Stelle beachtet wird
   
   -- Alternativ können wir uns auch ein paar Latches einfangen :-(
   -- Takt gibt es ja keinen :-o
   drdloc      <= data_ram when RD='1' else drdloc; 
   instloc     <= data_ram when RD='0' and WR='0' else instloc; 
   Data_RD     <= drdloc;
   Instruction <= instloc;   
   
end Mem_Interface;
So ähnlich könnte das Ergebnis aussehen. Viel Spass damit.
BTW: bei der Klausur helfe ich dir nicht ;-)

Autor: Martin Gg (martingg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja Klasse!

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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hoffentlich mit einer angemessenen Vergütung.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

warum ist data_ram ein "inout"?

das verstehe ich nicht ganz

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
   -- Speicher: genügend schneller SRAM
   we_ram   : out std_logic;
   addr_ram : out std_logic_vector(9 downto 0);
   data_ram : inout std_logic_vector(31 downto 0)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.