我们一共拿到了两个版本的工具,分别是sram_dp_hsd_svt_mvt和sram_sp_hde_svt_mvt,其中dp是双端口dual port,sp是单端口single port,dp的是hsd,即high speed,sp的是hen即high density,后面的svt_mvt是管子类型。直接找到工具里面的bin,然后运行可执行文件就可以打开gui。
我们看一下这个memory compiler有没有自己的doc可以学习一手。有一本sram_sp_hde_svt_mvt_userguide。
memory compiler能吐出上面的这些文件,其中.v,.lib,.lef,.gds2,.cdl这些都是前后端的常用文件。
在views这里我们简单选择一个verilog model然后生成一下看看结果。这里的设置是:
整个文件很长,我们先看看文件头:
/* verilog_memcomp Version: c0.3.2-EAC */
/* common_memcomp Version: c0.1.0-EAC */
/* lang compiler Version: 4.1.6-EAC2 Oct 30 2012 16:32:37 */
//
// CONFIDENTIAL AND PROPRIETARY SOFTWARE OF ARM PHYSICAL IP, INC.
//
// Copyright (c) 1993 - 2024 ARM Physical IP, Inc. All Rights Reserved.
//
// Use of this Software is subject to the terms and conditions of the
// applicable license agreement with ARM Physical IP, Inc.
// In addition, this Software is protected by patents, copyright law
// and international treaties.
//
// The copyright notice(s) in this Software does not indicate actual or
// intended publication of this Software.
//
// Verilog model for High Density Single Port SRAM SVT MVT Compiler
//
// Instance Name: sram_sp_hde
// Words: 4096
// Bits: 16
// Mux: 16
// Drive: 6
// Write Mask: Off
// Write Thru: Off
// Extra Margin Adjustment: On
// Test Muxes On
// Power Gating: Off
// Retention: On
// Pipeline: Off
// Read Disturb Test: Off
//
// Creation Date: Sun Jan 14 11:45:44 2024
// Version: r0p4_02eac0
//
// Modeling Assumptions: This model supports full gate level simulation
// including proper x-handling and timing check behavior. Unit
// delay timing is included in the model. Back-annotation of SDF
// (v3.0 or v2.1) is supported. SDF can be created utilyzing the delay
// calculation views provided with this generator and supported
// delay calculators. All buses are modeled [MSB:LSB]. All
// ports are padded with Verilog primitives.
//
// Modeling Limitations: None.
//
// Known Bugs: None.
//
// Known Work Arounds: N/A
//
这里包含了模块的基本信息,比如大小,端口,模块例化名这些,以及模型仿真时的信息,可以看到是支持用sdf后仿真的。
来看一下端口定义,这是我主要关心的信息:
`ifdef POWER_PINS
module sram_sp_hde (VDDCE, VDDPE, VSSE, CENY, WENY, AY, Q, SO, CLK, CEN, WEN, A, D,
EMA, EMAW, TEN, TCEN, TWEN, TA, TD, RET1N, SI, SE, DFTRAMBYP);
`else
module sram_sp_hde (CENY, WENY, AY, Q, SO, CLK, CEN, WEN, A, D, EMA, EMAW, TEN, TCEN,
TWEN, TA, TD, RET1N, SI, SE, DFTRAMBYP);
`endif
parameter ASSERT_PREFIX = "";
parameter BITS = 16;
parameter WORDS = 4096;
parameter MUX = 16;
parameter MEM_WIDTH = 256; // redun block size 8, 128 on left, 128 on right
parameter MEM_HEIGHT = 256;
parameter WP_SIZE = 16 ;
parameter UPM_WIDTH = 3;
parameter UPMW_WIDTH = 2;
parameter UPMS_WIDTH = 0;
output CENY;
output WENY;
output [11:0] AY;
output [15:0] Q;
output [1:0] SO;
input CLK;
input CEN;
input WEN;
input [11:0] A;
input [15:0] D;
input [2:0] EMA;
input [1:0] EMAW;
input TEN;
input TCEN;
input TWEN;
input [11:0] TA;
input [15:0] TD;
input RET1N;
input [1:0] SI;
input SE;
input DFTRAMBYP;
`ifdef POWER_PINS
inout VDDCE;
inout VDDPE;
inout VSSE;
`endif
注意这里用了一个POWER_PINS的宏来规定电源引脚VDDCE,VDDPE和VSSE,我不是很懂问什么VDD会有两个,这个回头再看手册,至于数据端口包括了:
Port | Width | Direction | Function |
---|---|---|---|
CLK | 1 | input | clock |
A | 12 | input | address (A[0]=LSB) |
D | 16 | input | data inputs (D[0]=LSB) |
Q | 16 | output | data outputs (Q[0]=LSB) |
CEN | 1 | input | chip enbale, active LOW |
WEN | 1 | input | global write enable, active LOW |
这几个信号是我们建模SRAM时的基本信号,此外还有若干个额外的信号:
Port | Width | Direction | Function |
---|---|---|---|
RET1N | 1 | input | retention mode enable1, active LOW |
EMA | 3 | input | extra margin adjustment, EMA[0]=LSB |
EMAW | 2 | input | extra margin adjustment write, EMAW[0]=LSB |
TEN | 1 | input | test mode enable, active LOW. 0=test operation, 1=normal operation |
TA | 12 | input | address test input, TA[0]=LSB |
TD | 16 | input | test mode data inputs, TD[0]=LSB |
TCEN | 1 | input | chip enable test input, active LOW |
TWEN | 1 | input | write enbale test inputs, active LOW |
CENY | 1 | output | chip enbale multiplexer output |
WENY | 1 | output | write enbale multiplexer output |
AY | 12 | output | address multiplexer output, AY[0]=LSB |
SO | 2 | output | scan output bus |
SI | 2 | input | scan input bus |
SE | 1 | input | scan enable input |
DFTRAMBYP | 1 | input | test control input |
根据手册来看,如果再开一些选项还会有额外的端口产生。
先看一下Power口,VDDPE,VDDCE和VSSE,VSSE就是地,这个没什么好说的,VDDPE是periphery power supply pin,即外围电路的电源,而VDDCE是core array power supply pin,即核心阵列的供电,为什么要分成两个电源,是因为对于低功耗设计来说,在SRAM只需要保持数据不需要进行读写操作时,可以通过VDDPE给关掉,只留VDDCE保持数据。
https://blog.csdn.net/Holden_Liu/article/details/118250226
详细可见下面的描述。另外这里RET1N信号也蹦出来了,是用来辅助低功耗的信号,如果是正常模式,RET1N给1就行了,如果是切换到低功耗模式下,RET1N给0。
对于CLK,WEN,CEN,D,A,Q这些基本端口参考下面的描述就行。注意D,Q的位宽是和memory compiler设置里的number of bits以及multiplixer width要保持一致。而A决定了存储器深度,和memory compiler设置中的number of words之间相互换算关系是number of words = 2^A_width,即2的指数。
EMA口,则是用来调整信号时序margin的,只有high speed的SRAM需要用EMAS,我这里生成的SRAM是没有EMAS这个信号的,EMA[2:0]是用来减慢memory的读写操作的,增加额外的时间,EMAW[1:0]是用来写入cycle的延迟的,对于读取操作没有影响。
对于0.95V的电压来说,默认的EMA设定是EMA=011,EMAW=01。到时候用默认值就行,如果那边时序有问题就再调整。
BIST(Built-In Self Test)内建测试复选器,看底下的结构图,这里就是通过TEN来选择使用普通输入还是Test输入,Test输入有TA,TD,此外还有DFTRAMBYP 和SI两个测试输入信号,而输出AY,CENY,WENY以及SO都是测试输出信号。属于一种DFT技术。
对于BIST的详细描述可以参考这篇:https://blog.csdn.net/qq_41556273/article/details/124312359和这篇https://www.zhihu.com/tardis/zm/art/169490809?source_id=1005
这个东西在memory compiler里默认是on的,但我们应该用不到这个功能,或者说这次也没计划整的这么复杂。这几个信号我们直接挂空。
总结就是,basic信号正常给,EMA延迟信号按照默认值来,BIST信号挂空,RET1N固定给1,不做低功耗,over。然后basic信号的部分去往总线上连接就行。
标签:LSB,EMA,output,16,Memory,input,parameter,ARM,Compiler From: https://www.cnblogs.com/sasasatori/p/17964224