wie kann man denn das blockrom eines spartan3 laden? ich versuche einen 8051 in vhdl in den spartan zu laden. dieser soll sinnigerweise mit einem c programm geladen werden. jetzt habe ich im internet ein programm gefunden das ein intelhex file in ein dualfile umwandeln kann. mit diesem dualfile kann ich aber nicht viel anfangen, da der speicher mit einem *.coe file geladen werden muss. mit tricks und dem memorytool ist es möglich ein *.coe file über ein *.csv file zu erstellen. das problem ist nur das das memorytool jetzt behauptet, das es teilweise zu falschem speicheransprechen kommt. was mache ich falsch? bin ich überhaupt auf dem richtigem weg? wer kann mir helfen??
Schau mal in die Appnote XAPP463 von Xilinx zum Block-RAM rein. Da steht beschrieben wie das geht. AFAIK geht das über das Contraints-File oder über VHDL-Attribute. http://direct.xilinx.com/bvdocs/appnotes/xapp463.pdf ciao, Stefan.
Lerne Englisch! :-) Also es gibt verschiedene Arten das Block-RAM zu initialisieren. Ich beschreibe hier mal den Weg innerhalb des VHDL-Quellcodes. component RAMB4_S16 generic( INIT_00, INIT_01, INIT_02, INIT_03, INIT_04, INIT_05, INIT_06, INIT_07, INIT_08, INIT_09, INIT_0A, INIT_0B, INIT_0C, INIT_0D, INIT_0E, INIT_0F: bit_vector(255 downto 0) := X"0000000000000000000000000000000000000000000000000000000000000000"); port( EN : in std_logic; WE : in std_logic; RST : in std_logic; CLK : in std_logic; ADDR : in std_logic_vector(7 downto 0); DI : in std_logic_vector(15 downto 0); DO : out std_logic_vector(15 downto 0)); end component; In der Instanziierung des Block-RAM werden dann die Daten geladen: ram0: RAMB4_S16 generic map( INIT_00 => X"00000000000000000000680A680900007303134013440A045103492050004840", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map( WE => logic0, EN => logic1, RST=> logic0, CLK => CLK, ADDR => ADDR, DI => DIN, DO => DATA); Wichtig ist, daß die Daten in umgekehrter Reihenfolge stehen. Der RAM-Inhalt in dem Beispiel sieht also so aus: 0: 4840 1: 5000 2: 4920 .... Man kann das auch über die UCF-Datei machen, da weiß ich aber leider nicht wie das geht. ciao, Stefan.
ui und ich habe geglaubt das nicht verstehe weil ich kein englisch kann :) werd mich da mal durchlesen/arbeiten. das rom/ram habe ich ja generieren lassen vom corgen... ... nur ohne daten hilft das beste rom nix :)
wenn ich von einem intelhexfile ausgehe ( von keilµvision generiert) müsste ich dann auch die daten "verkehrt" einschreiben?
Habe nochmal in die Appnotes reingeschaut. Wenn Du den Core-Generator benutzt, dann schau Dir Seite 11 Content Initialization an. Die Option heißt "Load Init File", da kannst Du die .coe-Datei einlesen. ciao, Stefan.
und wie komme ich zu einer .coe datei? habe versucht über das memorytool vom coregen versucht so einen datei zu erstellen, weiss aber nicht was ich genau eintragen soll. habe das intel-hex file einfach zertrennt bsp. aus :01002F00EFE1 wurde 01 00 2F 00 EF E1 hat aber dann nicht funktioniert...warum auch immer.......
Schau Dir mal an, wie das Intel HEX aufgebaut ist. Das sind nicht nur einfach die Bytes hintereinandergereiht. ciao, Stefan.
also in meinem hex-file werde ich nicht wirklich schlau :) :04000F007590552271 :03000000020003F8 :0C000300787FE4F6D8FD75810702000F3D :00000001FF habe versucht es zu verstehen aber keinen ahnung
achja aus diesem programmcode ist es generiert worden sollte nur dienen ob das funktioniert #include <REG517A.H> void main() { P1=0x55; }
Moin, ich benutze einen spartan2 und hab das ganze auch mal gemacht. 8051-core von oregano mit blockram. Initialisiert habe ich den z.B. mit INST i_mc8051_rom_U_ROM1 INIT_00 = 0000000000000000000000000000FE80A3D2A2C2A1D2A0C282C281C280D20000; im ucf-file. Das Beispiel setzt einfach ein paar pins high oder low. Das erstellen des ucf-files laesst sich automatisieren mit den Programmen hex2bin und bin2blockram. Musste mal guggn in the google drin. Über den aufbau des hex-files musste dir dann keine gedanken mehr machen. Was mich noch interessieren würde: Wie viele blockrams verwendest du fuer den Programmspeicher. Wenn mehr als einen, würde mich der vhdl-code interessieren, um dieses zu realisieren. Ansonsten : Noch schoen den HSV-Sieg feiern ;)
verwende den automatischen speichergenerator im coregen, da kann man einstellen was man alles haben möchte. zum laden des roms habe ich ein c file geschrieben das mir das hexfile in ein csv file richtig zerlegt dannach importiere ich das csv file in das memorytool und generiere ein coe file das coe file wird dann in das rom geladen ist doch ganz schön kompliziert oder ? :)
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.