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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 13171|回复: 14

求助:FPGA读写外部ram

[复制链接]
发表于 2007-5-12 15:35:10 | 显示全部楼层 |阅读模式

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

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

x
module ram_write(ram_clk,wr,rd,cs,data_in_bus,data_out_bus,ram_data_bus,ram_addr_bus);
input ram_clk;
input wr,rd;
input cs;
input[7:0] data_in_bus;                 //写入的数据
output[7:0] data_out_bus;              //读出的数据
inout[7:0] ram_data_bus;               //ram的数据线,双向
output[18:0] ram_addr_bus;           //ram的地址线
reg[7:0] data_out_bus;
reg[18:0] ram_addr_bus;
reg[18:0] addr_count;
reg[7:0] ram_data_bus_reg;

assign ram_data_bus=wr?'bz:ram_data_bus_reg;

initial
  addr_count=11’b0;

always @(posedge ram_clk)
    if(cs==1'b1) addr_count=11'b0;
    else if(wr==1'b0)begin                                       //写
          ram_addr_bus<=addr_count[18:0];               //地址计数器的输出作ram的地址
          ram_data_bus_reg<=data_in_bus;
          addr_count<=addr_count+1'b1;
      end
    else if(rd==1'b0)begin                                        //读
          ram_addr_bus<=addr_count[18:0];
          data_out_bus<=ram_data_bus;
          addr_count<=addr_count+1'b1;
      end
    else  addr_count<=11'b0;
endmodule


想写入并读出ram里的数据,但是也不知道写进去没有?
反正读出是不对的,data_out_bus没有读出ram里的数据,一直都是ram_data_bus的值。

请帮忙看看怎样改正阿,给点意见。弄得头都大了,谢谢。
发表于 2007-5-12 19:15:10 | 显示全部楼层
仿真一下看看
 楼主| 发表于 2007-5-12 20:02:42 | 显示全部楼层
就是仿真看的波形,data_out_bus一直和ram_data_bus的相同。

我想知道的是我这个程序有没有问题?或者我这个思路有没有问题?
发表于 2007-7-6 23:16:56 | 显示全部楼层
不是很明白你的意思,照程序来看,由于这条语句:data_out_bus<=ram_data_bus; 必定会造成输出数据等于ram_data_bus的。而在实际应用中,读出来的数据就应该是这样,没有问题的阿,只是一般情况下需要配合输出控制信号来写入或者读出数据。
发表于 2007-11-28 21:27:02 | 显示全部楼层
写的时候先将数据放到数据总线上,然后再写使能~
发表于 2008-4-16 13:02:27 | 显示全部楼层
可惜我是学VHDL···关注中····················
发表于 2008-4-17 00:03:56 | 显示全部楼层
读不出来数据,可能是根本就没有写进去,访问ram要注意一些时序吧,就是wr和cs这些信号的相对关系,pulse的宽度要求是多少,需要结合ram,看一下ram的spec,吧。看一下它对输入信号的要求~
发表于 2008-4-17 09:25:13 | 显示全部楼层
"assign ram_data_bus=wr?'bz:ram_data_bus_reg;"

上面的这个语句是什么意思?把“Z”写进ram吗?
发表于 2010-3-22 14:56:44 | 显示全部楼层
我只是学了vhdl
提供几个调试的思路,楼主不妨试下:
1、可以使用一个内部的ram看看,读写的对不对;
2、写点有规律的数,看看错在哪了
3、做下仿真之类的;不知道用的是quartus还是ise了,可以用调试工具试一试。
一开始写vhdl时候,都不用仿真的(“NB"大了,呵呵,结果总是悲剧的);现在写的话,都是完完全全仿真好才敢上板子的。。。。
发表于 2010-3-22 16:37:36 | 显示全部楼层
inout[7:0] ram_data_bus;怎么把addr_count[18:0]给赋值给了ram_addr_bus?双向口线可以这样使用吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-9 03:36 , Processed in 0.023945 second(s), 10 queries , Gzip On, Redis On.

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