mikrocontroller.net

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


Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht 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.
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.

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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal den generierten Schaltplan (Schematic) angeschaut?

Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mike,

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

Vielen Dank

Elektron

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: avr tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Richter (Firma: Home) (elektronxyz)
Datum:

Bewertung
0 lesenswert
nicht 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

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.