SRAM 替换经验总结

📍前言

在芯片设计中使用SRAM 进行数据的缓存是比不可少的,在后端实现时需要根据具体的工艺库完成对SRAM 的替换,mem 主要包括2种类型:单口sram和双口sram。这里把替换前的SRAM 称为LM(local memory),一般是比较大的sim-model ,是纯RTL 代码做功能实现;替换后的mem 称为IM(implemented memory),是根据工艺库选出来的真实的mem,也是最终流片用的。

sram 时序图

对于写操作:当拍将写数据送到数据线上,对于读操作,需要下一拍才能出数据

替换步骤

1、查看mem.list ,整理所有用到的LM 根据工艺要求(在mem compiler中进行选型,一般需要考虑PPA ,选出合适的mem),这个过程可能需要对mem 进行拆分。

2、填写mem request 需求表,让负责维护SRAM 的同事生成mem_wrap(包括用于仿真和用于综合的)

3、将所有的LM 替换成IM,并完成质量检查和功能仿真,确认替换无误。

如果LM 本身比较小,是可以直接在mem compiler找到对应大小的IM ,这种替换比较简单,这篇文章主要分享:针对比较大的LM 需要拆解成比较小的IM时的经验

拆分包括对地址和数据两种方式,下面分别展开说。

  • 数据位宽进行拆分,一般需要将数据的高位和低位分别放在不同的IM 中,这种拆分比较简单,但需要注意如果有写数据的mask ,需要进行适配,确保maks grant 的bits 是一样的。 对于SRAM 的使能信号和控制信号大都是低有效的,替换时需要对接口进行取反。 举个例子:

    替换前(原代码):

    module Sifive_Tile_nlpArray_0_ext
    input RW_clk,
    input [5:0] RW0_addr;
    input RW0_en,
    input RW0_wmode,
    input [3:0] RW0_wmask,
    input [115:0] RW0_wdata,
    output [115:0] RW0_rdata);
    
    reg reg_RW0_ren;
    reg [5:0] reg_RW0_addr;
    reg [115:0] ram[63:0];
    integer i;
    always@(posedge clk)
    	reg_RW0_r  en < = RW0_en &&am
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值