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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11875|回复: 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中初始化的数据。请问问题出在哪里了?还望版主大侠指导。

* Y+ M" f2 i; v: e& i邮箱:604285180@qq.com
6 l* p0 }% Y% y! a) d/ A

本帖子中包含更多资源

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

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

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
2 Q7 k' l. B& S7 r$ e) _EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
5 b  ]2 \) h3 s5 Y" _ ...
0 i  B+ D. [, @' _) y! t/ `
还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:101 ^, B9 o# l! z- F" r: L9 r* ]
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址$ B/ E9 P# o8 T; y
...
9 m7 u( g; B, K" s2 z  w& f- {
我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核). x9 a" l' i; c
调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试/ U7 j  D# H( \# r
                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑 4 G+ K0 y% S' E5 \, a! h* x4 I+ {$ _
Lewis 发表于 2015-4-17 10:10' ^9 I6 x9 t) z  K4 G
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址+ U5 j" a$ \3 K
...
  1. `timescale 1ns / 1ps- X* ]2 `! [  f- J3 i8 ]8 K: M
  2. module emif_test
    $ s2 E1 g2 c" @2 e5 H
  3. (     6 _' ]+ B' f. L1 j# X; Y3 s
  4.    input clk,
    4 Q+ g/ c8 _  @1 `
  5.         input    emifa_clk,    // 时钟                         . G6 a& x# m. g. @7 n! v; f- O1 o. }
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      
    $ S3 c8 [9 L% ?
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚         
    $ P, V6 R9 B7 t) i5 g
  8.         input    emifa_we_n,     // 低电平有效写使能引脚       : d- _) i( l! ~( W
  9.         inout    emifa_wait0,    //等待输入引脚      1 E* B# T# T& P$ n/ n
  10.         inout    emifa_wait1,               ?5 V, {' d  C! y* ]$ U, i0 O, C
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            " N: {5 i9 g- |; J+ a; {
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            # F3 S$ s: F) L9 t0 B$ K
  13.         output    [15:0]emifa_data   // EMIF 数据总线+ o, y( V: @7 T4 x8 @, k
  14. );
    . _5 n( Q  n5 s
  15.         5 B  k; A; p+ B* B- y/ v$ G9 S
  16. /****************EMIF Interface****************/        
    # U- k' a' ^: z' c. p
  17. //信号声明" }) w& x$ \1 C
  18. wire emif_clk;. j3 N2 t1 i2 S6 r- N+ X
  19. reg emifa_cs2_reg;      8 s" s; F/ z9 `1 Y8 J6 R: i  e8 ^
  20. reg emifa_rnw_reg;     
      P6 N. b9 H: U! j$ _# A. \% _
  21. reg emifa_oe_n_reg;    9 d7 ]3 A8 x0 M% D2 S
  22. reg emifa_we_n_reg;    9 p) [: N+ X/ \  _/ t3 _1 W
  23. reg emifa_wait0_reg;   ' ?9 x' L$ i& i2 `( e$ ^- n& {9 N4 R
  24. reg emifa_wait1_reg;  
    . R( i+ r7 _* w- G
  25. reg emifa_ba1_reg;     ( |8 W4 n: t1 ?7 e* J& ]* {( Q
  26. reg [13:0] emifa_addr_reg;      * s% r( G. _$ o) F2 ^5 u
  27. reg [15:0] emifa_data_reg; 9 B5 X& L* P  y  u2 O
  28. 3 F  Z: t) U3 m9 \0 v
  29. //元件例化
    8 I7 Y( m- c% E/ Q6 R
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));1 ]! J9 X4 W/ @0 n) V. w
  31. //寄存器赋值+ |9 Q( g: M9 s8 |
  32. always@(posedge emif_clk)begin
    : j" s7 v. Z9 T( |! M
  33.                 emifa_cs2_reg       <= emifa_cs2;: ?& w$ A  S! G) q  I9 J3 U
  34.                 emifa_oe_n_reg      <= emifa_oe_n;
    $ f2 G2 @# @# Q) S" o
  35.                 emifa_we_n_reg      <= emifa_we_n;; S& L7 w* d7 N$ L! t
  36.                 emifa_wait0_reg     <= emifa_wait0;' i5 S  J( j8 W
  37.                 emifa_wait1_reg     <= emifa_wait1;
    7 C& \( l  B# V+ w, S  ^# D
  38.                 emifa_ba1_reg       <= emifa_ba1;# P4 j8 G) {  w8 Q
  39.                 emifa_addr_reg      <= emifa_addr;
    0 a6 M8 \- @- H" ~. T% @% i
  40.                 emifa_data_reg      <= emifa_data;
    1 i$ K( N. S4 V+ s, ~
  41. end7 _! r% x' C9 q! C7 n7 u7 u& v

  42. 0 S8 s+ {1 ~4 k2 l+ N0 Q
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;& K. l3 ~0 i" @5 K. O3 g5 G$ g
  44. assign emifa_data = dpram_douta;
    2 f5 c7 h0 J5 a) F% r

  45. 3 d5 Y1 ]( c7 d
  46. /****************Dual Port RAM****************/: S; ^5 ~- t, W6 l$ ^' v0 K
  47. //PORTA1 H, ^. W$ e' A
  48. reg  [14:0]dpram_addra;       ! I4 S2 ~. H( b4 K0 i3 ^/ @
  49. reg  dpram_wea;         2 V0 V: b" L. o# o! d
  50. reg  [15:0]dpram_dina;       % `3 w2 w/ U6 ]7 q# @- N7 q! Y
  51. wire [15:0]dpram_douta;           
      R- H* w5 n( W5 J% p
  52. //PORTB
    # V6 I  H* @* h' y, S$ i# T2 t7 f
  53. reg  [14:0]dpram_addrb;       . m1 A2 m% ?, C. O' B
  54. wire  dpram_web;$ }( w! r7 Y: O  M; U5 A
  55. reg  [15:0]dpram_dinb;
    : H9 s- `2 A1 c; A1 M- ]% ]
  56. wire [15:0]dpram_doutb; 4 O* K: S* P$ A. o( t3 U
  57.    $ z) A6 ^+ z# E3 F; ]
  58. //元件例化
    ) D" V  H+ b' ^4 O& h
  59. dpram dpram_unit(  d1 x# S. o1 ^2 F
  60.   .clka(emif_clk), // input clka  f- z) Z  D% X
  61.   .wea(dpram_wea), // input [0 : 0] wea
    7 u7 |" U0 ?* P6 _7 {2 E$ x
  62.   .addra(dpram_addra), // input [14 : 0] addra
    * N/ x( a; n7 n8 w2 C' I% o) d
  63.   .dina(dpram_dina), // input [15 : 0] dina, j% K+ t" \6 o5 i/ {
  64.   .douta(dpram_douta), // output [15 : 0] douta
    ; x- ~' Z0 ?! k8 G( C; E
  65.         //clkb                  => sys_clk,1 N! m7 k, d) K' ^5 D$ @# h
  66.   .clkb(clk), // input clkb
    0 s9 S5 ~0 [/ a: @" i
  67.   .web(dpram_web), // input [0 : 0] web  P) i* r( \! r. Q, L
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb  `. w5 h- T: A  f6 u/ x
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb" z+ m( W: a: h0 w* |
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)
    - h+ V1 [. G: Z. d: I) d* F
  71. ) H' F3 X& w( |
  72. always@(emif_clk)begin
    ' i3 T3 u9 ]8 _8 X: l2 ?
  73.                 dpram_wea             <= 0;; {+ e: @$ V0 O, V1 o& L& d2 ~" f
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};
    3 a7 N( a  c5 U7 j% Z
  75.                 dpram_dina            <= emifa_data_reg;1 F2 p/ u( d- [& Q$ A# ?
  76. end
    ) A+ A( F# L) e% e
  77. assign dpram_web = 1'b1;' N! x4 ?7 E, q* \8 Z5 r/ o

  78. ; j0 g3 I' _8 Y  p% I: r* z
  79. always@( clk )
    8 P3 r. D3 `3 d9 n& v
  80. begin
    1 c; l! P, b! P3 n7 N
  81.         dpram_addrb  <= 100;6 O' W6 q8 s+ B5 O. X
  82.         dpram_dinb   <= 16'd2048;6 L/ \0 ~4 ~* ^* g" `
  83. end% r9 \: \5 Q8 i* V+ H
  84. ) Y( w- m' l8 v' ]9 s
  85. endmodule  I" H& G' h+ l# E; {3 O

  86. - a. ^* j# d: S; L% M5 ^
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。- d! R$ e( l5 i7 L3 ]; `# }
这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。: q8 g) H: d/ K) g
代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.
! A7 R/ {7 i1 P- ^$ L. U4 Y然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。: B: ]; j" H4 w

4 P4 ]3 e3 g' _  q
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者

6 b9 _/ M- h0 ~6 Z6 NEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
: n# T7 r! j- m( u& S% d6 u* b& U

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
地板
 楼主| 发表于 2015-4-16 22:14:25 | 只看该作者
Lewis 发表于 2015-4-16 09:55, |4 a6 q/ X( Y. ~
还要注意数据在FPGA存储的地址,跟dsp读的地址要对应

2 X& {" O- {& F7 RFPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。' ^& Q2 m2 A6 a. S" U5 J

4 R# ~( y# L4 c  ]  Z6 }

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-17 13:30 , Processed in 0.044938 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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