WSL2(数字IC设计用)安装教程

2025-08-07

参考资料:

  1. gcc特定版本Linux源码编译安装 (以gcc-8.5.0为例)_gmp-6.1.0.tar.bz2-CSDN博客

一、简介

1.1 操作系统

  • CentOS Linux release 7.9.2009 (Core) 使用cat /etc/redhat-release可查看操作系统的发行版信息

  • Windows11 24H2

  • WSL2

1.2 安装的EDA软件

  • Synopsys

    • scl 2018.06

    • scl 2021.03

    • vcs R-2020.12.SP1

    • dve R-2020.12-SP1

    • verdi R-2020.12-SP1

    • formality R-2020.09-SP3

    • icc2 R-2020.09-SP3

    • lc R-2020.09-SP3

    • prime R-2020.09-SP3

    • spyglass Q-2020.03-SP2

    • dc R-2020.09-SP4

  • Cadence

    • iscape.04.23-s012

    • confrml222

    • ddi221(genue+innovous+joules)

    • modus221

    • ssv221

    • vmanager2203

    • xcelium2209

1.3 添加的Foundry Library

  • TSMC180

    • tcb018gbwp7t_270a

1.4 释放WSL2的虚拟内存

 # 关闭wsl2
 powershell> wsl -- shutdown
 ​
 # 启动diskpart窗口
 powershell> diskpart
 ​
 # 选择虚拟磁盘
 DISKPART> select vdisk file="your path"("D:\CentOS7\ext4.vhdx")
 DiskPart 已成功选择虚拟磁盘文件
 ​
 # 压缩虚拟磁盘
 DISKPART> compact vdisk
 100 百分比已完成
 DiskPart 已成功压缩虚拟磁盘文件
 ​
 #  分离虚拟磁盘
 DISKPART> detach vdisk
 虚拟磁盘服务错误:
 虚拟磁盘已经分离。

1.5 迁移WSL2虚拟磁盘

 # 关闭wsl2
 wsl --shutdown
 ​
 # 查看子系统名称
 wsl -l -v
 ​
 # 导出虚拟磁盘*.vhdx到指定路径下*.tar中
 wsl --export CentOS7 I:\CentOS7\CentOS7.tar
 ​
 # 注销子系统
 wsl --unregister CentOS7
 ​
 # 在想要的路径下导入子系统
 wsl --import CentOS7 I:\CentOS7\ I:\CentOS7\CentOS7.tar

1.6 安装高版本gcc并管理

1.6.1 安装高版本gcc(例:gcc-8.5.0)

  1. 下载源码:清华源下载gcc-8.5.0.tar.gztar -zxvf gcc-8.5.0.tar.gz解压得到gcc-8.5.0源码文件夹

  2. 下载依赖:进入gcc-8.5.0源码文件夹,找到contrib/download_prerequisites,使用文本编辑器打开,可以看到依赖文件

     gmp='gmp-6.1.0.tar.bz2'
     mpfr='mpfr-3.1.4.tar.bz2'
     mpc='mpc-1.0.3.tar.gz'
     isl='isl-0.18.tar.bz2'

    清华源可以找到gmp,mpfr,mpc,在Index of /pub/gcc/infrastructure可以找到isl,将压缩包下载好后移动到gcc-8.5.0源码文件夹下。在gcc-8.5.0源码文件夹下启动终端,输入contrib/download_prerequisites,返回:

     gmp-6.1.0.tar.bz2: OK
     mpfr-3.1.4.tar.bz2: OK
     mpc-1.0.3.tar.gz: OK
     isl-0.18.tar.bz2: OK
     All prerequisites downloaded successfully.

    这一步可能会有报错:

     tar (child): lbzip2: Cannot exec: No such file or directory
     tar (child): Error is not recoverable: exiting now
     tar: Child returned status 2
     tar: Error is not recoverable: exiting now

    原因是没有安装bzip2软件,在终端输入sudo yum install -y bzip2即可

  3. 编译安装:在gcc-8.5.0源码文件夹下打开终端

     # 将源码文件与临时文件隔离开
     mkdir build & cd build
     ​
     # 配置编译方式
     ../configure --prefix=/opt/gcc-8.5.0 --enable-languages=c,c++ --disable-multilib
     # 其中 --prefix 指定gcc安装位置,可以自定义,如上述命令将在/opt下创建gcc-8.5.0文件夹并安装于此处。
     #–enable-languages 指定gcc支持的语言
     #–disable-multilib 表示不生成交叉编译器(如果均在一种架构平台上编译并运行,如x86上,则无需交叉编译器)
     ​
     # 使用make编译
     sudo make -j8
     ​
     # 安装
     sudo make install

1.6.2 使用update-alternatives管理gcc版本

  1. 备份原gcc(gcc-4.8.5):切换到root用户下,进入/usr/bin文件夹,找到

     gcc
     gcc-ar
     gcc-nm
     gcc-ranlib
     g++
     gcov

    将其一一备份(加后缀.bak

  2. 注册不同版本的gcc:使用update-alternatives创建软链接并连接到两个不同版本的gcc

     # 注册gcc-8.5.0
     sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-8.5.0/bin/gcc 100 --slave /usr/bin/g++ g++ /opt/gcc-8.5.0/bin/g++ --slave /usr/bin/gcov gcov /opt/gcc-8.5.0/bin/gcov
     ​
     # 注册gcc-4.8.5
     sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc.bak 80 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar.bak --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm.bak --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib.bak --slave /usr/bin/g++ g++ /usr/bin/g++.bak --slave /usr/bin/gcov gcov /usr/bin/gcov.bak
  3. 查看并切换版本:

    $sudo update-alternatives --config gcc
    
    There are 2 programs which provide 'gcc'.
    
      Selection    Command
    -----------------------------------------------
    *+ 1           /opt/gcc-8.5.0/bin/gcc
       2           /usr/bin/gcc.bak
    
    Enter to keep the current selection[+], or type selection number: 

    输入Selection下方的编号可以自由选择版本

二、软件安装

2.1Synopsys系列的安装

  • 使用SynopsysInstaller安装,软件依赖:

2.2Cadence系列的安装

  • 使用IScape安装,安装过程需要依赖如下:

xterm.x86_64
tcsh.x86_64
ksh.x86_64
java-1.8.0-openjdk.x86_64
glibc.i686
glibc-devel.i686
  • Cadence软件依赖:

apr-util.x86_64
apr.x86_64
compat-db47.x86_64
elfutils-libelf.i686
elfutils-libelf.x86_64
expat.i686
expat.x86_64
gdb.x86_64
glibc-devel.i686
glibc-devel.x86_64
glibc.i686
glibc.x86_64
ksh.x86_64
libjpeg-turbo.i686
libjpeg-turbo.x86_64
libpng.i686
libpng.x86_64
libXp.i686
libXp.x86_64
libXScrnSaver.x86_64
mesa-dri-drivers.x86_64
mesa-libGL.i686
mesa-libGLU.i686
mesa-libGLU.x86_64
mesa-libGL.x86_64
motif.i686
motif.x86_64
openssl-devel.x86_64
redhat-lsb.i686
redhat-lsb.x86_64
xorg-x11-fonts-ISO8859-1-75dpi.noarch
xorg-x11-fonts-misc.noarch
xorg-x11-server-Xvfb.x86_64
xterm.x86_64

本人在启动iscape的时候遇到了问题:

Initializing InstallScape using JVM at /home/sxc/Packs/Cadence/iscape.04.23-s012/runtime/LNX86/bin/java. This might take some time...
Exception in thread "main" java.lang.NoClassDefFoundError: Files/PowerShell/7:/mnt/c/Program
Caused by: java.lang.ClassNotFoundException: Files.PowerShell.7:.mnt.c.Program
       at java.net.URLClassLoader$1.run(Unknown Source)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(Unknown Source)
       at java.lang.ClassLoader.loadClass(Unknown Source)
       at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
       at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Files/PowerShell/7:/mnt/c/Program.  Program will exit.
Failed with InstallScape JVM.
Now loading System JVM...
Error: Could not find or load main class Files.PowerShell.7:.mnt.c.Program
Error:
/usr/bin/java
Could not use JVM packaged with Installcape. The Java in your path did not work or could not find Java in your path.  Ensure that Java 1.6 or later is in your PATH environment variable and restart InstallScape.

网上搜到的一个答案:在root身份下运行yum install -y java*安装java相关的包。本人试过之后并没有解决。

本人的解决方案:以sudo ./iscape.sh启动,可以正常启动并且安装,不知道会不会有什么隐患。不论是以sxc身份还是root身份启动均失败,很奇怪,按道理root应该是可以启动的。

三、软件环境配置

3.1 总环境配置

  • /home/sxc/.cshrc

# .cshrc

# Uncomment the following line if you don't like systemctl's auto-paging feature:

# User specific aliases and functions
alias gv    'gvim'
alias g     'gvim'
alias la    'ls -a'
alias ..    'cd ..'
alias vc    'gvim ~/.cshrc'
alias sc    'source ~/.cshrc'
alias cd    'cd \!*; ls'
alias python    'python3'
alias pip       'pip3'
# alias code  '/mnt/d/VSCode/Code.exe'
# cd() { builtin cd "$@" && ls; }

bindkey '\e[1~' beginning-of-line      # Home
bindkey '\e[3~' delete-char            # Delete
bindkey '\e[4~' end-of-line            # End
bindkey "^W" backward-delete-word      # Delete
bindkey -k up history-search-backward  # PageUp
bindkey -k down history-search-forward # PageDown

set prompt="%n@%m:%~%#"

setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
setenv GREP_OPTIONS --color=auto
set autolist
set correct = cmdset noclobber

source ~/.csh_synopsys

sudo ip link add vmnic0 type dummy
sudo ip link set vmnic0 addr 00:15:5d:f2:bc:d8
lmg_synopsys
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

3.2 Synopsys软件环境配置

  • /home/sxc/.csh_synopsys

#!csh
# Synopsys EDA Tool Settings

setenv SNPS_TOOLS_HOME  "/home/sxc/Tools/Synopsys"
setenv LIB_HOME         "/home/sxc/Libs"

setenv DVE_HOME         "${SNPS_TOOLS_HOME}/vcs/R-2020.12-SP1"
setenv VCS_HOME         "${SNPS_TOOLS_HOME}/vcs/R-2020.12-SP1"
setenv VERDI_HOME       "${SNPS_TOOLS_HOME}/verdi/R-2020.12-SP1"
setenv SCL_HOME         "${SNPS_TOOLS_HOME}/scl/2021.03"
setenv FM_HOME          "${SNPS_TOOLS_HOME}/fm/R-2020.09-SP3"
setenv ICC2_HOME        "${SNPS_TOOLS_HOME}/icc2/R-2020.09-SP3"
setenv LC_HOME          "${SNPS_TOOLS_HOME}/lc/R-2020.09-SP3"
setenv PT_HOME          "${SNPS_TOOLS_HOME}/prime/R-2020.09-SP3"
setenv SG_HOME          "${SNPS_TOOLS_HOME}/spyglass/Q-2020.03-SP2/SPYGLASS_HOME"
setenv DC_HOME          "${SNPS_TOOLS_HOME}/syn/R-2020.09-SP4"
setenv LD_LIBRARY_PATH  "${SNPS_TOOLS_HOME}/verdi/R-2020.12-SP1/share/PLI/VCS/LINUX64"

#dve
setenv  PATH        "${PATH}:${VCS_HOME}/gui/dve/bin"
alias   dve         'dve -full64'

#VCS
setenv  PATH        "${PATH}:${VCS_HOME}/bin"
alias   vcs         'vcs'

#VERDI
setenv  PATH        "${PATH}:${VERDI_HOME}/bin"
alias   verdi       'verdi'
alias   fsdb2vcd    'fsdb2vcd'

#scl
setenv  PATH        "${PATH}:${SCL_HOME}/linux64/bin"
setenv  VCS_ARCH_OVERRIDE   "linux"

#Formality
setenv  PATH        "${PATH}:${FM_HOME}/bin"
alias   fm          'fm_shell'

#ICC2
setenv  PATH        "${PATH}:${ICC2_HOME}/bin"
alias   icc2        'icc2_shell'

#Library Compiler
setenv  PATH        "${PATH}:${LC_HOME}/bin"
alias   lc          'lc_shell'

#Prime Time
setenv  PATH        "${PATH}:${PT_HOME}/bin"
alias   pt          'pt_shell'

#Spyglass
setenv  PATH        "${PATH}:${SG_HOME}/bin"
alias   sg          'spyglass'

#Design Compiler
setenv  PATH        "${PATH}:${DC_HOME}/bin"
alias   dc          'dc_shell'


#LICENCE
setenv  LM_LICENSE_FILE "27000@DESKTOP-SIR22V0"
alias lmg_synopsys  '/home/sxc/Tools/scl/2021.03/linux64/bin/lmgrd -c /home/sxc/Tools/scl/2021.03/admin/license/Synopsys.dat -l ~/lmg.log'

3.3 Cadence软件环境配置

  • /home/sxc/.csh_cadence

#!csh
# Cadence EDA Tool Settings

setenv CDS_TOOLS_HOME  "/home/sxc/Tools/Cadence"

setenv XCELIUM_HOME     "${CDS_TOOLS_HOME}/XCELIUM2209"
setenv DDI_HOME         "${CDS_TOOLS_HOME}/DDI221"
setenv CONFRML_HOME     "${CDS_TOOLS_HOME}/CONFRML222"
setenv MODUS_HOME       "${CDS_TOOLS_HOME}/MODUS221"
setenv SSV_HOME         "${CDS_TOOLS_HOME}/SSV221"
setenv VMANAGER_HOME    "${CDS_TOOLS_HOME}/VMANAGER2203"

# license
setenv CDS_LIC_FILE     "${CDS_TOOLS_HOME}/license/license.dat"

# Xcelium
setenv  PATH        "${PATH}:${XCELIUM_HOME}/tools.lnx86/bin"
setenv  VRST_HOME   "${XCELIUM_HOME}"
setenv  IUSHOME     "${XCELIUM_HOME}"

# DDI(GENUS/INNOVUS/JALOUS)
setenv  GENUS_HOME      "${DDI_HOME}/GENUS221"
setenv  INNOVUS_HOME    "${DDI_HOME}/INNOVUS221"
setenv  PATH            "${PATH}:${GENUS_HOME}/tools.lnx86/bin"
setenv  PATH            "${PATH}:${INNOVUS_HOME}/tools.lnx86/bin"

# CONFRML
setenv  PATH        "${PATH}:${CONFRML_HOME}/tools.lnx86/bin"

# MODUS
setenv  PATH        "${PATH}:${MODUS_HOME}/tools.lnx86/bin"

# SSV
setenv  PATH        "${PATH}:${SSV_HOME}/tools.lnx86/bin"

# VMANAGER
setenv  PATH        "${PATH}:${VMANAGER_HOME}/bin"

foreach t (xrun imc modus genus lec innovus tempus)
    echo "Found $t at `which $t` "
end

四、软件Crack及License制作

五、Vscode远程访问WSL

5.1问题汇总

  1. Vscode图形化界面创建文件夹和文件,所有者为root,使用sudo chown -R user filename(dirname)可以递归的修改文件夹以及其中文件的所有者