微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家看看用Xilinx-XST综合这个单端口RAM为什么就不对,读出来全是0!

大家看看用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版本试试

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

网站地图

Top