发 帖  
原厂入驻New
[资料] 【工程源码】基于FPGA的SoC使用DS-5控制FPGA侧逻辑时的相关操作
2020-2-16 18:38:28  168 FPGA开发
分享
本文由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
01.png



该句话的意思是指定我们的开发平台为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 )


4
分享淘帖 显示全部楼层

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发资料
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表