diff options
-rw-r--r-- | Ubuntu/sky130/VSD_Digital_IP.tar.xz | bin | 0 -> 50692 bytes | |||
-rwxr-xr-x | Ubuntu/sky130/install-nghdl.sh | 336 | ||||
-rw-r--r-- | Windows/sky130/VSD_Digital_IP.7z | bin | 0 -> 48688 bytes | |||
-rw-r--r-- | Windows/sky130/nghdl-setup-script.nsi | 254 |
4 files changed, 590 insertions, 0 deletions
diff --git a/Ubuntu/sky130/VSD_Digital_IP.tar.xz b/Ubuntu/sky130/VSD_Digital_IP.tar.xz Binary files differnew file mode 100644 index 0000000..1c2111a --- /dev/null +++ b/Ubuntu/sky130/VSD_Digital_IP.tar.xz diff --git a/Ubuntu/sky130/install-nghdl.sh b/Ubuntu/sky130/install-nghdl.sh new file mode 100755 index 0000000..6443ea6 --- /dev/null +++ b/Ubuntu/sky130/install-nghdl.sh @@ -0,0 +1,336 @@ +#!/bin/bash +#============================================================== +# FILE: install-nghdl.sh +# +# USAGE: ./install-nghdl.sh --install +# OR +# ./install-nghdl.sh --uninstall +# +# DESCRIPTION: Installation script for Ngspice, GHDL and +# Verilator simulators (NGHDL), VSD Digital IPs +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Fahim Khan, Rahul Paknikar, Sumanto Kar +# ORGANIZATION: eSim Team, FOSSEE at IIT Bombay +# CREATED: Tuesday 02 December 2014 17:01 +# REVISION: Tuesday 13 September 2022 01:35 +#============================================================== + +nghdl="nghdl-simulator" +ghdl="ghdl-0.37" +verilator="verilator-4.210" +llvm_version="9" +config_dir="$HOME/.nghdl" +config_file="config.ini" +src_dir=`pwd` + +# Will be used to take backup of any file +sysdate="$(date)" +timestamp=`echo $sysdate|awk '{print $3"_"$2"_"$6"_"$4 }'` + + +# All functions goes here + +error_exit() { + echo -e "\n\nError! Kindly resolve above error(s) and try again." + echo -e "\nAborting Installation...\n" +} + + +function installDependency +{ + + echo "Installing dependencies for $ghdl LLVM................" + + echo "Installing Make..........................................." + sudo apt install -y make + + echo "Installing GNAT..........................................." + sudo apt install -y gnat + + echo "Installing LLVM-${llvm_version}........................................" + sudo apt install -y llvm-${llvm_version} llvm-${llvm_version}-dev + + echo "Installing Clang.........................................." + sudo apt install -y clang + + echo "Installing Zlib1g-dev....................................." + sudo apt install -y zlib1g-dev + + # Specific dependency for canberra-gtk modules + echo "Installing Gtk Canberra modules..........................." + sudo apt install -y libcanberra-gtk-module libcanberra-gtk3-module + + # Specific dependency for nvidia graphic cards + echo "Installing graphics dependency for Ngspice source build" + echo "Installing libxaw7........................................" + sudo apt install -y libxaw7 + + echo "Installing libxaw7-dev...................................." + sudo apt install -y libxaw7-dev + + + echo "Installing dependencies for $verilator...................." + if [[ -n "$(which apt 2> /dev/null)" ]] + then + # Ubuntu + sudo apt install -y make autoconf g++ flex bison + else [[ -n "$(which yum 2> /dev/null)" ]] + # Ubuntu + sudo yum install make autoconf flex bison which -y + sudo yum groupinstall 'Development Tools' -y + fi + +} + + +function installGHDL +{ + + echo "Installing $ghdl LLVM................................." + tar -xJf $ghdl.tar.xz + echo "$ghdl successfully extracted" + echo "Changing directory to $ghdl installation" + cd $ghdl/ + echo "Configuring $ghdl build as per requirements" + chmod +x configure + # Other configure flags can be found at - https://github.com/ghdl/ghdl/blob/master/configure + ./configure --with-llvm-config=/usr/bin/llvm-config-${llvm_version} + echo "Building the install file for $ghdl LLVM" + make + sudo make install + + # set +e # Temporary disable exit on error + # trap "" ERR # Do not trap on error of any command + + # echo "Removing unused part of $ghdl LLVM" + # sudo rm -rf ../$ghdl + + # set -e # Re-enable exit on error + # trap error_exit ERR + + echo "GHDL installed successfully" + cd ../ + +} + + +function installVerilator +{ + + echo "Installing $verilator......................." + tar -xJf $verilator.tar.xz + echo "$verilator successfully extracted" + echo "Changing directory to $verilator installation" + cd $verilator + echo "Configuring $verilator build as per requirements" + chmod +x configure + ./configure + make -j$(nproc) + sudo make install + echo "Removing the unessential verilator files........" + rm -r docs + rm -r examples + rm -r include + rm -r test_regress + rm -r bin + ls -1 | grep -E -v 'config.status|configure.ac|Makefile.in|verilator.1|configure|Makefile|src|verilator.pc' | xargs rm -f + #sudo rm -v -r'!("config.status"|"configure.ac"|"Makefile.in"|"verilator.1"|"configure"|"Makefile"|"src"|"verilator.pc")' + + echo "Verilator installed successfully" + cd ../ + +} + + + +function loadDigitalIP +{ + + echo "Loading Digital IPs........................." + tar -xJf VSD_Digital_IP.tar.xz + + cd VSD_Digital_IP/ + + # cat vsdips.lib >> /usr/share/kicad/library/eSim_Ngveri.lib + # rm vsdips.lib + + IPs=$(find * -maxdepth 0 -type d) + + cp -r * $HOME/$nghdl/src/xspice/icm/Ngveri/ + cp -r $(echo $IPs | cut --delimiter " " --fields 1)/verilated.o $HOME/$nghdl/src/xspice/icm/Ngveri/ + mkdir -p $HOME/$nghdl/release/src/xspice/icm/Ngveri/ + mv * $HOME/$nghdl/release/src/xspice/icm/Ngveri/ + for i in $IPs; do echo $i >> $HOME/$nghdl/src/xspice/icm/Ngveri/modpath.lst; done + + cd ../ + rm -rf VSD_Digital_IP/ + +} + + +function installNGHDL +{ + + echo "Installing NGHDL........................................" + + # Extracting NGHDL to Home Directory + cd $src_dir + tar -xJf $nghdl-source.tar.xz -C $HOME + mv $HOME/$nghdl-source $HOME/$nghdl + + loadDigitalIP + + echo "NGHDL extracted sucessfully to $HOME" + # Change to nghdl directory + cd $HOME/$nghdl + # Make local install directory + mkdir -p install_dir + # Make release directory for build + mkdir -p release + # Change to release directory + cd release + echo "Configuring NGHDL..........." + sleep 2 + + chmod +x ../configure + ../configure --enable-xspice --disable-debug --prefix=$HOME/$nghdl/install_dir/ --exec-prefix=$HOME/$nghdl/install_dir/ + + # Adding patch to Ngspice base code + # cp $src_dir/src/outitf.c $HOME/$nghdl/src/frontend + + make -j$(nproc) + make install + + # Make it executable + sudo chmod 755 $HOME/$nghdl/install_dir/bin/ngspice + + set +e # Temporary disable exit on error + trap "" ERR # Do not trap on error of any command + + echo "Removing previously installed Ngspice (if any)" + sudo apt-get purge -y ngspice + + echo "NGHDL installed sucessfully" + echo "Adding softlink for the installed Ngspice" + + # Add symlink to the path + sudo rm -f /usr/bin/ngspice + + set -e # Re-enable exit on error + trap error_exit ERR + + sudo ln -sf $HOME/$nghdl/install_dir/bin/ngspice /usr/bin/ngspice + echo "Added softlink for Ngspice....." + +} + + +function createConfigFile +{ + + # Creating config.ini file and adding configuration information + # Check if config file is present + if [ -d $config_dir ];then + rm $config_dir/$config_file && touch $config_dir/$config_file + else + mkdir $config_dir && touch $config_dir/$config_file + fi + + echo "[NGHDL]" >> $config_dir/$config_file + echo "NGHDL_HOME = $HOME/$nghdl" >> $config_dir/$config_file + echo "DIGITAL_MODEL = %(NGHDL_HOME)s/src/xspice/icm" >> $config_dir/$config_file + echo "RELEASE = %(NGHDL_HOME)s/release" >> $config_dir/$config_file + echo "[SRC]" >> $config_dir/$config_file + echo "SRC_HOME = $src_dir" >> $config_dir/$config_file + echo "LICENSE = %(SRC_HOME)s/LICENSE" >> $config_dir/$config_file + +} + + +function createSoftLink +{ + # Make it executable + sudo chmod 755 $src_dir/src/ngspice_ghdl.py + + # Creating softlink + cd /usr/local/bin + if [[ -L nghdl ]];then + echo "Symlink was already present" + sudo unlink nghdl + fi + + sudo ln -sf $src_dir/src/ngspice_ghdl.py nghdl + echo "Added softlink for NGHDL....." + + cd $pwd + +} + + +##################################################################### +# Script start from here # +##################################################################### + +### Checking if file is passsed as argument to script + +if [ "$#" -eq 1 ];then + option=$1 +else + echo "USAGE : " + echo "./install-nghdl.sh --install" + exit 1; +fi + +## Checking flags +if [ $option == "--install" ];then + + set -e # Set exit option immediately on error + set -E # inherit ERR trap by shell functions + + # Trap on function error_exit before exiting on error + trap error_exit ERR + + #Calling functions + installDependency + if [ $? -ne 0 ];then + echo -e "\n\n\nERROR: Unable to install required packages. Please check your internet connection.\n\n" + exit 0 + fi + installGHDL + installVerilator + installNGHDL + createConfigFile + createSoftLink + +elif [ $option == "--uninstall" ];then + sudo rm -rf $HOME/$nghdl $HOME/.nghdl /usr/share/kicad/library/eSim_Nghdl.lib /usr/local/bin/nghdl /usr/bin/ngspice + + echo "Removing libxaw7-dev..............." + sudo apt purge -y libxaw7-dev + + echo "Removing LLVM......................" + sudo apt-get purge -y llvm-${llvm_version} llvm-${llvm_version}-dev + + echo "Removing GNAT......................" + sudo apt purge -y gnat + + echo "Removing GHDL......................" + cd $ghdl/ + sudo make uninstall + cd ../ + sudo rm -rf $ghdl/ + # sudo rm -rf /usr/local/bin/ghdl /usr/local/bin/ghdl1-llvm /usr/local/lib/ghdl /usr/local/lib/libghdlvpi.so /usr/local/include/vpi_user.h + + echo "Removing Verilator................." + cd $verilator/ + sudo make uninstall + cd ../ + sudo rm -rf $verilator/ +else + echo "Please select the proper operation." + echo "--install" + echo "--uninstall" +fi diff --git a/Windows/sky130/VSD_Digital_IP.7z b/Windows/sky130/VSD_Digital_IP.7z Binary files differnew file mode 100644 index 0000000..0b31605 --- /dev/null +++ b/Windows/sky130/VSD_Digital_IP.7z diff --git a/Windows/sky130/nghdl-setup-script.nsi b/Windows/sky130/nghdl-setup-script.nsi new file mode 100644 index 0000000..2f5b8dc --- /dev/null +++ b/Windows/sky130/nghdl-setup-script.nsi @@ -0,0 +1,254 @@ +!include "CPUFeatures.nsh"
+!include "zipdll.nsh"
+
+;-----------------------------------------------------------------------------------------
+; String replacement function
+!define StrRep "!insertmacro StrRep"
+!macro StrRep output string old new
+ Push `${string}`
+ Push `${old}`
+ Push `${new}`
+ !ifdef __UNINSTALL__
+ Call un.StrRep
+ !else
+ Call StrRep
+ !endif
+ Pop ${output}
+!macroend
+
+!macro Func_StrRep un
+ Function ${un}StrRep
+ Exch $R2 ;new
+ Exch 1
+ Exch $R1 ;old
+ Exch 2
+ Exch $R0 ;string
+ Push $R3
+ Push $R4
+ Push $R5
+ Push $R6
+ Push $R7
+ Push $R8
+ Push $R9
+
+ StrCpy $R3 0
+ StrLen $R4 $R1
+ StrLen $R6 $R0
+ StrLen $R9 $R2
+ loop:
+ StrCpy $R5 $R0 $R4 $R3
+ StrCmp $R5 $R1 found
+ StrCmp $R3 $R6 done
+ IntOp $R3 $R3 + 1 ;move offset by 1 to check the next character
+ Goto loop
+ found:
+ StrCpy $R5 $R0 $R3
+ IntOp $R8 $R3 + $R4
+ StrCpy $R7 $R0 "" $R8
+ StrCpy $R0 $R5$R2$R7
+ StrLen $R6 $R0
+ IntOp $R3 $R3 + $R9 ;move offset by length of the replacement string
+ Goto loop
+ done:
+
+ Pop $R9
+ Pop $R8
+ Pop $R7
+ Pop $R6
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Push $R0
+ Push $R1
+ Pop $R0
+ Pop $R1
+ Pop $R0
+ Pop $R2
+ Exch $R1
+ FunctionEnd
+!macroend
+!insertmacro Func_StrRep ""
+!insertmacro Func_StrRep "un."
+;-----------------------------------------------------------------------------------------
+
+;-----------------------------------------------------------------------------------------
+; NGHDL installation macro
+Section "nghdl-loadsource"
+ SetOutPath $EXEDIR
+
+ File "ghdl.7z"
+ File "verilator.7z"
+ File "mingw64.7z"
+ File "MSYS.7z"
+ File "nghdl.7z"
+ File "nghdl-simulator.7z"
+ File "VSD_Digital_IP.7z"
+SectionEnd
+
+Section "nghdl"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\nghdl.7z" "Extracting NGHDL %s..."
+ EnVar::SetHKLM
+ DetailPrint "EnVar::SetHKLM"
+ EnVar::AddValue "Path" "$INSTDIR\eSim\nghdl\src"
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+ Delete "$EXEDIR\nghdl.7z"
+SectionEnd
+
+Section "msys2"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\MSYS.7z" "Extracting MSYS2 %s..."
+ EnVar::SetHKLM
+ EnVar::AddValue "Path" "$INSTDIR\MSYS\usr\bin"
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+ Delete "$EXEDIR\MSYS.7z"
+SectionEnd
+
+Section "mingw64"
+ SetOutPath $INSTDIR\MSYS
+ Nsis7z::ExtractWithDetails "$EXEDIR\mingw64.7z" "Extracting MinGW %s..."
+ EnVar::SetHKLM
+ EnVar::AddValue "Path" "$INSTDIR\MSYS\mingw64\bin"
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+ Delete "$EXEDIR\mingw64.7z"
+SectionEnd
+
+Section "ghdl"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\ghdl.7z" "Extracting GHDL %s..."
+ ;EnVar::SetHKLM
+ ;EnVar::AddValue "Path" "$INSTDIR\mingw64\GHDL\bin"
+ ;Pop $0
+ ;DetailPrint "EnVar::AddValue returned=|$0|"
+ CopyFiles "$INSTDIR\GHDL\bin\*" "$INSTDIR\MSYS\mingw64\bin\"
+ CopyFiles "$INSTDIR\GHDL\include\*" "$INSTDIR\MSYS\mingw64\include\"
+ CopyFiles "$INSTDIR\GHDL\lib\*" "$INSTDIR\MSYS\mingw64\lib\"
+ RMDir /r "$INSTDIR\GHDL"
+ Delete "$EXEDIR\ghdl.7z"
+SectionEnd
+
+Section "verilator"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\verilator.7z" "Extracting Verilator %s..."
+ CopyFiles "$INSTDIR\verilator\bin\*" "$INSTDIR\MSYS\mingw64\bin\"
+ CopyFiles "$INSTDIR\verilator\share\verilator\bin\*" "$INSTDIR\MSYS\mingw64\bin\"
+ CopyFiles "$INSTDIR\verilator\share\verilator\include\*" "$INSTDIR\MSYS\mingw64\include\"
+ CopyFiles "$INSTDIR\verilator\share\verilator\examples\*" "$INSTDIR\MSYS\mingw64\examples\"
+ CopyFiles "$INSTDIR\verilator\share\verilator\verilator-config.cmake" "$INSTDIR\MSYS\mingw64\"
+ CopyFiles "$INSTDIR\verilator\share\verilator\verilator-config-version.cmake" "$INSTDIR\MSYS\mingw64\"
+ CopyFiles "$INSTDIR\verilator\share\pkgconfig" "$INSTDIR\MSYS\mingw64\"
+ RMDir /r "$INSTDIR\verilator"
+ Delete "$EXEDIR\verilator.7z"
+SectionEnd
+
+Section "envar-refresh"
+ ReadEnvStr $R0 "PATH"
+ StrCpy $R0 "$R0;$INSTDIR\eSim\nghdl\src;$INSTDIR\MSYS\mingw64\bin;$INSTDIR\MSYS\usr\bin;"
+ System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("PATH", R0).r0'
+SectionEnd
+
+Section "install-nghdl-simulator"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\nghdl-simulator.7z" "Extracting NGHDL Simulator %s..."
+
+ ;CopyFiles $INSTDIR\eSim\nghdl\src\outitf.c $INSTDIR\nghdl-simulator\src\frontend
+
+ CopyFiles "$INSTDIR\MSYS\mingw64\x86_64-w64-mingw32\lib\libws2_32.a" "$INSTDIR\eSim\nghdl\src\ghdlserver"
+
+ SetOutPath $INSTDIR\nghdl-simulator
+ CreateDirectory $INSTDIR\nghdl-simulator\release
+ SetOutPath $INSTDIR\nghdl-simulator\release
+
+ Var /GLOBAL shellpath
+ Var /GLOBAL shellpath1
+ Var /GLOBAL cpucores
+
+ ${CPUFeatures.GetCount} $cpucores
+
+ StrCpy $shellpath $INSTDIR
+
+ ${StrRep} '$shellpath1' '$shellpath' '\' '/'
+
+ ;FileOpen $0 "$INSTDIR\nghdl-simulator\release\installngspice.sh" w
+ ;FileWrite $0 `../configure --with-wingui --enable-xspice --disable-debug --prefix=$shellpath1/nghdl-simulator/install_dir --exec-prefix=$shellpath1/nghdl-simulator/install_dir &&$\n`
+ ;FileWrite $0 `make -j$cpucores &&$\n`
+ ;FileWrite $0 `make install$\n`
+ ;FileClose $0
+
+ ;nsExec::ExecToLog "$INSTDIR\mingw64\msys\bin\bash.exe installngspice.sh"
+ ;Delete $INSTDIR\nghdl-simulator\release\installngspice.sh
+ Delete "$EXEDIR\nghdl-simulator.7z"
+
+ SetOutPath $INSTDIR
+
+ EnVar::SetHKLM
+ EnVar::AddValue "Path" "$INSTDIR\nghdl-simulator\bin"
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+SectionEnd
+
+Section "load-digital-ip"
+ SetOutPath $INSTDIR
+ Nsis7z::ExtractWithDetails "$EXEDIR\VSD_Digital_IP.7z" "Extracting Digital IPs %s..."
+
+ CopyFiles "$INSTDIR\VSD_Digital_IP\*" "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\"
+ CopyFiles "$INSTDIR\VSD_Digital_IP\*" "$INSTDIR\nghdl-simulator\release\src\xspice\icm\Ngveri\"
+
+ FindFirst $0 $1 "$INSTDIR\VSD_Digital_IP\*.*"
+ loop:
+ StrCmp $1 "" done
+ ;DetailPrint "Subdir found: $1"
+
+ StrCmp $1 "." skip
+ StrCmp $1 ".." skip
+ StrCmp $1 "verilated.o" skip
+
+ FileOpen $2 "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\modpath.lst" a
+ FileSeek $2 0 END
+ FileWrite $2 `$1$\n`
+ FileClose $2
+
+ skip:
+ FindNext $0 $1
+ Goto loop
+ done:
+ FindClose $0
+
+ CopyFiles "$INSTDIR\VSD_Digital_IP\verilated.o" "$INSTDIR\nghdl-simulator\src\xspice\icm\Ngveri\verilated.o"
+
+ FileOpen $0 "$INSTDIR\nghdl-simulator\release\src\xspice\icm\install-ip.sh" w
+ FileWrite $0 `mingw32-make.exe -j$$(nproc)$\n`
+ FileClose $0
+
+ SetOutPath $INSTDIR\nghdl-simulator\release\src\xspice\icm
+
+ nsExec::ExecToLog "$INSTDIR\MSYS\usr\bin\sh.exe install-ip.sh"
+
+ SetOutPath $INSTDIR
+
+ CopyFiles "$INSTDIR\nghdl-simulator\release\src\xspice\icm\Ngveri\Ngveri.cm" "$INSTDIR\nghdl-simulator\lib\ngspice\Ngveri.cm"
+
+ Delete $INSTDIR\nghdl-simulator\release\src\xspice\icm\install-ip.sh
+ RMDir /r "$INSTDIR\VSD_Digital_IP"
+ Delete "$EXEDIR\VSD_Digital_IP.7z"
+SectionEnd
+
+Section "nghdl-config.ini"
+ CreateDirectory $INSTDIR\eSim\library\config\.nghdl
+ FileOpen $0 "$INSTDIR\eSim\library\config\.nghdl\config.ini" w
+ FileWrite $0 `[NGHDL]$\n`
+ FileWrite $0 `NGHDL_HOME = $shellpath1/nghdl-simulator$\n`
+ FileWrite $0 `DIGITAL_MODEL = %(NGHDL_HOME)s/src/xspice/icm$\n`
+ FileWrite $0 `RELEASE = %(NGHDL_HOME)s/release$\n`
+ FileWrite $0 `[SRC]$\n`
+ FileWrite $0 `SRC_HOME = $shellpath1/eSim/nghdl$\n`
+ FileWrite $0 `LICENSE = %(SRC_HOME)s/LICENSE$\n`
+ FileWrite $0 `[COMPILER]$\n`
+ FileWrite $0 `MSYS_HOME = $shellpath1/MSYS$\n`
+ FileClose $0
+SectionEnd
+
+;-------------------------------------------------------------------------------------
|