xinlinx 片上RAM的读写
其中,地址和数据都是8bit。
现在的问题是,我已经把32byte的数据分别写入该RAM的0-31地址中。
我想连续读出对应地址处的数据,可是总也读的不对。
但是,读单个地址处的数据没有问题。
请各位大侠指点一下。
单个地址处的数据我是这么读的。
always @(posedge clk40m)
begin
if(!rstn)
begin
czl<=0;
addr<=0;
s<=s0;
end
else
begin
case(s)
s0:
begin
addr<=0;
s<=s1;
end
s1:
begin
addr<=addr;
czl<=dout;
s<=s1;
end
endcase
end
end
以你的設計, 當rstn = 1之後
s會馬上由s0變成s1, 之後停留在s1不動
addr則永遠都是0, addr不動, 當然就沒辦法連續讀
你好,这个程序不是连续读的程序,是只读其中一个地址的程序。
以下程序是我连续读的程序。但是读到的czl和czh都是0。
always @(posedge clk40m)
begin
if(!rstn)
begin
czl<=0;
addr<=0;
s<=s0;
end
else
begin
case(s)
s0:
begin
addr<=0;
s<=s1;
end
s1:
begin
addr<=addr;
czl<=dout;
s<=s2;
end
s2:
begin
addr<=addr+1;
czl<=czl;
s<=s3;
end
s3:
begin
addr<=addr;
czh<=dout;
s<=s4;
end
s4:
begin
addr<=addr;
czl<=czl;
czh<=czh;
s<=s4;
end
endcase
end
end
可能是写错了,写时序和读时序都要符合data sheet的规定
谢谢。不过我可以保证我的写没有错误。
因为我用IO写地址,然后读出对应地址的数据,这个是没有问题的。连续读也没有问题。
现在是要实现硬件连续读。
always @(posedge clk40m or posedge rram)
begin
if(rram)
begin
cz0<=0;
cz1<=0;
rradr<=0;
s<=s0;
end
else
begin
case(s)
s0:
begin
rradr<=0;
s<=s1;
end
s1:
begin
rradr<=rradr;
cz0<=dout;
s<=s2;
end
s2:
begin
cz0<=cz0;
s<=s3;
end
s3:
begin
rradr<=rradr+1;
s<=s4;
end
s4:
begin
rradr<=rradr;
cz1<=dout;
s<=s4;
end
s5:
begin
cz1<=cz1;
s<=s5;
end
endcase
end
end
这个是连续读两个地址处的数据,发现,程序执行到S4时,cz0和cz1的输出均没有问题。但是,将s=s4改为s=s5时,cz1的值就不对了,而且这个值和cz0的值一样了。
求助。
问题终于解决了,感谢各位的帮忙。
有一个新的问题,想请教高手。
问一下,xilinx ise 10.1中能不能添加两个分布式RAM,然后在主模块中调用。
我添加了两个分布式RAM后,出现了一个错误,说是找不到第二个RAM模块。
只要不超过FPGA的资源,添加几个ram都是可以的,看下例化名称什么的是否正确
