mikrocontroller.net

Forum: FPGA, VHDL & Co. Multi Source Fehler


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab mir ein Adresszaehler mit 4 to 12 Demultiplexer mit VHDL
beschrieben. Der Adresszaehler zaehlt bis zum Overflow und gibt dann
einen Übertrag an den 4 to 12 Demultiplexer. Der 4 to 12 Demulitplexer
aktiviert die internen Blockrams über die Enableleitung.

Ich wollte gerne alle Data Outputs der einzelnen Blockrams miteinander
verbinden, weil nur jeweils ein Blockram zur Zeit aktiv ist. Ich
bekomme eine Errormeldung bei der Synthese. Muss ich wirklich noch ein
16 to 8 Demultiplexer fuer die Daten Pins an die Ouputs anklemmen oder
eine Tri State Buffer Stufe?
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;
 
entity top_layer is
   port ( CLK       : in    std_logic; 
          DATAIN    : in    std_logic_vector(7 downto 0);
   DATA_OUTA : out    std_logic_vector(7 downto 0);
          rst       : in    std_logic; 
          EN        : in    std_logic 
   );
end top_layer;
 
architecture BEHAVIORAL of top_layer is
signal adress_int : std_logic_vector (10 downto 0); 
signal ramenable_int : std_logic_vector (11 downto 0); 
signal data_out_int : std_logic_vector (7 downto 0);    
 
   component adressdecoder
      port ( CLK       : in    std_logic; 
             rst       : in    std_logic; 
             EN        : in    std_logic; 
             ADRESSE   : out   std_logic_vector (10 downto 0); 
             FULL      : out   std_logic; 
             RAMENABLE : out   std_logic_vector (11 downto 0));
   end component;
 
   component test
      port ( addra  : in    std_logic_vector (10 downto 0); 
             dina   : in    std_logic_vector (7 downto 0); 
             wea    : in    std_logic; 
             ena    : in    std_logic; 
             sinita : in    std_logic; 
             clka   : in    std_logic; 
             addrb  : in    std_logic_vector (10 downto 0); 
             enb    : in    std_logic; 
             sinitb : in    std_logic; 
             clkb   : in    std_logic; 
             douta  : out   std_logic_vector (7 downto 0); 
             doutb  : out   std_logic_vector (7 downto 0));
   end component;
 
begin
   INST_ADECODER : adressdecoder
      port map (CLK=>CLK,
                EN=>EN,
                rst=>rst,
                ADRESSE=>adress_int,
                FULL=>open,
                RAMENABLE=>ramenable_int);
 
   INST_RAM0 : test
      port map (addra=>adress_int,
                addrb=>adress_int,
                clka=>CLK,
                clkb=>CLK,
                dina=>DATAIN,
                ena=>ramenable_int(0),
                enb=>ramenable_int(0),
                sinita=>rst,
                sinitb=>rst,
                wea=>EN,
                douta=>DATA_OUTA, -- HIER BEKOMME ICH DEN FEHLER
                doutb=>open);
 
   INST_RAM1 : test
      port map (addra=>adress_int,
                addrb=>adress_int,
                clka=>CLK,
                clkb=>CLK,
                dina=>DATAIN,
                ena=>ramenable_int(1),
                enb=>ramenable_int(1),
                sinita=>rst,
                sinitb=>rst,
                wea=>EN,
                douta=>DATA_OUTA, -- HIER BEKOMME ICH DEN FEHLER
                doutb=>open);
 
 
 
end BEHAVIORAL;

Ich würde mich über ein Tipp freuen

Dirk

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich mich erinnern kann, liegt an den Datenausgängen der BRAMs
immer ein Signal an, auch wenn die enable Leitung auf '0' liegt
(einfach mal in der AppNote nachschauen, zB.
http://www.xilinx.com/bvdocs/appnotes/xapp130.pdf). Du müsstest also
den gemeinsamen Schreibzugriff verhindern, ein MUX leistet hier denke
ich mal gute Dienste. Mit Tristates muss man nicht erst anfangen, da
diese sowieso in Logik umgewandelt werden, da auf dem FPGA nur an den
I/O Pins echte Tristatetreiber zur Verfügung stehen.

Is ja ganz fix gemacht:
mux : PROCESS (DATA_OUTA_RAM1, DATA_OUTA_RAM1, ramenable_int)
BEGIN
  CASE ramenable_int IS
    WHEN "01" => DATA_OUTA <= DATA_OUTA_RAM1;
    WHEN "10" => DATA_OUTA <= DATA_OUTA_RAM2;
    WHEN OTHERS => DATA_OUTA <= (OTHERS => '0');
  END CASE;
END PROCESS mux;


T.M.


=================
http://editthis.info/freefpga
=================

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

natuerlich ist es ein bischen verwirrend wenn das Ram ein enablepin hat
und trotzdem Daten anliegen.

Danke,

Dirk

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das enable hat in dem Fall nur die Funktion, dass keine aktuellen
Daten an den Ausgang gelegt werden, sondern die alten Daten bleiben und
natürlich kein Schreibzugriff möglich ist. Ist aber kein wirkliches chip
enable...


T.M.


=============================
http://editthis.info/freefpga
=============================

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke, ich werde dann noch ein xx to 8 Demultiplexer beschreiben.

Gruß,
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

kann ich den Mux in der Top RTL beschreiben oder muss ich eine neue
Komponente bauen?

Gruß,

Dirk

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das enable dürfte sich auf den Write-Zugriff beziehen. Dort kann man
sich dann den MUX für die Daten spareb. Am Ausgang braucht man ein
output-enable mit Tristatefunktion. Das kommt aber auf dasselbe raus,
wie ein MUX.

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.