使用Memory Compiler生成ASIC Embedded Memory
19 Dec 2021 3499字 12分 次 Linux Digital IC Design打赏作者 CC BY 4.0 (除特别声明或转载文章外)
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的下载中心了:
3.2 使用
在ARM Artisan Physical IP的下载中心选择需要的foundry、工艺和memory类型,就可以下载了。例如TSMC 28nm工艺的高速Dual Port SRAM:
把下载好的压缩包在OpenSUSE里解压。文件结构如图:
在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中下载安装这些库:
安装完之后再次运行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
下载好之后把里面的文件解压到./aci/sram_dp_adv/lib/linux/jre
路径下,替换掉原来的文件。再次去aci/sram_dp_adv/bin
下运行sram_dp_adv
,终于可以打开ARM Artisan Physical IP的GUI了:
之后就很简单了,设置好参数,点“Update”;在“VIEWS”里选择要生成的文件,然后点击“Generate”,就会在当前路径下生成需要的文件了。
告辞。