mikrocontroller.net

Forum: FPGA, VHDL & Co. Blockram Template


Autor: Spartakus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche grad ein Blockram in mein VHDL-Code zu implementieren. Ich
habe dafür einen Blocktram mit 32 Bit Breite und 512 Adressen (also
RAMB16_S36_S36) ausgewählt. Nun wollte ich das Template, aus dem
Webpack 7.1, welches unter
Templates => VHDL => FPGA => VirtexII/II-pro,Spartan-3,3E =>
DualPort(Matched Port Width)=> 512x32+4Parity Bits(RAMB16_S36_S36)
zu finden ist.

Ich habe eine Entity hinzugefügt, die alle Ein und Ausgänge definiert.
Nun habe ich aber beim Synthetisieren bereits in der zeile
RAMB16_S36_S36_inst : RAMB16_S36_S36
die erste fehlermeldung. Wenn ich die Auskommentiere, gleich in der
nächsten Zeile den nächsten etc.
Das ist aber doch ein Template, wo eigendlch keine Fehler vorkommen
sollten. Nur was mache ich falsch? Ist der ganze ansatz falsch?
Hier ist nun ein Auszug aus dem Code:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

library UNISIM;
use UNISIM.VComponents.all;

entity x_blockram is
      Port( DOA     : out std_logic_vector(1 to 32);        -- Port A
32-bit Data Output
          DOB     : out std_logic_vector(1 to 32);        -- Port B 32-bit
Data Output
          DOPA     : out std_logic_vector(1 to 4);        -- Port A 4-bit
Parity Output
           DOPB     : out std_logic_vector(1 to 4);        -- Port B 4-bit
Parity Output
          ADDRA   : in std_logic_vector(8 downto 0);      -- Port A 9-bit
Address Input
          ADDRB   : in std_logic_vector(8 downto 0);     -- Port B 9-bit
Address Input
            CLKA     : in std_logic;                
          CLKB     : in std_logic;                -- Port B Clock
            DIA     : in std_logic_vector(1 to 32);        -- Port A 32-bit
Data Input
          DIB     : in std_logic_vector(1 to 32);        -- Port B 32-bit
Data Input
          DIPA     : in std_logic_vector(1 to 4);        -- Port A 4-bit
parity Input
          DIPB     : out std_logic_vector(1 to 4);        -- Port-B 4-bit
parity Input
          ENA     : in std_logic;                  -- Port A RAM Enable Input
          ENB     : in std_logic;                -- PortB RAM Enable Input
          SSRA     : in std_logic;                  -- Port A Synchronous
Set/Reset Input
          SSRB     : in std_logic;                  -- Port B Synchronous
Set/Reset Input
          WEA     : in std_logic;                    -- Port A Write Enable Input
          WEB     : in std_logic); 
end x_blockram;

architecture Behavioral of x_blockram is
   -- RAMB16_S36_S36: Virtex-II/II-Pro, Spartan-3/3E 512 x 32 + 4
Parity bits Dual-Port RAM
   -- Xilinx  HDL Language Template version 7.1i

RAMB16_S36_S36_inst : RAMB16_S36_S36
   generic map (
      INIT_A => X"000000000",  --  Value of output RAM registers on
Port A at startup
      INIT_B => X"000000000",  --  Value of output RAM registers on
Port B at startup
      SRVAL_A => X"000000000", --  Port A ouput value upon SSR
assertion
      SRVAL_B => X"000000000", --  Port B ouput value upon SSR
assertion
      WRITE_MODE_A => "WRITE_FIRST", --  WRITE_FIRST, READ_FIRST or
NO_CHANGE
      WRITE_MODE_B => "WRITE_FIRST", --  WRITE_FIRST, READ_FIRST or
NO_CHANGE
      SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING",
"GENERATE_X_ONLY", "ALL" 
      INIT_00 =>
X"0000000000000000000000000000000000000000000000000000000000000000",
usw
den rest kann ich mir glaub ich sparen.
Ich stelle aber den gesamten Code auch noch mal im Anhang zur Verfügung
(natürlich nur von meinem Blockram :-)).

Autor: Spartakus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups... also das ist etwas in die länge gezogen. Sorry. Die Kommentare
sind teilweise in die nächste Zeile gerutscht. Also ist es evtl besser
wenn ihr mal nen blick in den Anhang werft... danke

Autor: Spartakus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm... also ich habe es nun glaub ich hinbekommen. Allerdings hab ich
die hälfte umschreiben müssen. Was nun dieses Template von Xilinx
bewirkt verstehe ich zwar nicht, aber da kümmer ich mich später drum
:-)

Autor: Jochen Pernsteiner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst Block-RAM nicht direkt als Komponente einfügen.
Du kannst es auch so in VHDL beschreiben, daß der Synthesizer es als
Block-RAM erkennt.

Siehe Anhang (512 x 32 Byte Dual-Port-Block-RAM).
Steht übrigens alles im "XST User Guide".

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:

Zeile 37 muss so lauten:
data_out <= ram(conv_integer(read_addr));

Autor: Spartakus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke. Ich habe die erläuterung im XST auch gesehen, abher ich
habe mich gewunder, was hinter dem Template steckt. Das habe ich nicht
eingebunden bekommen. Nun läuft es aber. Die Datei in deinem Anhang ist
aber auch nicht für Dual-Port.
Aber trotzdem danke. Ich denke ich habe das problem lösen können (I
hope so :-))

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.