Forum: FPGA, VHDL & Co. Von Hw/Sw Co-sim zum Programm


von Frederik B. (fbo)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein Problem bei meinem Projekt mit einem Xilinx Spartan6 FPGA 
das ich mit System Generator programmieren möchte.

Ich versuche Daten aus dem mit System Generator erzeugten Programm über 
UART auszugeben. Dazu habe eine funktionierende HW/SW Co-Simulation 
erstellt. Darin habe ich ein XPS Projekt erzeugt, in System Generator 
eine JTAG Co-Simulation erstellt und letzlich ein C-Programm im SDK 
geschrieben, dass aus einem FIFO Daten ließt und diese über UART 
ausgibt.

Bis dahin klappt alles, beim versuch das fertige Programm auf das Board 
zu laden, hänge ich aber total. Ich habe versucht das .elf Programm aus 
SDK direkt als Startprogramm des EDK Prozessors anzugeben und dann über 
ISE auf das FPGA zu laden... ohne Erfolg. Versuche ich das .elf im XPS 
als Startprogramm einzustellen, bekomme ich Fehlermeldungen beim 
kompilieren des Bitstreams (ERROR:Xflow - Program ngdbuild returned 
error code 2. Aborting flow execution...make: *** [__xps/system_routed] 
Error 1). Lasse ich von System Generator eine .bit erzeugen und lade 
diese mit iMPACT hoch, passiert nichts auf dem USB Port.

Also noch einmal kurz die Frage: Wie komme ich von einer 
funktionsfähigen HW/SW Co-Simulation zu einer Standalone Version, die 
ich auf das FPGA hochladen kann?

Vielen Dank für eure Hilfe,

fbo

PS: Habe das System Generator Modell angehängt. Der C-Code folgt hier:

#include <stdio.h>
#include "platform.h"
#include "xparameters.h"
#include "sg_axiiface.h"

int main()
{
    init_platform();

    // initialize variables
    uint32_t dout_empty, value;
    xc_iface_t *iface;
    xc_from_fifo_t *fromfifo_dout;

    // initialize the software driver
    xc_create(&iface, 
&SG_AXIIFACE_ConfigTable[XPAR_SG_AXIIFACE_0_DEVICE_ID]);

    xc_get_shmem(iface, "dout", (void **) &fromfifo_dout);
    if (fromfifo_dout == NULL) {
        print("FIFO 'dout' not found\r\n");
    }

    print("Start\n\r");

    while(1) {
    //  wait until 'dout' FIFO has data
    do {
      xc_read(iface, fromfifo_dout->empty, &dout_empty);
    } while (dout_empty == 1);
    // read data from 'dout' FIFO
    xc_read(iface, fromfifo_dout->dout, &value);

    xil_printf("%d\r\n", value);
    }

    print("Done\r\n");

    cleanup_platform();

    return 0;
}

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
Noch kein Account? Hier anmelden.