STA:SRAM中min_period的由来

本文探讨了SRAM为何需要min_period检查的原因,这主要与SRAM的读操作及位线预充电过程有关。min_period确保了在读取之后,位线有足够时间预充电以准备下一次读取。文章通过时序图解释了读取过程,并介绍了SRAM的standby、reading和writing三种状态,以及预充电的重要性。

今天“IC设计讨论群010”里讨论了的关于为什么sram中有个min_period的check。在此总结如下,权当记录。

min_pulse_width

首先,min_pulse_width, 是检查时序逻辑中clock信号的高电平与低电平的宽度是否超过了规定的最窄宽度。

对于这个check,是不能够忽略的。理论上必须fix。但是由于在signoff是会加一些derating,uncertainty, 以及各种corner,因为存在一定的margin,所以,如果有违例,但是芯片回来却没有问题,也不必惊讶,那是因为这些违例尚在margin的覆盖范围之内。

强烈建议不要带着mpw违例进行signoff,而如果必须如此,需谨慎评估风险。

min_period

既然有了min_pulse_width, 为什么对于sram,还有个min_period的check?

这个要从sram的原理说起。

六管sram bitcell

对于一个常见的六管sram为例。

那么,对于这个bitcell的读取过程如下:

假定存储的内容为1, 即在Q处的电平为高. 读周期之初,两根位线预充值为逻辑1, 随后字线WL充高电平,使得两个访问控制晶体管M5与M6通路。第二步是保存在Q的值传递给位线BL在它预充的电位,而泻掉(BL非)预充的值,这是通过M1与M5的通路直接连到低电平使其值为逻辑0 (即Q的高电平使得晶体管M1通路). 在位线BL一侧,晶体管M4与M6通路,把位线连接到VDD所代表的逻辑1 (M4作为P沟道场效应管,由于栅极加了(Q非)的低电平而M4通路). 如果存储的内容为0, 相反的电路状态将会使(BL非)为1而BL为0. 只需要(BL非)与BL有一个很小的电位差,读取的放大电路将会辨识出哪根位线是1哪根是0. 敏感度越高,读取速度越快。

简单来说,SRAM在读取之前需要对BL BLB进行预充电(precharge),    然后打开WL,然后BL,BLB才是被送入sense amp进行比较。

再来看时序图。

时序图

当sram读取之后,BL/BLB需要再次重新进行预充电,以便进行下一次读取。

那么这个min period,就是SRAM本身的delay(CLK->RD)再加上BL/BLB预充电的时间。

因此回到最初的问题。

为什么sram有个min_period的check。

答案是为了给sram的bitline进行预充电留足时间。

鸣谢

感谢群中好友 陈锋, Antenna的解答。

如需加群,可在公众号内直接与我联系。

附件

SRAM的操作

SRAM的基本单元有3种状态:standby (电路处于空闲), reading (读)与writing (修改内容). SRAM的读或写模式必须分别具有"readability"(可读)与"write stability"(写稳定).

Standby

如果字线(Word Line)没有被选为高电平, 那么作为控制用的M5与M6两个晶体管处于断路,把基本单元与位线隔离。

由M1 – M4组成的两个反相器继续保持其状态,只要保持与高、低电平的连接。

Reading

假定存储的内容为1, 即在Q处的电平为高. 读周期之初,两根位线预充值为逻辑1, 随后字线WL充高电平,使得两个访问控制晶体管M5与M6通路。

第二步是保存在Q的值传递给位线BL在它预充的电位,而泻掉(BL非)预充的值,这是通过M1与M5的通路直接连到低电平使其值为逻辑0 (即Q的高电平使得晶体管M1通路).

在位线BL一侧,晶体管M4与M6通路,把位线连接到VDD所代表的逻辑1 (M4作为P沟道场效应管,由于栅极加了(Q非)的低电平而M4通路).

如果存储的内容为0, 相反的电路状态将会使(BL非)为1而BL为0.

只需要(BL非)与BL有一个很小的电位差,读取的放大电路将会辨识出哪根位线是1哪根是0.

敏感度越高,读取速度越快。

Writing

写周期之初,把要写入的状态加载到位线。

如果要写入0,则设置(BL非)为1且BL为0。

随后字线WL加载为高电平,位线的状态被载入SRAM的基本单元。

这是通过位线输入驱动(的晶体管)被设计为比基本单元(的晶体管)更为强壮,使得位线状态可以覆盖基本单元交叉耦合的反相器的以前的状态!

STA教程分享

[ 271.396772] [C 0] [DEVAPC]: irq_number: 37 [ 271.396798] [C 0] [DEVAPC]: irq_type: 0 [ 271.396805] [C 0] [DEVAPC]: is_devapc_subsys_power_on: skip slave_type 0 power check! [ 271.396814] [C 0] [DEVAPC]: [SLAVE_TYPE_INFRA] VIO_SHIFT_STA: 0x0 [ 271.396822] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_0: 0x200, VIO_STA_0: 0x0 [ 271.396829] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_1: 0x0, VIO_STA_1: 0x0 [ 271.396836] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_2: 0x0, VIO_STA_2: 0x0 [ 271.396843] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_3: 0x0, VIO_STA_3: 0x0 [ 271.396849] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_4: 0x1f7e00, VIO_STA_4: 0x0 [ 271.396856] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_5: 0x2000, VIO_STA_5: 0x0 [ 271.396863] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_6: 0x0, VIO_STA_6: 0x0 [ 271.396869] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_7: 0x0, VIO_STA_7: 0x0 [ 271.396876] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_8: 0x0, VIO_STA_8: 0x0 [ 271.396882] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA: VIO_MASK_9: 0x1f8000, VIO_STA_9: 0x4000 [ 271.396888] [C 0] [DEVAPC]: is_devapc_subsys_power_on: skip slave_type 1 power check! [ 271.396893] [C 0] [DEVAPC]: [SLAVE_TYPE_INFRA1] VIO_SHIFT_STA: 0x0 [ 271.396899] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_0: 0x0, VIO_STA_0: 0x0 [ 271.396905] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_1: 0x0, VIO_STA_1: 0x0 [ 271.396911] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_2: 0xc000000, VIO_STA_2: 0x0 [ 271.396918] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_3: 0x0, VIO_STA_3: 0x0 [ 271.396924] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_4: 0x0, VIO_STA_4: 0x0 [ 271.396931] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_5: 0x0, VIO_STA_5: 0x0 [ 271.396937] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_6: 0x0, VIO_STA_6: 0x0 [ 271.396943] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_7: 0x0, VIO_STA_7: 0x0 [ 271.396949] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_8: 0xf0000000, VIO_STA_8: 0x10000000 [ 271.396956] [C 0] [DEVAPC]: SLAVE_TYPE_INFRA1: VIO_MASK_9: 0x3, VIO_STA_9: 0x0 [ 271.396962] [C 0] [DEVAPC]: is_devapc_subsys_power_on: skip slave_type 2 power check! [ 271.396967] [C 0] [DEVAPC]: [SLAVE_TYPE_PERI_PAR] VIO_SHIFT_STA: 0x0 [ 271.396972] [C 0] [DEVAPC]: SLAVE_TYPE_PERI_PAR: VIO_MASK_0: 0x0, VIO_STA_0: 0x0 [ 271.396979] [C 0] [DEVAPC]: SLAVE_TYPE_PERI_PAR: VIO_MASK_1: 0x0, VIO_STA_1: 0x0 [ 271.396985] [C 0] [DEVAPC]: SLAVE_TYPE_PERI_PAR: VIO_MASK_2: 0x78, VIO_STA_2: 0x10 [ 271.396992] [C 0] [DEVAPC]: is_devapc_subsys_power_on: skip slave_type 0 power check! [ 271.396997] [C 0] [DEVAPC]: SRAMROM violation is triggered [ 271.397016] [C 0] [DEVAPC]: sramrom_vio_handler, ROM violation is triggered [ 271.397021] [C 0] [DEVAPC]: sramrom_vio_handler: master_id:0x809, domain_id:0x2, rw:Read, vio_addr:0x0, vio_id:0x809 [ 271.397033] [C 0] [DEVAPC]: get_permission: cannot get sys_index & ctrl_index [ 271.397038] [C 0] [DEVAPC]: vio_addr is from on-chip SRAMROM [ 271.397044] [C 0] [DEVAPC]: catch it from INFRAAXI_MI Master is: MCU_AP_M [ 271.397049] [C 0] [DEVAPC]: Violation - slave_type:0x0, sys_index:0xffffffff, ctrl_index:0xffffffff, vio_index:0x12e [ 271.397056] [C 0] [DEVAPC]: Violation - master: MCU_AP_M access violation slave: SRAMROM [ 271.397062] [C 0] [DEVAPC]: Permission setting: NO_PERM_CTRL [ 271.397066] [C 0] [DEVAPC]: Reason: might be decode error or way_en [ 271.397071] [C 0] [DEVAPC]: Violation Type: "Decode error or way_en" [ 271.397075] [C 0] [DEVAPC]: vio_trigger_times:0 分析一下上面的日志,为什么在这个日志后,手机就重启了
最新发布
12-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值