嵌入式驱动开发之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》
可以根据以上时序图编写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)输入口
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接口的更多相关文章
- 嵌入式驱动开发之dsp 算法优化vlib emcv---算法优化
http://www.opencv.org.cn/forum.php?mod=forumdisplay&fid=9
- 嵌入式驱动开发之spi---spi串口通信调试
一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是: * SPICLK : 用于传输数据的同 ...
- 嵌入式驱动开发之sensor---"VIP0 PortA", "VIP0 PortB", "VIP1 PortA", "VIP1 PortB",dvo0(vout1) dvo1(vout0)
(1)vip 简介 (2)vip 电路图 (3)vip 更换采集相机输入 (4)vip 驱动 ---------------------author:pkf --------------------- ...
- 嵌入式驱动开发之uboot---uboot 中的常见命令参数参数
Uboot相关命令介绍 bootm bootp cmp cp crc32 echo erase flinfo go minfo loadb loads mw 14mw 用指定的数据填充内存 15md ...
- 嵌入式驱动开发之usb 无线网卡驱动---RT2870STA dm368
RT2870STA 368的无线网卡驱动! http://www.linuxidc.com/Linux/2014-02/96979.htm
- 嵌入式驱动开发之phy---fine Mac与Phy组成原理的简单分析
关键字rj45.pci-e 1. general 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数 ...
- 嵌入式驱动开发之sensor---sensor 图形传感器调试
图像传感器(image sensor)复位顺序 1. 硬件复位寄存器:2. 软件复位寄存器:3. 设置时钟寄存器:4. 设置PLL倍频:5. 设置分辨率:6. 设置窗口控制:7. 设置输出顺序:8. ...
- 嵌入式驱动开发之2440/2410---uboot 移植
http://blog.chinaunix.net/uid-20620288-id-3058904.html
- Android驱动开发之Hello实例
Android驱动开发之Hello实例: 驱动部分 modified: kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconf ...
随机推荐
- UVA270-Lining Up
斜率斜率斜率......... #include<iostream> #include<cstdio> #include<algorithm> #include&l ...
- 在LoadRunner中进行Base64的编码和解码
<Base64 Encode/Decode for LoadRunner>这篇文章介绍了如何在LoadRunner中对字符串进行Base64的编码和解码: http://ptfrontli ...
- vue 仿ele 开发流程
技术栈: vue2 vuex vue-router axios webpack eslint better-scroll 1.安装插件 npm install vue-resource babel-r ...
- 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap
在开发中,一直使用4.0以上手机作为測试机所以一直没有出现这个问题,今天换了2.3版本号的手机.出现了这个错误: trying to use a recycled bitmap android.gra ...
- DevExpress SpinEdit控件使用实例——删除ASPxSpinEdit右边的上下小箭头SpinButtons-ShowIncrementButtons
使用ASPxSpinEdit来添加数字类型的输入框: 默认情况下, SpinEdit通过点击右边的上下箭头来加减number,下面的代码是去掉上下箭头,内容居中显示,并将边框颜色置为白色: <d ...
- IE浏览器右键菜单分享扩展
(如果本页面没有自动下载,请点这里下载) IE浏览器分享工具安装步骤:1.发起下载请求后,屏幕上会弹出文件保存对话框,将文件保存到您电脑本地的磁盘中 2.双击刚才下载的安装文件,将JiaThis_Sh ...
- python selenium --调用js
转自:http://www.cnblogs.com/fnng/p/3230768.html 本节重点: 调用js方法 execute_script(script, *args) 在当前窗口/框架 同步 ...
- js限制文本框只能输入数字方法
输入大于0的正整数 <input onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,' ...
- nginx-1.2.7+tcp_proxy_module负载均衡配置
对于安装方面不清楚的,可移步 nginx + tcp_proxy_module的安装 参考nginx_tcp_proxy_module的readme文件,对每个定义项都做了详细的描述,tcp{...} ...
- unity, particle play once and destroy
粒子播放一次后销毁: //ref: http://answers.unity3d.com/questions/219609/auto-destroying-particle-system ...