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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

) O1 k' G5 u1 `# j9 _0 x邮箱:604285180@qq.com
2 J& b  `2 F9 \

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。" l8 ^; K& i  Z! e. q$ @9 z
( D3 \5 U1 G* D* k1 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
. O# T% X9 }$ W( y还要注意数据在FPGA存储的地址,跟dsp读的地址要对应
; f* [/ F5 I) X" J
FPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者
# K1 k+ R% l2 R7 ]$ p
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址7 Z3 U2 h6 Q1 h. C3 b

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑 ( w3 x* l1 y  l# R- R1 {' _
Lewis 发表于 2015-4-17 10:10
: M9 p$ ?( ?' mEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址; e1 L; x, c; s. n. D8 _; U
...
  1. `timescale 1ns / 1ps
    + d  b8 M7 b8 Q; |
  2. module emif_test6 q5 z0 {9 Z# W0 N4 E4 R7 J3 W! L* d
  3. (     
    , J- Y$ X2 V) ?# `9 _. B; ]
  4.    input clk,
    + J* s/ b0 `4 U% h4 f+ z
  5.         input    emifa_clk,    // 时钟                         7 ]0 m) w1 i0 R; |/ L) P
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)        D& f) A, E% z
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚          . K5 ~. V- y8 b% q. i. J% H/ r
  8.         input    emifa_we_n,     // 低电平有效写使能引脚       $ I% ~; W  y! {1 t. P
  9.         inout    emifa_wait0,    //等待输入引脚      
    ) y9 d6 g# c" u' R2 i: P: o' r
  10.         inout    emifa_wait1,            
    & Y7 d$ e2 T0 p
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            7 u' A- a$ u& R  z! D  Y5 G
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            
    ) p7 a' A, T, H9 |, i
  13.         output    [15:0]emifa_data   // EMIF 数据总线
    ! O! @4 R( n3 Q- j( n) H& k) W" y
  14. );- ~( p# ^/ y/ j1 p$ V  X
  15.         
    / l! |& q; v+ L' i
  16. /****************EMIF Interface****************/        
    9 V& Q/ O0 J; S- v+ {
  17. //信号声明! {5 J! ~- ?5 x. x2 I# P5 ~
  18. wire emif_clk;* Y# S9 D1 r* S4 V  n0 _8 m! x  M" S
  19. reg emifa_cs2_reg;      " V! D  R4 @; z' i% \  `
  20. reg emifa_rnw_reg;     7 j6 g+ x) y9 x7 t* |! k- l
  21. reg emifa_oe_n_reg;    ; |, R% e/ p4 z! _( M
  22. reg emifa_we_n_reg;    3 k4 f; p4 @  Y) n
  23. reg emifa_wait0_reg;   ! w. h7 \; z7 _9 B  @; x2 t$ h
  24. reg emifa_wait1_reg;  7 T1 t6 F) l/ S. a
  25. reg emifa_ba1_reg;     
    & Z1 f/ d; C! F* M
  26. reg [13:0] emifa_addr_reg;      . N2 A& F# ~9 v* A* }( ~
  27. reg [15:0] emifa_data_reg; " e9 d3 u% h( A7 m1 U' O# H

  28. 0 {5 M- b' x6 u$ W8 k
  29. //元件例化
    7 D3 E1 B! z0 H3 S. _5 c
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));$ Y9 l& W' |& i( X& V3 H
  31. //寄存器赋值, x' s; q6 R4 Z& G
  32. always@(posedge emif_clk)begin
    2 }2 q4 ~+ J. m! Q- _( e! J6 `+ d
  33.                 emifa_cs2_reg       <= emifa_cs2;2 G6 ^. i4 }2 {) \9 ?3 N0 p0 p: E5 B
  34.                 emifa_oe_n_reg      <= emifa_oe_n;
    ' [( i5 M7 H% z1 z" `3 e
  35.                 emifa_we_n_reg      <= emifa_we_n;) M: ]' T& n6 {4 o6 C5 q* y
  36.                 emifa_wait0_reg     <= emifa_wait0;
    $ P5 G& ^6 _3 X, |+ f. i
  37.                 emifa_wait1_reg     <= emifa_wait1;! d- Q( H7 p8 H& B* n9 f% [
  38.                 emifa_ba1_reg       <= emifa_ba1;
    8 e. ?" s# r  ^) S' w" L
  39.                 emifa_addr_reg      <= emifa_addr;9 V) U7 I: b( w
  40.                 emifa_data_reg      <= emifa_data;9 m! t# H3 A  T1 f! H" ]# b
  41. end, ^0 \. m8 d$ }+ M4 C! l

  42. * \6 v( r! y) V0 }/ k
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;
    6 Z3 L0 [) s9 _  Y
  44. assign emifa_data = dpram_douta;9 A6 @( V; [/ F* I9 P
  45. 6 R$ O& ^1 y2 G. A. c) M# L
  46. /****************Dual Port RAM****************/
    - Z" o  Q5 |% ]1 ]9 K2 t: |; B& A3 t
  47. //PORTA/ B: t  r1 I, A+ q- y
  48. reg  [14:0]dpram_addra;       - A4 W2 y5 w$ N3 o
  49. reg  dpram_wea;           g, S/ w0 o8 \, K3 c) l0 w& M0 P
  50. reg  [15:0]dpram_dina;      
    % M- D7 V5 s2 o
  51. wire [15:0]dpram_douta;           
    6 p/ j' J, {! J9 R
  52. //PORTB$ _4 a8 `% N5 D
  53. reg  [14:0]dpram_addrb;      
    / H7 w" J. F  b
  54. wire  dpram_web;
    1 ]' a( v- p; B1 @$ U2 n6 {; e
  55. reg  [15:0]dpram_dinb;
    & ?! p& S' A0 K8 x! u
  56. wire [15:0]dpram_doutb;
    - F" y4 g( b# E! p  t8 f& a
  57.    8 i$ \$ l, {- T2 ?- q
  58. //元件例化
    * {/ f! d0 }3 G# D9 |: z
  59. dpram dpram_unit(
    8 r  [. m8 y& Y. e+ I" _9 t
  60.   .clka(emif_clk), // input clka
    1 S* y( O+ n6 n7 K2 @
  61.   .wea(dpram_wea), // input [0 : 0] wea" I/ L1 D# i7 ?
  62.   .addra(dpram_addra), // input [14 : 0] addra
    + q0 F" S# r. F7 ?
  63.   .dina(dpram_dina), // input [15 : 0] dina
    $ |1 i: L- K) w+ P0 i- h, i
  64.   .douta(dpram_douta), // output [15 : 0] douta- h3 P9 ~, E5 _- `6 F6 x  ^+ u/ |
  65.         //clkb                  => sys_clk,
    + a! O2 G* b. U
  66.   .clkb(clk), // input clkb5 h) C: e& F/ R
  67.   .web(dpram_web), // input [0 : 0] web
    6 ^  n( ^' H6 W& A
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb6 S& r: O: B. ?+ a8 k' ^# v0 c3 a
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb8 M1 n" ?( R! h  x1 ]7 m+ G
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)
    # m8 z7 J! S( j

  71. ) h) ]2 _$ c4 c  T
  72. always@(emif_clk)begin* p- `, g6 }# s
  73.                 dpram_wea             <= 0;
    , J3 Z" Z1 A7 u& y" z
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};
    * Z  b& _; ~! E2 j6 n
  75.                 dpram_dina            <= emifa_data_reg;5 G. A$ c$ [& C# K
  76. end
    ! U( r2 M8 X1 s( a
  77. assign dpram_web = 1'b1;
    " f, R: l( x0 ^# d  j+ {$ s7 s
  78. 4 v- O8 x0 z: d# Y% m
  79. always@( clk )2 p( R+ a! y8 D% a4 ?
  80. begin
    # Z+ o( d) i7 u, D1 d
  81.         dpram_addrb  <= 100;. r0 k% ^0 [6 P
  82.         dpram_dinb   <= 16'd2048;
    % P8 j& @2 ^! b3 d2 w* ?+ v! D
  83. end
    ; `2 N. ?) j& V# l0 l- ?

  84. ; P  q/ Y' U7 U# v0 Y# H4 X/ H. h
  85. endmodule
    % ], U, {# w. e! ^* o7 T( r
  86. ! t: O/ K8 V. J; r: J
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。
8 b' `& k& B: j8 ~这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。4 C! A* F! r2 e' [) @0 T; n
代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.& F5 E9 D* }3 @- R
然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。7 @2 @. E! v4 J, S
2 Q7 t4 n: ]% f4 E6 |# O
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10
+ O* y4 q- s* D) q# Y0 ]EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
. ~& j3 h; T8 L$ d4 L ...

- g8 i7 }$ F4 ?2 P+ n3 N5 P我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)
. v3 ]$ s9 O2 {+ t; }调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试
* m, Y4 [2 Q' q# S. h                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:106 x) N' Z3 d) R
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址) ]; [! m$ W  b$ K% o" h, o
...

0 F+ C' i/ R! w  V/ A; W$ @还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 14:11 , Processed in 0.046460 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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