hi, ich habe einen lattice ecp2 50e 672 in den ich den mico32 core einbinden möchte, weiters noch ein Ram welches im FPGA liegt auf das jedoch beide Seiten (FPGA und Mico32) Zugriff haben sollen. Dieses Ram soll 8 bit Tief und min. 1k groß sein. Kann mir irgendjemand vielleicht erklären wie man da beginnt bwz. ein example posten? Bin FPGA Anfänger habe jedoch jahrelangen c Hintergrund... Herzlichen Dank im Voraus mfg pfiff
Ich nehme an du benötigst dafür ein "dual-port" RAM. Unter "Tools"->"IPexpress"->"Module"->Memory_Modules" wirst du fündig. Mit dem Button "Customize" stellst du das Modul auf die von dir benötigten Parameter ein. ispLever bindet dir dann ein Template in dein Projekt ein, was du aus Verilog bzw. VHDL wie jedes andere Modul ansprechen kannst. Simulation ist damit auch möglich. Beim Compilieren wird dann automatisch das FPGA RAM für dieses Modul verwendet.
Hi, erstmal vielen Dank für deine Antwort. Ich habe schon ein Dual Port Ram mit IPexpress generiert und das .lpc file in mein Projekt eingebunden, habe jetzt aber das Problem das ich nicht weiß wie ich die Ports nun verdrahten muss/soll damit auch der Mico32 darauf Zugriff hat. Ich vermisse irgendwie wo ich die Adresse des RAMs einstellen kann, oder denke ich da komplett falsch? Im Mico32 gibts ja auch die Möglickeit ein RAM einzubauen wo die Adresse einstellbar ist, nur wie bringe ich das dann dem FPGA bei, damit er weiß wo er die Daten reinschreiben soll?! Herzlichen Dank, pfiff
Naja, ich glaube du bist mental noch nicht so ganz darauf eingestellt, dass du hier die Hardware an sich zusammenbaust. Das RAM hat Adress- und Datenleitungen, die du mit deinen CPU modulen verknüpfen musst. Die Anzahl der Adressen hängt dann davon ab, wieviele Adressleitungen du definiert hast (2^n). Und es geht immer bei 0 los. Der Trick um ein kleineren Speicherbereich in einen größeren Adressraum auf einem Bus einzuklinken besteht darin, die CS Leitung des RAMs auf eine hohe Adressleitung zu legen. Ich glaube du müsstest dich erstmal prinzipiell etwas mit Computerhardwarearchitektur auseinandersetzen. Ist nicht so ganz einfach zu verstehen, wenn man von der Softwareseite kommt.
Servus, so schwierig ist das Ganze gar nicht. Der Mico32 spricht die Peripherie üer den Wishbone Bus an. D.h. dein Dual Port Memory braucht einen Wrapper, der für den einen Port die Wishbone Signale umsetzt und zudem den anderen Port nach oben führt. Wenn Du das Memory in Verilog erzeugst bietet der MSB sogar eine graphische Menüführung an, um dieses Modul einzubinden. Die kannst Du in der MSB View im Fenster Available COMPONENTS (auf der linken Seite) mit dem Knopf "PFEIL nach unten" (IMPORT CREATE CUSTOM COMPONENT) starten. Also kein Grund in der Mico32 Hardware selber rumzubasteln. Gruss Lupi
Hallo, ich habe das Dual Port Ram im FPGA aufgesetzt und es funkt sogar. Habe jetzt natürlich mehrere Leitung wie z.B.: WrAddress, RdAddress, RdClock, WrClock, Q usw. diese Signal sind mir von der Funktion her klar was sie machen. Muss ich jetzt im Mico32 mit GPIO Ports die Verbindungen einzeln herstellen (also ein GPio Port mit 1 Bit für WrADdress usw, bzw. für Q 16 Bit und für WrAddress und RdAddress 9 bit)? Oder kann man das irgendwie anders machen? Wenn ich diese Verbindung so mache wie oben beschrieben über GPIO's läuft das ganze dann schon über den Wishbone Bus? Herzlichen Dank mfg pfiff
Hallo! Ich brauche Hilfe zur Integration eines mico32 Mikroprozessors in ein fpga. Ich habe zwar ein Tutorial, aber ich habe ein ganz anderes demoboard und somit kann ich nicht laut tutorial arbeiten. Eigenschaften meines demoboards: # EV-Board bestückt mit LFE2-12E-5TN144C # TQFP-144 mit 0,5 mm Finepitch # serielles 8MBit Flash # externe Spannungsversorgung (5 - 20 V) # linearer 3V3-Spannungsregler # Step-Down-Converter für 1V2 # ext. 25 MHz Oszillator # RS232 mit 2 RX und 2 TX # 8 LEDs an einem Port # 2V5 lin. Spannungsregler für LVDS # 4 SMB-Buchsen für LVDS # 3 Status-LEDs # 2 Taster, 4-fach DIP-Schalter # Verpolungsschutz # JTAG (10pol + 8pol) Dabei frage ich mich, welche Komponenten ich im MSB hinzufügen muss. Im Tutorial wurde z.B. asynchron SDRAM hinzugefügt, den ich nicht habe Ich weiß auch nicht, wie ich dazu ein c-programm schreiben soll z.B. LEDTest - z.B. ein LED-Lauflicht Ich bin kein guter c-programmierer und deshalb brauch ich hilfe. Wenn es unter euch für das thema experten gibt, dann bitte ich euch um hilfe. Ihr könnt mir eine E-mail schicken: davor_hrkac@hotmail.com herzlichen Dank im voraus Mit freundlichen grüßen
Hallo Bernhard, einiges ist einfacher als Du denkst, einiges aber auch etwas komplexer. Es gibt prinzipiell 2 Möglichkeiten zur Lösung Deiner Aufgabe. Variante 1: Du erstellst mit IPExpress das Modul für das Dualport RAM. Im MSB vom MICO32 fügst Du den 'Asynchronous SRAM Controller' ein. Dort kannst Du auch die Basisadresse sowie den Adressbereich festlegen, in der Dein RAM liegen soll. An die Ports dieses SRAM Controllers kannst Du dann in Deinem Verilog Toplevel das Memorymodul anschließen. In diesem Fall "funktioniert" der SRAM Controller als Wishbonewrapper. Variante 2: Du programmierst ein eigenes Verilogmodul, welches Dein Dualport RAM enthält mit eigenem Wishboneslaveport (gut zum Lernen und auch zum Kopieren ist der "LatticeMico32 On-Chip Memory Controller", dort musst Du "nur" die PMI-RAM-Definitionen anpassen). Diese neue eigene Komponente kannst Du dann als Custom Kompomente im MICO32 einbinden. Eine sehr gute Anleitung zur Einbindung von Custom Komponenten ist seid SP1 im "LatticeMico32 Software Developer User Guide" ab S. 87ff (prinzipiell) und S.131ff (ein gutes Beispiel, mit wirklich allen kleinen Schritten, die notwendig sind) und NICHT im "Creating Components in LatticeMico32 System", ist verrückt, aber so ist es halt. Wenn man dann mehrmals positive Erfahrungen mit Variante 2 gesammelt hat, dann möchte man es nie wieder anders machen. Viele Grüße Arndt
Hallo Davor, um ein Gefühl (und das erste Erfolgserlebnis) für den MICO32 zu bekommen, schlage ich vor, dass wir versuchen eine LED mit dem MICO32 zum Blinken zu bringen (dann braucht man nur eine Minimalausstattung) Es geht mit dem o.g. Board, allerdings kann das MICO32 System viel einfacher ausfallen!!! Zuerst muss eine neue MICO32 Plattform angelegt werden (mit "Blank" starten). Diese sollte nur folgende Komponenten enthalten: LM32 -> Ohne Caches, mit Debugport, kein Inline Memory -> Location of Exception Handlers auf die Anfangsadresse des "On-Chip-Memorys" legen (0x00004000) On-Chip-Memory -> 16kB GPIO-Port -> Eine Augsangsleitung reicht Nacheinander "A" "I" "D" "G" Buttons drücken, dann sollten alle Adressen korrekt vergeben und der Prozessor (als Verilogcode) erzeugt sein. Den Verilogcode (im soc Verzeichnis die *.v Datei (nicht die *_inst.v)) dieses Prozessors im ispLever Projektnavigator als Verilogtoplevel einbinden. Im Designplanner die 3 Leitungen (clk_i, reset_n, gpioPIO_OUT_0) am FPGA an den richtigen Pins anschließen, Spannungspegel angeben und globalen Takt für die Taktleitung angeben und speichern. Anschließend den kompletten Flow durchlaufen lassen (bis zum PROM-File). Dieses Design kann dann in das FPGA geladen werden (als *.bit temporär oder mit dem *.mcs ins Flash mit dem FPGALoader). Dann ist der Prozessor tatsächlich schon real vorhanden und wartet nur noch auf seinen Programmcode. Dazu im Mico32 ein Mico32 managed C Projekt anlegen, mit folgendem Code: -- #include "DDStructs.h" #include "LookupServices.h" #include "stdio.h" #include "MicoUtils.h" int main(void) { /* wir sind faul und lassen uns die Adresse geben */ MicoGPIOCtx_t *led = (MicoGPIOCtx_t *)MicoGetDevice("gpio"); // Blinkomat while(1){ *((volatile unsigned int *)(led->base)) = 0x1; MicoSleepMilliSecs(100); *((volatile unsigned int *)(led->base)) = 0x0; MicoSleepMilliSecs(100); } } -- Dieses Programm compilieren und mit dem MICO32 Debugger hochladen (erfolgt automatisch in das BlockRAM des FPGAs) und ausführen lassen (nach dem Start die "play" Taste drücken). Achja, obercool wird es, wenn man eine printf Zeile einfügt. Die printf Ausgaben erscheinen in der Console des Debuggers!!!! Kombinieren lässt sich das dann auch noch mit dem Reveal, will heissen, man kann wirklich sehen, wie der Prozessor mit der Peripherie zusammenarbeitet. Viel Erfolg Arndt P.S.: Wenn das geklappt hat, kann man versuchen die anderen externen Memorys und IOs einzubinden. --
DANKE Ich bin bis zum Design Planner gekommen, doch nun komme ich nicht weiter, weil ich nicht weiß welche PINS ich anschließen soll. Es werden Pins gefunden, welche leider nicht existieren (z.B.Pin M25 not found) Wo kann ich sehen, welche pin ich anschließen muss? Danke
Hallo Arndt, erstmal vielen Dank für deine Antwort. Ich habe mittlerweile "meine" Version ausprobiert und die funktioniert ganz gut, habe das mit dem Sram Controller aber noch nicht ganz verstanden. Wenn ich jetzt mit IPExpress ein DualPortRam erstelle sagen wir mal Adresstiefe 512 und Datentiefe 8 (muss DMX empfangen, sind 8 bit Daten und 512 Bytes gibts), dann auf Generate --> Fertig. Die Einbindung habe ich im Top schon gemacht (mache aber in VHDL und nicht Verilog), funktioniert auch. Wenn ich jetzt im Mico32 einen Asynchronous SRAM Controller einbaue, welche Adresse muss/soll ich dann einstellen? Ist die vorgegeben oder kann ich die frei wählen? Wie kann ich dann über den Asynchronous SRAM Controller mein Ram ansprechen im Mico und im FPGA? Wenn du ein Beispiel für eine RAM Einbindung hättest wär voll super wennst mir das schicken könntest!! (pfiff69@gmx.at) Herzlichen Dank im Voraus lg Bernhard
Hier habe ich einen Plan meiner Pinbelegung, doch welche Pins sind dabei clk_i und reset_n? Mit feundlichen Grüßen
Hallo Davor clk_i wäre Pin 14 reset_n wäre Pin 130 mit PULLUP!!! Viele Grüße Arndt
Hallo Bernhard, Bernhard P. wrote: > ... > Wenn ich jetzt im Mico32 einen Asynchronous SRAM Controller einbaue, > welche Adresse muss/soll ich dann einstellen? Ist die vorgegeben oder > kann ich die frei wählen? Ja, bzw. Du kannst Sie vom MSB auch automatisch zuteilen lassen ("A" drücken), solltest Sie aber dann locken, denn die Anfangsadresse musst Du für den C-Code kennen. Die Größe des Adressraums ist immer die Größe in Bytes. Je nachdem, wie Du Dein RAM angebunden hast, kann es sein, dass eine Adresse Deines RAMs auf ein 32 Bit Datum des Prozessors gemappt wird (von den 32 Bit werden dann z.B. nur die unteren 8 Bit bentutzt), Du musst dann aber für den Adressbereich eben 32 Bit bzw. 4 Byte pro Eintrag reservieren. > Wie kann ich dann über den Asynchronous SRAM Controller mein Ram > ansprechen im Mico und im FPGA? Im Mico ist es erschreckend einfach: unsigned int *baseram; baseram = 0x Deine Basisadresse; *(baseram+offset) = ein Byte (bzw. 32 Bit) zum Schreiben; ein Byte (bzw. 32 Bit) zum Lesen = *(baseram+offset); Auf der FPGA Seite die rausgeführten RAM-Leitungen anschließen und benutzen. Viele Grüße Arndt
Hallo Arndt danke für die Hilfe, doch ich komme wieder nicht weiter. Das Problem ist dabei, dass ich den Flow nicht komplett durchlaufen lassen kann. Es gibt eine Fehler meldung und der Flow wird angehalten. Ich versteh nicht wieso, da ich die Pins richtig angeschlossen habe. Kannst du mir sagen, ob du vielleicht jemanden in der umgebung von wien kennst, der die Integration des mico32 in den fpga gut beherrscht? ich wohne in der umgebung von wien und bräuchte dringend hilfe zu diesem thema - natürlich gegen bezahlung ach ja - da ich einen 8MBit SPI Flash habe, möchte ich bitte wissen wie man das mit dem Flash macht - z.B. eine LED blinken lassen.
Hallo Arndt Wenn das mit dem SPI Flash gehen würde, müsste ich die Pins des SPI Flash anschließen. Doch die Pins des SPI Flash haben Namen, welche ich auf meinem Plan nicht finde. Könntest du mir sagen, welche Nummern die Pins des SPI Flash haben. Ich hab dir einen Screenshot der Pinbelegung gemacht. Ein paar Pins weiß ich, doch es gibt einige die ich nicht kenne. Besten Dank Mit freundlichen Grüßen
> clk_i wäre Pin 14 > reset_n wäre Pin 130 mit PULLUP!!! Ich habe diese Pinnummern vergeben, doch ich weiß jetzt nicht, was ich sonst noch im Design planner machen muss. Du hast gemeint, dass ich die Spannungspegel angeben und den globalen Takt für die Taktleitung angeben und speichern muss. Doch ich weiß nicht, wie ich diesen Spannungspegel und den globalen Takt für die Taktleitung angeben soll. Wird das auch im Design Planner gemacht??? Und wenn ja, wie???? DANKE IM VORAUS Mit freundlichen Grüßen
Hallo Davor, alles halb so schlimm. Es scheint so, als wenn Du in der MICO32 Plattform ein SPI-Flashcontroller ausgewählt hättest (die ganzen Leitungen mit SPI.... kommen von diesem Controller). Den brauchst Du nicht! Wenn der Controller entfernt ist, dann sollten nur noch die 3 Leitungen übrig sein. Den Spannungspegel stellst Du in der Spalte "IO_TYPE" auf LVCMOS33 ein. Die Seite, bei der man den globalen Takt einstellen kannst, findest Du durch anklicken des unteren Tabs "Period/Frequency". Dort dann in dem leeren Fenster auf das linke untere Icon der leeren Spalte klicken. Dann erscheint die Auswahlmöglichkeit zur Taktvergabe. Dort "Frequency" und "Clockports" anwählen, dann sollte der eine Clockport erscheinen, anwählen, die gewünschte Frequenz in MHz eintragen und "ADD" drücken. Danach die Settings speichern und Design Planner beenden. Dann den Flow durchlaufen lassen. Zum Nachlesen siehe "fpga_design_tutor.pdf" von Lattice ab S. 11ff. Viele Grüße und viel Erfolg Arndt P.S.: Wir können Dir auch Fernsupport anbieten, aber ich glaube schon, dass wir das hier bald erfolgreich beendet haben.
> anwählen, die gewünschte Frequenz in MHz eintragen und "ADD" drücken.
Wie groß soll die Frequenz ungefähr sein?
Danke für die Anleitung
Ich habe eine Frequenz von 20MHz eingestellt, doch ich kann den Flow nicht durchlaufen lassen, weil er angehalten wird und eine Fehlermeldung angezeigt wird. Hier die Fehlermeldung: ispLEVER Auto-Make Log File -------------------------- Updating: Generate Bitstream Data Cannot get current project information. Starting: 'C:\ispTOOLS7_2_STRT\ispfpga\bin\nt\map.exe -a LatticeECP2 -p LFE2-12E -t TQFP144 -s 5 "ledtesting.ngd" -o "ledtesting_map.ncd" -mp "ledtesting.mrp" "ledtesting.lpf"' map: version ispLever_v72_PROD_Build (44) Copyright (c) 1991-1994 by NeoCAD Inc. All rights reserved. Copyright (c) 1995 AT&T Corp. All rights reserved. Copyright (c) 1995-2001 Lucent Technologies Inc. All rights reserved. Copyright (c) 2001 Agere Systems All rights reserved. Copyright (c) 2002-2008 Lattice Semiconductor Corporation, All rights reserved. Process the file: ledtesting.ngd Picdevice="LFE2-12E" Pictype="TQFP144" Picspeed=5 Remove unused logic Do not produce over sized NCDs. Part used: LFE2-12ETQFP144, Speed used: 5. Loading device for application map from file 'ep5a32x56.nph' in environment C:/ispTOOLS7_2_STRT/ispfpga. Package: Version 1.23, Status: FINAL Running general design DRC... WARNING - map: logical net 'lm32_inst/LM32/jtck' has no driver WARNING - map: logical net 'lm32_inst/LM32/jrstn' has no driver WARNING - map: logical net 'lm32_inst/LM32/cpu/adder/addsub/un1_addsub' has no driver WARNING - map: logical net 'ep5ahub/tcka' has no driver WARNING - map: logical net 'ep5ahub/tmsa' has no driver WARNING - map: logical net 'ep5ahub/tdia' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_1' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_2' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_3' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_4' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_5' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_6' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_7' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_8' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_9' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_10' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_11' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_12' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_13' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_14' has no driver WARNING - map: logical net 'ep5ahub/er2_tdo_15' has no driver Removing unused logic... Optimizing... 312 CCU2 constant inputs absorbed. WARNING - map: Using local reset signal 'reset_n_c' to infer global GSR net. Design Summary: Number of registers: 1706 PFU registers: 1706 PIO registers: 0 Number of SLICEs: 2149 out of 6048 (36%) SLICEs(logic/ROM): 2053 out of 4914 (42%) SLICEs(logic/ROM/RAM): 96 out of 1134 (8%) As RAM: 96 out of 1134 (8%) As Logic/ROM: 0 out of 1134 (0%) Number of logic LUT4s: 2729 Number of distributed RAM: 96 (192 LUT4s) Number of ripple logic: 129 (258 LUT4s) Number of shift registers: 0 Total number of LUT4s: 3179 Number of PIO sites used: 3 out of 93 (3%) Number of PIO FIXEDDELAY: 0 Number of DQSDLLs: 0 out of 2 (0%) Number of 3-state buffers: 0 Number of PLLs: 0 out of 2 (0%) Number of DLLs: 0 out of 2 (0%) Number of block RAMs: 20 out of 12 (167%) Number of CLKDIVs: 0 out of 2 (0%) Number of GSRs: 1 out of 1 (100%) JTAG used : Yes Readback used : No Oscillator used : No Startup used : No ERROR - map: The number of embedded RAM blocks needed (20) exceeds the number available. This device has at most 12 embedded RAM blocks. Notes:- 1. Total number of LUT4s = (Number of logic LUT4s) + 2*(Number of distributed RAMs) + 2*(Number of ripple logic) 2. Number of logic LUT4s does not include count of distributed RAM and ripple logic. Number Of Mapped DSP Components: -------------------------------- MULT36X36B 1 MULT18X18B 0 MULT18X18MACB 0 MULT18X18ADDSUBB 0 MULT18X18ADDSUBSUMB 0 MULT9X9B 0 MULT9X9ADDSUBB 0 MULT9X9ADDSUBSUMB 0 -------------------------------- Number of Used DSP Sites: 8 out of 48 (16 %) Number of clocks: 3 Net clk_i_c: 995 loads, 995 rising, 0 falling (Driver: PIO clk_i ) Net lm32_inst/LM32/jtag_update: 1 loads, 0 rising, 1 falling (Driver: lm32_inst/LM32/jtag_cores/jtag_lm32_inst/REG_UPDATE ) Net jtaghub16_jtck: 41 loads, 0 rising, 41 falling (Driver: ep5ahub/genblk0_genblk3_jtagc_u ) Number of Clock Enables: 55 Net lm32_inst/gpio/PIO_DATA9: 1 loads, 1 LSLICEs Net lm32_inst/ebr/N_89_i: 7 loads, 7 LSLICEs Net lm32_inst/ebr/un1_EBR_ACK_O_2_sqmuxa: 1 loads, 1 LSLICEs Net lm32_inst/LM32/debug_rom/N_29_i: 16 loads, 16 LSLICEs Net lm32_inst/LM32/debug_rom/write_enable_RNO: 1 loads, 1 LSLICEs Net lm32_inst/LM32/debug_rom/state_5_d_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/debug_rom/state_nss_1: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/eba8: 12 loads, 12 LSLICEs Net lm32_inst/LM32/cpu/stall_x_N_5_i: 154 loads, 154 LSLICEs Net lm32_inst/LM32/cpu/hw_debug/dc_re6: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/jtag/jtag_reset_1_sqmuxa_1_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/jtag/N_927_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/jtag/uart_tx_valid_1_sqmuxa_i_s: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/jtag/uart_tx_byte_0_sqmuxa: 4 loads, 4 LSLICEs Net lm32_inst/LM32/cpu/jtag/uart_rx_valid_2_sqmuxa: 5 loads, 5 LSLICEs Net lm32_inst/LM32/cpu/jtag/uart_rx_valid_0_sqmuxa_1_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/jtag/jtag_reg_d_1_sqmuxa: 4 loads, 4 LSLICEs Net lm32_inst/LM32/cpu/interrupt/im_1_sqmuxa: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/interrupt/un1_eie14: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/interrupt/un1_eie12: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/interrupt/un1_non_debug_exception_2: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/mc_arithmetic/state_7_d_i: 17 loads, 17 LSLICEs Net lm32_inst/LM32/cpu/N_46_i: 32 loads, 32 LSLICEs Net lm32_inst/LM32/cpu/mc_arithmetic/N_141_i: 4 loads, 4 LSLICEs Net lm32_inst/LM32/cpu/mc_arithmetic/b_0_sqmuxa: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/N_933_1: 82 loads, 82 LSLICEs Net lm32_inst/LM32/cpu/stall_d_2_0_a0_0: 104 loads, 104 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/dcache/N_157_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/dcache/N_152_i: 3 loads, 3 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/dcache/N_151_i: 14 loads, 14 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/dcache_refill_ready_0_sqmuxa: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/d_we_o_1_sqmuxa: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/store_data_m_4_sqmuxa_i: 2 loads, 2 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/d_cyc_o_1_sqmuxa_1_i: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/d_cyc_o_0_sqmuxa_1: 3 loads, 3 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/wb_load_complete_1_sqmuxa_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/stall_wb_load_1_sqmuxa_1_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/un1_d_adr_o32_2_i_0: 3 loads, 3 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/state_1_rep1_RNIMQ14_1: 14 loads, 14 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/state_1_rep1_RNIMQ14: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/icache/un1_restart_request_0_sqmuxa_ i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/N_969_i: 15 loads, 15 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/icache_refill_data_0_sqmuxa: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/N_926_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/memop_pc_w6: 15 loads, 15 LSLICEs Net lm32_inst/LM32/cpu/un1_dcache_refill_request_i_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/N_935_i: 2 loads, 2 LSLICEs Net lm32_inst/LM32/cpu/N_931_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/N_932_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/deba8: 12 loads, 12 LSLICEs Net lm32_inst/LM32/cpu/data_bus_error_seen_1_sqmuxa_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/jtag_cores/jtag_lm32_inst/clk_enable: 6 loads, 6 LSLICEs Net jtaghub16_jupdate: 14 loads, 14 LSLICEs Net ep5ahub/id_enable_0_sqmuxa: 1 loads, 1 LSLICEs Net ep5ahub/N_45_i: 10 loads, 10 LSLICEs Number of local set/reset loads for net reset_n_c merged into GSR: 35 Number of LSRs: 9 Net reset_n_c: 759 loads, 747 LSLICEs Net lm32_inst/LM32/cpu/registers_and_0: 16 loads, 16 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/dcache/state_13_d: 2 loads, 2 LSLICEs Net lm32_inst/LM32/cpu/load_store_unit/fb: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/un1_rst_i_i_0: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/icache/genblk31_memories_0__way_0_ta g_ram/N_209_i_i: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/instruction_unit/icache/state_1: 1 loads, 1 LSLICEs Net lm32_inst/LM32/cpu/registers_and_2: 16 loads, 16 LSLICEs Net jtaghub16_jrstn: 40 loads, 40 LSLICEs Number of nets driven by tri-state buffers: 0 Top 10 highest fanout non-clock nets: Net reset_n_c: 772 loads Net lm32_inst/LM32/cpu/stall_x_N_5_i: 154 loads Net lm32_inst/VCC: 134 loads Net lm32_inst/LM32/cpu/stall_d_2_0_a0_0: 115 loads Net lm32_inst/LM32/cpu/N_933_1: 111 loads Net lm32_inst/LM32/cpu/read_idx_1_d_2: 88 loads Net lm32_inst/LM32/cpu/read_idx_1_d_3: 87 loads Net lm32_inst/LM32/cpu/read_idx_1_d_1: 84 loads Net lm32_inst/LM32/cpu/read_idx_1_d_0: 80 loads Net lm32_inst/LM32/cpu/read_idx_0_d_0: 78 loads ERROR - map: Design doesn't fit into device specified, refer to the Map report for more details. Number of warnings: 22 Number of errors: 2 INFO: Design contains pre-loadable EBR during configuration that has a requirement: Since the GSR is disabled for the EBR, make sure write enable and chip enable are inactive during wake-up, so that the pre-loaded initialization values will not be corrupted during wake-up state. Total CPU Time: 5 secs Total REAL Time: 6 secs Peak Memory Usage: 73 MB Done: failed with exit code: 0002.
> Wir können Dir auch Fernsupport anbieten, aber ich glaube schon, dass > wir das hier bald erfolgreich beendet haben. Wie meinst du das mit Fernsupport? Ich habs noch immer nicht hingekriegt, hast Du schon mal so eine Fehler meldung wie im letzten Eintrag beschrieben gehabt? DANKE
Fernsupport, im Moment durch das Forum. Die Fehlermeldung sagt, dass Du zuviel BlockRAM belegst. Das kann kommt vermutlich dadurch, dass Du zuviel OnChip Memory angefordert hast. Im MSB beim Onchipmemory als Zahl: 16384 eintragen Bei der CPU Caches deaktivieren und KEIN Inline Memory nehmen. Viele Grüße Arndt
> Fernsupport, im Moment durch das Forum.
Fernsupport ist echt hilfreich wenn man nicht so der Experte ist.
Ich wollte jetzt anfangen zu debuggen, doch es erscheint folgende
Fehlermeldung (Bild oben)
Weißt Du wie man den lösen kann?
DANKE nochmals
Mit freundlichen Grüßen
Ja, dann stelle ich mal die Frage, die Dir auch der Rechner stellt. Hast Du im LM32 im MSB das Debug Modul aktiviert? Hast Du das entstandene .bit File mit ispvmSystem ins FPGA geladen (fürs erste reicht Fastprogramm direkt ins RAM des FPGAs). Hast Du den USB Programmer? Wenn alle Fragen mit ja beantwortet werden können und der Debugger immer noch diese Meldung bringt, kann es sein, dass der JTAG Server abgeschmiert ist (der reagiert sehr empfindlich auf Störungen). Da hilft leider nur ein Ein- und Ausschalten des Rechners. Viele Grüße Arndt
Arndt Bußmann wrote: > Ja, dann stelle ich mal die Frage, die Dir auch der Rechner stellt. > > Hast Du im LM32 im MSB das Debug Modul aktiviert? > Hast Du das entstandene .bit File mit ispvmSystem ins FPGA geladen (fürs > erste reicht Fastprogramm direkt ins RAM des FPGAs). > Hast Du den USB Programmer? > > Wenn alle Fragen mit ja beantwortet werden können und der Debugger immer > noch diese Meldung bringt, kann es sein, dass der JTAG Server > abgeschmiert ist (der reagiert sehr empfindlich auf Störungen). Da hilft > leider nur ein Ein- und Ausschalten des Rechners. Stimmt die Einstellung des LM32 im MSB (Bild oben) fürs debugen? oder gehört "Enable Debugging Code in Flash oder ROM" auch angekreuzt? DANKE NOCHMALS Mit freundlichen Grüßen
Arndt Bußmann wrote:
> So ist der LM32 ok.
OK dann werd ich das mit dem Wiedereinschalten des Rechners versuchen.
DANKE NOCHMALS
War das Programmieren mit ispvmSystem denn erfolgreich? Im Notfall kann ich Dich auch kurz anrufen, kannst mir ja eine Nachricht mit Deiner Nummer schicken.
Arndt Bußmann wrote: > War das Programmieren mit ispvmSystem denn erfolgreich? > > Im Notfall kann ich Dich auch kurz anrufen, kannst mir ja eine Nachricht > mit Deiner Nummer schicken. YES ES HAT JETZT GEKLAPPT DANKE DANKE DANKE Jetzt wärs noch cooler ein Lauflicht zu machen. Ist das viel schwerer?
Für das Lauflicht solltest Du dem GPIO mehr outputs gönnen und diese natürlich mit den LEDs verdrahten (im Designplanner die richtigen Pins wählen). Danach schlägt die Stunde des C Programmierers ;-) Kannst ja auch mal ein printf einbauen. Ich finde es cool, wenn man das FPGA so debuggen kann. Auch parallel den Reveal testen ist interessant. Weiterhin noch viel Erfolg Arndt
Arndt Bußmann wrote: > Für das Lauflicht solltest Du dem GPIO mehr outputs gönnen und diese > natürlich mit den LEDs verdrahten (im Designplanner die richtigen Pins > wählen). Danach schlägt die Stunde des C Programmierers ;-) > > Kannst ja auch mal ein printf einbauen. Ich finde es cool, wenn man das > FPGA so debuggen kann. Auch parallel den Reveal testen ist interessant. Benutze folgendes Programm für das Lauflicht und es funktioniert sogar: #include "DDStructs.h" #include "LookupServices.h" #include "stdio.h" #include "MicoUtils.h" const char *LED_GPIO_INSTANCE = "LED"; const unsigned int uiBlink = 1; int main(void) { unsigned int iValue = 0x1; unsigned int iShiftLeft = 1; /* Fetch GPIO instance named "LED" */ MicoGPIOCtx_t *leds = (MicoGPIOCtx_t *)MicoGetDevice(LED_GPIO_INSTANCE); if(leds == 0){ printf("failed to find GPIO instance named LED\r\n"); return(0); } printf("found GPIO instance named LED\r\n"); /* if we're not to blink, return immediately */ if(uiBlink == 0) return(0); /* scroll the LEDs, every 100 msecs forever */ while(1){ *((volatile unsigned int *)(leds->base)) = ~iValue; MicoSleepMilliSecs(100); if(iShiftLeft == 1){ iValue = iValue << 1; if(iValue == 0x100){ iValue = 0x40; iShiftLeft = 0; } }else{ iValue = iValue >> 1; if(iValue == 0){ iValue = 0x02; iShiftLeft = 1; } } } /* all done */ return(0); } Das einzige Problem ist, dass ich nicht verstehe, wieso es nur bis zur sechsten LED geht und dann wieder zurück, obwohl ich 8 LED verwende. DANKE DANKE NOCHMALS FÜR DEINE HILFE Mit freundlichen Grüßen
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.