memory分为两类RAM和ROM。RAM根据读写端口个数又分为三类即单端口RAM(SP),伪双端口RAM(TP)和双端口RAM(DP)。SP只存在一个时钟和一套读写端口,读写复用地址总线,读写不能同时操作。TP存在两个时钟(读、写)和一套读写端口,但是有各自地址总线,读写可以同时操作。DP存在两个时钟和两套读写端口,每一套端口都支持读写操作,这两套操作互补影响。
一般的memory compiler提供五个ram脚本(rf_sp,sram_sp,rf_tp,sram_dp,rom)。考虑面积和性能又划分为High Speed和High Density。
伪双口ram的工作原理,开始的时候以为有两个wea使能信号,一个管写入的数据和地址,一个管读出的数据和地址。但是真正仿真后才发现只有一个wea控制信号。在clka与clkb都为高电平的前提下,当wea为0时,ram只进行写操作,不读,当wea为1时,ram同时进行写和读操作
在很多的时候,我们需要使用IP设计,比如SRAM IP(通常使用memory compiler 生成)得到的是.lib文件而不是.db文件。这时就需要Synopsys提供的library compiler工具将.lib文转为.db文件,提供给DC综合工具。library compiler工具的使用主要包含两步,读入和写出。
一般memory 大小大于1Kbit时可以考虑用SRAM代替寄存器组,面积上的话随着面积越大对应面积:SP<TD<DP。一般窄长形和宽矮型的RAM浪费的SRAM面积越多,因为大容量RAM都是由小的RAM块单元拼凑而成,不规则的窄而长或者宽而矮的RAM,都是由规则的RAM平凑而成,势必导致浪费一定的RAM面积来最终拼凑成需要的RAM size,所以在初期评估RAM size时一定要考虑RAM的形状,以求最大化提高RAM的利用率,尽量不要出现奇葩的RAM size