在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5431|回复: 5

[求助] 双口RAM读写错误问题求助

[复制链接]
发表于 2014-12-3 22:27:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x

大家好!我在FPGA设计的过程中通过调用一个双口RAM作为BUFFER进行数据的写入和读出,通过ISE的IP核生成工具生成了一个双口RAM的IP核,但是在应用中发现,写入的数据和读出的数据不一致,chipscope抓到的信号显示读写的数据和地址及写信号都正确,而且写入数据之后,多次读取BUFFER中相同地址的值在不停变化,但通过chipscope抓取的写信号(wea)一直保持为零。其他的双口RAM读写正常,将此RAM固定到正常的RAM的位置,读写仍然不对。求助可能是什么原因造成的?(virtex-7 485T开发板,时钟为106MHz,使用的chipscope采用时钟也是这个时钟)
附代码如下:





  1. RAM代码
  2. module SCHEME_BUFFER(
  3. clka,
  4. wea,
  5. addra,
  6. dina,
  7. douta,
  8. clkb,
  9. web,
  10. addrb,
  11. dinb,
  12. doutb
  13. );input clka;
  14. input [0 : 0] wea;
  15. input [12 : 0] addra;
  16. input [31 : 0] dina;
  17. output [31 : 0] douta;
  18. input clkb;
  19. input [0 : 0] web;
  20. input [12 : 0] addrb;
  21. input [31 : 0] dinb;
  22. output [31 : 0] doutb;// synthesis translate_offBLK_MEM_GEN_V7_3 #(
  23. .C_ADDRA_WIDTH(13),
  24. .C_ADDRB_WIDTH(13),
  25. .C_ALGORITHM(1),
  26. .C_AXI_ID_WIDTH(4),
  27. .C_AXI_SLAVE_TYPE(0),
  28. .C_AXI_TYPE(1),
  29. .C_BYTE_SIZE(9),
  30. .C_COMMON_CLK(1),
  31. .C_DEFAULT_DATA("0"),
  32. .C_DISABLE_WARN_BHV_COLL(0),
  33. .C_DISABLE_WARN_BHV_RANGE(0),
  34. .C_ENABLE_32BIT_ADDRESS(0),
  35. .C_FAMILY("virtex7"),
  36. .C_HAS_AXI_ID(0),
  37. .C_HAS_ENA(0),
  38. .C_HAS_ENB(0),
  39. .C_HAS_INJECTERR(0),
  40. .C_HAS_MEM_OUTPUT_REGS_A(0),
  41. .C_HAS_MEM_OUTPUT_REGS_B(0),
  42. .C_HAS_MUX_OUTPUT_REGS_A(0),
  43. .C_HAS_MUX_OUTPUT_REGS_B(0),
  44. .C_HAS_REGCEA(0),
  45. .C_HAS_REGCEB(0),
  46. .C_HAS_RSTA(0),
  47. .C_HAS_RSTB(0),
  48. .C_HAS_SOFTECC_INPUT_REGS_A(0),
  49. .C_HAS_SOFTECC_OUTPUT_REGS_B(0),
  50. .C_INIT_FILE("BlankString"),
  51. .C_INIT_FILE_NAME("no_coe_file_loaded"),
  52. .C_INITA_VAL("0"),
  53. .C_INITB_VAL("0"),
  54. .C_INTERFACE_TYPE(0),
  55. .C_LOAD_INIT_FILE(0),
  56. .C_MEM_TYPE(2),
  57. .C_MUX_PIPELINE_STAGES(0),
  58. .C_PRIM_TYPE(1),
  59. .C_READ_DEPTH_A(8192),
  60. .C_READ_DEPTH_B(8192),
  61. .C_READ_WIDTH_A(32),
  62. .C_READ_WIDTH_B(32),
  63. .C_RST_PRIORITY_A("CE"),
  64. .C_RST_PRIORITY_B("CE"),
  65. .C_RST_TYPE("SYNC"),
  66. .C_RSTRAM_A(0),
  67. .C_RSTRAM_B(0),
  68. .C_SIM_COLLISION_CHECK("ALL"),
  69. .C_USE_BRAM_BLOCK(0),
  70. .C_USE_BYTE_WEA(0),
  71. .C_USE_BYTE_WEB(0),
  72. .C_USE_DEFAULT_DATA(0),
  73. .C_USE_ECC(0),
  74. .C_USE_SOFTECC(0),
  75. .C_WEA_WIDTH(1),
  76. .C_WEB_WIDTH(1),
  77. .C_WRITE_DEPTH_A(8192),
  78. .C_WRITE_DEPTH_B(8192),
  79. .C_WRITE_MODE_A("WRITE_FIRST"),
  80. .C_WRITE_MODE_B("WRITE_FIRST"),
  81. .C_WRITE_WIDTH_A(32),
  82. .C_WRITE_WIDTH_B(32),
  83. .C_XDEVICEFAMILY("virtex7")
  84. )
  85. inst (
  86. .CLKA(clka),
  87. .WEA(wea),
  88. .ADDRA(addra),
  89. .DINA(dina),
  90. .DOUTA(douta),
  91. .CLKB(clkb),
  92. .WEB(web),
  93. .ADDRB(addrb),
  94. .DINB(dinb),
  95. .DOUTB(doutb),
  96. .RSTA(),
  97. .ENA(),
  98. .REGCEA(),
  99. .RSTB(),
  100. .ENB(),
  101. .REGCEB(),
  102. .INJECTSBITERR(),
  103. .INJECTDBITERR(),
  104. .SBITERR(),
  105. .DBITERR(),
  106. .RDADDRECC(),
  107. .S_ACLK(),
  108. .S_ARESETN(),
  109. .S_AXI_AWID(),
  110. .S_AXI_AWADDR(),
  111. .S_AXI_AWLEN(),
  112. .S_AXI_AWSIZE(),
  113. .S_AXI_AWBURST(),
  114. .S_AXI_AWVALID(),
  115. .S_AXI_AWREADY(),
  116. .S_AXI_WDATA(),
  117. .S_AXI_WSTRB(),
  118. .S_AXI_WLAST(),
  119. .S_AXI_WVALID(),
  120. .S_AXI_WREADY(),
  121. .S_AXI_BID(),
  122. .S_AXI_BRESP(),
  123. .S_AXI_BVALID(),
  124. .S_AXI_BREADY(),
  125. .S_AXI_ARID(),
  126. .S_AXI_ARADDR(),
  127. .S_AXI_ARLEN(),
  128. .S_AXI_ARSIZE(),
  129. .S_AXI_ARBURST(),
  130. .S_AXI_ARVALID(),
  131. .S_AXI_ARREADY(),
  132. .S_AXI_RID(),
  133. .S_AXI_RDATA(),
  134. .S_AXI_RRESP(),
  135. .S_AXI_RLAST(),
  136. .S_AXI_RVALID(),
  137. .S_AXI_RREADY(),
  138. .S_AXI_INJECTSBITERR(),
  139. .S_AXI_INJECTDBITERR(),
  140. .S_AXI_SBITERR(),
  141. .S_AXI_DBITERR(),
  142. .S_AXI_RDADDRECC()
  143. );// synthesis translate_onendmodule调用此RAM的代码
  144. SCHEME_BUFFER scheme_buffer(
  145. .clka (clk),
  146. .wea (host_sch_wr_host),
  147. .addra (scheme_host_addr),
  148. .dina (host_data_in),
  149. .douta (host_sch_data_out),
  150. .clkb (clk),
  151. .web (1'b0),
  152. .addrb (scheme_addr),
  153. .dinb (32'd0),
  154. .doutb (scheme_data)
  155. );


复制代码
发表于 2016-9-30 16:08:33 | 显示全部楼层
路过,我现在也是用chipscope观察,只不过是单口ram,也是读出的数据并不是写入的数据,正在寻找答案。。
发表于 2016-10-1 11:12:08 | 显示全部楼层
遇到过,可能是亚稳态问题。我用的时钟上升沿触发,然后就粗暴的把控制信号和输入数据调成在时钟下降沿变化,强行保证在上升沿采样时候是稳定的。如果你会写时序约束,应该是更好的解决办法。
发表于 2016-10-2 18:55:11 | 显示全部楼层
曾经也遇见过!!单口RAM。写进去的数据读出来始终是错误的!!!表示无力!!
发表于 2016-10-28 21:09:52 | 显示全部楼层
仔细看一下他的datasheet,好像是下降沿写数据吧!
发表于 2016-10-30 12:06:00 | 显示全部楼层
高复位,还有就是同时对于一个地址读写
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-19 05:19 , Processed in 0.025072 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表