VERDVANA'S BLOG Verdvana

使用Memory Compiler生成ASIC Embedded Memory


1 前言

        最近自己在玩的一个模块里要用到True Dual Port RAM,它是hard macro,不像Simple Dual Port RAM或Single Port RAM那样可以用HDL设计。正好最近单位领导也让我生成芯片里用到的memory,因此想试试使用Memory Compiler来生成可综合的库文件以及仿真文件等。网上搜了搜,有两种实现方案。一种是开源的OpenRAM,但只能生成Simple Dual Port RAM;另一种是普遍使用的ARM Artisan Physical IP,据说需要从foundry提供的PDK里获得。

  • 操作系统:
    • OpenSUSE Leap 15.3
  • 开发环境:
    • OpenRAM
    • ARM Artisan Physical IP

2 OpenRAM

2.1 简介

        OpenRAM是一个开源的Memory Compiler,支持7nm的ASAP、15nm/45nm的FreePDK、350nm的MOSIS等工艺,依赖Python、Git以及开源电路仿真软件,根据输入配置,生成库文件、仿真文件和版图文件。具体的介绍和使用方法可以在OpenRAM官网查到。

2.2 使用

        关于如何使用,OpenRAM的官网Readme已经写的很清楚了,按照步骤来就没问题:

  • 安装Python3.5以上版本;
  • 安装pip;
  • 安装Ngspice,Linux版本的可以在这里找到:http://ngspice.sourceforge.net/packages.html
  • 下载OpenRAM:https://github.com/VLSIDA/OpenRAM/archive/dev.zip
  • 解压下载好的OpenRAM;
  • 在OpenRAM根目录下运行:
    sudo pip install -r requirements.txt
    
  • source setpaths.csh文件或setpaths.sh文件,以添加环境变量;
  • OpenRAM根目录下建立myconfig.py,内容为SRAM的设置:
    # Data word size
    word_size = 2
    # Number of words in the memory
    num_words = 16
    
    # Technology to use in $OPENRAM_TECH
    tech_name = "scn4m_subm"
    
    # You can use the technology nominal corner only
    nominal_corner_only = True
    # Or you can specify particular corners
    # Process corners to characterize
    # process_corners = ["SS", "TT", "FF"]
    # Voltage corners to characterize
    # supply_voltages = [ 3.0, 3.3, 3.5 ]
    # Temperature corners to characterize
    # temperatures = [ 0, 25, 100]
    
    # Output directory for the results
    output_path = "temp"
    # Output file base name
    output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
    
    # Disable analytical models for full characterization (WARNING: slow!)
    # analytical_delay = False
    
  • 设置好之后,在OpenRAM根目录下执行:
    python3 $OPENRAM_HOME/openram.py myconfig
    
  • 运行之后可以在<output_path>里得到生成的文件。

        这样可以得到memory的库文件、仿真文件。


3 ARM Artisan Physical IP

3.1 简介

        ARM Artisan Physical IP能够给SoC提供物理IP,这其中就包括嵌入式的存储器。它包含了从250nm到3nm的每个foundry的IP,而且包含单、双口SRAM、Register File、eMRAM和ROM多种Memory。最关键的是,可以申请DesignStart来免费获取这些产品的权限,这还等啥呢。

        于是我用企业邮箱申请了下DesignStart,ARM那边的人确认了下我的company entity,就通过了申请。然后通过邮件中的链接就可以访问ARM Artisan Physical IP的下载中心了:

img1

3.2 使用

        在ARM Artisan Physical IP的下载中心选择需要的foundry、工艺和memory类型,就可以下载了。例如TSMC 28nm工艺的高速Dual Port SRAM:

img2

        把下载好的压缩包在OpenSUSE里解压。文件结构如图:

img3

        在aci/sram_dp_adv/bin下直接运行sram_dp_adv,这里需要实现安装ksh。运行后发现报错:

./sram_dp_adv[76]: exec: //lib/linux/jre/bin/java: not found

        但是是可以在上面的路径下找到java的,这是因为ARM Artisan Physical IP的工具用的都是32bit的可执行文件,但系统是64bit的,因此需要安装32bit兼容库。

        这里以OpenSUSE为例,在YaST Software中下载安装这些库:

img4

        安装完之后再次运行sram_dp_adv,又报错:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/verdvana/Library/TS19CB500/aci/sram_dp_adv/lib/linux/j2re1.4.2_04/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at sun.security.action.LoadLibraryAction.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Toolkit.loadLibraries(Unknown Source)
        at java.awt.Toolkit.<clinit>(Unknown Source)
        at java.awt.Color.<clinit>(Unknown Source)
        at C084.<clinit>(Copyright (c) 1998, Artisan Components)
        at C000.a(Copyright (c) 1998, Artisan Components)
        at C142.d(Copyright (c) 1998, Artisan Components)
        at C142.b(Copyright (c) 1998, Artisan Components)
        at Main.main(Copyright (c) 1998, Artisan Components)

        这好像是它自带的jre有问题,去ORACLE官网下一个:https://www.oracle.com/java/technologies/downloads/#java8

img5

        下载好之后把里面的文件解压到./aci/sram_dp_adv/lib/linux/jre路径下,替换掉原来的文件。再次去aci/sram_dp_adv/bin下运行sram_dp_adv,终于可以打开ARM Artisan Physical IP的GUI了:

img6

        之后就很简单了,设置好参数,点“Update”;在“VIEWS”里选择要生成的文件,然后点击“Generate”,就会在当前路径下生成需要的文件了。


        告辞。