mikrocontroller.net

Forum: FPGA, VHDL & Co. std_logic_vector über anderen Vector adressieren


Autor: BuTze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

ich möchte den std_logic_vector(511 DOWNTO 0) "next_reset_eeprom_data" 
in einer fsm in zu jedem Takt mit 8bit aus dem Speicher "bram_dout" 
füllen.
obwohl upper und lower adress in der Simulation(Modelsim) die Werte '7' 
und '0' haben,  kommt der Fehler:

 ** Fatal: (vsim-3420) Array lengths do not match. Left is 1 (0 downto 
0). Right is 8 (7 downto 0).

habe außer dem to_integer(unsigned(std_logic_vector)) cast noch
to_unsigned(unsigned(std_logic_vector))  und
CONV_INTEGER(std_logic_vector)

ausprobiert - aber es kommt der selbe Fehler. Was mache ich bloß falsch?


WHEN READ_DATA =>
  next_reset_eeprom_ctrl_bram_addr <= reset_eeprom_ctrl_bram_addr +1;
  next_reset_eeprom_upper_addr <= current_reset_eeprom_upper_addr +8;
  next_reset_eeprom_lower_addr <= current_reset_eeprom_lower_addr +8;

  next_reset_eeprom_data(
to_integer(unsigned(current_reset_eeprom_lower_addr))
 DOWNTO
to_integer(unsigned(current_reset_eeprom_lower_addr)))
 <= bram_dout;

IF (current_reset_eeprom_upper_addr = 16#200#) THEN --512 bit!
  next_reset_eeprom_ctrl_state       <= SET_READY;
END IF;


Gruß

Martin

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie die Fehlermeldung schon sagt, Du hast links ein einzelnes bit und 
willst diesem einen 8bit vector zuweisen - geht nicht.

to_integer(unsigned(current_reset_eeprom_lower_addr))
 DOWNTO
to_integer(unsigned(current_reset_eeprom_lower_addr)))

müsste z.B.

to_integer(unsigned(current_reset_eeprom_lower_addr))
 DOWNTO
to_integer(unsigned(current_reset_eeprom_lower_addr))-7) heißen

dann sollte es gehen

Autor: BuTze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

vielen Dank für den Tip!

ohne dich hätt ich wahrsch. nie den copy & paste fehler (das 2. muss 
upper statt lower heißen) bemerkt, sondern hätte mich weiter mit den 
casts beschäftigt :)

Autor: BuTze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

ich bins nochmal :)


Die Simulation läuft mit der obigen Lösung einwandfrei. Allerdings kommt 
ISE 10.1 damit nicht klar. Der Speicher läuft einfach voll und die 
Synthese wird abgebrochen.

Unter Windows wird noch eine Warnung, dass zu wenig Speicher vorhanden 
sei, ausgegeben.
Unter Linux (ink. virt. Speicher 20GB!) bricht ISE ohne Fehlermeldung 
einfach mit "Synthesize failed" ab.


Kommentiere ich die Zeile aus, geht es.

Mit Synplify gehts. Aber ich würde lieber die ISE nutzen... jemand ne 
Idee, wie ich das umgehen kann?

Gruß

Autor: Thomas Hertwig (mac4ever)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas hatte ich auch schon mal zu erledigen. Dynamisch einen 512Bit 
Vektor zu beschreiben. Hat auch ewig gedauert ... da kommt ein etwas 
größerer MUX bei raus ;)
Leider kann ich Dir da auch nicht weiter helfen, vielleicht tut's mehr 
RAM und Auslagerungsdatei unter Win ?

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im xst.pdf ob Du eine (für ISE-XST) gängige Beschreibung 
Deines Problem findest. Ich hatte auch schon den Fall, das er 
stundenlang versucht hat einen ROM-Inhalt zu optimieren und in eine 
Funktion zu packen :-(.

Rick

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du den Vektor nur auf Bytegrenzen adressieren musst, probier's 
lieber mal mit einem 64*8-Array, sonst baut die Synthese für jede 
Adresse einen Multiplexer, und nicht nur für jede 8te.

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.