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

------------------------------------------------

-----------------------------------------------------

(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》 







可以根据以上时序图编写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​


root