mikrocontroller.net

Forum: FPGA, VHDL & Co. Inferred True Dual Port RAM für Xilinx und Altera


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: P. K. (pek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Mal wieder eine Frage zum Thema "inferred" BRAM. Und zwar versuche ich 
ein "true dual port ram with different aspect" zu erhalten.

Ein solches habe ich auf Altera am laufen. Die Datenstruktur dazu sieht 
so aus:
  type wordType is array (0 to (2**WDPOT)-1) of unsigned(WIDTH-1 downto 0);
  type memType  is array (0 to (2**(DEPTH-WDPOT))-1) of wordType;
  ...
  shared variable RamxD  : memType;

Kompiliere ich diese auf Vivado erhalte ich folgende Fehlermeldung:

CRITICAL WARNING: [Synth 8-3352] multi-driven net R2/RamxD[0][1][1] with 
1st driver pin 'R2/RamxD_reg[0][1][1]/Q' 
[D:/home_nobackup/vivadotraining/KCU105_HW/ram_2rw_2s_1c.vhd:246]
CRITICAL WARNING: [Synth 8-3352] multi-driven net R2/RamxD[0][1][1] with 
2nd driver pin 'R2/RamxD_reg[0][1][1]__0/Q' 
[D:/home_nobackup/vivadotraining/KCU105_HW/ram_2rw_2s_1c.vhd:222]
...

Die Synthese in ein BRAM misslingt.

Nach Anpassung an die Xilinx Coding-Styles sieht die Datenstruktur jetzt 
so aus:
  type memType  is array (0 to (2**DEPTH)-1) of unsigned(WIDTH-1 downto 0);
  ...
  shared variable RamxD  : memType;

Was in Quartus zum folgenden Resultat führt:

Error (10028): Can't resolve multiple constant drivers for net 
"RamxD[0][7]" at ram_2rw_2s_1c_xil.vhd(217)
Error (10029): Constant driver at ram_2rw_2s_1c_xil.vhd(203)

Im ersten Fall habe ich ein zweidimensionales Array of unsigned, 
übergeordnet Anzahl Worte im breiten Port, untergeordnet Anzahl Worte 
des schmalen Ports im breiten.
Im zweiten Fall habe ich ein eindimensionales Array of unsigned mit der 
Anzahl Worte im schmalen Port, beim Zugriff des breiten werden jeweils 
2^WDPOT schmale Worte bearbeitet.

Meine Frage: Hat jemand Ansätze für eine Lösung, welche sowohl für 
Altera und Xilinx ohne generate-Switch synthetisierbar ist?

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ P. K. (pek)

>Meine Frage: Hat jemand Ansätze für eine Lösung, welche sowohl für
>Altera und Xilinx ohne generate-Switch synthetisierbar ist?

Was spricht gegen ein passende Kapselung und direkte Instanzierung?

Autor: P. K. (pek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Was spricht gegen ein passende Kapselung und direkte Instanzierung?

Instanziierung ist IMHO generell "böse", da mache ich die Arbeit bei 
jedem Device neu. Mit dem Inferieren habe ich die ~30 verschiedenen 
RAM-Typen des letzten Designs auf 3 inferierbare reduziert, sogar die 
Migration von Altera nach Xilinx hat, bis auf den beschriebenen Fall, 
tipp-topp geklappt.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ P. K. (pek)

>> Was spricht gegen ein passende Kapselung und direkte Instanzierung?

>Instanziierung ist IMHO generell "böse", da mache ich die Arbeit bei
>jedem Device neu.

Dafür bekommst du EXAKT was du brauchst und musst nicht immer dem 
VHDL-Compiler genau aud die Finger sehen. Ausserdem kann man damit 
sämtliche SOnderfunktionen nutzen, welche beim inferieren niemals 
verfügbar sind (Spezielle Steuersignale, Verhalten der Ports bei 
gleichzeitigen Schreibzugriffen etc.)

> Mit dem Inferieren habe ich die ~30 verschiedenen
>RAM-Typen des letzten Designs auf 3 inferierbare reduziert,

Hmmm.

> sogar die
>Migration von Altera nach Xilinx hat, bis auf den beschriebenen Fall,
>tipp-topp geklappt.

Wie oft machst du das?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Dafür bekommst du EXAKT was du brauchst und musst nicht immer dem
> VHDL-Compiler genau aud die Finger sehen. Ausserdem kann man damit
> sämtliche SOnderfunktionen nutzen
Genau aus diesem Grund instantiiere ich die RAMs idR. auch manuell. Die 
FPGA-Hersteller basteln jedesmal neue Features an so ein RAM, und die 
Defaulteinstellung, die der Synthesizer aus einer generischen 
Beschreibung ermittelt, ist irgendwie immer (annähernd) diametral zu 
dem, was ich möchte...

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P. K. schrieb:
> Instanziierung ist IMHO generell "böse", da mache ich die Arbeit bei
> jedem Device neu.
Da stimme ich Dir vollkommen zu. Das geht mir bei den 
Gigabit-Transceivern so. Das ist keine Freude...

Zu Deinem eigentlichen Problem: Die Frage für mich wäre, ob Dein 
gewünschtes Konstrukt im Standard steht und ob dieser von den 
Herstellertools umgesetzt wird.

Der letzte mir bekannte Standard ist der hier:
http://standards.ieee.org/findstds/standard/1076.6-2004.html

Die Aussage 'Status withdrawn' auf der Webseite irritiert mich 
allerdings.

Wenn der 'Dual-Port-RAM with diffrent data with' nicht im Standard 
steht, wirst Du momentan um eine Sonderbehandlung nicht drumherum 
kommen.

Rick

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.