mikrocontroller.net

Forum: FPGA, VHDL & Co. Virtex Blockrams


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schaue mir gerade BlockRAM an. Die Blockrams haben Parität-Bits, 
kann mann die Eingänge offen bzw. ungenutzt lassen? Braucht Blockram die 
Angaben selbst, oder ist es eine Möglichkeit, die man als USER nutzen 
kann?

DIA     : in std_logic_vector (31 downto 0);
DIPA    : in std_logic_vector (3 downto 0); -- parity

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie das Datenblatt des Virtex II sagt:
"These extra parity bits [...] behave exactly as the other bits."
Sprich: Du kannst damit tun und lassen was du willst, genauso wie mit 
den Datenbits auch.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau. Und offen lassen geht wie mit allen Eingängen natürlich nicht. 
Wenn du sie nciht brauchst, dann leg die Paritätseingänge alle auf 0 und 
lass die Ausgänge offen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke, habe aber gelesen, dass bei passend deklarierten Arrays die 
Synthese die Arrays in BlockRAMs umsetzt. Das klappt auch soweit, nur 
leider nicht mit einem dual-port Blockram. Hier ist der Code, vielleicht 
fällt jemanden was auf?

----------------------------------------------------------------------------------
--
-- Read-First Mode
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity BRAM is
port (  clk  : in std_logic;
      -- A
          we   : in std_logic;
          en   : in std_logic;
      -- B
       web   : in std_logic;
          enb   : in std_logic;
       
          addr  : in std_logic_vector(8 downto 0);
       addrb : in std_logic_vector(8 downto 0);
       
      --a
          di   : in std_logic_vector(31 downto 0);
          do   : out std_logic_vector(31 downto 0);
      --b 
       dib   : in std_logic_vector(31 downto 0);
          dob   : out std_logic_vector(31 downto 0));
end BRAM;

architecture Behavioral of BRAM is

    type ram_type is array (255 downto 0) of std_logic_vector (31 downto 0);
    signal RAM, RAMb: ram_type;
begin
p1:    process (clk)
    begin
        if clk'event and clk = '1' then
            if en = '1' then
                if we = '1' then
                    RAM(conv_integer(addr)) <= di;
                end if;
                do <= RAM(conv_integer(addr)) ;
            end if;
        end if;
    end process;
   
p2:    process (clk)
    begin
        if clk'event and clk = '1' then
            if enb = '1' then
                if web = '1' then
                    RAMb(conv_integer(addrb)) <= dib;
                end if;
                dob <= RAMb(conv_integer(addrb)) ;
            end if;
        end if;
    end process;



end Behavioral;


  

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum schreibst du eine eigene entity? xilinx bietet da knapp 30 
verschiedene primitives (single- und dualported, positive und negative 
Clock, 1,2,4,8,18 oder 36 Bit breit, eine oder zwei clocks....) an, die 
einfach einzubinden sind und garantiert einen BlockRAM erzeugen.


(Da ISE bereits an beschriebenen einfachen dual-data-rate-flip-flops 
scheitert, kann ich mir gut vorstellen, dass du viel tricksen musst, um 
das so zum Laufen zu bekommen)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum? Ganz einfach, um sich die Arbeit zu ersparen, die primitives zu 
benutzen, weil XST die richtig gewählte Arraygröße schon in BlockRAMs 
umsetz.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt im XST User Guide gibt es dazu Beispiele, die auch 
funktionieren (Seite 187).

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.