Forum: FPGA, VHDL & Co. Blockram Template


von Spartakus (Gast)


Angehängte Dateien:

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:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
library UNISIM;
7
use UNISIM.VComponents.all;
8
9
entity x_blockram is
10
      Port( DOA     : out std_logic_vector(1 to 32);        -- Port A
11
32-bit Data Output
12
          DOB     : out std_logic_vector(1 to 32);        -- Port B 32-bit
13
Data Output
14
          DOPA     : out std_logic_vector(1 to 4);        -- Port A 4-bit
15
Parity Output
16
           DOPB     : out std_logic_vector(1 to 4);        -- Port B 4-bit
17
Parity Output
18
          ADDRA   : in std_logic_vector(8 downto 0);      -- Port A 9-bit
19
Address Input
20
          ADDRB   : in std_logic_vector(8 downto 0);     -- Port B 9-bit
21
Address Input
22
            CLKA     : in std_logic;                
23
          CLKB     : in std_logic;                -- Port B Clock
24
            DIA     : in std_logic_vector(1 to 32);        -- Port A 32-bit
25
Data Input
26
          DIB     : in std_logic_vector(1 to 32);        -- Port B 32-bit
27
Data Input
28
          DIPA     : in std_logic_vector(1 to 4);        -- Port A 4-bit
29
parity Input
30
          DIPB     : out std_logic_vector(1 to 4);        -- Port-B 4-bit
31
parity Input
32
          ENA     : in std_logic;                  -- Port A RAM Enable Input
33
          ENB     : in std_logic;                -- PortB RAM Enable Input
34
          SSRA     : in std_logic;                  -- Port A Synchronous
35
Set/Reset Input
36
          SSRB     : in std_logic;                  -- Port B Synchronous
37
Set/Reset Input
38
          WEA     : in std_logic;                    -- Port A Write Enable Input
39
          WEB     : in std_logic); 
40
end x_blockram;
41
42
architecture Behavioral of x_blockram is
43
   -- RAMB16_S36_S36: Virtex-II/II-Pro, Spartan-3/3E 512 x 32 + 4
44
Parity bits Dual-Port RAM
45
   -- Xilinx  HDL Language Template version 7.1i
46
47
RAMB16_S36_S36_inst : RAMB16_S36_S36
48
   generic map (
49
      INIT_A => X"000000000",  --  Value of output RAM registers on
50
Port A at startup
51
      INIT_B => X"000000000",  --  Value of output RAM registers on
52
Port B at startup
53
      SRVAL_A => X"000000000", --  Port A ouput value upon SSR
54
assertion
55
      SRVAL_B => X"000000000", --  Port B ouput value upon SSR
56
assertion
57
      WRITE_MODE_A => "WRITE_FIRST", --  WRITE_FIRST, READ_FIRST or
58
NO_CHANGE
59
      WRITE_MODE_B => "WRITE_FIRST", --  WRITE_FIRST, READ_FIRST or
60
NO_CHANGE
61
      SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING",
62
"GENERATE_X_ONLY", "ALL" 
63
      INIT_00 =>
64
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 :-)).

von Spartakus (Gast)


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

von Spartakus (Gast)


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
:-)

von Jochen Pernsteiner (Gast)


Angehängte Dateien:

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".

von Jochen Pernsteiner (Gast)


Lesenswert?

Korrektur:

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

von Spartakus (Gast)


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 :-))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.