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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11530|回复: 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中初始化的数据。请问问题出在哪里了?还望版主大侠指导。
# f3 a7 z, [3 N
邮箱:604285180@qq.com
( V$ ~$ K2 M' S: [8 T

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。
+ X% `; E) N# S2 A8 [5 U
; `; @6 \  C$ v+ t) z

本帖子中包含更多资源

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

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. t' L  Q2 r& B" J2 S
还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
# l5 a; X) G; C/ B0 s6 `) X4 T
FPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者
% e' `: U" T+ {' g1 Q1 ]
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址, l9 v- J5 g* A. x5 l4 H! }

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑
9 q9 j  K) ~& I5 r5 H6 C: y
Lewis 发表于 2015-4-17 10:106 `" M% [" ~8 [: v$ D/ s. m
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
  x3 W  O& i: e. p ...
  1. `timescale 1ns / 1ps" s# Y& c( J' F( X
  2. module emif_test
    & N- Y: p, S  f
  3. (     - A1 L4 e! q* n3 h* s4 E# a
  4.    input clk,
    % g: q) C7 w  e1 f9 _
  5.         input    emifa_clk,    // 时钟                        
    * x7 Q1 V+ O  I. l0 F0 v
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      * x1 R" F  Q/ C# _
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚         
    ( K+ k7 y. n5 s  u
  8.         input    emifa_we_n,     // 低电平有效写使能引脚       4 \1 B, R) [! [( L
  9.         inout    emifa_wait0,    //等待输入引脚      
    / G$ |' o+ ~8 n' W7 Y) q9 @
  10.         inout    emifa_wait1,            
    1 e; C" @4 B2 }$ j8 n
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            
    ( Z( t9 c8 Q7 S8 `  w
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            % i0 }* @" W& Z" E
  13.         output    [15:0]emifa_data   // EMIF 数据总线( E4 y8 l* P6 W5 d9 K8 b
  14. );" n, ^5 t4 q3 }* P7 L
  15.         
    / ?$ N" `' |, s3 W
  16. /****************EMIF Interface****************/        . A8 V$ A' w' ^1 R4 Q+ Z
  17. //信号声明
      L) Q1 k+ T7 x  s
  18. wire emif_clk;
    + F! ]- X, z6 I1 w& f5 H( z
  19. reg emifa_cs2_reg;      4 J2 u3 T8 n5 K! W  g$ q0 O
  20. reg emifa_rnw_reg;     
    + o1 h! `& Y! H2 ]6 I3 U9 F: U
  21. reg emifa_oe_n_reg;    4 F  e' l7 i! v: u
  22. reg emifa_we_n_reg;   
    0 F) r" B, a( f, \( s# P$ h
  23. reg emifa_wait0_reg;   
    4 e. `: ]3 v& J% p0 A
  24. reg emifa_wait1_reg;  
    8 S) A0 L' @. ]$ S: Z
  25. reg emifa_ba1_reg;     
    0 j$ b- N# [3 K1 s, P+ a
  26. reg [13:0] emifa_addr_reg;      : \# G7 Q9 N% }1 f, l
  27. reg [15:0] emifa_data_reg; $ K  `4 _9 p. P5 s. L! k. u

  28. / t, w- ?' V" U2 Q
  29. //元件例化
    # ~! f- O2 ]# V! r
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));
    ' U5 d' p9 e" c( l2 W1 K! Y0 `; i
  31. //寄存器赋值! B) k' [0 u: P+ R" O
  32. always@(posedge emif_clk)begin4 V; [0 E. K, v2 L: z  l6 Q
  33.                 emifa_cs2_reg       <= emifa_cs2;! X' w: i0 g6 B- E& w9 T
  34.                 emifa_oe_n_reg      <= emifa_oe_n;1 d8 C% h/ m! p2 ?9 Q
  35.                 emifa_we_n_reg      <= emifa_we_n;& I) \# Z" N+ P6 n, q
  36.                 emifa_wait0_reg     <= emifa_wait0;2 X* Q; {, \( x
  37.                 emifa_wait1_reg     <= emifa_wait1;/ Y. d4 Q0 c/ `% [) n: N8 X
  38.                 emifa_ba1_reg       <= emifa_ba1;$ V0 y3 @# \3 i  [0 R, {' j( E
  39.                 emifa_addr_reg      <= emifa_addr;
    ( `% u) p4 Y) U! j) c
  40.                 emifa_data_reg      <= emifa_data;; p% g/ q( u. t% n( ^. w, b
  41. end
    ! \$ A( M. x! i  R

  42. - z* o# {' l* v! u: j1 E0 S- k
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;
    ( U& `; ?! f& B+ Z
  44. assign emifa_data = dpram_douta;
    % v4 c1 N! ^8 M2 m; E
  45. 0 m+ t- }1 r( X1 x7 B; j
  46. /****************Dual Port RAM****************/
    : E! Q4 ]5 U* r& L6 e" S
  47. //PORTA* v8 F2 s+ e9 z- X  V
  48. reg  [14:0]dpram_addra;      
    , I+ l- A$ w/ d
  49. reg  dpram_wea;         
    2 q7 @: p! z/ t
  50. reg  [15:0]dpram_dina;      
    7 F0 [/ @2 W2 N/ l
  51. wire [15:0]dpram_douta;           
    3 U' \$ k) d. Z, }9 c
  52. //PORTB$ Q* ?! p( K# |3 {) B1 G
  53. reg  [14:0]dpram_addrb;       2 [- K/ y- ~  _( @( z& a
  54. wire  dpram_web;( W1 Z& P( m9 u# Z0 c. }
  55. reg  [15:0]dpram_dinb;
    # R9 u6 o3 W  ^2 P" T: N
  56. wire [15:0]dpram_doutb;
    9 \# U1 u* N0 B- P& s9 b2 t
  57.    ' V% ]( Q5 @  U; Q
  58. //元件例化
    . `# m+ [2 Z0 V( n) g1 C( p
  59. dpram dpram_unit(# n4 ?! J8 `  |6 q: h+ l& V
  60.   .clka(emif_clk), // input clka
    4 o9 J; `$ U9 A" j
  61.   .wea(dpram_wea), // input [0 : 0] wea
    ; W1 V0 s- v3 e/ E4 i" M4 Q: m% T8 H* Z
  62.   .addra(dpram_addra), // input [14 : 0] addra
    6 @  n* Y8 q$ j/ u$ L8 j
  63.   .dina(dpram_dina), // input [15 : 0] dina" G/ E, f$ U2 F
  64.   .douta(dpram_douta), // output [15 : 0] douta
    0 I1 b9 s7 J' e* z
  65.         //clkb                  => sys_clk,/ {6 U4 p% ?% P8 M) r" j
  66.   .clkb(clk), // input clkb9 W( s1 W7 A1 P( o5 _2 R( {( u
  67.   .web(dpram_web), // input [0 : 0] web
    : _% `! |$ G& C8 L1 R
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb. u% i  Z) G# [  F
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb! t: H' a* O" ?  f- n- \
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)
    ; R5 L! T& ]8 _) H) |+ c
  71. - I$ t1 S. i8 e6 \! ?
  72. always@(emif_clk)begin2 D# u" N" F  _
  73.                 dpram_wea             <= 0;
    / ^1 g: Q9 u! L
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};
    5 N$ T# g0 O3 Z# a8 A4 b
  75.                 dpram_dina            <= emifa_data_reg;, @5 W) `9 g$ X5 `5 u5 N+ C
  76. end5 t( j' h- G$ ]) J* R* T
  77. assign dpram_web = 1'b1;
    . ^9 x4 _: C5 _* i; w2 {
  78. , d, l0 D* f6 L, P8 U
  79. always@( clk )" ]& Y) p  l/ R9 x) [
  80. begin
    - U% ~& p# L, \, M: Z6 ~9 A! G
  81.         dpram_addrb  <= 100;8 o- A* C9 t: @+ L, W
  82.         dpram_dinb   <= 16'd2048;: m! _6 s! B. ?& a( w! |
  83. end# B& }) R8 H* \4 j
  84. & N; I) c3 O; P4 V* @% U
  85. endmodule
    ' }0 \$ y  o' B4 l9 h
  86. 0 `* K3 g8 n+ Z: P4 @
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。
* ~! f0 ^3 Y- U2 M& m0 h. m这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。* Y) `+ T( e) [) P6 [
代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.& z8 K3 N1 k; W
然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。
( V+ q$ C2 i# b. ~% t# G3 u2 x2 K1 g& s! z) B/ d
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10
: d0 x1 @0 F1 MEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
  e/ z) H) j  l) J+ I7 U ...

# ]- @5 M& t1 R8 ]  f, F9 P我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)
& U  ]2 ?1 p6 t9 P调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试4 ~/ k$ m7 h+ H6 |4 o0 S6 R; c
                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
- }2 ?$ N# h- t6 X9 a& gEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址6 S" F3 a4 S5 a: |
...
5 @5 G# D( w8 P
还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 19:18 , Processed in 0.045734 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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