summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ubuntu/sky130/VSD_Digital_IP.tar.xzbin0 -> 50692 bytes
-rwxr-xr-xUbuntu/sky130/install-nghdl.sh336
-rw-r--r--Windows/sky130/VSD_Digital_IP.7zbin0 -> 48688 bytes
-rw-r--r--Windows/sky130/nghdl-setup-script.nsi254
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
new file mode 100644
index 0000000..1c2111a
--- /dev/null
+++ b/Ubuntu/sky130/VSD_Digital_IP.tar.xz
Binary files differ
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
new file mode 100644
index 0000000..0b31605
--- /dev/null
+++ b/Windows/sky130/VSD_Digital_IP.7z
Binary files differ
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
+
+;-------------------------------------------------------------------------------------