Forum Discussion

XChoo's avatar
XChoo
Icon for New Contributor rankNew Contributor
6 years ago
Solved

How to access FPGA peripherals from ARM

I would like to know how to access FPGA from ARM? IS there any example ? Thank you
  • FawazJ_Altera's avatar
    6 years ago

    Hello,

    You can access the FPGA peripherals through the bridges based on your connection in Platform Designer.

    lets say you have a peripheral connected to h2f bridge. You can use ARM to access this IP through the h2f bridge offset + the IP offset in qsys.

    Lets say you have a qsys IP, defined in a c code:

    #define SYSID_BASE 0x10000

    The h2f bridge can be accessed through this address:

    #define ALT_AXI_FPGASLVS_OFST 0xC0000000

    Then, you need to open your mem device in your linux system:

    if( ( fd = open( "/dev/mem", ( O_RDWR | O_SYNC ) ) ) == -1 ) {

    printf( "ERROR: could not open \"/dev/mem\"...\n" );

    return( 1 );

    }

    Next, create the virtual memory:

    virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, ALT_AXI_FPGASLVS_OFST );

    After that, you can cast the pointer of system_ID to your virtual memory:

    qsys_id_addr =virtual_base + ( ( unsigned long )( ALT_LWFPGASLVS_OFST + SYSID_BASE ) & ( unsigned long)( HW_REGS_MASK ) );

    Finally, you should be able to use qsys_id_addr pointer to access your system ID IP in qsys:

    printf("system ID = %x",*(uint32_t *)qsys_id_addr);

    Hope this might help.

    Thank you