大家看看用Xilinx-XST综合这个单端口RAM为什么就不对,读出来全是0!
时间:10-02
整理:3721RD
点击:
module ram_ad(clk,
rden,
data,
address,
wren,
q);
input clk;
input rden;
input[63:0]data;
input[10:0]address;
input wren;
output[63:0]q;
reg[63:0]q;
wire[63:0]q_out;
wire cen=!(wren|rden);
always@(posedge clk)
q<=q_out;
ram_ad1 ram_ad1_ins(
.Q(q_out),
.CLK(clk),
.CEN(cen),
.WEN(!wren),
.A(address),
.D(data)
);
endmodule
module ram_ad1(CLK,
CEN,
D,
A,
WEN,
Q);
input CLK;
input CEN;
input[63:0]D;
input[10:0]A;
input WEN;
output [63:0]Q;
reg [63:0]Q;
reg[63:0]mem[2047:0];
always@(posedge CLK)
if((!CEN)&&(!WEN))
mem[A]<=D;
always@(posedge CLK)
if((!CEN)&&(WEN))
Q<=mem[A];
endmodule
单位电脑不能上网,又敲了一遍,有错误请指正!
在我的工程里功能仿真一点问题没有,结果是对的!但是一旦后仿真就全是0。我把例化的这个RAM的端口在Modelsim里拉出来,功能仿真没问题,另外的仿真(post 综合之类)输出端全是0,实际电路中用CHIP SCOPE debug在读的时候输出也是0!还有一个要交代的是,我写是慢速的大约每8个clk写一次(wren每8个clk为1,其余为0),写完后连读,也就是rden长时间为1。另外在ISE里单独仿真这个RAM偶没有做!请问楼上的你的第三张图怎么不可见?其两张是功能仿真还是网表仿?
另外也没有必要不讨论吧,真理越辩越明,对大家都有好处。我只是把我碰到的问题说出来,也许是我的工程里某些设置项不对,也许是......!但是一定要把问题给找出来,我们需要真相!只是我这边贴图不太方便,要不然我也贴图!
哦?请再看一遍代码,我设计的本意是wren为高写,rden为高读,en是使能的意思,不代表低电平!请注意cen=!(wren|rden),cen低电平有效。请再看一看我的上一个回帖!
还有,刚才发现第二个模块名称应为 ram_ad1,写错了,写成ram_ad了,已经编辑更新。在ram_ad中例化ram_ad1。不知道大侠仿的是哪一个?第一个还是第二个?
LZ回的帖子怎么还删了?
被sdwsh小编给删除了
要初始化ram,有个命令
我也遇到类似的问题,
不过是双口的ip,
也是写没问题,但是读是全0.
1.仿真时加glbl模块了嘛?
2.复位后等待时间够吗?
换个ise版本试试
