MyFPGA Forum

 找回密码
 注册
搜索
查看: 5695|回复: 3
打印 上一主题 下一主题

arm 访问fpga端的sdram

[复制链接]
跳转到指定楼层
1#
发表于 2017-1-4 22:06:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发板:友晶DE1-SOC
     在qsys中,我把SDRAM controller 连接在hps的h2f-axi-master总线上以达到在arm里面访问FPGA端的SDRAM的目的,在arm里面对SDRAM读写的时候有个问题。简单代码如下:
     short int a[10]={1,2,3,4,5,6,7,8,9,10};
     short int b[10]={0};
     memcpy( (short int *) (h2p_memory_addr) , (short int *)(a) , 8 ) ; //h2p_memory_addr为fpga端的SDRAM对应的虚拟地址
     memcpy( ( short int *)(b) , (short int *)(h2p_memory_addr) , 8 );
     这样运行完后,数组b中的数据应该是{1,2,3,4,0,0,0,0,0,0},但实际上读的数据全是4,请问这是怎么回事,我一直没弄清楚哪里出错了。
2#
发表于 2017-1-5 11:34:02 | 只看该作者
建议你先write/read onchip memory 看看程序是否有问题。再确定你的SDRAM 设计上是否有问题。
3#
 楼主| 发表于 2017-1-5 14:56:37 | 只看该作者
matthew_wang 发表于 2017-1-5 11:34
建议你先write/read onchip memory 看看程序是否有问题。再确定你的SDRAM 设计上是否有问题。 ...

我write/read onchip memory 试了一下,还是一样的问题,应该是软件除了问题。不过,软件中地址映射以及访问我是仿照友晶的一个图像处理例程写的,目前也不知道哪里出了问题,还麻烦您看一下。

#define ALT_AXI_FPGASLVS_OFST (0xC0000000)  // axi_master
#define HW_FPGA_AXI_SPAN (0x40000000)  // Bridge span
#define HW_FPGA_AXI_MASK ( HW_FPGA_AXI_SPAN - 1 )

short int *h2p_memory_addr=NULL;
int main(void)
{
   short int *axi_virtual_base;
   int fd;
   short int data[1000]={0};
   short int data1[1000]={0};
   int i=0;
        if( ( fd = open( "/dev/mem", ( O_RDWR | O_SYNC ) ) ) == -1 ) {
                printf( "ERROR: could not open \"/dev/mem\"...\n" );
                return( 1 );
        }

        axi_virtual_base  = mmap( NULL, HW_FPGA_AXI_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd,ALT_AXI_FPGASLVS_OFST  );       

    if( axi_virtual_base == MAP_FAILED ) {
                printf( "ERROR: axi mmap() failed...\n" );
                close( fd );
                return( 1 );
        }

        h2p_memory_addr=axi_virtual_base + ( ( unsigned long  )( ONCHIP_MEMORY2_0_BASE) & ( unsigned long)( HW_FPGA_AXI_MASK ) );

        for(i=0;i<10;i++)
            data=i*13;
               
        memcpy((void *)(h2p_memory_addr),(void *)(data),20);
        memcpy((void *)(data1),(void*)(h2p_memory_addr),20);
       
        for(i=0;i<10;i++)
            printf("%d\n",data1);
       
        close(fd);
        return (0);
}
4#
 楼主| 发表于 2017-1-6 11:11:53 | 只看该作者
matthew_wang 发表于 2017-1-5 11:34
建议你先write/read onchip memory 看看程序是否有问题。再确定你的SDRAM 设计上是否有问题。 ...

您好,问题解决了,例程中引脚绑定全部错了
非常感谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-20 17:26 , Processed in 0.036954 second(s), 14 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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