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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

) i) D* @6 Q3 ^1 ^邮箱:604285180@qq.com- \+ ^( ^$ j0 e) d! h/ P# Z7 _! B) S# |

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-4-16 09:51:44 | 只看该作者
只需要把(下图中)向FPGA写数据的部分注释掉就行,其他地方都不需要修改。# s8 X( W1 h2 j
( U6 H/ D7 @& U& |( ?$ x

本帖子中包含更多资源

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

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
# S9 o& A1 Q+ ~3 T# @- x; K+ `* l还要注意数据在FPGA存储的地址,跟dsp读的地址要对应

9 L% z9 I! }4 q. B# WFPGA端RAM的地址是从0开始的,DSP端地址是0x6000 0000的地址去读,请问如何映射地址?
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
5#
发表于 2015-4-17 10:10:29 | 只看该作者
+ H* f/ f+ [$ I/ A9 L; T
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址* L  Y2 ^3 [1 l7 d

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
6#
 楼主| 发表于 2015-4-20 17:17:38 | 只看该作者
本帖最后由 水瓶 于 2015-4-20 17:24 编辑 9 H: g( g1 _& g# G  D  C. n
Lewis 发表于 2015-4-17 10:100 [2 O% q4 G1 |7 p0 @% {
EMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址# a" s) O! H0 |+ h3 o' G
...
  1. `timescale 1ns / 1ps4 F, v; X- H7 S/ i
  2. module emif_test
    * d; Z5 c" a" a" y: Q
  3. (     2 V+ F9 v/ m* ~
  4.    input clk,9 W5 h2 v% A# @# \0 t1 E; g
  5.         input    emifa_clk,    // 时钟                        
    & A  A1 J4 d: w4 ?
  6.         input    emifa_cs2,    //  低电平有效异步器件使能引脚  (与异步器件片选信号相连,只在访问异步存储器时有效)      
    7 K( R6 L& P. w/ ], @
  7.         input    emifa_oe_n,    //  低电平有效异步器件使能引脚          0 ^7 B6 ?3 [0 \% z8 e
  8.         input    emifa_we_n,     // 低电平有效写使能引脚       8 r7 Z. t- w5 h  S2 {- a( ^
  9.         inout    emifa_wait0,    //等待输入引脚      , O# o  C( {/ C6 Z. I% s; E9 m
  10.         inout    emifa_wait1,             , E$ \: v4 L1 U5 h" U
  11.         input    emifa_ba1,         // EMIF存储区域地址线 ,当与异步器件连接时,这些引脚与EM_A引脚共同形成穷到器件的地址。            + R# Q5 R3 \- \( j. K
  12.         input    [13:0]emifa_addr,  // EMIF 地址总线            
    # O8 Z4 d+ x% f3 Z
  13.         output    [15:0]emifa_data   // EMIF 数据总线
    . B; g' n: q# T& L
  14. );
    $ I( q. D, ?) |0 m# ^& ?0 q
  15.         
    # @# ~9 N) A' L9 g" l
  16. /****************EMIF Interface****************/        
    & c3 S6 a. Z1 o5 q; r5 w2 Z
  17. //信号声明
    + |: F) y+ g( s* Y5 D- A
  18. wire emif_clk;
    % |6 Y& N) L+ _# W; }& H1 ]8 V3 A; _
  19. reg emifa_cs2_reg;      
    1 G& v" V7 `3 \$ A. g& F3 {' y; y
  20. reg emifa_rnw_reg;     
    - Y9 y3 Z# e$ j  s( ]4 `) e, w
  21. reg emifa_oe_n_reg;    / P- J! Z1 n2 T( @+ ]
  22. reg emifa_we_n_reg;   
    , h% ^% B( a; c- `3 b/ i; X
  23. reg emifa_wait0_reg;   / M' W& S4 y& {7 }" O: a/ B
  24. reg emifa_wait1_reg;  
    2 N7 d: S  k) T& i$ Z) j
  25. reg emifa_ba1_reg;     
    + t6 f* t' O! Y
  26. reg [13:0] emifa_addr_reg;      4 ]" c: x4 |/ M
  27. reg [15:0] emifa_data_reg; 7 v9 \. ^# {# N3 B

  28. & g: I; C  a- N! G/ H0 r
  29. //元件例化
    ( L0 V  s* [- W" n) z
  30. BUFG emif_clk_unit(.I(emifa_clk),.O(emif_clk));8 b2 |3 S# R3 K& V9 J- f3 j4 @4 O
  31. //寄存器赋值- T5 D5 B* O1 r1 h% E
  32. always@(posedge emif_clk)begin
      X: U* _  e/ H6 T$ }1 ]& V
  33.                 emifa_cs2_reg       <= emifa_cs2;
    $ ^. G! P% `( e" T
  34.                 emifa_oe_n_reg      <= emifa_oe_n;! K9 p7 u& b* Y8 I
  35.                 emifa_we_n_reg      <= emifa_we_n;
    / \% w' l/ Y9 R& g0 B8 N& ~
  36.                 emifa_wait0_reg     <= emifa_wait0;
    4 P* i2 J* ]9 l. {& O1 C7 ~# p
  37.                 emifa_wait1_reg     <= emifa_wait1;
      g" S& ~6 D$ J: o: O. e4 E  ~
  38.                 emifa_ba1_reg       <= emifa_ba1;/ m% V& G6 O( l/ T8 I8 R# t6 S% @
  39.                 emifa_addr_reg      <= emifa_addr;
    % T# l) s; V2 O+ ^7 [9 |
  40.                 emifa_data_reg      <= emifa_data;6 x7 j5 K; g/ ?! N* @- Y. D9 K
  41. end
    & E, I. [% j: ]. ?' N7 D0 P

  42. ) W9 @$ p" _& H0 b: Q  l/ \: u; D
  43. //assign emifa_data = (emifa_oe_n ==1'b0)?dpram_douta:16'bZ;* {, W9 F9 W' [2 Z8 e, d
  44. assign emifa_data = dpram_douta;" a% ^+ @! ?4 Q! L. G! ~; `% l6 W9 s

  45. 5 G" B( f# j. Q# @6 r( u
  46. /****************Dual Port RAM****************/
    7 `5 u6 \3 D2 E2 [
  47. //PORTA
    & K4 p/ ~$ Y% }8 i5 a$ d# X/ Z
  48. reg  [14:0]dpram_addra;      
    : Y+ z# s! M, w7 u; j
  49. reg  dpram_wea;         
    ( H, U1 U& J2 n
  50. reg  [15:0]dpram_dina;      
    . X% e- ]( i+ @- l: i9 A& h: D
  51. wire [15:0]dpram_douta;           
    . o3 V; V0 \$ f0 w& n- B
  52. //PORTB
    / Q3 K! N0 D- B7 a, d3 N
  53. reg  [14:0]dpram_addrb;      
    ( t5 b$ s0 t4 J$ ~# s/ h! P
  54. wire  dpram_web;
    0 @1 K& F2 D% k+ F- Z# ~' Z3 q
  55. reg  [15:0]dpram_dinb;- H$ T+ J7 K, p/ V) o
  56. wire [15:0]dpram_doutb; 9 B% w7 y  l" s+ A, C
  57.    
    # l. z) l6 C1 Y5 b5 T& p
  58. //元件例化
    ) V5 Z# P+ Y  ^/ s$ i
  59. dpram dpram_unit(. @) W% }3 x' @8 p! k3 k! C8 X
  60.   .clka(emif_clk), // input clka
    / X% g# l9 c% {6 I* r! g) L( Y, t& |/ J
  61.   .wea(dpram_wea), // input [0 : 0] wea- s2 l" x0 \3 ]: G5 B- A6 v- _/ u
  62.   .addra(dpram_addra), // input [14 : 0] addra. V) Z, I; b6 \' ]
  63.   .dina(dpram_dina), // input [15 : 0] dina1 v, A2 N! e( k$ k0 N$ r; e
  64.   .douta(dpram_douta), // output [15 : 0] douta  H6 B4 j2 h. F  {8 n  i' L7 @& b
  65.         //clkb                  => sys_clk,
    $ [: W$ m% p9 @" w4 _4 d
  66.   .clkb(clk), // input clkb5 I6 V; C2 h$ {7 m) r6 t5 x
  67.   .web(dpram_web), // input [0 : 0] web3 ]+ k: g$ E% H9 ?/ N& t( M, G
  68.   .addrb(dpram_addrb), // input [14 : 0] addrb% {3 \+ X1 P; ]
  69.   .dinb(dpram_dinb), // input [15 : 0] dinb. L4 B  J. n3 ~0 X# M/ |7 K! p3 h
  70.   .doutb(dpram_doutb));// output [15 : 0] doutb)  Z5 C' Z% A; c
  71. 6 N; d$ A; Q  r3 Z$ G% a& g
  72. always@(emif_clk)begin
    ; `0 V% A7 p: D( \" Q4 c
  73.                 dpram_wea             <= 0;
    % T, [, I$ e$ y
  74.                 dpram_addra           <= {emifa_addr_reg[13:0],emifa_ba1_reg};: h- ]+ i7 e" O
  75.                 dpram_dina            <= emifa_data_reg;
    0 d, p# y& i' e9 i1 v( i  V. E+ _
  76. end
    . M. q1 r1 }) G' S8 g4 s
  77. assign dpram_web = 1'b1;. Z2 U  p& c/ [, I/ ]2 r
  78. 5 I* h8 T2 o8 R9 e( ~2 C/ z
  79. always@( clk )( R+ m/ Z1 J0 F# H( L
  80. begin. `0 p- o- y, p* r
  81.         dpram_addrb  <= 100;
    5 }7 b4 t& I7 h# ?# }
  82.         dpram_dinb   <= 16'd2048;
    ' }+ _# I# B& ^) M4 v
  83. end
    % D- e( z: D7 G  ^& a3 t% A$ X

  84. ' e3 x% l3 i) l" n1 h: I: m
  85. endmodule
    % n: T  }4 }& w. Q- y
  86. . S' Y7 N  ?: B  A4 s% i+ `
复制代码
嗯,谢谢,这个懂了,但是读出来的数还是不正确,fpga端具体代码如上。* p3 H) j  U, o4 A/ W
这段代码相当于RAM的A口只用来读,并且dpram_wea一直置零,RAM的B口用来写入一个数据。
+ t4 N# H4 O& E- l9 `3 [代码下载进FPGA后,DSP端先注释掉向fpga写入数据的部分,直接读取,读取的结果都为0,包括  dpram_addrb  <= 100;这个地址下应该的2048.1 ]% D% u3 H  D. O2 C: s$ M$ k
然后把注释去掉,DSP端可以正常的写入数据并且正确的读出数据,但是我的FPGA端已经将  dpram_wea             <= 0;这里置零,是没法写入的,所以对于DSP端还能照常写入读出产生疑问。5 `& W0 P! Y  S
. l. s, `% L7 L3 `8 c0 y+ q
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
7#
 楼主| 发表于 2015-4-20 17:31:45 | 只看该作者
Lewis 发表于 2015-4-17 10:10
3 i3 ]3 y& S+ C7 r% UEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址% l$ l' Y: D  w4 M5 A3 A, C8 Y
...

: o! y# U# N; m# k- }我的硬件平台是:TL138F-EasyEVM(浮点DSP C6748+ARM9 +Xilinx Spartn-6 FPGA核)
2 z0 F: e' h! d" M; i调试例程为:DSP端:EMIF_FPGA----EMIF总线FPGA读写测试
, l" Q2 _- C7 n' p9 }                    FPGA端:emif_test
回复 支持 反对

使用道具 举报

4

主题

8

帖子

1056

积分

金牌会员

Rank: 6Rank: 6

积分
1056
8#
 楼主| 发表于 2015-4-21 19:19:07 | 只看该作者
Lewis 发表于 2015-4-17 10:10
; A# @! V! ]5 T; v* ?& uEMIFA_CS2的寻址空间就是0x6000 0000 ~ 0x61FF FFFF  其实EMIFA_CS2读地址0x6000 0000就是读外设的0地址
6 E/ j% J" g, E9 M ...

/ `: B  Q& B/ _还望版主指导,卡了好多天了,原理都弄明白了,就是不知道问什么读出的数据不对。若是在您那里可以正确读取数据,还望发一份程序给我。谢谢了。
回复 支持 反对

使用道具 举报

20

主题

65

帖子

341

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 09:22 , Processed in 0.049551 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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