简单的fpga读写内部ram的问题。。麻烦帮帮忙。。谢谢

我加了一个2位宽,4个位深的ram ip核,程序如下,综合没错,接着向问问怎么向里面写数据,还有怎么将数据读出来? 麻烦帮帮忙。。十分感谢。。。因为要急用,所以没时间去慢慢看书。。。还有我见例程有些参数要定义wire变量弄弄到子程序里面,请问什么情况时候用到。。wire和reg的区别我大概清楚,就是不明白问什么有些子程序参数要定义wire变量。。先谢谢帮忙的人。。

module ram_top(
clk,
a,
d,
out
);
input clk;
input [1:0] a;
input [1:0] d;
output [1:0] out;

ram2 ram2_1 (
.clka(clk),
.wea(1), // Bus [0 : 0]
.addra(a), // Bus [1 : 0]
.dina(d), // Bus [1 : 0]
.douta(out)); // Bus [1 : 0]
endmodule

不知道你现在明白了没有,我是刚学完,感觉明白了,写入数据就是wea写使能为1,然后设置地址addra的同时,设置你要输入的dina即可完成写入,因为你要控制地址和输入数据,所以对于你来说,输入数据d,与a可以设成中间变量,不可以作为输入端口,因为输入端口你是不能设置的。比如wire [1:0]a, wire[1:0] d,然后写程序来控制a和d,达到写入数据的目的。这样顶层为 ram_top(clk,rst_n ,out);即可。其他都作为中间变量。读的话要是写使能wea变为0才能读的,输入你想读的地址即可输出
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-12-01
初始化数据可以新建一个.hex或者.mif文件,引用ram ip核的时候向导里有个可以添加初始化文件的地方,关联到你写的那个文件就可以了。模块例化的时候,要把中间需要用到的变量定义成wire型的,相当是个声明的作用吧,不定义会出警告,有时也不影响运行结果但我遇到过会影响结果的情况,而且对于好的写代码习惯也是需要的追问

可是我不要初始化啊..我是要现场采集数据然后送到ram里面的。。请问怎么用啊 。。具体。。datasheet里面也没怎么解释。。T T。。先谢谢你帮忙

追答

那就写进去嘛ram2 ram2_1 (
.clka(clk),
.wea(1), // Bus [0 : 0]
.addra(a), // Bus [1 : 0]
.dina(d), // Bus [1 : 0]
.douta(out)); // Bus [1 : 0]
给到dina

追问

给addra地址,然后给dina数据就好了, 接着读呢? 读就直接给地址,输出口就变成地址里面存的值了?我试了不行啊。。麻烦再浪费少少时间答答这个问题,急用啊。。谢谢。。

追答

ram2 ram2_1 (
.clka(clk),
.wea(1), // Bus [0 : 0]
.addra(a), // Bus [1 : 0]
.dina(d), // Bus [1 : 0]
.douta(out)); // Bus [1 : 0]
你看看这几个管脚是输入还是输出,wea应该是写使能吧,写入应该不用给地址的

追问

额。。。不用地址? 那addra这个端口是干什么的。。。貌似只能再追问一次了。。呵呵。。不好意思。。浪费你这么多时间。。

追答

写只能按顺序写入,读出需要根据地址

本回答被提问者采纳
第2个回答  2011-07-24
111111
相似回答