打印
[FPGA]

【工程源码】基于FPGA的SoC使用DS-5控制FPGA侧逻辑时的相关...

[复制链接]
416|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zgmxs|  楼主 | 2020-2-16 18:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文由FPGA爱好者小梅哥编写,未经作者许可,本文仅允许网络论坛复制转载,且转载时请标明原作者。

1、添加SoC硬件相关头文件
添加路径D:\intelFPGA\17.1\embedded\ip\altera\hps\altera_hps\hwlib\include
添加路径D:\intelFPGA\17.1\embedded\ip\altera\hps\altera_hps\hwlib\include\soc_cv_av

2、指定硬件平台
修改D:\intelFPGA\17.1\embedded\ip\altera\hps\altera_hps\hwlib\include下的hwlib.h文件,在第54行加上下面一句话:
#define soc_cv_av




该句话的意思是指定我们的开发平台为Cyclone V SoC平台或者Arriv V SoC平台。如果不加这句话,编译时会报以下错误:
In file included from ../led.c:2:0:
D:\intelFPGA\17.1\embedded\ip\altera\hps\altera_hps\hwlib\include/hwlib.h:56:2: error: #error You must define soc_cv_av or soc_a10 before compiling with HwLibs
#error You must define soc_cv_av or soc_a10 before compiling with HwLibs
  ^
make: *** [subdir.mk:23: led.o] Error 1

3、映射自定义IP到用户空间
将FPGA侧逻辑的寄存器挂载到Linux用户空间,以LED为例
[code=Cpp]        int ret;
        void *virtual_base;
        int fd;
        int i;
        //将LED的寄存器地址段映射到Linux系统的用户空间,以便我们能够在Linux系统能够直接操作他们
        // 打开MMU
        if( ( fd = open( "/dev/mem", ( O_RDWR | O_SYNC ) ) ) == -1 ) {
                printf( "ERROR: could not open \"/dev/mem\"...\n" );
                return( 1 );
        }
        //映射得到外部总线在Linux用户空间
        virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, HW_REGS_BASE );
        if( virtual_base == MAP_FAILED ) {
                printf( "ERROR: mmap() failed...\n" );
                close( fd );
                return(1);
        }
        //得到LED的寄存器基地址虚拟地址
        h2p_lw_led_addr=virtual_base + ( ( unsigned long  )( ALT_LWFPGASLVS_OFST + LED_PIO_BASE ) & ( unsigned long)( HW_REGS_MASK ) );
[/code]
4、程序中用到的几个宏定义
暂时不清楚什么意思,应该是HPS硬件部分在MMU上的映射信息。
#define HW_REGS_BASE ( ALT_STM_OFST )
#define HW_REGS_SPAN ( 0x04000000 )
#define HW_REGS_MASK ( HW_REGS_SPAN - 1 )



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

104

帖子

3

粉丝