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