Forum: FPGA, VHDL & Co. Belegung von Block Ram


von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

Hallo,

ich habe ein kleines Verständnisproblem, was die Belegung des Blockrams 
eines Spartan3-200 durch das Xilinx 9.1 Studio angeht.

Für mein Projekt brauche ich einen in internen Rom von 18928 x 4 bit.
Da ich nicht auf die Xilinx Templates zurückgreifen darf, habe ich 
diesen folgendermaßen realisiert.
1
type ROM_TYPE is array (0 to 18927) of std_logic_vector (3 downto 0);
2
  
3
constant ROM_CONTENT : ROM_TYPE := (...);

Ein Blockram bietet laut XAPP463 bei 4 bit Breite 4096 Einträge an.
Da nur ganze Blockrams belegen werden können, müsste die Synthese 5 
Blockrams belegen.

Im Design Summery steht aber was von 6 verwendeten Blockrams.

Ich habe schon überall gesucht, um eine Erklärung zu finden,
aber leider ohne Erfolg.

Könnt Ihr mir Weiterhelfen ?

Vielen Dank

Elektron

von Falk (Gast)


Lesenswert?

@ Volker Richter (Firma Home) (elektronxyz)

>Für mein Projekt brauche ich einen in internen Rom von 18928 x 4 bit.
>Da ich nicht auf die Xilinx Templates zurückgreifen darf, habe ich

Wieso darfst du das nicht?

>diesen folgendermaßen realisiert.
>type ROM_TYPE is array (0 to 18927) of std_logic_vector (3 downto 0);
>constant ROM_CONTENT : ROM_TYPE := (...);

>Ein Blockram bietet laut XAPP463 bei 4 bit Breite 4096 Einträge an.
>Da nur ganze Blockrams belegen werden können, müsste die Synthese 5
>Blockrams belegen.

Die BRAM im S3 haben 16+2Kbit, konfigurierbar als

16kx1
8kx2
4kx4

Wenn man nun "per Hand" 5 Stück a 4kx4 verschalten würde, dann käme man 
auf 20kx4. Dazu brauch man aber ein Chip Select Decoder (um über die 
oberen Adressbits den jeweiligen Block auszuwählen) und einen MUX zum 
Lesen.
 XST ist aber wahrscheinlich darauch getrimmt, das Ganze möglichst ohne 
Zusatzlogik zu implementieren und verwendet die Konfiguration 8kx2, 
jeweils 2 parallel und 3 "in Reihe" (im Adressraum). Das vermindert den 
Decoder- und MUxaufwand.

Wenn du das mit 5 BRAMs machen willst, musst du wohl oder über das "per 
Hand" machen. Also BRAM instanziieren und MUX/Decoder dazutun.

MfG
Falk

von Mike (Gast)


Lesenswert?

Schon mal den generierten Schaltplan (Schematic) angeschaut?

von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

Hallo Falk,

vielen Dank für deine schnelle Antwort. In unserem Praktikum sollen wir 
ein Xilinx unabhäniges Design erstellen. Deswegen dürfen wir keine 
Templates benutzen.

Der Core Design Generator gibt bei dem gewünschten Rom auch nur 5 
Blockrams aus.

Wahrscheinlich ist das erstellen per Hand die einzigste Lösung.

Aber es muss doch irgendeinen Grund geben, warum das Xilinx Studio mehr 
Blockram belegt als nötig.

Ich werde morgen mal eine Anfrage an den Xilinx Support stellen.
Mal sehen, ob die überhaupt antworten.

Vielen Dank

Elektron

von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

Hallo Mike,

im RTL Schematic wird nur ein Rom angezeigt. Genauere Informationen zu 
der Generierung sind nicht ersichtlich.

Vielen Dank

Elektron

von Falk (Gast)


Lesenswert?

@ Volker Richter (Firma Home) (elektronxyz)

>vielen Dank für deine schnelle Antwort. In unserem Praktikum sollen wir
>ein Xilinx unabhäniges Design erstellen. Deswegen dürfen wir keine
>Templates benutzen.

Jaja, die Akademiker. Zu allem fähig, zu nichts zu gebrauchen ;-)

Im Ernst, das ist a) Unsinn und b) kann man WUNDERBAR ein 
plattformunabhängiges Design bauen, wenn man einfach richtig 
nodularisiert.

Einfach den RAM als Modul definieren und ins Design einbinden.  Im 
RAM-Modul (entity) werden dann die plattformabhängigen Dinge eingebaut, 
hier eben die BRAMS in der speziellen Konfiguration.

>Aber es muss doch irgendeinen Grund geben, warum das Xilinx Studio mehr
>Blockram belegt als nötig.

Ja, das Design wird a) auf Geschwindigkeit optimiert und b) ist eben der 
Synthesizer nicht ultimativ flexibel. Aber alles kein Beinbruch.

>Ich werde morgen mal eine Anfrage an den Xilinx Support stellen.

Wozu? Was ist denn noch unklar?

MfG
Falk

von avr tester (Gast)


Lesenswert?

Hmm, die Initialisierung ist auch in dem  Sinne "falsch". Warum 
erstellst du nicht 4x:
type ROM_TYPE is array (0 to 4096) of std_logic_vector (3 downto 0);

Die 4 RAMs kanns td dann mit Signalen verdrahten.

von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

@ Falk

>Jaja, die Akademiker. Zu allem fähig, zu nichts zu gebrauchen ;-)

Das war wohl ein Fehler mich als Student zu outen ;-)
Wie bzw. wo hast du VHDL gelernt ?

>XST ist aber wahrscheinlich darauch getrimmt, das Ganze möglichst ohne
>Zusatzlogik zu implementieren und verwendet die Konfiguration 8kx2,
>jeweils 2 parallel und 3 "in Reihe" (im Adressraum). Das vermindert den
>Decoder- und MUxaufwand.

Diese Konfiguration erklärt natürlich einiges. Wenn ich es richtig 
verstanden habe, muss ich einzelne Roms definieren und diese dann per 
eigener Logik verknüpfen, damit XST den Rom so aufbaut, wir ich das 
möchte.

>Einfach den RAM als Modul definieren und ins Design einbinden.  Im
>RAM-Modul (entity) werden dann die plattformabhängigen Dinge eingebaut,
>hier eben die BRAMS in der speziellen Konfiguration.

So habe ich es auch gemacht. Ob das sinnvoll ist oder nicht,
wir sollen auf Templates verzichten.

>Wozu? Was ist denn noch unklar?

Nein, jetzt nicht mehr.

Vielen Dank für deine Hilfe

Volker

von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

avr tester wrote:
> Hmm, die Initialisierung ist auch in dem  Sinne "falsch". Warum
> erstellst du nicht 4x:
> type ROM_TYPE is array (0 to 4096) of std_logic_vector (3 downto 0);
>
> Die 4 RAMs kanns td dann mit Signalen verdrahten.


Da 4 Rams a 4096 Einträgen nur 16384 Einträge ermöglichen. Ich benötige 
allerdings 18928. Aber du hast schon recht. Sinnvoller ist es das Rom 
ein einzelne Roms per Hand zu unterteilen.

Gruß
 Volker

von Falk (Gast)


Lesenswert?

@ Volker Richter (Firma Home) (elektronxyz)

>Das war wohl ein Fehler mich als Student zu outen ;-)
>Wie bzw. wo hast du VHDL gelernt ?

Als Student während meiner Diplomarbeit. Im wesentlichen Selbststudium, 
natürlich immer mal wieder mit ein paar Tips von den "alten Hasen".

>Diese Konfiguration erklärt natürlich einiges. Wenn ich es richtig
>verstanden habe, muss ich einzelne Roms definieren und diese dann per
>eigener Logik verknüpfen, damit XST den Rom so aufbaut, wir ich das
>möchte.

Genau. Da erleichert auch ein wenig das Beschreiben der ROMs mittels des 
Tools DATA2BRAM.

MfG
Falk

von Volker R. (Firma: Home) (elektronxyz)


Lesenswert?

@Falk

> Als Student während meiner Diplomarbeit.

Also trifft das auch für dich zu ;-)))

> >Jaja, die Akademiker. Zu allem fähig, zu nichts zu gebrauchen ;-)

Nochmals Vielen

Volker

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.