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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11502|回复: 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中初始化的数据。请问问题出在哪里了?还望版主大侠指导。
4 J5 z+ L4 m2 f, P+ V
邮箱:604285180@qq.com
- D1 I9 \9 P$ X9 a. H; x

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。- }5 C2 J$ x) T; X4 S7 A
  l  [! e4 o9 S1 p$ o0 v0 x3 ?$ q% Y

本帖子中包含更多资源

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

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( r* b9 c; J) }- L1 S
还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
. }( P9 T- Q- _( Q/ o1 z9 J
FPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

# Q2 f6 m2 z& e  @# R# ZEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
3 r; b& e/ d/ w& Q

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑 0 g8 w+ G) |5 H! f2 X
Lewis 发表于 2015-4-17 10:109 {* f+ l2 N: x2 \  r# y
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址; f3 U- P( A$ _+ h. k1 n
...
  1. `timescale 1ns / 1ps, Q) j( J# o+ o) V& B$ v9 K
  2. module emif_test
    % d' W9 p" R7 S, n) N
  3. (     
    ' p% U( H  g/ X( ~& V% ^3 J
  4.    input clk,, i3 a) o% a* }* F
  5.         input    emifa_clk,    // 时钟                        
    1 T8 N1 z% k% F. f
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      
    7 A1 O/ i9 h: H) K1 U* M
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚         
    0 Q9 @/ |) u; b' E7 |
  8.         input    emifa_we_n,     // 低电平有效写使能引脚      
    : ^5 S- F% u/ L# v. [$ |9 M
  9.         inout    emifa_wait0,    //等待输入引脚      " G# j) x* s3 D
  10.         inout    emifa_wait1,             0 |$ _5 p. Y9 C, ]
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            : |; z( Y8 M$ \  T
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            4 A' H* B9 x( X& k9 H' h
  13.         output    [15:0]emifa_data   // EMIF 数据总线/ Z/ x) X/ s+ X2 Y0 r
  14. );9 D" ^4 n. K+ Z% g; k" }
  15.         
    % T. ?: D) a! E: k' Q% u
  16. /****************EMIF Interface****************/        
    . J5 M7 m2 p$ y! s1 a0 ^6 a
  17. //信号声明. o/ @$ @* [3 p) O* L
  18. wire emif_clk;  m8 T5 H, q8 f
  19. reg emifa_cs2_reg;      
    ) X2 F- A0 W( H  r% q
  20. reg emifa_rnw_reg;     * Y& O/ r; |: h0 ^: I* O
  21. reg emifa_oe_n_reg;    ) Q, Q8 k9 d! ^
  22. reg emifa_we_n_reg;    2 w( d9 g' E  `3 w* L
  23. reg emifa_wait0_reg;   7 r) h! u2 ^" v1 h& v
  24. reg emifa_wait1_reg;  0 k; z3 X' L; R( |" S; ]5 K
  25. reg emifa_ba1_reg;     - u  H: L+ z( g( t4 `+ i
  26. reg [13:0] emifa_addr_reg;      7 k! o# j/ R% D+ O/ V( q$ z
  27. reg [15:0] emifa_data_reg;
    ! V1 v) `/ q  R
  28. ( y- z, Y: ]  w0 {
  29. //元件例化
    / b4 y6 a4 M) Y- y
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));$ [% D; Z7 G8 d5 b$ W0 E; ?! L3 X
  31. //寄存器赋值2 d; X. G( K* l: t. c, g; x- c: x
  32. always@(posedge emif_clk)begin' k$ c5 j6 O. E) J+ R+ O: g. k
  33.                 emifa_cs2_reg       <= emifa_cs2;
    4 j" ~6 w: ?- Q  i* u
  34.                 emifa_oe_n_reg      <= emifa_oe_n;
    - g' i- h% m1 k. t4 _
  35.                 emifa_we_n_reg      <= emifa_we_n;3 v) W% o4 J0 B! k6 ?
  36.                 emifa_wait0_reg     <= emifa_wait0;- z# @/ h0 a1 M/ ?
  37.                 emifa_wait1_reg     <= emifa_wait1;: }& F" m# D1 Z
  38.                 emifa_ba1_reg       <= emifa_ba1;
    ! a/ M* C" t/ M1 r* n
  39.                 emifa_addr_reg      <= emifa_addr;2 n# {- |5 F7 ^" B( z
  40.                 emifa_data_reg      <= emifa_data;$ Y( ?. m6 p: t9 z/ W+ Q) O
  41. end
    * Z; F: K1 W% E% k) K& U

  42. - D- Y3 x! k' n4 l  p1 g# `
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;
    0 P1 k3 f  c/ F+ n
  44. assign emifa_data = dpram_douta;& _% B4 ?# K+ V8 Z, c9 I
  45. & p+ V$ _: E+ k
  46. /****************Dual Port RAM****************/- s  _! y8 n3 X. |8 g
  47. //PORTA
    % D: \- Y9 @7 S) _
  48. reg  [14:0]dpram_addra;       2 i1 S0 W$ T! R
  49. reg  dpram_wea;         9 ?. ?5 h( `1 m: {" ^
  50. reg  [15:0]dpram_dina;      
    : P2 v: `& ~* w. m$ c7 \
  51. wire [15:0]dpram_douta;           $ c$ d! m4 S" c4 p# P2 j6 z' E
  52. //PORTB
    0 S9 |. J6 P* |
  53. reg  [14:0]dpram_addrb;       1 j6 ~5 Q: T+ a5 z0 B
  54. wire  dpram_web;
    7 q. q3 x; c: n9 Z" P: Q0 h
  55. reg  [15:0]dpram_dinb;8 a- F: \( H' a, x4 ~3 c, R
  56. wire [15:0]dpram_doutb; ; V+ ~6 U# Z% a) Z* [2 t6 ]9 y# z
  57.    + K9 r/ Q5 C! D5 P7 D  |. l
  58. //元件例化
    7 n7 H8 g  ?3 G) S& p
  59. dpram dpram_unit(' T" u( O; [/ V
  60.   .clka(emif_clk), // input clka
    8 f- b4 u; Q( d2 Y* O" e3 a$ k9 m
  61.   .wea(dpram_wea), // input [0 : 0] wea; u" v, M9 a* P/ `
  62.   .addra(dpram_addra), // input [14 : 0] addra- h' y( t  C. T; P" ^% l' U1 z+ K
  63.   .dina(dpram_dina), // input [15 : 0] dina
    , h: z' n' ]2 [+ f1 q) N2 d  q  f
  64.   .douta(dpram_douta), // output [15 : 0] douta
    / Z* y. V3 O) M7 K
  65.         //clkb                  => sys_clk,6 H, b( Q, _) i/ t4 x) d
  66.   .clkb(clk), // input clkb
    1 V; U3 u5 s" [# z: |/ E" f* ]
  67.   .web(dpram_web), // input [0 : 0] web
    ; J; ~$ }- t1 j/ q  j  D7 _
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb
    ! k, q& d: N3 w6 H
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb
    . Z% n/ Y5 c2 N7 |
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)- H4 v- z; B2 V/ U$ D1 l

  71. . @4 g& X* s* A  ^
  72. always@(emif_clk)begin
    8 O# x( w0 {, H, a9 I+ k) k, W
  73.                 dpram_wea             <= 0;" ?- S( z9 z- W3 N
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};7 `7 ?" `6 {* ^6 k9 f9 X
  75.                 dpram_dina            <= emifa_data_reg;
    , O* U4 k9 e( b7 s/ t
  76. end
    9 W2 d7 g* I" O. D0 D
  77. assign dpram_web = 1'b1;' ~# M7 D( ~( u, M  j
  78. 4 T& T( K$ q& L7 x  v+ }
  79. always@( clk )
    4 z. m- v% J$ O2 u9 b
  80. begin
    5 J) X6 f' O) g& M( u1 \
  81.         dpram_addrb  <= 100;: O7 S! w) ~2 D6 P, J
  82.         dpram_dinb   <= 16'd2048;
    / j' x9 g% ~2 n1 t  a  t  b
  83. end
    : b6 @. \' f0 d4 j
  84. : u7 y7 Y- W$ v$ V* N1 {9 N
  85. endmodule
      T: z# W+ r5 l, L

  86. " t# V0 z$ T, n: c
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。$ K& @* u% t& @$ z. b$ D' h$ r5 z
这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。; Q7 x7 b* m+ R8 P1 k; n) l% ]
代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.
" }# S/ b$ }" k- J. c# }6 m3 d然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。
0 K, Q& w' x1 H, t+ M+ Z' d6 k- w  j4 p1 J
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10* i# S5 o2 T' S
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址' a0 E3 X* g: [! c
...

  a- L! u! r" S我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)/ z5 S5 @6 [/ Y+ S+ ?% e
调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试) J) p" {' U" S9 |* _1 M( ?0 R
                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
8 `% U! r5 K" o8 ZEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址5 W5 y0 p& ^# K6 e4 q# g
...
# f! L$ U2 T  b+ k
还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 06:33 , Processed in 0.054319 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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