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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

. z7 j  Z5 W1 X! f9 J邮箱:604285180@qq.com& R7 s# B# U( r0 w6 K  N

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。2 Y. c8 ?! p6 A
# K+ s" A9 \; H; R" Z+ t2 x) e; U

本帖子中包含更多资源

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

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:557 O: u) x$ d: v
还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
' ?. _1 ?3 W4 P+ I0 e0 f3 ~1 \6 [3 n- D
FPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者
" Y4 G* W6 ^0 v4 x$ x0 E* k) ^& s
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址$ A' J- e: k% G

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑 ; J4 P' r* o3 `" P( W' c3 W
Lewis 发表于 2015-4-17 10:10
" t7 l! M0 \. m! QEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址( Z5 n9 |: n- A7 [0 D# l5 |+ X
...
  1. `timescale 1ns / 1ps3 e, w0 G& A6 u. S9 r+ Z
  2. module emif_test
    0 H# H: k/ a0 j4 g& v
  3. (     & |4 y% B1 I( B2 ]% A3 p& p" q
  4.    input clk,( Q+ a. r& M; m" n
  5.         input    emifa_clk,    // 时钟                        
    + l1 y, p+ X! W  I' u  U2 l6 F
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      
    ( M; U# ?0 I% e# B9 K
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚          ; O' y6 a' e; |) e
  8.         input    emifa_we_n,     // 低电平有效写使能引脚      
    ( x6 \5 P$ O' X1 e8 J
  9.         inout    emifa_wait0,    //等待输入引脚      
    3 Z' e% P+ C1 w1 Q* H$ ]1 V0 R
  10.         inout    emifa_wait1,            
    2 a' h% {1 {# s- t# a9 S* g
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            8 H* x3 _! n5 S" H, z% p
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            $ S3 f- }. E2 c& M3 N
  13.         output    [15:0]emifa_data   // EMIF 数据总线
    0 y# _4 {( `# [/ \( I
  14. );0 A, F/ o3 t( Z, P5 T5 `% c
  15.         ' H( |: u. c0 ~" B
  16. /****************EMIF Interface****************/        6 i! I+ ~! M9 p+ h0 l8 X! Q
  17. //信号声明
    / B# t  z- a4 j" p* F4 O! }: Z- A- D. v
  18. wire emif_clk;# s, n$ m$ R: H9 [
  19. reg emifa_cs2_reg;      
    1 Z1 K0 ^; X' D$ s. s% q& O3 e
  20. reg emifa_rnw_reg;     
    4 K) q( h. _( N" C* [0 [
  21. reg emifa_oe_n_reg;   
    + o" p7 p  j5 o- M* d+ K' u
  22. reg emifa_we_n_reg;   
    0 i% w3 I$ J0 |$ b4 n
  23. reg emifa_wait0_reg;   
    + W. w- F$ o6 L4 v
  24. reg emifa_wait1_reg;  
    % U' x$ N# d) y: W2 J
  25. reg emifa_ba1_reg;     6 M0 Z: t# ?9 `% P; Q6 A' @; T6 M
  26. reg [13:0] emifa_addr_reg;      
    ' z9 Q" N3 ]" a/ @8 D# V% D/ S8 V; }
  27. reg [15:0] emifa_data_reg;
    8 o$ E& Q0 i* K; x

  28. + R# P2 z4 `) Q, d; l( n1 M2 S& t
  29. //元件例化  O! A( t6 p9 s/ B$ l1 |7 y
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));. b' v# f2 G- ]: k6 R# e' q: `' q
  31. //寄存器赋值( F* G. ?7 O; D8 {; f/ o9 ]4 s3 r
  32. always@(posedge emif_clk)begin. r' U) a; Z. U+ m, a, O& P* F! H
  33.                 emifa_cs2_reg       <= emifa_cs2;2 }7 u6 w3 N: q, t
  34.                 emifa_oe_n_reg      <= emifa_oe_n;: g$ O/ X! v" e- p9 p
  35.                 emifa_we_n_reg      <= emifa_we_n;
    $ T9 p2 }: j/ z/ Z8 w; Y7 [0 Y% @
  36.                 emifa_wait0_reg     <= emifa_wait0;- z( b$ a9 T' F- f+ }8 D  O6 O
  37.                 emifa_wait1_reg     <= emifa_wait1;
    % q: }3 j$ L0 q1 ]( K
  38.                 emifa_ba1_reg       <= emifa_ba1;0 {0 m* d, y+ t; {8 ~
  39.                 emifa_addr_reg      <= emifa_addr;
    0 L+ [2 l. C. l# d. U
  40.                 emifa_data_reg      <= emifa_data;5 }5 S2 A, g" W$ J1 Q& N! _4 P
  41. end5 g( S* }" P! o2 r! @' b9 ?; d

  42. # E! t# V8 ~; x
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;
    & O/ h/ o# }. @% h6 t! C
  44. assign emifa_data = dpram_douta;& r  |) x/ o% W, I- j' l8 E- X
  45. 3 k# q8 n1 v$ C; ~
  46. /****************Dual Port RAM****************/
    ; {* A# G# r$ Z% X
  47. //PORTA
    7 m0 f6 P1 r- W, [& R9 f3 e
  48. reg  [14:0]dpram_addra;       4 V6 d5 Z; T# N. p" l
  49. reg  dpram_wea;         
    9 s5 m+ r, O6 C1 E! o) W2 |
  50. reg  [15:0]dpram_dina;      
    4 {  i  y& D) d2 c/ B2 ^* g
  51. wire [15:0]dpram_douta;           ( J8 D, D$ x/ Y! w3 H: C
  52. //PORTB
      j6 s$ E( B! Q2 B
  53. reg  [14:0]dpram_addrb;       $ V; \0 n* x, P" r: W& V# P) D
  54. wire  dpram_web;% X0 N  j( N+ E" l* H" `3 _9 V: [
  55. reg  [15:0]dpram_dinb;
    , [/ n- `) a/ B
  56. wire [15:0]dpram_doutb;
    2 v+ ~% l9 \- i" |& Y% H5 }% k) P
  57.    
    5 e) U; n# t6 c0 A- Z8 N
  58. //元件例化% p& ?! _9 Y& K( p. p0 F" Z
  59. dpram dpram_unit(
    ! O* o$ B( q* i- x0 j
  60.   .clka(emif_clk), // input clka
    2 I+ ]# y$ b/ X$ J
  61.   .wea(dpram_wea), // input [0 : 0] wea8 k) Q3 J4 @# S  y3 {
  62.   .addra(dpram_addra), // input [14 : 0] addra9 U, u4 v8 v" H7 S
  63.   .dina(dpram_dina), // input [15 : 0] dina; R$ {' U1 {9 W2 u% ^
  64.   .douta(dpram_douta), // output [15 : 0] douta$ N3 {$ O- L: Y& i* [7 t; Q# W
  65.         //clkb                  => sys_clk,
    , a% V% E- p$ I8 [
  66.   .clkb(clk), // input clkb
      c8 ]3 h4 {* D7 n3 Q3 b. m$ j3 A' L/ M
  67.   .web(dpram_web), // input [0 : 0] web
    ; T; `. d( A* W" u1 p. b1 Q1 I
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb, p2 Z  m0 o7 B% y- ]
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb
    $ e1 G: Z+ @. b! |7 t+ e
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)4 y" k7 s, V% F2 e8 u0 W% w  e  k7 w

  71. $ W4 X/ J2 _2 }$ P/ }
  72. always@(emif_clk)begin
    9 w$ s1 F! G" [. G7 `/ H8 W' T7 i6 Z
  73.                 dpram_wea             <= 0;( T2 G$ ?3 c9 K' ]( f3 A
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};
    : n" o* d7 O$ @" n- ]5 R
  75.                 dpram_dina            <= emifa_data_reg;
    6 W6 q, [8 @0 a1 o2 }% q
  76. end. }8 m$ F) M3 ?( Q3 C7 z
  77. assign dpram_web = 1'b1;
    ( \( E  \  ~  K$ k& y( T$ E

  78. 8 k% O3 B4 g( E- S: e/ X/ y0 T) v
  79. always@( clk )
    0 U$ z7 q* p0 c5 k- m: u: |, X0 r* J
  80. begin
    : T4 u2 W& Z) Y, X9 W
  81.         dpram_addrb  <= 100;
    7 \# q+ ?  d5 ]% R. X  ~, s; U( v
  82.         dpram_dinb   <= 16'd2048;, d3 k0 c& R' z
  83. end
    ; L. y7 l& G" u7 I3 M

  84. % l( ~8 I1 D6 t/ o; S( A# P
  85. endmodule
    # o1 Q8 A3 q& Y5 V# K
  86. 0 Z$ X, ~. j+ W" q8 t
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。
+ F7 l7 L* ?) P  q4 i: a( O) w8 ?这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。0 [  c& x) K( g, s+ W
代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.- X5 t- h% Q+ K- k# @/ H  G% l( X( }
然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。9 M. _2 g- x; m# J4 B
0 L  s4 t! ~+ l/ v
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10# i0 m* `& I& \1 C5 c& f4 j
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址( S) ?9 b6 S* c2 `4 A; M. {2 z
...
7 O- n; M$ m' v+ w' L0 X" X
我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)7 ^2 h+ x, E/ `* W3 Y3 }
调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试
8 z3 G  v$ |5 l. a9 g                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
! \0 M0 R+ ?& a+ H, S: QEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
1 ~1 m, t/ i0 V" c7 t+ g ...

. q- U8 s. [7 Q* Q6 b0 r# B还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 14:09 , Processed in 0.044121 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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