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

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

嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口的更多相关文章

  1. 嵌入式驱动开发之dsp 算法优化vlib emcv---算法优化

    http://www.opencv.org.cn/forum.php?mod=forumdisplay&fid=9

  2. 嵌入式驱动开发之spi---spi串口通信调试

    一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是:          * SPICLK     : 用于传输数据的同 ...

  3. 嵌入式驱动开发之sensor---"VIP0 PortA", "VIP0 PortB", "VIP1 PortA", "VIP1 PortB",dvo0(vout1) dvo1(vout0)

    (1)vip 简介 (2)vip 电路图 (3)vip 更换采集相机输入 (4)vip 驱动 ---------------------author:pkf --------------------- ...

  4. 嵌入式驱动开发之uboot---uboot 中的常见命令参数参数

    Uboot相关命令介绍 bootm bootp cmp cp crc32 echo erase flinfo go minfo loadb loads mw 14mw 用指定的数据填充内存 15md ...

  5. 嵌入式驱动开发之usb 无线网卡驱动---RT2870STA dm368

    RT2870STA 368的无线网卡驱动! http://www.linuxidc.com/Linux/2014-02/96979.htm

  6. 嵌入式驱动开发之phy---fine Mac与Phy组成原理的简单分析

    关键字rj45.pci-e 1. general 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数 ...

  7. 嵌入式驱动开发之sensor---sensor 图形传感器调试

    图像传感器(image sensor)复位顺序 1. 硬件复位寄存器:2. 软件复位寄存器:3. 设置时钟寄存器:4. 设置PLL倍频:5. 设置分辨率:6. 设置窗口控制:7. 设置输出顺序:8. ...

  8. 嵌入式驱动开发之2440/2410---uboot 移植

    http://blog.chinaunix.net/uid-20620288-id-3058904.html

  9. Android驱动开发之Hello实例

    Android驱动开发之Hello实例:   驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconf ...

随机推荐

  1. android之Activity.startManagingCursor方法详解

    在使用数据库操作查询数据后,如果是在Activity里面处理,那么很可能就会用到startManagingCursor()方法,在这里讲一下它的作用和使用注意事项. 调用这个方法,就是将获得的Curs ...

  2. 使用Firefly编写简易聊天室

    1.创建工程命令行下输入firefly-admin.py createproject chat_rooms(linux在终端输入),<ignore_js_op> firefly会在C盘Us ...

  3. 算法笔记_070:BellmanFord算法简单介绍(Java)

    目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为BellmanFord算法? BellmanFord算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶 ...

  4. CSS 盒状模型简介

    框的构成以及相关 CSS 特性( property ) 结构 为了给文档树中的各个元素排版定位(布局),浏览器会根据渲染模型1为每个元素生成四个嵌套的矩形框, 分别称作 content box.pad ...

  5. static、final修饰符、内部类

    static修饰符: static修饰符能够与属性.方法和内部类一起使用,表示静态的.类中的静态变量和静态方法能够与类名一起使用.不须要创建一个类的对象来訪问该类的静态成员. class Static ...

  6. js实现页面元素随着内容的滚动而滚动

      CreateTime--2017年9月4日16:55:06 Author:Marydon js实现页面元素随着内容的滚动而滚动 分析: CSS样式,使用绝对定位确定好页面元素在屏幕的位置(如:正中 ...

  7. windows下更换jdk运行当前jar包处理命令一则

    可在文本文档中新建以下内容 set JAVA_HOME=C:\jdk1.7.0_67set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\too ...

  8. 【服务器时间修改为东八区】包括Apache2和mysql

    1.服务器Apache时间修改,可通过修改php.ini进行修改 所以就深入了解了一下, 发现Apache(PHP)的服务器时间时区默认为UTC(Coordinated UniversalTime 世 ...

  9. Vue学习小结

    ES6 let完全可以取代var const声明一个只读的常量 箭头函数:可以绑定this对象,大大减少了显式绑定this对象的写法(call.apply.bind) 函数绑定(function bi ...

  10. python生成.exe

    python生成.exe 1.在Anaconda Prompt终端输入pip install pyinstaller 2.输入python -m pip install pypiwin32 pytho ...