嵌入式驱动开发之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