zoukankan      html  css  js  c++  java
  • 嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口

    -----------------------------------------author:pkf

    ------------------------------------------------time:2015-3-17

    -----------------------------------------------------qq:1327706646

    (0)应用背景

    (1)i2c 两根线

    (2)spi 用作控制接口4根线

    (2)emif 用作大数据传输接口16位数据带宽

    (3)dma

    (4)输入口

    (0)

      在雷达信号处理、数字图像处理等领域中,信号处理的实时性至关重要。由于FPGA芯片在大数据量的底层算法处理上的优势及DSP芯片在复杂算法处理上的优势,DSP+FPGA的实时信号处理系统的应用越来越广泛。ADI公司的TigerSHARC系列DSP芯片浮点处理性能优越,故基于这类。DSP的DSP+FPGA处理系统正广泛应用于复杂的信号处理领域。同时在这类实时处理系统中,FPGA与DSP芯片之间数据的实时通信至关重要。比如

    赛灵思Kintex-7 FPGA 系列芯片和ti的6678 或key stone 系列通信

    DSP与FPGA采用EMIF接口通信,即将FPGA作为DSP的外部SRAM,只需设置EMIF控制的存储器为SRAM类型即可,DSP通过EMIF接口读写SRAM的时序如下: 参考datasheet《tms320dm642.pdf》 

     

    DSP与FPGA间简单通信

    DSP与FPGA间简单通信



    可以根据以上时序图编写FPGA代码,以下仅供参考:

    module DSP_FPGA(                                       
                                     input clk,                            
                                     input [2:0] addr,       //简单测试,没有用到所有地址            
                                     inout [15:0] data,     //16位数据宽度             
                                     input CE_2,//FPGA片选                 
                                     input AOE,                            
                                     input AWE                             
                                  );                                     
                                                                          
                                                           
    reg [15:0] DSP_FPGA_REG0;                          
    reg [15:0] DSP_FPGA_REG1;                              
    reg [15:0] DSP_FPGA_REG2;                          
    reg [15:0] DSP_FPGA_REG3;                          
    reg [15:0] DSP_FPGA_REG4;                              
    reg [15:0] DSP_FPGA_REG5;                          
    reg [15:0] DSP_FPGA_REG6;                          
    reg [15:0] DSP_FPGA_REG7;                          
                                                      

         

    wire rd_en = ~CE_2 && ~AOE;

    reg [15:0] data_reg;      
    //always @(posedge clk) //DSP读操作,The sampling point of DSP reading is the risging edge of AWE!                               
    always @(*)    //这里没有用时钟,用的latch
    begin                                                
       if(rd_en)                                 
         begin                                           
            case(addr[2:0])                              
             3'd0   :  data_reg <= DSP_FPGA_REG0;  
             3'd1   :  data_reg <= DSP_FPGA_REG1;  
             3'd2   :  data_reg <= DSP_FPGA_REG2;  
             3'd3   :  data_reg <= DSP_FPGA_REG3;  
             3'd4   :  data_reg <= DSP_FPGA_REG4;  
             3'd5   :  data_reg <= DSP_FPGA_REG5;  
             3'd6   :  data_reg <= DSP_FPGA_REG6;  
             3'd7   :  data_reg <= DSP_FPGA_REG7;       
             default:  ;                                 
            endcase                                   
         end                                                                                                
    end                                              

          
          
    reg AWE_tmp1;
    reg AWE_tmp2;
    always @(posedge clk)
    begin
         AWE_tmp1 <= AWE;
         AWE_tmp2 <= AWE_tmp1;
    end      
          
    wire AWE_RISING = ~AWE_tmp2 && AWE_tmp1;//与clk同步  

         
    always @(*)                                   
    begin                                        
      if(AWE_RISING)      //这里也没有用时钟,用的是latch                       
         begin                                    
            case(addr[2:0])                       
             3'd0   :  DSP_FPGA_REG0 <= data; 
             3'd1   :  DSP_FPGA_REG1 <= data; 
             3'd2   :  DSP_FPGA_REG2 <= data; 
             3'd3   :  DSP_FPGA_REG3 <= data; 
             3'd4   :  DSP_FPGA_REG4 <= data; 
             3'd5   :  DSP_FPGA_REG5 <= data; 
             3'd6   :  DSP_FPGA_REG6 <= data; 
             3'd7   :  DSP_FPGA_REG7 <= data;    
             default:  ;                          
            endcase                            
         end                                      
    end                                         

    assign data =  rd_en ? data_reg : 16'hzzzz;
          
    endmodule


    //////////////////////////////////////////////////////////
    DSP(具体为DM642)端程序:寄存器设置参考 《EMIF Reference Guide- spru266b.pdf》即spru266


    #define   FPGA_ADDR              0xA0000000  
    //#define   EMIFA_GBLCTL         0x01800000
    #define   EMIFA_CECTL2         0x01800010 

    //#define   EMIFA_CESEC2         0x01800050  

    void  delay(unsigned long time)
    {
           unsigned long i;
           for(i = 0; i < 1000; i++)
           {
                for(; time >0 ; time--)
                 {
                 } 
            }
     }

    unsigned short write_value = 0;
    unsigned short read_value = 0; 
    int main(void)
    {
            unsigned short *ptr;


            *(unsigned volatile int *)EMIFA_CECTL2 = (unsigned int)0xFFFFFF13;//设置EMIF控制的存储器类型为                                                                                                                             //16位宽SRAM    

            ptr = (unsigned short *)(unsigned int)FPGA_ADDR;
            
            while(1)
            {
                  *ptr = write_value;
                   read_value =   *ptr;     //调试时通过观察write_value与read_value的值是否相等可以检验通信是否正常 


                   delay(100000);
                   write_value++;
             }
         
             return 0;
    }    

    (4)输入口

     师兄们   请教下8168和FPGA使用nand flash方式通信能够达到视频传输的速度要求吗
    Brave        2015/3/13 10:44:05

    接口是GPMC
    ghos 2015/3/13 10:44:41

    没编码压缩的肯定不行吧,可以考虑pcie
    2015/3/13 10:46:54
    Brave        2015/3/13 10:46:54

    GPMC 一般就支持NOR或者nand    NOR肯定没问题的    nand的话有现成驱动  不用DSP和FPGA端都进行调试要轻松点
    Brave        2015/3/13 10:47:53

    存储会考虑PCIE  我们这儿不会用
    2015/3/13 10:51:10
    ghos 2015/3/13 10:51:10

    关键是你要传输多大的视频,带宽要够才行
    2015/3/13 10:51:57
    Brave        2015/3/13 10:51:57

    原始码流  
    Brave        2015/3/13 10:52:17

    打算用16bit nand方式
    ghos 2015/3/13 10:52:38

    你板子16bitnand带宽能做到多少?
    Brave        2015/3/13 10:53:19

    不知道啊 也还没看具体时序
    2015/3/13 10:54:36
    ghos 2015/3/13 10:54:36

    估计一般不会有人这么设计吧,用pcie的比较多
    Brave        2015/3/13 10:55:42

    我先试试看吧   不行用Nor  不过调试起来麻烦点  
    Brave        2015/3/13 10:56:19

    我们确实要求用GPMC  原理上应该不会有问题
    2015/3/13 11:00:27
    ghos 2015/3/13 11:00:27

    你得先确认带宽需求,要是理论值都达不到的话做了也是白做
    2015/3/13 11:01:56
    Brave        2015/3/13 11:01:56

    怎么确定  我只知道会用一个3D摄像机   数据量应该不小.....
    ghos 2015/3/13 11:02:24

    看图像分辨率
    ghos 2015/3/13 11:02:37

    和要传输几路视频
    Brave        2015/3/13 11:02:45

    1080P60
    ghos 2015/3/13 11:03:04

    你是做硬件的还是做软件的?
    Brave        2015/3/13 11:03:09

    几路也没问.........项目说明书没有...
    Brave        2015/3/13 11:03:13

    软件
    2015/3/13 11:04:34
    Brave        2015/3/13 11:04:34

    估计2-3路  不是视频会议
    ghos 2015/3/13 11:04:35

    你是做软件的,那硬件的设计你让硬件设计师去考虑吧,3d的可能需要同时传输两路  1920*1080*2*8*2 你可以初步估算一下
    自由 2015/3/13 11:05:09

    GHOST这个是广州的么?
    ghos 2015/3/13 11:06:00

    不是
    自由 2015/3/13 11:06:11

    我以为是亿航呢。
    2015/3/13 11:09:07
    Brave        2015/3/13 11:09:07

    看起来挺大的...
    2015/3/13 11:11:23
    ghos 2015/3/13 11:11:23

    这还只是一帧,p60你还得*60
    Brave        2015/3/13 11:12:15

    。。
    ghos 2015/3/13 11:12:40

    GPMC是你们做硬件的定的么?
    Brave        2015/3/13 11:12:50


    Brave        2015/3/13 11:13:05

    老板定的...
    2015/3/13 11:25:23
    ghos 2015/3/13 11:25:23

    让你们老板跟你发奖金,你可以让他避免一两个月的人工浪费和做样板的费用,省掉几万块呢
     
     板子都要出来了 ..  我想这两天把时序做出来...结果都要出来了  顺带可以问下   具体看他了
    ghos 2015/3/13 11:29:03

    如果做d1的倒还是可能的,1080p60应该不靠谱
    2015/3/13 11:30:00
    ghos 2015/3/13 11:30:00

    你们是fpga预处理输入的视频,然后给到8168处理?
    Brave        2015/3/13 11:31:19

    是的  应该可以稍微提高速率
    ghos 2015/3/13 11:31:49

    没有上g的带宽,1080p60怎么玩
    Brave        2015/3/13 11:31:56

    我也不确定有没有预处理再过来
    2015/3/13 11:32:09
    ghos 2015/3/13 11:32:09

    8168有vport的,为什么不直接用
    Brave        2015/3/13 11:32:25

    还没研究到那儿去..
    2015/3/13 11:37:15
    Brave        2015/3/13 11:37:15

    之前不知道方向纠结于整个体系的实现机制  … 收获还不是很大  进度就这样下来了…
    ghos 2015/3/13 11:38:53

    这样的话,请个熟悉平台的人做兼职顾问吧,要是钻进死胡同,那可大大的不妙
    2015/3/13 11:40:57
    Brave        2015/3/13 11:40:57

    我还是嵌入式菜鸟…
    Brave        2015/3/13 11:40:59

    预处理也要先到共享内存才执行吧
    2015/3/13 11:42:13
    Brave        2015/3/13 11:42:13

    还是得自己多看  有点积累别人才能点通  …
    ghos 2015/3/13 11:42:44

    这样要看硬件设计了,fpga和8168之间做共享内存不是那么容易吧,一般还是得靠传输
    Brave        2015/3/13 11:43:49

    应该是先得到原始数据再压缩
    2015/3/13 11:45:48
    ghos 2015/3/13 11:45:48

    感觉你没说到一块去,你知道你们fgpa在系统中的作用是什么吗
    虎啸山 2015/3/13 11:45:55

    emif传输?
    Brave        2015/3/13 11:46:09

    各种外设…
    2015/3/13 11:46:52
    Brave        2015/3/13 11:46:52

    速度达到了不就自然当成DDR了吗  
    虎啸山 2015/3/13 11:47:10

    之前做过dm6467和fpga传输
    Brave        2015/3/13 11:48:14

    不是很清楚fpga  先把他当成一个外设看待
    2015/3/13 12:00:34
    TI专家-兼 2015/3/13 12:00:34

    8168要用VPORT要不1080P60 会有问题的
    TI专家-兼 2015/3/13 12:00:51

    GPMC肯定不能用的
    2015/3/13 12:29:20
    流泪的佛 2015/3/13 12:29:20

    还是pcie吧,哥正在研究~
    2015/3/13 12:29:42
    Brave        2015/3/13 12:29:42

    嗯 周末再研究研究
    TI专家-兼 2015/3/13 12:29:47

    PCIE有延时
    TI专家-兼 2015/3/13 12:29:52

    VIP是必须的
    TI专家-兼 2015/3/13 12:30:10

    2个VIP,每个24bit RGB支持1080P
    流泪的佛 2015/3/13 12:30:51

    恩,vip的话软件开发也简单多了
    流泪的佛 2015/3/13 12:31:07

    Hdmi接口也可以吧
    TI专家-兼 2015/3/13 12:31:28

    HDMI就是进的VIP
    2015/3/13 12:33:19
    流泪的佛 2015/3/13 12:33:19

    Vip是芯片直连,如果板子已经做好的话,也只能考虑像pcie,hdmi之类的接口吧
    TI专家-兼 2015/3/13 12:33:45

    1080P60 3Gbps,你算算2路怎么进吧
    2015/3/13 12:35:19
    流泪的佛 2015/3/13 12:35:19

    这样的话Pcie速度还很危险……
    Brave        2015/3/13 12:35:21

    通常接口只能编码之后了
    流泪的佛 2015/3/13 12:36:34

    我们是传1080p30
    流泪的佛 2015/3/13 12:36:51

    所以pcie两路问题不是问题
    2015/3/13 12:37:38
    TI专家-兼 2015/3/13 12:37:38

    PCIE什么时候算一帧传输完了,可以使用了,系统延时是个问题啊
    TI专家-兼 2015/3/13 12:38:56

    而且做双目要两幅同一时刻的图像
    TI专家-兼 2015/3/13 12:39:17

    PCIE会增大系统难度
    2015/3/13 12:56:24
    流泪的佛 2015/3/13 12:56:24

    恩,难度好大,尤其fpga那头,搞起我了
    流泪的佛 2015/3/13 12:56:30


    2015/3/13 13:24:54
    Brave        2015/3/13 13:24:54

    ARM这边是不是随便给FPGA一个时序,那边就可以对应上...........
    2015/3/13 14:06:40
    扬帆起 2015/3/13 14:06:40

    FPGA 搞时序是最容易的
    2015/3/13 16:24:25
    Brave        2015/3/13 16:24:25

    看了gpmc_nand.c里面只是对硬件借点做了注册,而且没有时序信息,请问各位怎么可以找到软件节点呢...
    2015/3/13 17:13:03
    Brave        2015/3/13 17:13:03

    搜索.name找到了...   弱智了一回..
     

     

    实际测试发现写入与读出的值相同

    http://blog.sina.com.cn/s/blog_500bd63c0101d3z8.html

    http://zhidao.baidu.com/link?url=1v_S2rwD2CN56G3JUmZhkZUDSYROC0asGaTsw0AQSILHDN7VFF7EqjP_eoTS9L9HsPaPbP3YxikVpwNrA9kgwK

    http://www.sdedu.cc/tx/hlwjs/1103.html dsp fpga 简介

    http://www.eepw.com.cn/article/190225.htm kentex 7 fpga 简介

    http://xilinx.eetop.cn/viewthread-325043

  • 相关阅读:
    pycharm的background task一直更新index,速度慢的解决方法
    第一章 图像处理基础(直方图、高斯滤波、直方图均衡化)
    下载及配置Python+openCV
    封装axios的接口请求数据方法
    better-scroll封装上拉刷新,下拉加载更多功能
    封装js插件(loading)
    商品列表跳转详情页(项目过程思路)
    setInterval踩坑记
    Vue组件封装(以封装一个button组件为例)
    组件传值的方式
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/4344269.html
Copyright © 2011-2022 走看看