微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助:FPGA读写外部ram

求助:FPGA读写外部ram

时间:10-02 整理:3721RD 点击:
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的值。

请帮忙看看怎样改正阿,给点意见。弄得头都大了,谢谢。

仿真一下看看

就是仿真看的波形,data_out_bus一直和ram_data_bus的相同。

我想知道的是我这个程序有没有问题?或者我这个思路有没有问题?

不是很明白你的意思,照程序来看,由于这条语句:data_out_bus<=ram_data_bus; 必定会造成输出数据等于ram_data_bus的。而在实际应用中,读出来的数据就应该是这样,没有问题的阿,只是一般情况下需要配合输出控制信号来写入或者读出数据。

写的时候先将数据放到数据总线上,然后再写使能~

可惜我是学VHDL···关注中······

读不出来数据,可能是根本就没有写进去,访问ram要注意一些时序吧,就是wr和cs这些信号的相对关系,pulse的宽度要求是多少,需要结合ram,看一下ram的spec,吧。看一下它对输入信号的要求~

"assign ram_data_bus=wr?'bz:ram_data_bus_reg;"
上面的这个语句是什么意思?把“Z”写进ram吗?

我只是学了vhdl
提供几个调试的思路,小编不妨试下:
1、可以使用一个内部的ram看看,读写的对不对;
2、写点有规律的数,看看错在哪了
3、做下仿真之类的;不知道用的是quartus还是ise了,可以用调试工具试一试。
一开始写vhdl时候,都不用仿真的(“NB"大了,呵呵,结果总是悲剧的);现在写的话,都是完完全全仿真好才敢上板子的。

inout[7:0] ram_data_bus;怎么把addr_count[18:0]给赋值给了ram_addr_bus?双向口线可以这样使用吗?

8#兄弟说的有道理,根据你写的,好像你想在wr为0时输出ram_data_bus_reg的值给ram_data_bus,但为1时'bz这种表示好像是错误的,b代表2进制,但z却使16进制的。


我用的是ise的RAM的IP核,但是也读不出数据,不知道是什么原因。求高手解答~

assign ram_data_bus=wr?'bz:ram_data_bus_reg 弄反了吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top