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
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
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 :)
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ß
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 ?
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.