在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9040|回复: 26

[求助] SRAM部分区域无法写,可以读,请大神帮忙分析一下原因。

[复制链接]
发表于 2020-6-8 16:11:18 | 显示全部楼层 |阅读模式
100资产
系统中会用到1个1Kx32的RAM和1个8Kx32的ROM,这2个存储单元都是使用SMIC的工具compile出来的。
现在问题是RAM每512字节只能写前128字节的数据,写其他区域的地址也总是映射到前128字节区域了(比如写256地址,但实际还是写到0地址了),刚开始怀疑是地址总线的问题,检查了版图,没有发现问题,AD的地址线也都正确连接了,而读RAM呢,又都是正确的(是不是可以排除地址总线的问题?)。问题仅出现在写RAM的时候,问题是不是应该仅在地址,时钟上找原因?还是可能有其它原因呢?
1)RAM和ROM共用时钟,检查PR后的数据,发现这个CK信号是通过这个BUFX2M U297 (.A ( MEM_CK ) , .Y ( CK ) )输出后连接到这2个存储单元上的,是否可能是这个BUF驱动能力不够所致 ?
2)共用地址总线,是否可能存在写的时候某几位地址总线被异常拉低,导致无法正常写入指定地址呢?

其他原因???

后仿功能正常,把SRAM的网表提取出来混仿功能也正常,SRAM可以正常读写。

请群里的大神帮忙分析一下问题的原因,非常非常的感谢!!!!!

.................................

RAM_1KX32 i_RAM (.WEN ( RAM_WEN ) , .DIN ( RAM_WD ) , .WC ( RAM_WC ) ,
    .CE ( RAM_CE ) , .CK ( CK ) , .AD ( AD[9:0] ) , .DOUT ( RAM_RD ) ) ;

ROM_8KX32 i_E2A (.AD ( AD[12:0] ) , .CE ( ROM_CE ) , .CK ( CK ) ,
    .DOUT ( ROM_RD ) ) ;
...............................

module RAM_1KX32 (DOUT , AD , WEN , CK , CE , WC , DIN );
output [31:0] DOUT ;
input  [9:0] AD ;
input  WEN ;
input  CK ;
input  CE ;
input  [3:0] WC ;
input  [31:0] DIN ;
wire [3:0] WE ;
NOR2BX2M U6 (.AN ( WC[1] ) , .B ( WEN ) , .Y ( WE[1] ) ) ;
NOR2BX2M U5 (.AN ( WC[0] ) , .B ( WEN ) , .Y ( WE[0] ) ) ;
NOR2BX2M U4 (.AN ( WC[3] ) , .B ( WEN ) , .Y ( WE[3] ) ) ;
NOR2BX2M U3 (.AN ( WC[2] ) , .B ( WEN ) , .Y ( WE[2] ) ) ;
CLKINVX2M U2 (.A ( CE ) , .Y ( n1 ) ) ;
RA1KX32M8_S018G i_ram (.WE ( WE ) , .OE ( 1'b1 ), .DIN ( DIN ) , .DOUT ( DOUT )
    , .CEN ( n1 ) , .AD ( AD ) , .CLK ( CK ) ) ;
endmodule

module ROM_8KX32 (DOUT , CK , CE , AD );
output [31:0] DOUT ;
input  CK ;
input  CE ;
input  [12:0] AD ;
CLKINVX2M U1 (.A ( CE ) , .Y ( n1 ) ) ;
RO8KX32M16_S018G i_rom (.CLK ( CK ) , .D ( DOUT ) , .CSB ( n1 ) , .A ( AD ) ) ;
endmodule

发表于 2020-6-8 19:45:18 | 显示全部楼层
加入延迟仿真下,共用地址总线有可能是高位被拉低了,在你写的时候。。。太多原因了。。。ram模型也是要检查一下了,可能写错了都可能。。
 楼主| 发表于 2020-6-9 10:34:38 | 显示全部楼层


A1985 发表于 2020-6-8 19:45
加入延迟仿真下,共用地址总线有可能是高位被拉低了,在你写的时候。。。太多原因了。。。ram模型也是要检 ...


后仿使用提取的sdf进行反标,分别对min和max进行了仿真,功能也都是正常的。

ram使用了compile的.v进行了仿真,功能也都是正常的;提取PR的SRAM网表,使用vcs+xa进行混仿,观察地址线的电平信号,写时也稳定在1.8v。


发表于 2020-6-9 17:55:55 | 显示全部楼层
把RAM接口的波形贴出来看看,大概率可能你的时钟产生不是阻塞型导致的
 楼主| 发表于 2020-6-9 20:33:20 | 显示全部楼层


phoenixson 发表于 2020-6-9 17:55
把RAM接口的波形贴出来看看,大概率可能你的时钟产生不是阻塞型导致的


怎么判断时钟是否是阻塞型的?


wave.bmp
图片.png
发表于 2020-6-9 23:11:52 | 显示全部楼层
看波形是正常的,那很可能就是时钟的问题了
 楼主| 发表于 2020-6-10 08:24:23 | 显示全部楼层


phoenixson 发表于 2020-6-9 23:11
看波形是正常的,那很可能就是时钟的问题了


时钟问题的话,每512字节只有前128字节能写这个现象解释不通啊?难道说是由于时钟驱动能力不够,导致bit5/bit6的地址锁存存在问题?

发表于 2020-6-10 08:59:34 | 显示全部楼层


vectorli 发表于 2020-6-10 08:24
时钟问题的话,每512字节只有前128字节能写这个现象解释不通啊?难道说是由于时钟驱动能力不够,导致bit5 ...


解释的通,如果你的高位地址在采样时刻没有被时钟采到,就会产生这样的结果,做一个简单的尝试,就可以印证,你将地址信号加一个小的延时,哪怕是0.1ns,然后再传送给RAM,你再看看结果是否正确
 楼主| 发表于 2020-6-10 14:31:22 | 显示全部楼层
本帖最后由 vectorli 于 2020-6-10 15:48 编辑


phoenixson 发表于 2020-6-10 08:59
解释的通,如果你的高位地址在采样时刻没有被时钟采到,就会产生这样的结果,做一个简单的尝试,就可以印 ...


我在sdf中增加AD[5]的延时0.1ns,不知道这样修改是否有效?仿真出来的结果看,还是可以正常读写的。
修改前

            (INTERCONNECT i_DIG_ALL/U154/Y  i_ram/AD[5] (0.0042:0.0058:0.0058) (0.0042:0.0058:0.0058))
修改后

            (INTERCONNECT i_DIG_ALL/U154/Y  i_ram/AD[5] (0.1042:0.1058:0.1058) (0.1042:0.1058:0.1058))



发表于 2020-6-10 18:14:39 | 显示全部楼层
你是网表仿真不是RTL仿真对吧? 如果这样只能说明,RAM接口有timing问题,一般前仿真会有hold问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 18:40 , Processed in 0.023869 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表