www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Wie Block RAM mit Komponente verbinden


Autor: Läubi .. (laeubi) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Komponente (CPU) welche aus einem BlockRAM ihre 
Befehle/Daten lesen soll. Läßt sich auch ohne Probleme synthetisieren, 
wenn ich jezt aber in der Top Entity versuche ein Blockram anzubinden 
wird mir dies immer mit dem Hinweis unterbunden, das es multiple Treiber 
für Daten/Addressbus gibt, einmal meine CPU und einmal das RAM...

Habe im Anhang mal ein Datei mit TOP Entity+RAM+Fehler angehängt.
(Nicht wündern das dort der 16bit Addressbus 16 bit als Komentar hat..)

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt ganz einfach daran, dass es im FPGA keine Möglichkeit für 
bidirektionale Signale gibt. Du musst Dateneingang und Datenausgang 
voneinander trennen.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm.. richtig da war doch mal was. Naja dann muß ich mal sehen ob ich den 
rest aufgedröselt kreige in input/output. Also kann ich im Prinzip 
innerhalb des FPGA garkeinen "bus" der von mehreren Komponenten geteilt 
wird aufbauen?

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

Bewertung
0 lesenswert
nicht lesenswert
> Also kann ich im Prinzip innerhalb des FPGA gar keinen "bus" der von
> mehreren Komponenten geteilt wird aufbauen?
Doch, aber wenn du es schafft, so einen Bus zu beschreiben, wird dieser 
Bus in einem Multiplexer abgebildet. Busleitungen mit Tristate Treibern 
gibt es bei Xilinx schon seit Spartan 2 nicht mehr.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah okay, das erklärt es, die Beschreibung war ursprünglich auf einen 
Sparta-II zugeschnitten und ich nutze es jezt mit nem Spartan-3.
Habe es jezt auch soweit hinbekommen, das einzige ist, wenn ich in 
meiner TOP Entety nicht irgenwas mit den Signalen mache optimiert mir 
die Synthese alles weg weil alles angeblich statische Signale hat??
.
.
.
    signal RAMDin  : D_TYPE;
    signal RAMDout : D_TYPE;
    signal A    : A_TYPE;
    signal RW   : std_logic;
    for all: CPU use entity WORK.CPU(STRUKTUR);
    for all: RAM use entity WORK.RAM(ram_arch);
begin
    InstRAM: RAM port map(
        clk       => CLK,
        wr        => RW,
        addr     => A,
        data_in  => RAMDout,
        data_out => RAMDin
    );
    InstCPU: CPU PORT MAP(
        CLK       => CLK,
        RESET     => RESET,
        Din       => RAMDin,
        Dout      => RAMDout,
        A         => A,
        READWRITE => RW
    );
    
    -- Ohne Diesen Prozess wird das ganze Design wegoptimiert
    blabla : process(CLK)
        begin
            if CLK='1' and CLK'event then
                if RESET='1' then
                    IO <= (others => '0');
                else
                    IO <= RAMDout;
                end if;
            end if;
        end process;

end SoftCore;
IO ist dabei einfach ein Ausgangsport welcher der CPU später ermöglichen 
soll ein paar LEDs blinken zu lassen...

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.