mikrocontroller.net

Forum: FPGA, VHDL & Co. Frage zur Benutzung von Block Ram in Actel Igloo Nano FPGA


Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nachdem mein Projekt jetzt theoretisch funktioniert, hab ich das 
Problem das der FPGA chip den ich nutzen möchte (IGLOO nano AGLN 250) an 
seine Kapazitätsgröße stösst. Leider benötigt mein Programm mehr core 
cells als der chip zur Verfügung stellt. Allerdings ist mir aufgefallen, 
dass im Synplify da steht, dass ich 0 von 8 Block Rams benutze.

Ich hatte die Idee, dass ich vielleicht die Werte eine meiner großen 
Matrizen im Programm ja in diesen Blockram speichern könnte und somit 
Tiles/Core Cells sparen kann.

Ich hab da auch was gefunden in der Synplify Hilfe wie man einem Array 
sagt, dass man die Werte im Block Ram speichern möchte, aber irgendwie 
funktioniert es nicht.

Hier der Auszug aus meinem Code:

type matrix is array (15 downto 0, 7 downto 0)
of std_logic_vector(7 downto 0);

signal matrix_Sicherungsmesswerte : matrix;

-- Matrix in Ram schreiben

attribute syn_ramstyle : string;
attribute syn_ramstyle of matrix_Sicherungsmesswerte : signal is 
"block_ram";

.
.....


Leider funktioniert es so nicht und es wird immernoch im Synplify 
angezeigt dass kein Block Ram verwendet wird :(

Core Cells         : 6677 of 6144 (109%)
IO Cells           : 36 of 68 (53%)

RAM/ROM Usage Summary
Block Rams : 0 of 8 (0%)


Hat jemand eine Idee was ich falsch mache. Geht das mit der Ram 
Benutzung überhaupt so einfach wie ich mir das Vorstelle?

viele Grüße

Steve

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>type matrix is array (15 downto 0, 7 downto 0) of std_logic_vector(7 downto 0);
Bist Du sicher, das Synplify mit dreidimensionalen Arrays umgehen kann?

Xilinx XST hat schon bei zweidimensionalen Arrays Probleme.

Duke

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das funktioniert so. Habe ich schon so verwendet.

mfg

Steve

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuch schon den ganzen Tag herauszufinden wie ich denn den 
Blockram vom Actel FPGA nutzen kann so dass ich meine Matrix da 
reinschreiben und wieder auslesen kann. Irgendwie blick ich da gar nicht 
durch, gibt es da niemanden, der da etwas Erfahrung hat und mir ein 
wenig Hilfestellung geben kann?

Ich würde mich sehr über eine Antwort freuen.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du den Zugriff auf dein BRAM getaktet ?

Autor: Thomas Reinemann (Firma: abaxor engineering) (abaxor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steve schrieb:
> Ich versuch schon den ganzen Tag herauszufinden wie ich denn den
> Blockram vom Actel FPGA nutzen kann so dass ich meine Matrix da
> reinschreiben und wieder auslesen kann. Irgendwie blick ich da gar nicht
> durch, gibt es da niemanden, der da etwas Erfahrung hat und mir ein
> wenig Hilfestellung geben kann?
>
> Ich würde mich sehr über eine Antwort freuen.

Lies dir mal folgendes Dokument durch.

http://www.actel.com/documents/LPD_SRAMFIFO_HBs.pdf

Auf Seite 23 findest du ein Beispiel zur Instanzierung des BlockRams, 
allerdings in Verilog. Grundsätzlich macht man so etwas mit dem SmartGen 
Core Generator von Actel. Der gehört mit zu Libero.

Tom

Autor: xTMx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst du den BlockRAM mit der Synthese vorinitialisieren, so dass dir 
der INhalt dann im Design zur Verfügung steht? Oder willst du den RAM 
erst zur Laufzeit mit einer Logik innerhalb des Designs mit der Matrize 
beschreiben?

Ersteres ist in Actel FPGAs soweit ich weiß NICHT möglich. Zumindestens 
bei denen der Art ProAsic3(E). Es existiert dort nur eine Möglichkeit, 
den Inhalt zur Initialisierung per Flashpro nach dem Flashen des 
eigentlichen Designs reinzuspielen. Das ist meiner Meinung nach auch ein 
riesen Nachteil der Chips, weil man für viele Anwendungsfälle doch 
vorinitialisierte Matrizen braucht, die man aber in diesen FPGAs als 
Register implementieren muss. Oder BRAMS, die von draußen während der 
Laufzeit geladen wären. Beides sehr umständlich.

Den Inhalt des RAMs während der Laufzeit mit einer ganz normalen RAM 
Ansteuerung zu beschreiben dürfte problemlos möglich sein. Wie sich das 
mit dem 3-dimensionalen Array verhält kann ich aber auch ni sagen.

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.