FPGA与DSP通信问题。 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10212|回复: 8
打印 上一主题 下一主题

FPGA与DSP通信问题。

[复制链接]

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
跳转到指定楼层
楼主
发表于 2015-4-15 15:06:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、  我现在要实现的基本功能是:一组数据给FPGA端的双口RAM,然后DSP通过EMIF读出。不需要DSP再FPGA写入数据,如何更改贵公司的例程?我的更改是:DSP端注释掉写入FPGA部分,直接读取。FPGA部分是直接在双口RAM中初始化一组数据。然后读出的数据全是0,不是直接在双口RAM中初始化的数据。请问问题出在哪里了?还望版主大侠指导。

& {1 j' ]* r. n- w9 m' E邮箱:604285180@qq.com
+ B- @& @  d' }" {

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。1 ?* W: p3 [' j' O; |

2 g( \$ ~/ S$ k+ Q3 H! P6 ]# _: x5 E" V

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2015-4-16 09:55:21 | 只看该作者
还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
地板
 楼主| 发表于 2015-4-16 22:14:25 | 只看该作者
Lewis 发表于 2015-4-16 09:55
$ A7 g  h, ?' q2 a还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
0 z2 N8 H. J. R  j3 o- f
FPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者
) [# k' @/ ~+ {, I0 t
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址, x8 b; V: T6 |3 A3 V) F3 |' \$ E

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑
! @, ?1 q7 a" ?2 g+ c
Lewis 发表于 2015-4-17 10:109 U6 B- M9 m( s
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
/ v6 p6 B, d, S, A ...
  1. `timescale 1ns / 1ps5 ?$ F5 i7 B7 x
  2. module emif_test0 h* Z" v8 H  t' O8 }' |* O
  3. (     - A, `/ h% m) M2 Q; k
  4.    input clk,
    ) n( R$ P. V. b+ c+ n9 h
  5.         input    emifa_clk,    // 时钟                         : O6 }7 E1 \8 k) _9 z9 ^. z. y+ p
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      
    : E8 Y& x& w6 c9 n2 I, R/ |/ \( M1 [
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚         
    . P. B  v) o' j; _6 V
  8.         input    emifa_we_n,     // 低电平有效写使能引脚       ) U& @, M: D, b7 X5 L
  9.         inout    emifa_wait0,    //等待输入引脚      
    / K+ B) Q: m% p0 D+ p3 ?
  10.         inout    emifa_wait1,             $ u2 {( G. V* {& o7 k1 a1 {
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            
    4 ^, t+ x' {! D
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            
    0 Q7 L* v7 e- d, Q" l; q
  13.         output    [15:0]emifa_data   // EMIF 数据总线
    3 Y- k/ g6 E' J  S% a- B) V
  14. );% t/ V  i3 y) e4 Z4 W
  15.         ( W* M1 C- p. V7 Q7 @0 \8 I2 p2 E" W) ?
  16. /****************EMIF Interface****************/        & M$ V4 O5 Y$ z0 z
  17. //信号声明. N7 ]# E% M7 H5 G
  18. wire emif_clk;
    # l- M) d) s- _9 _0 o* `8 _
  19. reg emifa_cs2_reg;      
    ! ?: O" u% \( ]/ D% _; ^8 O* O
  20. reg emifa_rnw_reg;     3 B9 q& d( V  S: B
  21. reg emifa_oe_n_reg;    ) |: ]' p3 \8 y
  22. reg emifa_we_n_reg;   
    9 G: i- Y) C) u1 i: x. f4 C  _
  23. reg emifa_wait0_reg;   " j/ C! |4 E& B0 {4 J! K! y
  24. reg emifa_wait1_reg;  
    0 l, k8 k( M0 v( n* O
  25. reg emifa_ba1_reg;     ) e* }+ r, Q2 e% c( r  l, S( }
  26. reg [13:0] emifa_addr_reg;      
    # s/ h9 ]6 Y  f* \0 x
  27. reg [15:0] emifa_data_reg;
    : [* v" w: `" ]
  28. $ q0 I0 V2 F- B# V8 H) h$ ?
  29. //元件例化+ X+ p# W& p4 l: I$ E
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));
      y6 f1 L: D0 E; X* C1 n" t& S$ [
  31. //寄存器赋值
    , E' p  ~/ K5 V2 [) T
  32. always@(posedge emif_clk)begin1 M# D# z7 M! K
  33.                 emifa_cs2_reg       <= emifa_cs2;/ g4 y" C/ S: W9 c- i' Q8 J% ^
  34.                 emifa_oe_n_reg      <= emifa_oe_n;  u. @' E  p: G9 d% H4 Y- w
  35.                 emifa_we_n_reg      <= emifa_we_n;
    8 t' ~' g3 k. Q9 m- ~
  36.                 emifa_wait0_reg     <= emifa_wait0;
    $ M8 E. N& y6 ?* A+ a8 H, U, H5 P
  37.                 emifa_wait1_reg     <= emifa_wait1;
    # U- W$ z* g. V- ~
  38.                 emifa_ba1_reg       <= emifa_ba1;  d" q$ \+ G4 i, M1 n) }: M
  39.                 emifa_addr_reg      <= emifa_addr;" f0 |( D2 B4 `) U3 H" g
  40.                 emifa_data_reg      <= emifa_data;
    , `. X& Q  m4 w% G, F3 Z7 g
  41. end' B7 X- q: c2 q0 Y0 z
  42. 0 _1 T( S2 B: d; e" `
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;
      x- ~/ A) @. W7 g( \2 m5 H
  44. assign emifa_data = dpram_douta;" I# v- f& s9 N# `1 K' }% K

  45. , C7 O1 y/ q# k0 P1 z
  46. /****************Dual Port RAM****************/- D7 A3 T& P6 P1 f/ \3 o
  47. //PORTA
    ) j; b+ ~- D" R+ h
  48. reg  [14:0]dpram_addra;       9 ]: w% p6 p* i' N3 j
  49. reg  dpram_wea;         
    7 ^+ j8 w" a- T9 x
  50. reg  [15:0]dpram_dina;       # H6 \! A: c/ n) {6 q2 {7 [
  51. wire [15:0]dpram_douta;           % ?. s9 X, j9 J
  52. //PORTB5 I* `# _/ _2 T6 |
  53. reg  [14:0]dpram_addrb;       ' Z/ P8 z# T& Z
  54. wire  dpram_web;
    # E' W$ K1 L& H3 p$ |7 w/ L
  55. reg  [15:0]dpram_dinb;
    2 g. r2 d4 x# L/ R2 d# |' E. d
  56. wire [15:0]dpram_doutb;
    8 S7 R! C2 P" s6 M4 @% J/ R' r$ i
  57.    
    2 P5 b( k# Y) E; u! |
  58. //元件例化
    + k. v5 k' ?# q# l# H$ q% }
  59. dpram dpram_unit(
    ' J7 x( }+ K0 Q: J! t' l  ?
  60.   .clka(emif_clk), // input clka
    / n# k9 q3 m8 S4 X, F
  61.   .wea(dpram_wea), // input [0 : 0] wea
    * t; T  j* Q& G& X/ B% W
  62.   .addra(dpram_addra), // input [14 : 0] addra0 @9 U# h' _; |: o  j* V9 a; a
  63.   .dina(dpram_dina), // input [15 : 0] dina
    ' }, `% t6 [, V: E6 i
  64.   .douta(dpram_douta), // output [15 : 0] douta
    5 j2 c9 s- e/ y  t! c" ]
  65.         //clkb                  => sys_clk,9 o& b! Q. V" p2 W% W# F
  66.   .clkb(clk), // input clkb
    % {. ^# P. {! N4 x7 B: p4 @7 d* _
  67.   .web(dpram_web), // input [0 : 0] web
    / t/ T8 E# M: J1 Q/ l6 i! R3 F
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb9 I$ x4 O5 u" Z& X
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb  }  G/ X7 A1 g. r* [
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)$ x2 l4 Q+ v: _5 D
  71. . G% y$ s. ]/ y, ]" c+ x
  72. always@(emif_clk)begin( J% N( i) e. Q+ ~$ y
  73.                 dpram_wea             <= 0;
    $ e3 j9 o8 e" t: D2 m0 M
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};+ q- Z/ p* Y4 D/ }. u! J
  75.                 dpram_dina            <= emifa_data_reg;
      ]2 b0 ~' v0 N. A
  76. end$ f7 R3 v& u' i' H/ F3 y' n
  77. assign dpram_web = 1'b1;
    2 G1 f+ j) j  ?, q+ _! g, x2 }
  78. 4 Z0 E# ~- t  u4 U0 S0 H3 O
  79. always@( clk )
    ( |& j* Y! p# L. [/ z0 K; A
  80. begin
    ; n9 l3 _2 i# ^, O* [5 d* L9 z) O) z
  81.         dpram_addrb  <= 100;( d0 G$ a# v2 q* O
  82.         dpram_dinb   <= 16'd2048;
    5 S; d  G2 X! F% H' J2 ~
  83. end
    9 P: w5 ~' j  F" Q! n% y; [

  84. 9 O2 U0 B- @. ~. @
  85. endmodule4 I% Q; l2 f' M, n) V: M# ?  E
  86. 2 Q/ X3 t) ^4 I
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。8 \! U/ ], t- \; v7 c9 b7 R
这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。
  _. ~) t" u- U/ f0 X( w! W3 @代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.* G9 @0 N0 @" d8 C+ F6 T0 b% W
然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。
& h( q6 t7 p6 o( W3 E3 W( T+ p7 w; u4 r4 T
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10# A9 l  v0 n1 s2 y
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址; u% @8 @! c' t3 f8 L/ K& v7 {
...

1 {' M: x+ S: d# x7 U8 N' j我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)
* {* c. s( v/ g2 s调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试
* T+ t, [* u. n" c( g                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
% \' M$ D( m: K5 P) l: kEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址! `) ]% N$ y, b# I% e1 Y' f% f, x
...
& \  a4 _- D/ Q' c8 s  B
还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

积分
341
9#
发表于 2017-8-12 10:01:33 | 只看该作者
楼主你好,这里你弄出来了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-5 05:47 , Processed in 0.043336 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表