mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-02 17:55:19 +00:00
Merge pull request #869 from jordancarlin/installation
Installation and setup overhaul
This commit is contained in:
commit
bc70f0b933
8
.gitmodules
vendored
8
.gitmodules
vendored
@ -1,9 +1,3 @@
|
||||
[submodule "sky130/sky130_osu_sc_t12"]
|
||||
path = sky130/sky130_osu_sc_t12
|
||||
url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12/
|
||||
[submodule "addins/imperas-riscv-tests"]
|
||||
path = addins/imperas-riscv-tests
|
||||
url = https://github.com/riscv-ovpsim/imperas-riscv-tests
|
||||
[submodule "addins/riscv-dv"]
|
||||
path = addins/riscv-dv
|
||||
url = https://github.com/google/riscv-dv
|
||||
@ -29,7 +23,7 @@
|
||||
url = https://github.com/ross144/branch-predictor-simulator
|
||||
[submodule "addins/ahbsdc"]
|
||||
path = addins/ahbsdc
|
||||
url = http://github.com/JacobPease/ahbsdc.git
|
||||
url = https://github.com/JacobPease/ahbsdc.git
|
||||
[submodule "addins/verilog-ethernet"]
|
||||
sparseCheckout = true
|
||||
path = addins/verilog-ethernet
|
||||
|
96
README.md
96
README.md
@ -1,6 +1,6 @@
|
||||
# core-v-wally
|
||||
|
||||
Wally is a 5-stage pipelined processor configurable to support all the standard RISC-V options, incluidng RV32/64, A, C, F, D, Q, M, and Zb* extensions, virtual memory, PMP, and the various privileged modes and CSRs. It provides optional caches, branch prediction, and standard RISC-V peripherals (CLINT, PLIC, UART, GPIO). Wally is written in SystemVerilog. It passes the RISC-V Arch Tests and boots Linux on an FPGA. Configurations range from a minimal RV32E core to a fully featured RV64GC application processor.
|
||||
Wally is a 5-stage pipelined processor configurable to support all the standard RISC-V options, including RV32/64, A, B, C, D, F, M, Q, and Zk* extensions, virtual memory, PMP, and the various privileged modes and CSRs. It provides optional caches, branch prediction, and standard RISC-V peripherals (CLINT, PLIC, UART, GPIO). Wally is written in SystemVerilog. It passes the [RISC-V Arch Tests](https://github.com/riscv-non-isa/riscv-arch-test) and boots Linux on an FPGA. Configurations range from a minimal RV32E core to a fully featured RV64GC application processor.
|
||||
|
||||
![Wally block diagram](wallyriscvTopAll.png)
|
||||
|
||||
@ -34,71 +34,103 @@ Then fork and clone the repo, source setup, make the tests and run regression
|
||||
|
||||
On the Linux computer where you will be working, log in
|
||||
|
||||
Clone your fork of the repo and run the setup script. Change <yourgithubid> to your github id.
|
||||
Clone your fork of the repo. Change `<yourgithubid>` to your github id.
|
||||
|
||||
$ git clone --recurse-submodules https://github.com/<yourgithubid>/cvw
|
||||
$ cd cvw
|
||||
$ git remote add upstream https://github.com/openhwgroup/cvw
|
||||
|
||||
If you are installing on a new system without any tools installed, please jump to the next section, Toolchain Installation then come back here.
|
||||
|
||||
Run the setup script to update your `PATH` and activate the python virtual environment.
|
||||
|
||||
$ source ./setup.sh
|
||||
|
||||
If you are installing on a new system without any tools installed please jump to the next section, Toolchain Installation then come back here.
|
||||
|
||||
Add the following lines to your .bashrc or .bash_profile to run the setup script each time you log in.
|
||||
Add the following lines to your `.bashrc` or `.bash_profile` to run the setup script each time you log in.
|
||||
|
||||
if [ -f ~/cvw/setup.sh ]; then
|
||||
source ~/cvw/setup.sh
|
||||
fi
|
||||
|
||||
If the tools are not yet installed on your server, follow the Toolchain Installation instructions in the section below.
|
||||
|
||||
Build the tests and run a regression simulation with Questa to prove everything is installed. Building tests will take a while.
|
||||
Build the tests and run a regression simulation to prove everything is installed. Building tests will take a while.
|
||||
|
||||
$ make
|
||||
$ regression-wally (depends on having Questa installed)
|
||||
$ regression-wally
|
||||
|
||||
# Toolchain Installation (Sys Admin)
|
||||
# Toolchain Installation and Configuration (Sys Admin)
|
||||
|
||||
This section describes the open source toolchain installation. The
|
||||
current version of the toolchain has been tested on Ubuntu and partly on Red
|
||||
Hat/Rocky 8 Linux. Ubuntu works more smoothly and is recommended
|
||||
unless you have a compelling need for RedHat. However, Ubuntu 22.04LTS
|
||||
is incompatible with Synopsys Design Compiler.
|
||||
This section describes the open source toolchain installation.
|
||||
|
||||
Ubuntu users can install the tools by running
|
||||
### Compatibility
|
||||
The current version of the toolchain has been tested on Ubuntu (versions 20.04 LTS, 22.04 LTS, and 24.04 LTS) and on Red Hat/Rocky/AlmaLinux (versions 8 and 9).
|
||||
|
||||
$ sudo $WALLY/bin/wally-tool-chain-install.sh
|
||||
NOTE: Ubuntu 22.04LTS is incompatible with Synopsys Design Compiler.
|
||||
|
||||
The default installation directory is /opt/riscv defined by the environment variable RISCV. You must copy and edit ~/cvw/site-setup.sh to $RISCV/site-setup.sh.
|
||||
### Overview
|
||||
The toolchain installation script installs the following tools:
|
||||
- [RISC-V GNU Toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain): GCC and accompanying compiler tools
|
||||
- [elf2hex](https://github.com/sifive/elf2hex): executable file to hexadecimal converter
|
||||
- [QEMU](https://www.qemu.org/docs/master/system/target-riscv.html): emulator
|
||||
- [Spike](https://github.com/riscv-software-src/riscv-isa-sim): functional RISC-V model
|
||||
- [Verilator](https://github.com/verilator/verilator): open-source Verilog simulator
|
||||
- NOTE: Verilator does not currently work reliably for simulating Wally on Ubuntu 20.04 LTS and Red Hat 8
|
||||
- [RISC-V Sail Model](https://github.com/riscv/sail-riscv): golden reference model for RISC-V
|
||||
- [OSU Skywater 130 cell library](https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12): standard cell library
|
||||
- [RISCOF](https://github.com/riscv-software-src/riscof.git): RISC-V compliance test framework
|
||||
|
||||
~/cvw/setup.sh sources $RISCV/site-setup.sh.
|
||||
This allows for customization of the site specific information such as commerical licenses and PATH variables.
|
||||
Additionally, Buildroot Linux is built for Wally and linux test-vectors are generated for simulation. See the [Linux README](linux/README.md) for more details.
|
||||
|
||||
Change the following lines to point to the path and license server for your Siemens Questa and Synopsys Design Compiler installation and license server. If you only have Questa, you can still simulate but cannot run logic synthesis. If Questa or Design Compiler are already setup on this system then don't set these variables.
|
||||
### Installation
|
||||
|
||||
The tools can be installed by running
|
||||
|
||||
$ $WALLY/bin/wally-tool-chain-install.sh
|
||||
|
||||
If this script is run as root or using `sudo`, it will also install all of the prerequisite packages using the system package manager. The default installation directory when run in this manner is `/opt/riscv`.
|
||||
|
||||
If a user-level installation is desired, the script can instead be run by any user without `sudo` and the installation directory will be `~/riscv`. In this case, the prerequisite packages must first be installed by running
|
||||
|
||||
$ sudo $WALLY/bin/wally-package-install.sh
|
||||
|
||||
In either case, the installation directory can be overridden by passing the desired directory as the last argument to the installation script. For example,
|
||||
|
||||
$ sudo $WALLY/bin/wally-tool-chain-install.sh /home/riscv
|
||||
|
||||
See `wally-tool-chain-install.sh` for a detailed description of each component, or to issue the commands one at a time to install on the command line.
|
||||
|
||||
**NOTE:** The complete installation process requires ~55 GB of free space. If the `--clean` flag is passed as the first argument to the installation script then the final consumed space is only ~26 GB, but upgrading the tools requires reinstalling from scratch.
|
||||
|
||||
### Configuration
|
||||
`$WALLY/setup.sh` sources `$RISCV/site-setup.sh`. If the toolchain was installed in either of the default locations (`/opt/riscv` or `~/riscv`), `$RISCV` will automatically be set to the correct path when `setup.sh` is run. If a custom installation directory was used, then `$WALLY/setup.sh` must be modified to set the correct path.
|
||||
|
||||
`$RISCV/site-setup.sh` allows for customization of the site specific information such as commercial licenses and PATH variables. It is automatically copied into your `$RISCV` folder when the installation script is run.
|
||||
|
||||
Change the following lines to point to the path and license server for your Siemens Questa and Synopsys Design Compiler and VCS installations and license servers. If you only have Questa or VCS, you can still simulate but cannot run logic synthesis. If Questa, VSC, or Design Compiler are already setup on this system then don't set these variables.
|
||||
|
||||
export MGLS_LICENSE_FILE=.. # Change this to your Siemens license server
|
||||
export SNPSLMD_LICENSE_FILE=.. # Change this to your Synopsys license server
|
||||
export QUESTAPATH=.. # Change this for your path to Questa
|
||||
export SNPSPATH=.. # Change this for your path to Design Compiler
|
||||
export QUESTA_HOME=.. # Change this for your path to Questa
|
||||
export DC_HOME=.. # Change this for your path to Synopsys Design Compiler
|
||||
export VCS_HOME=.. # Change this for your path to Synopsys VCS
|
||||
|
||||
|
||||
See wally-tool-chain-install.sh for a detailed description of each component,
|
||||
or to issue the commands one at a time to install on the command line.
|
||||
## Installing EDA Tools
|
||||
# Installing EDA Tools
|
||||
|
||||
Electronic Design Automation (EDA) tools are vital to implementations of System on Chip architectures as well as validating different designs. Open-source and commercial tools exist for multiple strategies and although the one can spend a lifetime using combinations of different tools, only a small subset of tools is utilized for this text. The tools are chosen because of their ease in access as well as their repeatability for accomplishing many of the tasks utilized to design Wally. It is anticipated that additional tools may be documented later after this is text is published to improve use and access.
|
||||
|
||||
Siemens Quest is the primary tool utilized for simulating and validating Wally. For logic synthesis, you will need Synopsys Design Compiler. Questa and Design Compiler are commercial tools that require an educational or commercial license.
|
||||
Siemens Questa is the primary tool utilized for simulating and validating Wally. For logic synthesis, you will need Synopsys Design Compiler. Questa and Design Compiler are commercial tools that require an educational or commercial license.
|
||||
|
||||
Note: Some EDA tools utilize LM_LICENSE_FILE for their environmental variable to point to their license server. Some operating systems may also utilize MGLS_LICENSE_FILE instead, therefore, it is important to read the user manual on the preferred environmental variable required to point to a user’s license file. Although there are different mechanisms to allow licenses to work, many companies commonly utilize the FlexLM (i.e., Flex-enabled) license server manager that runs off a node locked license.
|
||||
Note: Some EDA tools utilize `LM_LICENSE_FILE` for their environmental variable to point to their license server. Some operating systems may also utilize `MGLS_LICENSE_FILE` instead, therefore, it is important to read the user manual on the preferred environmental variable required to point to a user’s license file. Although there are different mechanisms to allow licenses to work, many companies commonly utilize the FlexLM (i.e., Flex-enabled) license server manager that runs off a node locked license.
|
||||
|
||||
Although most EDA tools are Linux-friendly, they tend to have issues when not installed on recommended OS flavors. Both Red Hat Enterprise Linux and SUSE Linux products typically tend to be recommended for installing commercial-based EDA tools and are recommended for utilizing complex simulation and architecture exploration. Questa can also be installed on Microsoft Windows as well as Mac OS with a Virtual Machine such as Parallels.
|
||||
|
||||
Siemens Questa
|
||||
### Siemens Questa
|
||||
|
||||
Siemens Questa simulates behavioral, RTL and gate-level HDL. To install Siemens Questa first go to a web browser and navigate to
|
||||
https://eda.sw.siemens.com/en-US/ic/questa/simulation/advanced-simulator/. Click Sign In and log in with your credentials and the product can easily be downloaded and installed. Some Windows-based installations also require gcc libraries that are typically provided as a compressed zip download through Siemens.
|
||||
|
||||
Synopsys Design Compiler (DC)
|
||||
### Synopsys Design Compiler (DC)
|
||||
|
||||
Many commercial synthesis and place and route tools require a common installer. These installers are provided by the EDA vendor and Synopsys has one called Synopsys Installer. To use Synopsys Installer, you will need to acquire a license through Synopsys that is typically Called Synopsys Common Licensing (SCL). Both the Synopsys Installer, license key file, and Design Compiler can all be downloaded through Synopsys Solvnet. First open a web browser, log into Synsopsy Solvnet, and download the installer and Design Compiler installation files. Then, install the Installer
|
||||
|
||||
@ -110,7 +142,7 @@ Select the latest version (currently 5.4). Click Download Here, agree,
|
||||
Click on SynopsysInstaller_v5.4.run
|
||||
Return to downloads and also get Design Compiler (synthesis) latest version, and any others you want.
|
||||
Click on all parts and the .spf file, then click Download Files near the top
|
||||
move the SynopsysIntaller into /cad/synopsys/Installer_5.4 with 755 permission for cad,
|
||||
move the SynopsysInstaller into /cad/synopsys/Installer_5.4 with 755 permission for cad,
|
||||
move other files into /cad/synopsys/downloads and work as user cad from here on
|
||||
|
||||
$ cd /cad/synopsys/installer_5.4
|
||||
@ -127,7 +159,7 @@ The Synopsys Installer automatically installs all downloaded product files into
|
||||
|
||||
/import/programs/synopsys/syn/S-2021.06-SP1
|
||||
|
||||
Note: Although most parts of Wally, including the software used in this chapter and Questa simulation, will work on most modern Linux platforms, as of 2022, the Synopsys CAD tools for SoC design are only supported on RedHat Enterprise Linux 7.4 or 8 or SUSE Linux Enterprise Server (SLES) 12 or 15. Moreover, the RISC-V formal specification (sail-riscv) does not build gracefully on RHEL7.
|
||||
Note: Although most parts of Wally, including the Questa simulator, will work on most modern Linux platforms, as of 2022, the Synopsys CAD tools for SoC design are only supported on RedHat Enterprise Linux 7.4 or 8 or SUSE Linux Enterprise Server (SLES) 12 or 15. Moreover, the RISC-V formal specification (sail-riscv) does not build gracefully on RHEL7.
|
||||
|
||||
The Verilog simulation has been tested with Siemens Questa/ModelSim. This package is available to universities worldwide as part of the Design Verification Bundle through the Siemens Academic Partner Program members for $990/year.
|
||||
|
||||
@ -136,7 +168,7 @@ If you want to implement your own version of the chip, your tool and license com
|
||||
Startups can expect to spend more than $1 million on CAD tools to get a chip to market. Commercial CAD tools are not realistically available to individuals without a university or company connection.
|
||||
|
||||
|
||||
## Adding Cron Job for nightly builds
|
||||
# Adding Cron Job for nightly builds
|
||||
|
||||
If you want to add a cronjob you can do the following:
|
||||
1) Set up the email client `mutt` for your distribution
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python3
|
||||
##################################################
|
||||
## coremark_sweep.py
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
# embench_arch_sweep.py
|
||||
# David_Harris@hmc.edu 16 November 2023
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# Daniel Torres 2022
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl -W
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## derivgen.pl
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl -w
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## exe2memfile.pl
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# fparchtest.sh
|
||||
# David_Harris@hmc.edu 26 December 2023
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/perl -W
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## libppa.pl
|
||||
@ -43,7 +43,7 @@ my @cr; my @cf; my @rt; my @ft;
|
||||
my $libpath; my $libbase; my $cellname; my @corners;
|
||||
|
||||
# Sky130
|
||||
$libpath ="/opt/riscv/cad/lib/sky130_osu_sc_t12/12T_ms/lib";
|
||||
$libpath ="$ENV{RISCV}/cad/lib/sky130_osu_sc_t12/12T_ms/lib";
|
||||
$libbase = "sky130_osu_sc_12T_ms_";
|
||||
$cellname = "sky130_osu_sc_12T_ms__inv_1";
|
||||
@corners = ("TT_1P8_25C.ccs", "tt_1P80_25C.ccs", "tt_1P62_25C.ccs", "tt_1P89_25C.ccs", "ss_1P60_-40C.ccs", "ss_1P60_100C.ccs", "ss_1P60_150C.ccs", "ff_1P95_-40C.ccs", "ff_1P95_100C.ccs", "ff_1P95_150C.ccs");
|
||||
@ -53,7 +53,7 @@ foreach my $corner (@corners) {
|
||||
}
|
||||
|
||||
# Sky90
|
||||
$libpath ="/opt/riscv/cad/lib/sky90/sky90_sc/V1.7.4/lib";
|
||||
$libpath ="$ENV{RISCV}/cad/lib/sky90/sky90_sc/V1.7.4/lib";
|
||||
$libbase = "scc9gena_";
|
||||
$cellname = "scc9gena_inv_1";
|
||||
@corners = ("tt_1.2v_25C", "tt_1.08v_25C", "tt_1.32v_25C", "tt_1.2v_-40C", "tt_1.2v_85C", "tt_1.2v_125C", "ss_1.2v_25C", "ss_1.08v_-40C", "ss_1.08v_25C", "ss_1.08v_125C", "ff_1.2v_25C", "ff_1.32v_-40C", "ff_1.32v_25C", "ff_1.32v_125C");
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Python Regression Build Automation Script
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
|
||||
###########################################
|
||||
## Written: Rose Thompson ross1728@gmail.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
#
|
||||
# regression-wally
|
||||
|
14
bin/requirements.txt
Normal file
14
bin/requirements.txt
Normal file
@ -0,0 +1,14 @@
|
||||
adjustText>=1.2
|
||||
lief>=0.14.1
|
||||
Markdown>=3.6
|
||||
matplotlib>=3.9.0
|
||||
PyYAML>=5.2
|
||||
riscv-isac @ git+https://github.com/riscv-software-src/riscv-isac@dev
|
||||
riscof @ git+https://github.com/riscv/riscof.git
|
||||
riscv-config>=3.18.3
|
||||
riscv-isac>=0.18.0
|
||||
scikit-learn>=1.5.0
|
||||
scipy>=1.13.0
|
||||
Sphinx>=7.3.7
|
||||
sphinx-rtd-theme>=2.0.0
|
||||
testresources>=2.0.1
|
@ -1,4 +1,4 @@
|
||||
#!/bin/perl -W
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## testlist.pl
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl -w
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## vclean.pl
|
||||
|
92
bin/wally-distro-check.sh
Executable file
92
bin/wally-distro-check.sh
Executable file
@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
###########################################
|
||||
## Get Linux distro information
|
||||
##
|
||||
## Written: Jordan Carlin, jcarlin@hmc.edu
|
||||
## Created: 30 June 2024
|
||||
## Modified:
|
||||
##
|
||||
## Purpose: Check for compatible Linux distibution and set variables accordingly
|
||||
##
|
||||
## A component of the CORE-V-WALLY configurable RISC-V project.
|
||||
## https://github.com/openhwgroup/cvw
|
||||
##
|
||||
## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
|
||||
##
|
||||
## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
##
|
||||
## Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file
|
||||
## except in compliance with the License, or, at your option, the Apache License version 2.0. You
|
||||
## may obtain a copy of the License at
|
||||
##
|
||||
## https:##solderpad.org/licenses/SHL-2.1/
|
||||
##
|
||||
## Unless required by applicable law or agreed to in writing, any work distributed under the
|
||||
## License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
## either express or implied. See the License for the specific language governing permissions
|
||||
## and limitations under the License.
|
||||
################################################################################################
|
||||
|
||||
set -e # break on error
|
||||
|
||||
# Colors
|
||||
BOLD='\033[1m'
|
||||
UNDERLINE='\033[4m'
|
||||
SECTION_COLOR='\033[95m'$BOLD
|
||||
OK_COLOR='\033[94m'
|
||||
WARNING_COLOR='\033[93m'
|
||||
FAIL_COLOR='\033[91m'
|
||||
ENDC='\033[0m' # Reset to default color
|
||||
|
||||
# Print section header
|
||||
section_header() {
|
||||
if tput cols > /dev/null 2>&1; then
|
||||
printf "${SECTION_COLOR}%$(tput cols)s" | tr ' ' '#'
|
||||
printf "%$(tput cols)s" | tr ' ' '#'
|
||||
echo -e "$1"
|
||||
printf "%$(tput cols)s" | tr ' ' '#'
|
||||
printf "%$(tput cols)s${ENDC}" | tr ' ' '#'
|
||||
else
|
||||
echo -e "${SECTION_COLOR}$1${ENDC}"
|
||||
fi
|
||||
}
|
||||
|
||||
section_header "Checking System Requirements and Configuring Installation"
|
||||
|
||||
# Get distribution information
|
||||
test -e /etc/os-release && os_release="/etc/os-release" || os_release="/usr/lib/os-release"
|
||||
source "$os_release"
|
||||
|
||||
# Check for compatible distro
|
||||
if [[ "$ID" == rhel || "$ID_LIKE" == *rhel* ]]; then
|
||||
export FAMILY=rhel
|
||||
if [ "$ID" != rhel ] && [ "$ID" != rocky ] && [ "$ID" != almalinux ]; then
|
||||
printf "${WARNING_COLOR}%s\n${ENDC}" "For Red Hat family distros, the Wally install script has only been tested on RHEL, Rocky Linux," \
|
||||
" and AlmaLinux. Your distro is $PRETTY_NAME. The regular Red Hat install will be attempted, but there may be issues."
|
||||
fi
|
||||
export RHEL_VERSION="${VERSION_ID:0:1}"
|
||||
if (( RHEL_VERSION < 8 )); then
|
||||
echo "${FAIL_COLOR}The Wally install script is only compatible with versions 8 and 9 of RHEL, Rocky Linux, and AlmaLinux. You have version $VERSION.${ENDC}"
|
||||
exit 1
|
||||
fi
|
||||
elif [[ "$ID" == ubuntu || "$ID_LIKE" == *ubuntu* ]]; then
|
||||
export FAMILY=ubuntu
|
||||
if [ "$ID" != ubuntu ]; then
|
||||
printf "${WARNING_COLOR}%s\n${ENDC}" "For Ubuntu family distros, the Wally install script has only been tested on standard Ubuntu. Your distro " \
|
||||
"is $PRETTY_NAME. The regular Ubuntu install will be attempted, but there may be issues."
|
||||
fi
|
||||
export UBUNTU_VERSION="${VERSION_ID:0:2}"
|
||||
if (( UBUNTU_VERSION < 20 )); then
|
||||
echo "${FAIL_COLOR}The Wally install script has only been tested with versions 20.04 LTS, 22.04 LTS, and 24.04 LTS of Ubuntu. You have version $VERSION.${ENDC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
printf "${FAIL_COLOR}%s\n${ENDC}" "The Wally install script is currently only compatible with Ubuntu and Red Hat family " \
|
||||
"(RHEL, Rocky Linux, or AlmaLinux) distros. Your detected distro is $PRETTY_NAME. You may try manually running the " \
|
||||
"commands in this script, but it is likely that some will need to be altered."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${OK_COLOR}${UNDERLINE}Detected information${ENDC}"
|
||||
echo "Distribution: $PRETTY_NAME"
|
||||
echo "Version: $VERSION"
|
129
bin/wally-package-install.sh
Executable file
129
bin/wally-package-install.sh
Executable file
@ -0,0 +1,129 @@
|
||||
#!/bin/bash
|
||||
###########################################
|
||||
## Package installation
|
||||
##
|
||||
## Written: Jordan Carlin, jcarlin@hmc.edu
|
||||
## Created: 30 June 2024
|
||||
## Modified:
|
||||
##
|
||||
## Purpose: Package manager installation for open source tool chain installation script
|
||||
##
|
||||
## A component of the CORE-V-WALLY configurable RISC-V project.
|
||||
## https://github.com/openhwgroup/cvw
|
||||
##
|
||||
## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
|
||||
##
|
||||
## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
##
|
||||
## Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file
|
||||
## except in compliance with the License, or, at your option, the Apache License version 2.0. You
|
||||
## may obtain a copy of the License at
|
||||
##
|
||||
## https:##solderpad.org/licenses/SHL-2.1/
|
||||
##
|
||||
## Unless required by applicable law or agreed to in writing, any work distributed under the
|
||||
## License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
## either express or implied. See the License for the specific language governing permissions
|
||||
## and limitations under the License.
|
||||
################################################################################################
|
||||
|
||||
set -e # break on error
|
||||
|
||||
# Colors
|
||||
BOLD='\033[1m'
|
||||
SECTION_COLOR='\033[95m'$BOLD
|
||||
SUCCESS_COLOR='\033[92m'
|
||||
FAIL_COLOR='\033[91m'
|
||||
ENDC='\033[0m' # Reset to default color
|
||||
|
||||
# If run standalone, determine distro information. Otherwise, use info from main install script
|
||||
if [ -z "$FAMILY" ]; then
|
||||
dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "${dir}"/wally-distro-check.sh
|
||||
fi
|
||||
|
||||
|
||||
# Generate list of packages to install and package manager commands based on distro
|
||||
# Packages are grouped by which tool requires them. If multiple tools need a package, it is included in the first tool only
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
PYTHON_VERSION=python3.12
|
||||
PACKAGE_MANAGER="dnf"
|
||||
UPDATE_COMMAND="sudo $PACKAGE_MANAGER update -y"
|
||||
GENERAL_PACKAGES+=(which rsync git make cmake "$PYTHON_VERSION" "$PYTHON_VERSION"-pip curl wget tar pkgconf-pkg-config dialog mutt ssmtp)
|
||||
GNU_PACKAGES+=(autoconf automake libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo gperf libtool patchutils bc gcc gcc-c++ zlib-devel expat-devel libslirp-devel)
|
||||
QEMU_PACKAGES+=(glib2-devel libfdt-devel pixman-devel bzip2 ninja-build)
|
||||
SPIKE_PACKAGES+=(dtc boost-regex boost-system)
|
||||
VERILATOR_PACKAGES+=(help2man perl clang ccache gperftools numactl mold)
|
||||
BUILDROOT_PACKAGES+=(ncurses-base ncurses ncurses-libs ncurses-devel gcc-gfortran cpio) # gcc-gfortran is only needed for compiling spec benchmarks on buildroot linux
|
||||
# Extra packages not availale in rhel8, nice for Verilator and needed for sail respectively
|
||||
if (( RHEL_VERSION >= 9 )); then
|
||||
VERILATOR_PACKAGES+=(perl-doc)
|
||||
SAIL_PACKAGES=(z3)
|
||||
fi
|
||||
# A newer version of gcc is required for qemu
|
||||
OTHER_PACKAGES=(gcc-toolset-13)
|
||||
elif [ "$FAMILY" == ubuntu ]; then
|
||||
if (( UBUNTU_VERSION >= 24 )); then
|
||||
PYTHON_VERSION=python3.12
|
||||
VERILATOR_PACKAGES+=(mold) # Not availale in Ubuntu 20.04, nice for Verilator
|
||||
elif (( UBUNTU_VERSION >= 22 )); then
|
||||
PYTHON_VERSION=python3.11
|
||||
VERILATOR_PACKAGES+=(mold) # Not availale in Ubuntu 20.04, nice for Verilator
|
||||
elif (( UBUNTU_VERSION >= 20 )); then
|
||||
PYTHON_VERSION=python3.9
|
||||
OTHER_PACKAGES+=(gcc-10 g++-10 cpp-10) # Newer version of gcc needed for Verilator
|
||||
fi
|
||||
PACKAGE_MANAGER="DEBIAN_FRONTEND=noninteractive apt-get"
|
||||
UPDATE_COMMAND="sudo $PACKAGE_MANAGER update -y && sudo $PACKAGE_MANAGER upgrade -y --with-new-pkgs"
|
||||
GENERAL_PACKAGES+=(rsync git make cmake "$PYTHON_VERSION" python3-pip "$PYTHON_VERSION"-venv curl wget tar pkg-config dialog mutt ssmtp)
|
||||
GNU_PACKAGES+=(autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat1-dev ninja-build libglib2.0-dev libslirp-dev)
|
||||
QEMU_PACKAGES+=(libfdt-dev libpixman-1-dev)
|
||||
SPIKE_PACKAGES+=(device-tree-compiler libboost-regex-dev libboost-system-dev)
|
||||
VERILATOR_PACKAGES+=(help2man perl g++ clang ccache libunwind-dev libgoogle-perftools-dev numactl perl-doc libfl2 libfl-dev zlib1g)
|
||||
SAIL_PACKAGES+=(opam z3)
|
||||
BUILDROOT_PACKAGES+=(ncurses-base ncurses-bin libncurses-dev gfortran cpio) # gfortran is only needed for compiling spec benchmarks on buildroot linux
|
||||
VIVADO_PACKAGES+=(libncurses*) # Vivado hangs on the third stage of installation without this
|
||||
fi
|
||||
|
||||
|
||||
# Check if required packages are installed or install/update them depending on passed flag.
|
||||
if [ "${1}" == "--check" ]; then
|
||||
section_header "Checking Dependencies from Package Manager"
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
for pack in "${GENERAL_PACKAGES[@]}" "${GNU_PACKAGES[@]}" "${QEMU_PACKAGES[@]}" "${SPIKE_PACKAGES[@]}" "${VERILATOR_PACKAGES[@]}" "${SAIL_PACKAGES[@]}" "${BUILDROOT_PACKAGES[@]}" "${OTHER_PACKAGES[@]}"; do
|
||||
rpm -q "$pack" > /dev/null || (echo -e "${FAIL_COLOR}Missing packages detected (${WARNING_COLOR}$pack${FAIL_COLOR}). Run as root to auto-install or run wally-package-install.sh first.${ENDC}" && exit 1)
|
||||
done
|
||||
elif [ "$FAMILY" == ubuntu ]; then
|
||||
for pack in "${GENERAL_PACKAGES[@]}" "${GNU_PACKAGES[@]}" "${QEMU_PACKAGES[@]}" "${SPIKE_PACKAGES[@]}" "${VERILATOR_PACKAGES[@]}" "${SAIL_PACKAGES[@]}" "${BUILDROOT_PACKAGES[@]}" "${OTHER_PACKAGES[@]}"; do
|
||||
dpkg -l "$pack" | grep "ii" > /dev/null || (echo -e "${FAIL_COLOR}Missing packages detected (${WARNING_COLOR}$pack${FAIL_COLOR}). Run as root to auto-install or run wally-package-install.sh first." && exit 1)
|
||||
done
|
||||
fi
|
||||
echo -e "${OK_COLOR}All required packages detected.${ENDC}"
|
||||
else
|
||||
# Check if root, otherwise exit with error message
|
||||
[ "${EUID:=$(id -u)}" -ne 0 ] && echo -e "\n${FAIL_COLOR}Must be run as root${ENDC}" && exit 1
|
||||
|
||||
section_header "Installing/Updating Dependencies from Package Manager"
|
||||
# Enable extra repos necessary for rhel
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
sudo dnf install -y dnf-plugins-core
|
||||
sudo dnf group install -y "Development Tools"
|
||||
if [ "$ID" == rhel ]; then
|
||||
sudo subscription-manager repos --enable "codeready-builder-for-rhel-$RHEL_VERSION-$(arch)-rpms"
|
||||
sudo dnf install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-$RHEL_VERSION.noarch.rpm"
|
||||
else # RHEL clone
|
||||
if (( RHEL_VERSION == 8 )); then
|
||||
sudo dnf config-manager -y --set-enabled powertools
|
||||
else # Version 9
|
||||
sudo dnf config-manager -y --set-enabled crb
|
||||
fi
|
||||
sudo dnf install -y epel-release
|
||||
fi
|
||||
fi
|
||||
|
||||
# Update and Upgrade tools
|
||||
eval "$UPDATE_COMMAND"
|
||||
# Install packages listed above using appropriate package manager
|
||||
sudo $PACKAGE_MANAGER install -y "${GENERAL_PACKAGES[@]}" "${GNU_PACKAGES[@]}" "${QEMU_PACKAGES[@]}" "${SPIKE_PACKAGES[@]}" "${VERILATOR_PACKAGES[@]}" "${SAIL_PACKAGES[@]}" "${BUILDROOT_PACKAGES[@]}" "${OTHER_PACKAGES[@]}" "${VIVADO_PACKAGES[@]}"
|
||||
echo -e "${SUCCESS_COLOR}Packages successfully installed.${ENDC}"
|
||||
fi
|
@ -6,13 +6,14 @@
|
||||
## Created: 18 January 2023
|
||||
## Modified: 22 January 2023
|
||||
## Modified: 23 March 2023
|
||||
## Modified: 30 June 2024, Jordan Carlin jcarlin@hmc.edu
|
||||
##
|
||||
## Purpose: Open source tool chain installation script
|
||||
##
|
||||
## A component of the CORE-V-WALLY configurable RISC-V project.
|
||||
## https://github.com/openhwgroup/cvw
|
||||
##
|
||||
## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
|
||||
## Copyright (C) 2021-24 Harvey Mudd College & Oklahoma State University
|
||||
##
|
||||
## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||
##
|
||||
@ -28,165 +29,418 @@
|
||||
## and limitations under the License.
|
||||
################################################################################################
|
||||
|
||||
# Use /opt/riscv for installation - may require running script with sudo
|
||||
export RISCV="${1:-/opt/riscv}"
|
||||
export PATH=$PATH:$RISCV/bin:/usr/bin
|
||||
# Increasing NUM_THREADS will speed up parallel compilation of the tools
|
||||
NUM_THREADS=$(nproc --ignore 1) # One less than the total number of threads
|
||||
|
||||
# Colors
|
||||
BOLD='\033[1m'
|
||||
UNDERLINE='\033[4m'
|
||||
SECTION_COLOR='\033[95m'$BOLD
|
||||
OK_COLOR='\033[94m'
|
||||
SUCCESS_COLOR='\033[92m'
|
||||
WARNING_COLOR='\033[93m'
|
||||
FAIL_COLOR='\033[91m'
|
||||
ENDC='\033[0m' # Reset to default color
|
||||
|
||||
## Helper functions
|
||||
# Error handler
|
||||
error() {
|
||||
echo -e "${FAIL_COLOR}Error: $STATUS installation failed"
|
||||
echo -e "Error on line ${BASH_LINENO[0]} with command $BASH_COMMAND${ENDC}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if a git repository exists, is up to date, and has been installed
|
||||
# Clones the repository if it doesn't exist
|
||||
git_check() {
|
||||
local repo=$1
|
||||
local url=$2
|
||||
local check=$3
|
||||
local branch="${4:-master}"
|
||||
if [[ ((! -e $repo) && ($(git clone "$url") || true)) || ($(cd "$repo"; git fetch; git rev-parse HEAD) != $(cd "$repo"; git rev-parse origin/"$branch")) || (! -e $check) ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Log output to a file and only print lines with keywords
|
||||
logger() {
|
||||
local log="$RISCV/logs/$1.log"
|
||||
cat < /dev/stdin | tee -a "$log" | (grep -iE --color=never "(\bwarning|\berror|\bfail|\bsuccess|\bstamp)" || true) | (grep -viE --color=never "(Wno-error)" || true)
|
||||
}
|
||||
|
||||
set -e # break on error
|
||||
trap error ERR # run error handler on error
|
||||
STATUS="setup" # keep track of what part of the installation is running for error messages
|
||||
|
||||
# Modify accordingly for your machine
|
||||
# Increasing NUM_THREADS will speed up parallel compilation of the tools
|
||||
#NUM_THREADS=2 # for low memory machines > 16GiB
|
||||
NUM_THREADS=8 # for >= 32GiB
|
||||
#NUM_THREADS=16 # for >= 64GiB
|
||||
|
||||
sudo mkdir -p $RISCV
|
||||
# *** need to update permissions to local user
|
||||
|
||||
# Update and Upgrade tools (see https://itsfoss.com/apt-update-vs-upgrade/)
|
||||
sudo apt update -y
|
||||
sudo apt upgrade -y
|
||||
sudo apt install -y git gawk make texinfo bison flex build-essential python3 libz-dev libexpat-dev autoconf device-tree-compiler ninja-build libpixman-1-dev ncurses-base ncurses-bin libncurses5-dev dialog curl wget ftp libgmp-dev libglib2.0-dev python3-pip pkg-config opam z3 zlib1g-dev automake autotools-dev libmpc-dev libmpfr-dev gperf libtool patchutils bc mutt ssmtp gfortran cmake libboost-all-dev
|
||||
# Other python libraries used through the book.
|
||||
sudo -H pip3 install sphinx sphinx_rtd_theme matplotlib scipy scikit-learn adjustText lief markdown pyyaml
|
||||
sudo -H pip3 install riscv_isac # to generate new tests, such as quads with fp_dataset.py
|
||||
|
||||
# needed for Ubuntu 22.04, gcc cross compiler expects python not python2 or python3.
|
||||
if ! command -v python &> /dev/null
|
||||
then
|
||||
echo "WARNING: python3 was installed as python3 rather than python. Creating symlink."
|
||||
sudo ln -sf /usr/bin/python3 /usr/bin/python
|
||||
# Check for clean flag
|
||||
if [ "$1" == "--clean" ]; then
|
||||
clean=true
|
||||
shift
|
||||
fi
|
||||
|
||||
# gcc cross-compiler (https://github.com/riscv-collab/riscv-gnu-toolchain)
|
||||
# Determine script directory to locate related scripts
|
||||
dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Get Linux distro and version
|
||||
source "${dir}"/wally-distro-check.sh
|
||||
|
||||
# Check if root
|
||||
ROOT=$( [ "${EUID:=$(id -u)}" == 0 ] && echo true || echo false);
|
||||
|
||||
# Set installation directory based on execution privileges
|
||||
# If the script is run as root, the default installation path is /opt/riscv
|
||||
# If the script is run as a user, the default installation path is ~/riscv
|
||||
# The installation path can be overridden with an argument passed to the script.
|
||||
if [ "$ROOT" == true ]; then
|
||||
export RISCV="${1:-/opt/riscv}"
|
||||
else
|
||||
export RISCV="${1:-$HOME/riscv}"
|
||||
fi
|
||||
|
||||
# Set environment variables
|
||||
export PATH=$PATH:$RISCV/bin:/usr/bin
|
||||
export PKG_CONFIG_PATH=$RISCV/lib64/pkgconfig:$RISCV/lib/pkgconfig:$RISCV/share/pkgconfig:$RISCV/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
|
||||
|
||||
# Create installation directory
|
||||
mkdir -p "$RISCV"/logs
|
||||
echo "Running as root: $ROOT"
|
||||
echo "Installation path: $RISCV"
|
||||
|
||||
|
||||
# Install/update system packages if root. Otherwise, check that packages are already installed.
|
||||
STATUS="system packages"
|
||||
if [ "$ROOT" == true ]; then
|
||||
source "${dir}"/wally-package-install.sh
|
||||
else
|
||||
source "${dir}"/wally-package-install.sh --check
|
||||
fi
|
||||
|
||||
# Enable newer version of gcc for older distros (required for QEMU/Verilator)
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
source /opt/rh/gcc-toolset-13/enable
|
||||
elif (( UBUNTU_VERSION == 20 )); then
|
||||
mkdir -p "$RISCV"/gcc-10/bin
|
||||
for f in gcc cpp g++ gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool lto-dump; do
|
||||
ln -vsf /usr/bin/$f-10 "$RISCV"/gcc-10/bin/$f
|
||||
done
|
||||
export PATH="$RISCV"/gcc-10/bin:$PATH
|
||||
fi
|
||||
|
||||
|
||||
# Create python virtual environment so the python command targets desired version of python
|
||||
# and installed packages are isolated from the rest of the system.
|
||||
section_header "Setting up Python Environment"
|
||||
STATUS="python virtual environment"
|
||||
cd "$RISCV"
|
||||
if [ ! -e "$RISCV"/riscv-python/bin/activate ]; then
|
||||
"$PYTHON_VERSION" -m venv riscv-python
|
||||
echo -e "${OK_COLOR}Python virtual environment created!\nInstalling pip packages.${ENDC}"
|
||||
else
|
||||
echo -e "${OK_COLOR}Python virtual environment already exists.\nUpdating pip packages.${ENDC}"
|
||||
fi
|
||||
|
||||
source "$RISCV"/riscv-python/bin/activate # activate python virtual environment
|
||||
|
||||
# Install python packages, including RISCOF (https://github.com/riscv-software-src/riscof.git)
|
||||
# RISCOF is a RISC-V compliance test framework that is used to run the RISC-V Arch Tests.
|
||||
STATUS="python packages"
|
||||
pip install --upgrade pip && pip install -r "$dir"/requirements.txt
|
||||
|
||||
# z3 is needed for sail and not availabe from dnf for rhel 8
|
||||
if (( RHEL_VERSION == 8 )); then
|
||||
pip install -U z3-solver
|
||||
fi
|
||||
|
||||
source "$RISCV"/riscv-python/bin/activate # reload python virtual environment
|
||||
echo -e "${SUCCESS_COLOR}Python environment successfully configured!${ENDC}"
|
||||
|
||||
|
||||
# Extra dependecies needed for older distros that don't have new enough versions available from package manager
|
||||
if (( RHEL_VERSION == 8 )) || (( UBUNTU_VERSION == 20 )); then
|
||||
# Newer versin of glib required for QEMU.
|
||||
# Anything newer than this won't build on red hat 8
|
||||
STATUS="glib"
|
||||
if [ ! -e "$RISCV"/include/glib-2.0 ]; then
|
||||
section_header "Installing glib"
|
||||
pip install -U meson # Meson is needed to build glib
|
||||
cd "$RISCV"
|
||||
wget https://download.gnome.org/sources/glib/2.70/glib-2.70.5.tar.xz
|
||||
tar -xJf glib-2.70.5.tar.xz
|
||||
rm glib-2.70.5.tar.xz
|
||||
cd glib-2.70.5
|
||||
meson setup _build --prefix="$RISCV"
|
||||
meson compile -C _build
|
||||
meson install -C _build
|
||||
cd "$RISCV"
|
||||
rm -rf glib-2.70.5
|
||||
echo -e "${SUCCESS_COLOR}glib successfully installed!${ENDC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Newer version of gmp needed for sail-riscv model
|
||||
if (( RHEL_VERSION == 8 )); then
|
||||
STATUS="gmp"
|
||||
if [ ! -e "$RISCV"/include/gmp.h ]; then
|
||||
section_header "Installing gmp"
|
||||
cd "$RISCV"
|
||||
wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz
|
||||
tar -xJf gmp-6.3.0.tar.xz
|
||||
rm gmp-6.3.0.tar.xz
|
||||
cd gmp-6.3.0
|
||||
./configure --prefix="$RISCV"
|
||||
make -j "${NUM_THREADS}"
|
||||
make install
|
||||
cd "$RISCV"
|
||||
rm -rf gmp-6.3.0
|
||||
echo -e "${SUCCESS_COLOR}gmp successfully installed!${ENDC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# RISC-V GNU Toolchain (https://github.com/riscv-collab/riscv-gnu-toolchain)
|
||||
# The RISC-V GNU Toolchain includes the GNU Compiler Collection (gcc), GNU Binutils, Newlib,
|
||||
# and the GNU Debugger Project (gdb). It is a collection of tools used to compile RISC-V programs.
|
||||
# To install GCC from source can take hours to compile.
|
||||
# This configuration enables multilib to target many flavors of RISC-V.
|
||||
# This book is tested with GCC 13.2.0
|
||||
# Versions newer than 2023-12-20 fail to compile the RISC-V arch test with an error:
|
||||
# cvw/addins/riscv-arch-test/riscv-test-suite/rv32i_m/I/src/jalr-01.S:72: Error: illegal operands `la x0,5b'
|
||||
# PR *** submitted to fix riscv-arch-test to be compatible with latest GCC by modifying test_macros.h for TEST_JALR_OP
|
||||
cd $RISCV
|
||||
git clone https://github.com/riscv/riscv-gnu-toolchain
|
||||
cd riscv-gnu-toolchain
|
||||
./configure --prefix=${RISCV} --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;"
|
||||
make -j 8
|
||||
section_header "Installing/Updating RISC-V GNU Toolchain"
|
||||
STATUS="RISC-V GNU Toolchain"
|
||||
cd "$RISCV"
|
||||
if git_check "riscv-gnu-toolchain" "https://github.com/riscv/riscv-gnu-toolchain" "$RISCV/riscv-gnu-toolchain/stamps/build-gcc-newlib-stage2"; then
|
||||
cd riscv-gnu-toolchain
|
||||
git reset --hard && git clean -f && git checkout master && git pull
|
||||
./configure --prefix="${RISCV}" --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;"
|
||||
make -j "${NUM_THREADS}" 2>&1 | logger riscv-gnu-toolchain; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf riscv-gnu-toolchain
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}RISC-V GNU Toolchain successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}RISC-V GNU Toolchain already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# elf2hex (https://github.com/sifive/elf2hex)
|
||||
#The elf2hex utility to converts executable files into hexadecimal files for Verilog simulation.
|
||||
# The elf2hex utility to converts executable files into hexadecimal files for Verilog simulation.
|
||||
# Note: The exe2hex utility that comes with Spike doesn’t work for our purposes because it doesn’t
|
||||
# handle programs that start at 0x80000000. The SiFive version above is touchy to install.
|
||||
# For example, if Python version 2.x is in your path, it won’t install correctly.
|
||||
# Also, be sure riscv64-unknown-elf-objcopy shows up in your path in $RISCV/riscv-gnu-toolchain/bin
|
||||
# at the time of compilation, or elf2hex won’t work properly.
|
||||
cd $RISCV
|
||||
section_header "Installing/Updating elf2hex"
|
||||
STATUS="elf2hex"
|
||||
cd "$RISCV"
|
||||
export PATH=$RISCV/bin:$PATH
|
||||
git clone https://github.com/sifive/elf2hex.git
|
||||
cd elf2hex
|
||||
autoreconf -i
|
||||
./configure --target=riscv64-unknown-elf --prefix=$RISCV
|
||||
make
|
||||
make install
|
||||
if git_check "elf2hex" "https://github.com/sifive/elf2hex.git" "$RISCV/bin/riscv64-unknown-elf-elf2bin"; then
|
||||
cd elf2hex
|
||||
git reset --hard && git clean -f && git checkout master && git pull
|
||||
autoreconf -i
|
||||
./configure --target=riscv64-unknown-elf --prefix="$RISCV"
|
||||
make 2>&1 | logger elf2hex; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
make install 2>&1 | logger elf2hex; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf elf2hex
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}elf2hex successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}elf2hex already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# QEMU (https://www.qemu.org/docs/master/system/target-riscv.html)
|
||||
cd $RISCV
|
||||
git clone --recurse-submodules https://github.com/qemu/qemu
|
||||
cd qemu
|
||||
./configure --target-list=riscv64-softmmu --prefix=$RISCV
|
||||
make -j 8
|
||||
make install
|
||||
# QEMU is an open source machine emulator and virtualizer capable of emulating RISC-V
|
||||
section_header "Installing/Updating QEMU"
|
||||
STATUS="QEMU"
|
||||
cd "$RISCV"
|
||||
if git_check "qemu" "https://github.com/qemu/qemu" "$RISCV/include/qemu-plugin.h"; then
|
||||
cd qemu
|
||||
git reset --hard && git clean -f && git checkout master && git pull --recurse-submodules -j "${NUM_THREADS}"
|
||||
git submodule update --init --recursive
|
||||
./configure --target-list=riscv64-softmmu --prefix="$RISCV"
|
||||
make -j "${NUM_THREADS}" 2>&1 | logger qemu; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
make install 2>&1 | logger qemu; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf qemu
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}QEMU successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}QEMU already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# Spike (https://github.com/riscv-software-src/riscv-isa-sim)
|
||||
# Spike also takes a while to install and compile, but this can be done concurrently
|
||||
# with the GCC installation.
|
||||
cd $RISCV
|
||||
git clone https://github.com/riscv-software-src/riscv-isa-sim
|
||||
mkdir -p riscv-isa-sim/build
|
||||
cd riscv-isa-sim/build
|
||||
../configure --prefix=$RISCV
|
||||
make -j 8
|
||||
make install
|
||||
# Spike is a reference model for RISC-V. It is a functional simulator that can be used to run RISC-V programs.
|
||||
section_header "Installing/Updating SPIKE"
|
||||
STATUS="SPIKE"
|
||||
cd "$RISCV"
|
||||
if git_check "riscv-isa-sim" "https://github.com/riscv-software-src/riscv-isa-sim" "$RISCV/lib/pkgconfig/riscv-riscv.pc"; then
|
||||
cd riscv-isa-sim
|
||||
git reset --hard && git clean -f && git checkout master && git pull
|
||||
mkdir -p build
|
||||
cd build
|
||||
../configure --prefix="$RISCV"
|
||||
make -j "${NUM_THREADS}" 2>&1 | logger spike; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
make install 2>&1 | logger spike; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf riscv-isa-sim
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}Spike successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}Spike already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# Wally needs Verilator 5.021 or later.
|
||||
# Verilator needs to be built from scratch to get the latest version
|
||||
# apt-get install verilator installs version 4.028 as of 6/8/23
|
||||
sudo apt-get install -y perl g++ ccache help2man libgoogle-perftools-dev numactl perl-doc zlib1g
|
||||
cd $RISCV
|
||||
git clone https://github.com/verilator/verilator # Only first time
|
||||
# unsetenv VERILATOR_ROOT # For csh; ignore error if on bash
|
||||
unset VERILATOR_ROOT # For bash
|
||||
cd verilator
|
||||
git pull # Make sure git repository is up-to-date
|
||||
git checkout master
|
||||
autoconf # Create ./configure script
|
||||
./configure # Configure and create Makefile
|
||||
make -j 8 # Build Verilator itself (if error, try just 'make')
|
||||
sudo make install
|
||||
|
||||
# Sail (https://github.com/riscv/sail-riscv)
|
||||
# Sail is the new golden reference model for RISC-V. Sail is written in OCaml, which
|
||||
# is an object-oriented extension of ML, which in turn is a functional programming
|
||||
# language suited to formal verification. OCaml is installed with the opam OCcaml
|
||||
# package manager. Sail has so many dependencies that it can be difficult to install.
|
||||
# This script works for Ubuntu.
|
||||
|
||||
# Alex Solomatnikov found these commands worked to build Sail for Centos 8 on 1/12/24
|
||||
#sudo su -
|
||||
#dnf install ocaml.x86_64
|
||||
#pip3 install z3-solver
|
||||
#wget https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh
|
||||
#sh install.sh
|
||||
#opam init
|
||||
#exit
|
||||
#ocaml -version
|
||||
#opam switch create 5.1.0
|
||||
#eval $(opam config env)
|
||||
#git clone --recurse-submodules git@github.com:riscv/sail-riscv.git
|
||||
#cd sail-riscv
|
||||
#make
|
||||
#ARCH=RV32 make
|
||||
#ARCH=RV64 make
|
||||
#git log -1
|
||||
#cp -p c_emulator/riscv_sim_RV* /tools/sail-riscv/d7a3d8012fd579f40e53a29569141d72dd5e0c32/bin/.
|
||||
# Verilator (https://github.com/verilator/verilator)
|
||||
# Verilator is a fast open-source Verilog simulator that compiles synthesizable Verilog code into C++ code.
|
||||
# It is used for linting and simulation of Wally.
|
||||
# Verilator needs to be built from source to get the latest version (Wally needs 5.021 or later).
|
||||
section_header "Installing/Updating Verilator"
|
||||
STATUS="Verilator"
|
||||
cd "$RISCV"
|
||||
if git_check "verilator" "https://github.com/verilator/verilator" "$RISCV/share/pkgconfig/verilator.pc"; then
|
||||
unset VERILATOR_ROOT
|
||||
cd verilator
|
||||
git reset --hard && git clean -f && git checkout master && git pull
|
||||
autoconf
|
||||
./configure --prefix="$RISCV"
|
||||
make -j "${NUM_THREADS}" 2>&1 | logger verilator; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
make install 2>&1 | logger verilator; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf verilator
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}Verilator successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}Verilator already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# This was an earlier attemp to prepare to install Sail on RedHat 8
|
||||
# Do these commands only for RedHat / Rocky 8 to build from source.
|
||||
#cd $RISCV
|
||||
#git clone https://github.com/Z3Prover/z3.git
|
||||
#cd z3
|
||||
#python scripts/mk_make.py
|
||||
#cd build
|
||||
#make -j 8
|
||||
#make install
|
||||
#cd ../..
|
||||
#pip3 install chardet==3.0.4
|
||||
#pip3 install urllib3==1.22
|
||||
# Install opam from binary disribution on rhel as it is not available from dnf
|
||||
# Opam is needed to install the sail compiler
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
section_header "Installing/Updating Opam"
|
||||
STATUS="Opam"
|
||||
export OPAMROOTISOK=1 # Silence warnings about running opam as root
|
||||
cd "$RISCV"
|
||||
mkdir -p opam
|
||||
cd opam
|
||||
wget https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh
|
||||
printf '%s\n' "$RISCV"/bin Y | sh install.sh # the print command provides $RISCV/bin as the installation path when prompted
|
||||
cd "$RISCV"
|
||||
rm -rf opam
|
||||
echo -e "${SUCCESS_COLOR}Opam successfully installed/updated!${ENDC}"
|
||||
fi
|
||||
|
||||
cd $RISCV
|
||||
opam init -y --disable-sandboxing
|
||||
opam update
|
||||
opam upgrade
|
||||
opam switch create 5.1.0
|
||||
# Sail Compiler (https://github.com/rems-project/sail)
|
||||
# Sail is a formal specification language designed for describing the semantics of an ISA.
|
||||
# It is used to generate the RISC-V Sail Model, which is the golden reference model for RISC-V.
|
||||
# The Sail Compiler is written in OCaml, which is an object-oriented extension of ML, which in turn
|
||||
# is a functional programming language suited to formal verification. The Sail compiler is installed
|
||||
# with the opam OCaml package manager. It has so many dependencies that it can be difficult to install,
|
||||
# but a binary release of it should be available soon, removing the need to use opam.
|
||||
section_header "Installing/Updating Sail Compiler"
|
||||
STATUS="Sail Compiler"
|
||||
export OPAMROOTISOK=1 # Silence warnings about running opam as root
|
||||
export OPAMROOT="$RISCV"/opam
|
||||
cd "$RISCV"
|
||||
opam init -y --disable-sandboxing --no-setup --compiler=5.1.0
|
||||
eval "$(opam config env)"
|
||||
opam update -y
|
||||
opam upgrade -y
|
||||
opam install sail -y
|
||||
echo -e "${SUCCESS_COLOR}Sail Compiler successfully installed/updated!${ENDC}"
|
||||
|
||||
eval $(opam config env)
|
||||
git clone https://github.com/riscv/sail-riscv.git
|
||||
cd sail-riscv
|
||||
# For now, use checkout that is stable for Wally
|
||||
#git checkout 72b2516d10d472ac77482fd959a9401ce3487f60 # not new enough for Zicboz?
|
||||
export OPAMCLI=2.0 # Sail is not compatible with opam 2.1 as of 4/16/24
|
||||
ARCH=RV64 make -j 8 c_emulator/riscv_sim_RV64
|
||||
ARCH=RV32 make -j 8 c_emulator/riscv_sim_RV32
|
||||
sudo ln -sf $RISCV/sail-riscv/c_emulator/riscv_sim_RV64 /usr/bin/riscv_sim_RV64
|
||||
sudo ln -sf $RISCV/sail-riscv/c_emulator/riscv_sim_RV32 /usr/bin/riscv_sim_RV32
|
||||
# RISC-V Sail Model (https://github.com/riscv/sail-riscv)
|
||||
# The RISC-V Sail Model is the golden reference model for RISC-V. It is written in Sail (described above)
|
||||
section_header "Installing/Updating RISC-V Sail Model"
|
||||
STATUS="RISC-V Sail Model"
|
||||
if git_check "sail-riscv" "https://github.com/riscv/sail-riscv.git" "$RISCV/bin/riscv_sim_RV32"; then
|
||||
cd sail-riscv
|
||||
git reset --hard && git clean -f && git checkout master && git pull
|
||||
export OPAMCLI=2.0 # Sail is not compatible with opam 2.1 as of 4/16/24
|
||||
ARCH=RV64 make -j "${NUM_THREADS}" c_emulator/riscv_sim_RV64 2>&1 | logger sailModel; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
ARCH=RV32 make -j "${NUM_THREADS}" c_emulator/riscv_sim_RV32 2>&1 | logger sailModel; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
cp -f c_emulator/riscv_sim_RV64 "$RISCV"/bin/riscv_sim_RV64
|
||||
cp -f c_emulator/riscv_sim_RV32 "$RISCV"/bin/riscv_sim_RV32
|
||||
if [ "$clean" ]; then
|
||||
cd "$RISCV"
|
||||
rm -rf sail-riscv
|
||||
rm -rf opam
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}RISC-V Sail Model successfully installed/updated!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}RISC-V Sail Model already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
# riscof
|
||||
sudo -H pip3 install -U testresources riscv_config
|
||||
sudo -H pip3 install git+https://github.com/riscv/riscof.git
|
||||
|
||||
# Download OSU Skywater 130 cell library
|
||||
sudo mkdir -p $RISCV/cad/lib
|
||||
cd $RISCV/cad/lib
|
||||
sudo git clone https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12
|
||||
# OSU Skywater 130 cell library (https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12)
|
||||
# The OSU Skywater 130 cell library is a standard cell library that is used to synthesize Wally.
|
||||
section_header "Installing/Updating OSU Skywater 130 cell library"
|
||||
STATUS="OSU Skywater 130 cell library"
|
||||
mkdir -p "$RISCV"/cad/lib
|
||||
cd "$RISCV"/cad/lib
|
||||
if git_check "sky130_osu_sc_t12" "https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12" "$RISCV/cad/lib/sky130_osu_sc_t12" "main"; then
|
||||
cd sky130_osu_sc_t12
|
||||
git reset --hard && git clean -f && git checkout main && git pull
|
||||
echo -e "${SUCCESS_COLOR}OSU Skywater library successfully installed!${ENDC}"
|
||||
else
|
||||
echo -e "${SUCCESS_COLOR}OSU Skywater library already up to date.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# Buildroot and Linux testvectors
|
||||
# Buildroot is used to boot a minimal versio of Linux on Wally.
|
||||
# Testvectors are generated using QEMU.
|
||||
section_header "Installing Buildroot and Creating Linux testvectors"
|
||||
STATUS="Buildroot"
|
||||
if [ -z "$LD_LIBRARY_PATH" ]; then
|
||||
export LD_LIBRARY_PATH=$RISCV/lib:$RISCV/lib64:$RISCV/riscv64-unknown-elf/lib:$RISCV/lib/x86_64-linux-gnu/
|
||||
else
|
||||
export LD_LIBRARY_PATH=$RISCV/lib:$RISCV/lib64:$LD_LIBRARY_PATH:$RISCV/riscv64-unknown-elf/lib:$RISCV/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
cd "$dir"/../linux
|
||||
if [ ! -e "$RISCV"/buildroot ]; then
|
||||
make 2>&1 | logger buildroot; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
echo -e "${SUCCESS_COLOR}Buildroot successfully installed and Linux testvectors created!${ENDC}"
|
||||
elif [ ! -e "$RISCV"/linux-testvectors ]; then
|
||||
echo -e "${OK_COLOR}Buildroot already exists, but Linux testvectors are missing. Generating them now.${ENDC}"
|
||||
make dumptvs 2>&1 | logger buildroot; [ "${PIPESTATUS[0]}" == 0 ]
|
||||
echo -e "${SUCCESS_COLOR}Linux testvectors successfully generated!${ENDC}"
|
||||
else
|
||||
echo -e "${OK_COLOR}Buildroot and Linux testvectors already exist.${ENDC}"
|
||||
fi
|
||||
|
||||
|
||||
# Download site-setup scripts
|
||||
# The site-setup script is used to set up the environment for the RISC-V tools and EDA tools by setting
|
||||
# the PATH and other environment variables. It also sources the Python virtual environment.
|
||||
section_header "Downloading Site Setup Script"
|
||||
STATUS="site-setup scripts"
|
||||
cd "$RISCV"
|
||||
if [ ! -e "${RISCV}"/site-setup.sh ]; then
|
||||
wget https://raw.githubusercontent.com/openhwgroup/cvw/main/site-setup.sh
|
||||
wget https://raw.githubusercontent.com/openhwgroup/cvw/main/site-setup.csh
|
||||
# Add necessary lines to site-setup script to activate newer version of gcc for older distros
|
||||
if [ "$FAMILY" == rhel ]; then
|
||||
echo "# Activate newer gcc version" >> site-setup.sh
|
||||
echo "source /opt/rh/gcc-toolset-13/enable" >> site-setup.sh
|
||||
elif (( UBUNTU_VERSION == 20 )); then
|
||||
echo "# Activate newer gcc version" >> site-setup.sh
|
||||
echo "export PATH=\$RISCV/gcc-10/bin:\$PATH" >> site-setup.sh
|
||||
echo "# Activate newer gcc version" >> site-setup.csh
|
||||
echo "prepend PATH \$RISCV/gcc-10/bin" >> site-setup.csh
|
||||
fi
|
||||
echo -e "${SUCCESS_COLOR}Site setup script successfully downloaded!${ENDC}"
|
||||
echo -e "${WARNING_COLOR}Make sure to edit the environment variables in $RISCV/site-setup.sh (or .csh) to point to your installation of EDA tools and licensce files.${ENDC}"
|
||||
else
|
||||
echo -e "${OK_COLOR}Site setup script already exists. Not checking for updates to avoid overwritng modifications."
|
||||
echo -e "You may need to manually update it if there were changes upstream.${ENDC}"
|
||||
fi
|
||||
|
||||
echo -e "${SUCCESS_COLOR}${BOLD}\n\nINSTALLATION SUCCESSFUL!!!\n\n${ENDC}"
|
||||
|
@ -17,5 +17,5 @@ source ./setup.sh
|
||||
cd $PYTHON_SCRIPT
|
||||
pwd
|
||||
echo "Running python file"
|
||||
python nightly_build.py
|
||||
$RISCV/riscv-python/bin/python nightly_build.py
|
||||
echo "Finished"
|
||||
|
2
bin/wsim
2
bin/wsim
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# wsim
|
||||
# David_Harris@hmc.edu 5 April 2024
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
###########################################
|
||||
## fpgaTop.sv
|
||||
##
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
###########################################
|
||||
## probe.sh
|
||||
##
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
###########################################
|
||||
## proberange.sh
|
||||
##
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
###########################################
|
||||
## probe.sh
|
||||
##
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import re
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
all: rvvidaemon
|
||||
|
||||
rvvidaemon: rvvidaemon.o
|
||||
gcc $^ /opt/riscv/ImperasDV-OpenHW/lib/Linux64/ImperasLib/imperas.com/verification/riscv/1.0/model.so -o rvvidaemon
|
||||
gcc $^ $(RISCV)/ImperasDV-OpenHW/lib/Linux64/ImperasLib/imperas.com/verification/riscv/1.0/model.so -o rvvidaemon
|
||||
|
||||
%.o:%.c
|
||||
gcc -I/opt/riscv/ImperasDV-OpenHW/ImpProprietary/include/host -I/opt/riscv/ImperasDV-OpenHW/ImpPublic/include/host/rvvi/ -c $^ -o $@
|
||||
gcc -I$(RISCV)/ImperasDV-OpenHW/ImpProprietary/include/host -I$(RISCV)/ImperasDV-OpenHW/ImpPublic/include/host/rvvi/ -c $^ -o $@
|
||||
|
||||
clean:
|
||||
rm *.o rvvidaemon
|
||||
|
@ -1,4 +1,3 @@
|
||||
#BUILDROOT := ${RISCV}/buildroot-test
|
||||
BUILDROOT := buildroot
|
||||
IMAGES := ${BUILDROOT}/output/images
|
||||
WALLY := $(shell dirname $(shell pwd))
|
||||
@ -7,6 +6,13 @@ DIS := ${IMAGES}/disassembly
|
||||
BRPACKAGES := $(WALLYLINUX)/buildroot-packages
|
||||
BR2023 := $(WALLYLINUX)/buildroot-config-src/buildroot-2023.05.1
|
||||
|
||||
# set sudo if needed depending on $RISCV
|
||||
ifeq ($(shell mkdir -p $(RISCV)/.test > /dev/null 2>&1 ; echo $$?), 0)
|
||||
SUDO :=
|
||||
else
|
||||
SUDO := sudo
|
||||
endif
|
||||
|
||||
# Buildroot Config Stuff
|
||||
WALLYBOARDSRC := $(WALLYLINUX)/buildroot-config-src/wally
|
||||
WALLYBOARD := $(BUILDROOT)/board/wally
|
||||
@ -27,35 +33,34 @@ BINARIES := fw_jump.elf vmlinux busybox
|
||||
OBJDUMPS := $(foreach name, $(BINARIES), $(basename $(name) .elf))
|
||||
OBJDUMPS := $(foreach name, $(OBJDUMPS), $(DIS)/$(name).objdump)
|
||||
|
||||
.PHONY: all generate disassemble install clean cleanDTB cleanDriver test
|
||||
.PHONY: all generate disassemble install clean cleanDTB cleanDriver check_write_permissions
|
||||
|
||||
all: clean download Image disassemble install
|
||||
all: check_write_permissions clean download Image disassemble install dumptvs
|
||||
|
||||
all_nosudo: clean download Image disassemble install_nosudo
|
||||
check_write_permissions:
|
||||
ifeq ($(SUDO), sudo)
|
||||
@echo "Cannot write to '$(RISCV)'." \
|
||||
"Using sudo (you may be prompted for your password several times throughout the install)"
|
||||
endif
|
||||
@$(SUDO) mkdir -p $(RISCV)/.test || \
|
||||
(echo "ERROR: Still unable to write to '$(RISCV)'." >&2 \
|
||||
&& exit 1)
|
||||
@$(SUDO) rm -r $(RISCV)/.test
|
||||
|
||||
Image:
|
||||
bash -c "unset LD_LIBRARY_PATH; make -C $(BUILDROOT) --jobs;"
|
||||
bash -c "unset LD_LIBRARY_PATH; $(MAKE) -C $(BUILDROOT)"
|
||||
$(MAKE) generate
|
||||
@echo "Buildroot Image successfully generated."
|
||||
|
||||
install:
|
||||
sudo rm -rf $(RISCV)/$(BUILDROOT)
|
||||
sudo mv $(BUILDROOT) $(RISCV)/$(BUILDROOT)
|
||||
install: check_write_permissions
|
||||
$(SUDO) rm -rf $(RISCV)/$(BUILDROOT)
|
||||
$(SUDO) mv $(BUILDROOT) $(RISCV)/$(BUILDROOT)
|
||||
@echo "Buildroot successfully installed."
|
||||
|
||||
install_nosudo:
|
||||
rm -rf $(RISCV)/$(BUILDROOT)
|
||||
mv $(BUILDROOT) $(RISCV)/$(BUILDROOT)
|
||||
|
||||
dumptvs:
|
||||
sudo mkdir -p $(RISCV)/linux-testvectors
|
||||
cd testvector-generation; sudo ./genInitMem.sh
|
||||
|
||||
dumptvs_nosudo:
|
||||
mkdir -p $(RISCV)/linux-testvectors
|
||||
dumptvs: check_write_permissions
|
||||
$(SUDO) mkdir -p $(RISCV)/linux-testvectors
|
||||
cd testvector-generation; ./genInitMem.sh
|
||||
|
||||
# Temp rule for debugging
|
||||
test:
|
||||
echo $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$")
|
||||
@echo "Testvectors successfully generated."
|
||||
|
||||
generate: $(DTB) $(IMAGES)
|
||||
|
||||
@ -68,28 +73,27 @@ $(IMAGES):
|
||||
|
||||
$(RISCV):
|
||||
@ echo "ERROR: No $(RISCV) directory. Make sure you have installed the Wally Toolchain."
|
||||
@ echo "this can be done with <WALLY>/bin/wally-tool-chain-install.sh"
|
||||
@ echo "and sourced setup.sh"
|
||||
|
||||
# Disassembly rules ---------------------------------------------------
|
||||
|
||||
|
||||
disassemble:
|
||||
rm -rf $(BUILDROOT)/output/images/disassembly
|
||||
find $(BUILDROOT)/output/build/linux-* -maxdepth 1 -name "vmlinux" | xargs cp -t $(BUILDROOT)/output/images/
|
||||
mkdir -p $(DIS)
|
||||
make -j $(OBJDUMPS)
|
||||
$(MAKE) $(OBJDUMPS)
|
||||
# extract rootfs
|
||||
mkdir -p $(BUILDROOT)/output/images/disassembly/rootfs
|
||||
echo "Ignore error about dev/console when extracting rootfs from rootfs.cpio"
|
||||
@echo "Ignore error about dev/console when extracting rootfs from rootfs.cpio"
|
||||
-cpio -i -D $(BUILDROOT)/output/images/disassembly/rootfs < $(BUILDROOT)/output/images/rootfs.cpio
|
||||
@echo "Disassembly successfully completed."
|
||||
|
||||
$(DIS)/%.objdump: $(IMAGES)/%.elf
|
||||
riscv64-unknown-elf-objdump -DS $< >> $@
|
||||
extractFunctionRadix.sh $@
|
||||
$(WALLY)/bin/extractFunctionRadix.sh $@
|
||||
|
||||
$(DIS)/%.objdump: $(IMAGES)/%
|
||||
riscv64-unknown-elf-objdump -S $< >> $@
|
||||
extractFunctionRadix.sh $@
|
||||
$(WALLY)/bin/extractFunctionRadix.sh $@
|
||||
|
||||
$(IMAGES)/vmlinux:
|
||||
linuxDir=$$(find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$") ;\
|
||||
@ -100,10 +104,9 @@ $(IMAGES)/busybox:
|
||||
cp $$busyboxDir/busybox $@ ;\
|
||||
|
||||
# Generating new Buildroot directories --------------------------------
|
||||
|
||||
# This directive should be run as: make install BUILDROOT=path/to/buildroot
|
||||
download: $(WALLYBOARD)
|
||||
cp $(WALLYBOARD)/main.config $(BUILDROOT)/.config
|
||||
@echo "Buildroot successfully download."
|
||||
|
||||
# CONFIG DEPENDENCIES 2023.05.1 ---------------------------------------
|
||||
$(WALLYBOARD): $(BUILDROOT)
|
||||
|
@ -5,35 +5,30 @@
|
||||
1. [Setting up Buildroot](#buildroot)
|
||||
2. [Generating Device Tree Binaries](#devicetree)
|
||||
3. [Disassembling the Binaries for Debugging](#disassembly)
|
||||
4. [Creating a Bootable SD Card](#sdcard)
|
||||
4. [Generating test-vectors for regression](#testvectors)
|
||||
5. [Creating a Bootable SD Card](#sdcard)
|
||||
|
||||
## Setting up Buildroot <a name="buildroot"></a>
|
||||
|
||||
In order to generate the Linux and boot stage binaries compatible with Wally, Buildroot is used for cross-compilation. To set up a Buildroot directory, configuration files for Buildroot, Linux, and Busybox must be copied into the correct locations inside the main Buildroot directory. This can be done automatically using the Makefile inside Wally's Linux subdirectory (this one). To install and patch a fresh Buildroot directory, type:
|
||||
In order to generate the Linux and boot stage binaries compatible with Wally, Buildroot is used for cross-compilation.
|
||||
|
||||
$ make install BUILDROOT=path/to/buildroot
|
||||
|
||||
You can override the `BUILDROOT` variable to place buildroot where you want it. By default it will be placed at `/opt/riscv/buildroot`. In addition to copying the configuration files, it will install the buildroot package needed to build the SD card driver for Linux.
|
||||
|
||||
To install a new buildroot directory, build the binaries, and generate the device tree binaries in one command, use:
|
||||
|
||||
$ make BUILDROOT=path/to/buildroot
|
||||
|
||||
Or simply use the default buildroot location in `/opt/riscv`:
|
||||
To set up a Buildroot directory, configuration files for Buildroot, Linux, and Busybox must be copied into the correct locations inside the main Buildroot directory. Buildroot and device tree binaries must be generated as well. This can all be done automatically using the Makefile inside Wally's Linux subdirectory (this one). To install a new buildroot directory, build the Buildroot binaries, generate the device tree binaries, generate test-vectors for simulation, and install the buildroot package needed to build the SD card driver for Linux, run:
|
||||
|
||||
$ make
|
||||
|
||||
Note that the `$RISCV` variable cannot be set prior to building in buildroot or the build will fail. It is best to run `source ./setup.sh` to alter your `$PATH` and set the `$RISCV` variable after buildroot has succesfully built the binaries. If you're new to buildroot, you can find the binaries in `<BUILDROOT>/output/images`.
|
||||
This installs to the `$RISCV` directory. Buildroot itself is installed to `$RISCV/buildroot` and the test-vectors are installed to `$RISCV/linux-testvectors`.
|
||||
|
||||
Optionally, you can override the `BUILDROOT` variable to install a different buildroot source directory.
|
||||
|
||||
$ make install BUILDROOT=path/to/buildroot
|
||||
|
||||
## Generating Device Tree Binaries <a name="devicetree"></a>
|
||||
|
||||
The device tree files for the various FPGA's Wally supports, as well as QEMU's device tree for the virt machine, are located in the `./devicetree` subdirectory. These device tree files are necessary for the boot process. In order to build the device tree binaries (.dtb) from the device tree sources (.dts), we can build all of them at once using:
|
||||
The device tree files for the various FPGA's Wally supports, as well as QEMU's device tree for the virt machine, are located in the `./devicetree` subdirectory. These device tree files are necessary for the boot process.
|
||||
|
||||
$ make generate BUILDROOT=path/to/buildroot
|
||||
They are built automatically using the main `make` command. To build the device tree binaries (.dtb) from the device tree sources (.dts) separately, we can build all of them at once using:
|
||||
|
||||
Or for the default buildroot location:
|
||||
|
||||
$ make generate
|
||||
$ make generate #optionally override BUILDROOT
|
||||
|
||||
The .dts files will end up in the `<BUILDROOT>/output/images` folder of your chosen buildroot directory.
|
||||
|
||||
@ -41,21 +36,25 @@ The .dts files will end up in the `<BUILDROOT>/output/images` folder of your cho
|
||||
|
||||
By using the `riscv64-unknown-elf-objdump` utility, we can disassemble the binaries in `<BUILDROOT>/output/images` so that we can explore the resulting machine code instructions and see what assembly or C code the instructions came from, along with the corresponding addresses. This is useful during debugging in order to trace how code is being executed.
|
||||
|
||||
To create the disassembled binaries, run:
|
||||
The disassembled binaries are built automatically using the main `make` command. To create the disassembled binaries separately, run:
|
||||
|
||||
$ make disassemble BUILDROOT=path/to/buildroot
|
||||
$ make disassemble #optionally override BUILDROOT
|
||||
|
||||
You'll find the resulting disassembled files in `<BUILDROOT>/output/images/disassembly`.
|
||||
|
||||
## Generate Memory Files for Linux Boot <a name="testvectors"></a>
|
||||
|
||||
Running a linux boot simulation uses a preloaded bootrom and ram memory. We use QEMU to generate these preloaded memory files. The files are output to $RISCV/linux-testvectors. The memory files are generated automatically when using the main `make` command. Alternatively, they can be generated by running
|
||||
|
||||
make dumptvs
|
||||
|
||||
## Creating a Bootable SD Card <a name="sdcard"></a>
|
||||
|
||||
To flash a bootable sd card for Wally's bootloader, use the `flash-sd.sh` script located in `<WALLY>/linux/sdcard`. The script allows you to specify which buildroot directory you would like to use and to specify the device tree. By default it is set up for the default location of buildroot in `/opt/riscv` and uses the vcu108 device tree. To use the script with your own buildroot directory and device tree, type:
|
||||
To flash a bootable sd card for Wally's bootloader, use the `flash-sd.sh` script located in `<WALLY>/linux/sdcard`. The script allows you to specify which buildroot directory you would like to use and to specify the device tree. By default it is set up for the default location of buildroot in `$RISCV` and uses the vcu108 device tree. To use the script with your own buildroot directory and device tree, type:
|
||||
|
||||
$ cd sdcard
|
||||
$ ./flash-sd.sh -b <path/to/buildroot> -d <device tree name> <DEVICE>
|
||||
|
||||
for example
|
||||
for example
|
||||
|
||||
$ ./flash-sd.sh -b ~/repos/buildroot -d wally-vcu118.dtb /dev/sdb
|
||||
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
RISCV := /opt/riscv
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all:
|
||||
|
@ -25,7 +25,6 @@ ERRORTEXT="$BOLDRED"ERROR:"$NC"
|
||||
WARNINGTEXT="$BOLDYELLOW"Warning:"$NC"
|
||||
|
||||
# Default values for buildroot and device tree
|
||||
RISCV=/opt/riscv
|
||||
BUILDROOT=$RISCV/buildroot
|
||||
DEVICE_TREE=wally-vcu108.dtb
|
||||
MNT_DIR=wallyimg
|
||||
|
@ -9,7 +9,6 @@ NC='\033[0m'
|
||||
NAME="$GREEN"${0:2}"$NC"
|
||||
|
||||
# File location variables
|
||||
RISCV=/opt/riscv
|
||||
IMAGES=$RISCV/buildroot/output/images
|
||||
FW_JUMP=$IMAGES/fw_jump.bin
|
||||
LINUX_KERNEL=$IMAGES/Image
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# disassembleBootTrace.py
|
||||
# David_Harris@hmc.edu 22 November 2023
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, os
|
||||
from functools import reduce
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
tcpPort=1235
|
||||
imageDir=$RISCV/buildroot/output/images
|
||||
tvDir=$RISCV/linux-testvectors
|
||||
@ -7,28 +8,28 @@ ramFile="$tvDir/ram.bin"
|
||||
rawBootmemFile="$tvDir/bootmemGDB.bin"
|
||||
bootmemFile="$tvDir/bootmem.bin"
|
||||
rawUntrimmedBootmemFile="$tvDir/untrimmedBootmemFileGDB.bin"
|
||||
untrimmedBootmemFile="$tvDir/untrimmedBootmemFile.bin"
|
||||
DEVICE_TREE=${imageDir}/wally-virt.dtb
|
||||
|
||||
if [ ! -d "$tvDir" ]; then
|
||||
echo "Error: linux testvector directory $tvDir not found!">&2
|
||||
echo "Please create it. For example:">&2
|
||||
echo " sudo mkdir -p $tvDir">&2
|
||||
if ! mkdir -p "$tvDir"; then
|
||||
echo "Error: unable to create linux testvector directory $tvDir!">&2
|
||||
echo "Please try running as sudo.">&2
|
||||
exit 1
|
||||
fi
|
||||
test -w $tvDir
|
||||
if [ ! $? -eq 0 ]; then
|
||||
if ! test -w "$tvDir"; then
|
||||
echo "Using sudo to gain access to $tvDir"
|
||||
if ! sudo chmod -R a+rw "$tvDir"; then
|
||||
echo "Error: insuffcient write privileges for linux testvector directory $tvDir !">&2
|
||||
echo "Please chmod it. For example:">&2
|
||||
echo " sudo chmod -R a+rw $tvDir">&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Launching QEMU in replay mode!"
|
||||
(qemu-system-riscv64 \
|
||||
-M virt -m 256M -dtb $DEVICE_TREE \
|
||||
-M virt -m 256M -dtb "$DEVICE_TREE" \
|
||||
-nographic \
|
||||
-bios $imageDir/fw_jump.elf -kernel $imageDir/Image -append "root=/dev/vda ro" -initrd $imageDir/rootfs.cpio \
|
||||
-bios "$imageDir"/fw_jump.elf -kernel "$imageDir"/Image -append "root=/dev/vda ro" -initrd "$imageDir"/rootfs.cpio \
|
||||
-gdb tcp::$tcpPort -S) \
|
||||
& riscv64-unknown-elf-gdb --quiet \
|
||||
-ex "set pagination off" \
|
||||
@ -44,15 +45,10 @@ echo "Launching QEMU in replay mode!"
|
||||
-ex "kill" \
|
||||
-ex "q"
|
||||
|
||||
#-ex "printf \"Warning - please verify that the second half of $rawUntrimmedBootmemFile is all 0s\n\"" \
|
||||
#-ex "printf \"Creating $rawUntrimmedBootmemFile\n\"" \
|
||||
#-ex "dump binary memory $rawUntrimmedBootmemFile 0x1000 0x2fff" \
|
||||
|
||||
echo "Changing Endianness"
|
||||
make fixBinMem
|
||||
./fixBinMem "$rawRamFile" "$ramFile"
|
||||
./fixBinMem "$rawBootmemFile" "$bootmemFile"
|
||||
#./fixBinMem "$rawUntrimmedBootmemFile" "$untrimmedBootmemFile" # doesn't seem to be used for anything
|
||||
rm -f "$rawRamFile" "$rawBootmemFile" "$rawUntrimmedBootmemFile"
|
||||
|
||||
echo "genInitMem.sh completed!"
|
||||
@ -60,4 +56,3 @@ echo "You may want to restrict write access to $tvDir now and give cad ownership
|
||||
echo "Run the following:"
|
||||
echo " sudo chown -R cad:cad $tvDir"
|
||||
echo " sudo chmod -R go-w $tvDir"
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, fileinput, re
|
||||
|
||||
# Ross Thompson
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, os
|
||||
from functools import reduce
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import fileinput, sys
|
||||
|
||||
parseState = "idle"
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, os
|
||||
|
||||
################
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, os
|
||||
|
||||
################
|
||||
|
24
setup.csh
24
setup.csh
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/csh
|
||||
|
||||
# setup.csh
|
||||
# james.stine@okstate.edu 18 February 2023
|
||||
@ -11,7 +11,17 @@ alias extend 'if (-d \!:2) if ("$\!:1" \!~ *"\!:2"*) setenv \!:1 ${\!:1}:\!:2;ec
|
||||
alias prepend 'if (-d \!:2) if ("$\!:1" \!~ *"\!:2"*) setenv \!:1 "\!:2":${\!:1};echo Added \!:2 to \!:1'
|
||||
|
||||
# Path to RISC-V Tools
|
||||
setenv RISCV /opt/riscv # change this if you installed the tools in a different location
|
||||
if ( -d /opt/riscv ) then
|
||||
setenv RISCV /opt/riscv
|
||||
else if ( -d ~/riscv ) then
|
||||
setenv RISCV ~/riscv
|
||||
else
|
||||
# set the $RISCV directory here and remove the subsequent two lines
|
||||
# setenv RISCV
|
||||
echo "\$RISCV directory not found. Checked /opt/riscv and ~/riscv. Edit setup.csh to point to your custom \$RISCV directory."
|
||||
exit 1;
|
||||
endif
|
||||
echo \$RISCV set to "${RISCV}"
|
||||
|
||||
# Path to Wally repository
|
||||
setenv WALLY $PWD
|
||||
@ -19,6 +29,14 @@ echo '$WALLY set to ' ${WALLY}
|
||||
# utility functions in Wally repository
|
||||
extend PATH $WALLY/bin
|
||||
|
||||
source $RISCV/site-setup.csh
|
||||
# Verilator needs a larger stack to simulate CORE-V Wally
|
||||
limit stacksize unlimited
|
||||
|
||||
# load site licenses and tool locations
|
||||
if ( -e "${RISCV}"/site-setup.csh ) then
|
||||
source $RISCV/site-setup.csh
|
||||
else
|
||||
echo "site-setup.csh not found in \$RISCV directory. Rerun wally-toolchain-install.sh to automatically download it."
|
||||
fi
|
||||
|
||||
echo "setup done"
|
||||
|
26
setup.sh
26
setup.sh
@ -14,23 +14,33 @@
|
||||
echo "Executing Wally setup.sh"
|
||||
|
||||
# Path to RISC-V Tools
|
||||
export RISCV=/opt/riscv # change this if you installed the tools in a different location
|
||||
if [ -d /opt/riscv ]; then
|
||||
export RISCV=/opt/riscv
|
||||
elif [ -d ~/riscv ]; then
|
||||
export RISCV=~/riscv
|
||||
else
|
||||
# set the $RISCV directory here and remove the subsequent two lines
|
||||
# export RISCV=
|
||||
echo "\$RISCV directory not found. Checked /opt/riscv and ~/riscv. Edit setup.sh to point to your custom \$RISCV directory."
|
||||
exit 1
|
||||
fi
|
||||
echo \$RISCV set to "${RISCV}"
|
||||
|
||||
# Path to Wally repository
|
||||
WALLY=$(dirname ${BASH_SOURCE[0]:-$0})
|
||||
WALLY=$(dirname "${BASH_SOURCE[0]:-$0}")
|
||||
export WALLY=$(cd "$WALLY" && pwd)
|
||||
echo \$WALLY set to ${WALLY}
|
||||
echo \$WALLY set to "${WALLY}"
|
||||
# utility functions in Wally repository
|
||||
export PATH=$WALLY/bin:$PATH
|
||||
|
||||
# Verilator needs a larger stack to simulate CORE-V Wally
|
||||
ulimit -c 234613
|
||||
# Verilator needs a larger core file size to simulate CORE-V Wally
|
||||
ulimit -c 300000
|
||||
|
||||
# load site licenses and tool locations
|
||||
if [ -f ${RISCV}/site-setup.sh ]; then
|
||||
source ${RISCV}/site-setup.sh
|
||||
if [ -e "${RISCV}"/site-setup.sh ]; then
|
||||
source "${RISCV}"/site-setup.sh
|
||||
else
|
||||
source ${WALLY}/site-setup.sh
|
||||
echo "site-setup.sh not found in \$RISCV directory. Rerun wally-toolchain-install.sh to automatically download it."
|
||||
fi
|
||||
|
||||
echo "setup done"
|
||||
|
@ -41,9 +41,9 @@ QuestaFunctCoverage: ${SIM}/questa/fcov_ucdb/rv64gc_WALLY-COV-add.elf.ucdb
|
||||
imperasdv_cov:
|
||||
touch ${SIM}/seed0.txt
|
||||
echo "0" > ${SIM}/seed0.txt
|
||||
# /opt/riscv/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --verbose --seed 0 --search ${WALLY}/tests/riscof/work/wally-riscv-arch-test/rv64i_m
|
||||
# /opt/riscv/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --elf ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/dut/my.elf --seed ${SIM}/seed0.txt --coverdb ${SIM}/cov/rv64gc_arch64i.ucdb --verbose
|
||||
# /opt/riscv/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --elf ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/dut/my.elf --seed ${SIM}/seed0.txt --coverdb ${SIM}/questa/riscv.ucdb --verbose
|
||||
# ${RISCV}/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --verbose --seed 0 --search ${WALLY}/tests/riscof/work/wally-riscv-arch-test/rv64i_m
|
||||
# ${RISCV}/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --elf ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/dut/my.elf --seed ${SIM}/seed0.txt --coverdb ${SIM}/cov/rv64gc_arch64i.ucdb --verbose
|
||||
# ${RISCV}/ImperasDV-OpenHW/scripts/cvw/run-elf-cov.bash --elf ${WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/dut/my.elf --seed ${SIM}/seed0.txt --coverdb ${SIM}/questa/riscv.ucdb --verbose
|
||||
run-elf-cov.bash --elf ${WALLY}/tests/riscvdv/asm_test/riscv_arithmetic_basic_test_0.elf --seed ${SIM}/questa/seed0.txt --coverdb ${SIM}/questa/riscv.ucdb --verbose
|
||||
vcover report -details -html ${SIM}/questa/riscv.ucdb
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
#
|
||||
# regression-wally
|
||||
|
@ -1,10 +1,11 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import sys, os, subprocess
|
||||
|
||||
def main():
|
||||
RISCV = os.environ.get("RISCV")
|
||||
maxGoodCount = 400e6 # num instrs that execute sucessfully starting from 0
|
||||
currInstrCount = maxGoodCount
|
||||
linuxTestvectors = "/opt/riscv/linux-testvectors"
|
||||
linuxTestvectors = RISCV+"/linux-testvectors"
|
||||
if not os.path.exists(linuxTestvectors):
|
||||
sys.stderr.write("Error: Linux testvectors not found at "+linuxTestvectors+"\n")
|
||||
exit(1)
|
||||
@ -22,7 +23,7 @@ def main():
|
||||
break
|
||||
checkpoint = checkpointList[0]
|
||||
logFile = logDir+"checkpoint"+str(checkpoint)+".log"
|
||||
runCommand="{\nvsim -c <<!\ndo wally-batch.do buildroot buildroot /opt/riscv 0 "+str(checkpoint+1)+" "+str(checkpoint)+"\n!\n} | tee "+logFile
|
||||
runCommand="{\nvsim -c <<!\ndo wally-batch.do buildroot buildroot "+RISCV+" 0 "+str(checkpoint+1)+" "+str(checkpoint)+"\n!\n} | tee "+logFile
|
||||
print(runCommand)
|
||||
os.system(runCommand)
|
||||
try:
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/bash
|
||||
#!/bin/bash
|
||||
|
||||
# sim-testfloat-verilator
|
||||
# David_Harris@hmc.edu 3 April 2024
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
import os,sys,subprocess
|
||||
from datetime import datetime, timezone, timedelta
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# run_vcs
|
||||
# David_Harris@hmc.edu 2 July 2024
|
||||
|
@ -8,26 +8,39 @@ setenv MGLS_LICENSE_FILE 27002@zircon.eng.hmc.edu # Change this
|
||||
setenv SNPSLMD_LICENSE_FILE 27020@zircon.eng.hmc.edu # Change this to your Synopsys license server
|
||||
setenv QUESTAPATH /cad/mentor/questa_sim-2022.4_2/questasim/bin # Change this for your path to Questa
|
||||
setenv SNPSPATH /cad/synopsys/SYN/bin # Change this for your path to Design Compiler
|
||||
setenv VCSPATH /cad/synopsys/vcs/U-2023.03-SP2-4/bin # Change this for your path to Synopsys VCS
|
||||
|
||||
# Tools
|
||||
# Questa and Synopsys
|
||||
extend PATH $QUESTAPATH
|
||||
extend PATH $SNPSPATH
|
||||
extend PATH $VCSPATH
|
||||
|
||||
# GCC
|
||||
prepend LD_LIBRARY_PATH $RISCV/riscv-gnu-toolchain/lib
|
||||
prepend LD_LIBRARY_PATH $RISCV/riscv-gnu-toolchain/riscv64-unknown-elf/lib
|
||||
extend PATH $RISCV/riscv-gnu-toolchain/bin # GCC tools
|
||||
extend PATH $RISCV/riscv-gnu-toolchain/riscv64-unknown-elf/bin # GCC tools
|
||||
if ( ! $?LD_LIBRARY_PATH ) then
|
||||
setenv LD_LIBRARY_PATH $RISCV/riscv64-unknown-elf/lib
|
||||
else
|
||||
extend LD_LIBRARY_PATH $RISCV/riscv64-unknown-elf/lib
|
||||
endif
|
||||
|
||||
# Spike
|
||||
# RISC-V Tools
|
||||
extend LD_LIBRARY_PATH $RISCV/lib
|
||||
extend LD_LIBRARY_PATH $RISCV/lib64
|
||||
extend LD_LIBRARY_PATH $RISCV/lib/x86_64-linux-gnu/
|
||||
extend PATH $RISCV/bin
|
||||
|
||||
# Verilator
|
||||
extend PATH /usr/local/bin/verilator # Change this for your path to Verilator
|
||||
# Verilator needs a larger stack to simulate CORE-V Wally
|
||||
limit stacksize unlimited
|
||||
# Activate riscv-python Virtual Environment
|
||||
if ( -e "$RISCV"/riscv-python/bin/activate ) then
|
||||
source "$RISCV"/riscv-python/bin/activate.csh
|
||||
else
|
||||
echo "Python virtual environment not found. Rerun wally-toolchain-install.sh to automatically create it."
|
||||
exit 1
|
||||
endif
|
||||
|
||||
# environment variables needed for RISCV-DV
|
||||
setenv RISCV_GCC `which riscv64-unknown-elf-gcc` # Copy this as it is
|
||||
setenv RISCV_OBJCOPY `which riscv64-unknown-elf-objcopy` # Copy this as it is
|
||||
setenv SPIKE_PATH $RISCV/bin # Change this for your path to riscv-isa-sim (spike)
|
||||
|
||||
# Imperas; put this in if you are using it
|
||||
#set path = ($RISCV/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64 $path)
|
||||
@ -35,12 +48,11 @@ limit stacksize unlimited
|
||||
|
||||
setenv IDV $RISCV/ImperasDV-OpenHW
|
||||
if ($?IDV) then
|
||||
# echo "Imperas exists"
|
||||
# echo "Imperas exists"
|
||||
setenv IMPERAS_HOME $IDV/Imperas
|
||||
setenv IMPERAS_PERSONALITY CPUMAN_DV_ASYNC
|
||||
setenv ROOTDIR ~/
|
||||
source ${IMPERAS_HOME}/bin/setup.sh
|
||||
setupImperas ${IMPERAS_HOME}
|
||||
extend PATH $IDV/scripts/cvw
|
||||
endfi
|
||||
|
||||
endif
|
||||
|
@ -10,43 +10,51 @@
|
||||
# license servers and commercial CAD tool paths
|
||||
# Must edit these based on your local environment.
|
||||
export MGLS_LICENSE_FILE=27002@zircon.eng.hmc.edu # Change this to your Siemens license server for Questa
|
||||
export SNPSLMD_LICENSE_FILE=27020@zircon.eng.hmc.edu # Change this to your Synopsys license server for Design Compiler
|
||||
export SNPSLMD_LICENSE_FILE=27020@zircon.eng.hmc.edu # Change this to your Synopsys license server
|
||||
export QUESTA_HOME=/cad/mentor/questa_sim-2023.4/questasim # Change this for your path to Questa, excluding bin
|
||||
export DC_HOME=/cad/synopsys/SYN # Change this for your path to Synopsys Design Compiler, excluding bin
|
||||
export VCS_HOME=/cad/synopsys/vcs/U-2023.03-SP2-4 # Change this for your path to Synopsys VCS, exccluding bin
|
||||
export VCS_HOME=/cad/synopsys/vcs/U-2023.03-SP2-4 # Change this for your path to Synopsys VCS, excluding bin
|
||||
|
||||
# Tools
|
||||
# Questa and Synopsys
|
||||
export PATH=$QUESTA_HOME/bin:$DC_HOME/bin:$VCS_HOME/bin:$PATH
|
||||
|
||||
# GCC
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RISCV/riscv-gnu-toolchain/lib:$RISCV/riscv-gnu-toolchain/riscv64-unknown-elf/lib
|
||||
if [ -z "$LD_LIBRARY_PATH" ]; then
|
||||
export LD_LIBRARY_PATH=$RISCV/riscv64-unknown-elf/lib
|
||||
else
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RISCV/riscv64-unknown-elf/lib
|
||||
fi
|
||||
|
||||
# Spike
|
||||
export LD_LIBRARY_PATH=$RISCV/lib:$LD_LIBRARY_PATH
|
||||
# RISC-V Tools
|
||||
export LD_LIBRARY_PATH=$RISCV/lib:$RISCV/lib64:$LD_LIBRARY_PATH:$RISCV/lib/x86_64-linux-gnu/
|
||||
export PATH=$PATH:$RISCV/bin
|
||||
|
||||
# Verilator
|
||||
export PATH=/usr/local/bin/verilator:$PATH # Change this for your path to Verilator
|
||||
# Activate riscv-python Virtual Environment
|
||||
if [ -e "$RISCV"/riscv-python/bin/activate ]; then
|
||||
source "$RISCV"/riscv-python/bin/activate
|
||||
else
|
||||
echo "Python virtual environment not found. Rerun wally-toolchain-install.sh to automatically create it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# environment variables needed for RISCV-DV
|
||||
export RISCV_GCC=`which riscv64-unknown-elf-gcc` # Copy this as it is
|
||||
export RISCV_OBJCOPY=`which riscv64-unknown-elf-objcopy` # Copy this as it is
|
||||
export SPIKE_PATH=/usr/bin # Change this for your path to riscv-isa-sim (spike)
|
||||
# Environment variables needed for RISCV-DV
|
||||
export RISCV_GCC=$(which riscv64-unknown-elf-gcc) # Copy this as it is
|
||||
export RISCV_OBJCOPY=$(which riscv64-unknown-elf-objcopy) # Copy this as it is
|
||||
export SPIKE_PATH=$RISCV/bin # Copy this as it is
|
||||
|
||||
# Imperas OVPsim; put this in if you are using it
|
||||
#export PATH=$RISCV/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64:$PATH
|
||||
#export LD_LIBRARY_PATH=$RISCV/imperas_riscv_tests/riscv-ovpsim-plus/bin/Linux64:$LD_LIBRARY_PATH
|
||||
|
||||
# Imperas DV setup
|
||||
export IDV=$RISCV/ImperasDV-OpenHW
|
||||
if [ -e "$IDV" ]; then
|
||||
# echo "Imperas exists"
|
||||
# echo "Imperas exists"
|
||||
export IMPERAS_HOME=$IDV/Imperas
|
||||
export IMPERAS_PERSONALITY=CPUMAN_DV_ASYNC
|
||||
export ROOTDIR=~/
|
||||
source ${IMPERAS_HOME}/bin/setup.sh
|
||||
setupImperas ${IMPERAS_HOME}
|
||||
source "${IMPERAS_HOME}"/bin/setup.sh
|
||||
setupImperas "${IMPERAS_HOME}"
|
||||
export PATH=$IDV/scripts/cvw:$PATH
|
||||
fi
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADD-SUB-SLT-SLTU-XOR-OR-AND.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADD-SUB.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADDIW-SLLIW-SRLIW-SRAIW.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADDW-SUBW-SLLW-SRLW-SRAW.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-branch.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADD-SUB.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-JAL.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-LOAD.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python3
|
||||
###################################################################################################
|
||||
# testgen-PIPELINE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-SLL-SRL-SRA.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADD-SUB.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-ADD-SUB.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-STORE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-VIRTUALMEMORY.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/perl -W
|
||||
#!/usr/bin/env -S perl -w
|
||||
|
||||
###########################################
|
||||
## extractArea.pl
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
# Madeleine Masser-Frye (mmmasserfrye@hmc.edu) 06/2022
|
||||
from collections import namedtuple
|
||||
import re
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Python regression test for DC
|
||||
# Madeleine Masser-Frye mmasserfrye@hmc.edu 5/22
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Python regression test for DC
|
||||
# Madeleine Masser-Frye mmasserfrye@hmc.edu 5/22
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
wrapperGen.py
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
# Madeleine Masser-Frye mmasserfrye@hmc.edu 1/2023
|
||||
|
||||
import subprocess
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys, fileinput
|
||||
|
||||
|
@ -59,14 +59,14 @@ module testbench;
|
||||
|
||||
`ifdef VERILATOR
|
||||
import "DPI-C" function string getenvval(input string env_name);
|
||||
string RISCV_DIR = getenvval("RISCV"); // "/opt/riscv";
|
||||
string RISCV_DIR = getenvval("RISCV");
|
||||
string WALLY_DIR = getenvval("WALLY"); // ~/cvw typical
|
||||
`elsif VCS
|
||||
import "DPI-C" function string getenv(input string env_name);
|
||||
string RISCV_DIR = getenv("RISCV"); // "/opt/riscv";
|
||||
string RISCV_DIR = getenv("RISCV");
|
||||
string WALLY_DIR = getenv("WALLY");
|
||||
`else
|
||||
string RISCV_DIR = "$RISCV"; // "/opt/riscv";
|
||||
string RISCV_DIR = "$RISCV";
|
||||
string WALLY_DIR = "$WALLY";
|
||||
`endif
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# author: Alessandro Maiuolo, Kevin Kim
|
||||
# contact: amaiuolo@g.hmc.edu, kekim@hmc.edu
|
||||
|
@ -1,4 +1,4 @@
|
||||
#! /usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
# extract sqrt and float div testfloat vectors
|
||||
|
||||
# author: Alessandro Maiuolo
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from fp_dataset import *
|
||||
#coverpoints=ibm_b1(128, 128, 'fadd.q', 2) #ibm_b1(flen, iflen, opcode, ops)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# PIPELINE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# covergen.py
|
||||
#
|
||||
|
@ -12,7 +12,7 @@ printf "\n\n#####\nStarting tests for $1\n#####\n\n"
|
||||
if [[ "$2" != "-simonly" ]]
|
||||
then
|
||||
cd $WALLY/testgen/privileged
|
||||
python3 "testgen-$1.py"
|
||||
$RISCV/riscv-python/bin/python3 "testgen-$1.py"
|
||||
printf "\n\n#####\nRan testgen-$1.py Making...\n#####\n\n\n"
|
||||
|
||||
if [[ "$2" == "-c" ]]
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CAUSE.py (new)
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CSR-PERMISSIONS.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CAUSE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CAUSE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-IE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-IE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CAUSE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-CAUSE.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-TVAL.py
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen-TVEC.py (new)
|
||||
#
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
##################################
|
||||
# testgen.py
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user