mirror of
https://github.com/openhwgroup/cvw.git
synced 2025-04-20 03:47:20 -04:00
Merge pull request #1246 from openhwgroup/main
Update fetch buffer branch
This commit is contained in:
commit
494e0c6d96
44 changed files with 885 additions and 11006 deletions
13
.github/workflows/install.yml
vendored
13
.github/workflows/install.yml
vendored
|
@ -19,6 +19,7 @@ on:
|
|||
- 'bin/wally-tool-chain-install.sh'
|
||||
- 'bin/wally-distro-check.sh'
|
||||
- 'bin/wally-package-install.sh'
|
||||
- '.github/workflows/install.yml'
|
||||
schedule:
|
||||
- cron: "0 7 * * 3" # Run at 12:00 AM Pacific Time on Wednesdays
|
||||
|
||||
|
@ -108,12 +109,12 @@ jobs:
|
|||
run: |
|
||||
if [ ${{ matrix.imageFamily }} == "debian" ]; then
|
||||
apt-get update
|
||||
apt-get install -y sudo git
|
||||
apt-get install -y git
|
||||
elif [ ${{ matrix.imageFamily }} == "redhat" ]; then
|
||||
dnf install -y sudo git
|
||||
dnf install -y git
|
||||
dnf install curl -y --allowerasing || true
|
||||
elif [ ${{ matrix.imageFamily }} == "suse" ]; then
|
||||
zypper install -y sudo git
|
||||
zypper install -y git
|
||||
fi
|
||||
# Only clone submodules needed for standard tests/regression to save space
|
||||
- uses: actions/checkout@v4
|
||||
|
@ -134,7 +135,9 @@ jobs:
|
|||
# Run main tool chain installation script, either as a user or system wide
|
||||
- name: Install
|
||||
run: |
|
||||
if [ -z ${{ matrix.user }} ]; then
|
||||
if [ ! -z ${{ matrix.image }} ]; then
|
||||
./bin/wally-tool-chain-install.sh --clean ${{ matrix.riscv_path }}
|
||||
elif [ -z ${{ matrix.user }} ]; then
|
||||
sudo ./bin/wally-tool-chain-install.sh --clean ${{ matrix.riscv_path }}
|
||||
else
|
||||
sudo ./bin/wally-package-install.sh
|
||||
|
@ -164,7 +167,7 @@ jobs:
|
|||
# Only the linux-testvectors are needed, so remove the rest of the buildroot to save space
|
||||
- name: Remove Buildroot to Save Space
|
||||
run: |
|
||||
sudo rm -rf $RISCV/buildroot/output/build
|
||||
rm -rf $RISCV/buildroot/output/build || sudo rm -rf $RISCV/buildroot/output/build
|
||||
df -h
|
||||
# Run standard regression, skipping distros that are known to be broken with Verilator
|
||||
- name: Regression
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit acf99b1df40b4c90090f17ce1448a7d6a6fde1f5
|
||||
Subproject commit 66b675017878032974c537ab7aa81758b9812530
|
|
@ -1 +1 @@
|
|||
Subproject commit a079bb263b04dde4028efee134f3a4e42799a5ca
|
||||
Subproject commit eeffdf802c117f592b30e380b59caf48da384e76
|
|
@ -1 +1 @@
|
|||
Subproject commit 8ed4f9981da1d80badb0b1f65e250b2dbf7a564d
|
||||
Subproject commit d1898bd01f25d4965f9e50659bbdf70365745a06
|
|
@ -33,7 +33,7 @@ tests = [
|
|||
"arch32i", "arch32priv", "arch32c", "arch32m", "arch32a_amo", "arch32zifencei", "arch32zicond",
|
||||
"arch32zba", "arch32zbb", "arch32zbc", "arch32zbs", "arch32zfh", "arch32zfh_fma",
|
||||
"arch32zfh_divsqrt", "arch32zfaf", "arch32zfad", "wally32a_lrsc", "wally32priv", "wally32periph", "arch32zcb",
|
||||
"arch32zbkb", "arch32zbkc", "arch32zbkx", "arch32zknd", "arch32zkne", "arch32zknh"]],
|
||||
"arch32zbkb", "arch32zbkc", "arch32zbkx", "arch32zknd", "arch32zkne", "arch32zknh", "arch32vm_sv32", "arch32pmp"]],
|
||||
["rv64i", ["arch64i"]]
|
||||
]
|
||||
|
||||
|
@ -60,7 +60,7 @@ tests64gc_nofp = [
|
|||
["rv64gc", ["coverage64gc", "arch64i", "arch64priv", "arch64c", "arch64m", "arch64zcb",
|
||||
"arch64zifencei", "arch64zicond", "arch64a_amo", "wally64a_lrsc", "wally64periph", "wally64priv",
|
||||
"arch64zbkb", "arch64zbkc", "arch64zbkx", "arch64zknd", "arch64zkne", "arch64zknh",
|
||||
"arch64zba", "arch64zbb", "arch64zbc", "arch64zbs"]] # add when working: "arch64zicboz"
|
||||
"arch64zba", "arch64zbb", "arch64zbc", "arch64zbs", "arch64pmp"]] # add when working: "arch64zicboz"
|
||||
]
|
||||
|
||||
tests64gc_fp = [
|
||||
|
@ -233,7 +233,6 @@ bpredtests = [
|
|||
# list of tests not supported by ImperasDV yet that should be waived during lockstep testing
|
||||
lockstepwaivers = [
|
||||
"WALLY-q-01.S_ref.elf", # Q extension is not supported by ImperasDV
|
||||
"coverage_tlbMisaligned.elf", # Issue 976: ImperasDV bug disagrees with Wally related to misaligned pages when PBMT makes page uncachable
|
||||
"WALLY-cbom-01.S_ref.elf" #, # cbom extension is not supported by ImperasDV because there is no cache model in ImperasDV
|
||||
]
|
||||
|
||||
|
@ -438,14 +437,14 @@ if (args.buildroot):
|
|||
addTests(tests_buildrootbootlockstep, lockstepsim) # lockstep with Questa and ImperasDV runs overnight
|
||||
|
||||
if (args.ccov): # only run RV64GC tests on Questa in code coverage mode
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/priv/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/priv/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/tests/coverage/", "rv64gc", coveragesim)
|
||||
elif (args.fcov): # run tests in lockstep in functional coverage mode
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/rv32/", "rv32gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/priv/rv32/", "rv32gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/priv/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/rv32/", "rv32gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/rv64/", "rv64gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/priv/rv32/", "rv32gc", coveragesim)
|
||||
addTestsByDir(WALLY+"/addins/cvw-arch-verif/tests/lockstep/priv/rv64/", "rv64gc", coveragesim)
|
||||
elif (args.breker):
|
||||
addTestsByDir(WALLY+"/tests/breker/work", "breker", "questa", brekerMode=1)
|
||||
else:
|
||||
|
|
|
@ -55,7 +55,7 @@ case "$FAMILY" in
|
|||
rhel)
|
||||
PYTHON_VERSION=python3.12
|
||||
PACKAGE_MANAGER="dnf -y"
|
||||
UPDATE_COMMAND="sudo $PACKAGE_MANAGER update"
|
||||
UPDATE_COMMAND="$PACKAGE_MANAGER update"
|
||||
GENERAL_PACKAGES+=(which "$PYTHON_VERSION" "$PYTHON_VERSION"-pip pkgconf-pkg-config gcc-c++ ssmtp)
|
||||
GNU_PACKAGES+=(libmpc-devel mpfr-devel gmp-devel zlib-devel expat-devel libslirp-devel ninja-build)
|
||||
QEMU_PACKAGES+=(glib2-devel libfdt-devel pixman-devel)
|
||||
|
@ -87,7 +87,7 @@ case "$FAMILY" in
|
|||
VERILATOR_PACKAGES+=(mold)
|
||||
fi
|
||||
PACKAGE_MANAGER="DEBIAN_FRONTEND=noninteractive apt-get -y"
|
||||
UPDATE_COMMAND="sudo $PACKAGE_MANAGER update && sudo $PACKAGE_MANAGER upgrade --with-new-pkgs"
|
||||
UPDATE_COMMAND="$PACKAGE_MANAGER update && $PACKAGE_MANAGER upgrade --with-new-pkgs"
|
||||
GENERAL_PACKAGES+=("$PYTHON_VERSION" python3-pip "$PYTHON_VERSION"-venv pkg-config g++ ssmtp)
|
||||
GNU_PACKAGES+=(autotools-dev libmpc-dev libmpfr-dev libgmp-dev build-essential ninja-build zlib1g-dev libexpat1-dev libglib2.0-dev libslirp-dev)
|
||||
QEMU_PACKAGES+=(libfdt-dev libpixman-1-dev)
|
||||
|
@ -100,7 +100,7 @@ case "$FAMILY" in
|
|||
PYTHON_VERSION=python3.12
|
||||
PYTHON_VERSION_PACKAGE=python312
|
||||
PACKAGE_MANAGER="zypper -n"
|
||||
UPDATE_COMMAND="sudo $PACKAGE_MANAGER update"
|
||||
UPDATE_COMMAND="$PACKAGE_MANAGER update"
|
||||
GENERAL_PACKAGES+=("$PYTHON_VERSION_PACKAGE" "$PYTHON_VERSION_PACKAGE"-pip pkg-config)
|
||||
GNU_PACKAGES+=(mpc-devel mpfr-devel gmp-devel zlib-devel libexpat-devel libslirp-devel ninja)
|
||||
QEMU_PACKAGES+=(glib2-devel libpixman-1-0-devel) # maybe also need qemu itself?
|
||||
|
@ -132,32 +132,32 @@ else
|
|||
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"
|
||||
dnf install -y dnf-plugins-core
|
||||
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"
|
||||
subscription-manager repos --enable "codeready-builder-for-rhel-$RHEL_VERSION-$(arch)-rpms"
|
||||
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
|
||||
dnf config-manager -y --set-enabled powertools
|
||||
else # Version 9
|
||||
sudo dnf config-manager -y --set-enabled crb
|
||||
dnf config-manager -y --set-enabled crb
|
||||
fi
|
||||
sudo dnf install -y epel-release
|
||||
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 "${GENERAL_PACKAGES[@]}" "${GNU_PACKAGES[@]}" "${QEMU_PACKAGES[@]}" "${SPIKE_PACKAGES[@]}" "${VERILATOR_PACKAGES[@]}" "${BUILDROOT_PACKAGES[@]}" "${OTHER_PACKAGES[@]}" "${VIVADO_PACKAGES[@]}"
|
||||
eval $PACKAGE_MANAGER install "${GENERAL_PACKAGES[@]}" "${GNU_PACKAGES[@]}" "${QEMU_PACKAGES[@]}" "${SPIKE_PACKAGES[@]}" "${VERILATOR_PACKAGES[@]}" "${BUILDROOT_PACKAGES[@]}" "${OTHER_PACKAGES[@]}" "${VIVADO_PACKAGES[@]}"
|
||||
|
||||
# Post install steps
|
||||
# Vivado looks for ncurses5 libraries, but Ubuntu 24.04 only has ncurses6
|
||||
# Create symbolic links to the ncurses6 libraries to fool Vivado
|
||||
if (( UBUNTU_VERSION >= 24 )); then
|
||||
sudo ln -vsf /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5
|
||||
sudo ln -vsf /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libntinfo.so.5
|
||||
ln -vsf /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5
|
||||
ln -vsf /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libntinfo.so.5
|
||||
fi
|
||||
|
||||
echo -e "${SUCCESS_COLOR}Packages successfully installed.${ENDC}"
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Variables
|
||||
PYTHON_SCRIPT=$HOME/nightly-runs/cvw/bin/ # cvw can be anywhere you would like it. Make sure to point your variable there
|
||||
SETUP_SCRIPT=$HOME/nightly-runs/cvw/ # cvw can be anywhere you would like it. Make sure to point your variable there
|
||||
|
||||
echo "Current directory"
|
||||
pwd
|
||||
|
||||
cd $SETUP_SCRIPT
|
||||
echo "Current directory"
|
||||
pwd
|
||||
|
||||
echo "Sourcing setup_host"
|
||||
source ./setup.sh
|
||||
|
||||
cd $PYTHON_SCRIPT
|
||||
pwd
|
||||
echo "Running python file"
|
||||
$RISCV/riscv-python/bin/python nightly_build.py
|
||||
echo "Finished"
|
|
@ -28,6 +28,8 @@
|
|||
`include "ZfhD_coverage.svh"
|
||||
// Note: Zfhmin is a subset of Zfh, so usually only one or the other would be used. When Zfhmin and D are supported, ZfhD should also be enabled
|
||||
`include "Zfhmin_coverage.svh"
|
||||
// Note: Zmmul is a subset of M, so usually only one or the other would be used.
|
||||
`include "Zmmul_coverage.svh"
|
||||
`include "Zicond_coverage.svh"
|
||||
`include "Zca_coverage.svh"
|
||||
`include "Zcb_coverage.svh"
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
`include "Zfh_coverage.svh"
|
||||
// Note: Zfhmin is a subset of Zfh, so usually only one or the other would be used. When Zfhmin and D are supported, ZfhD should also be enabled
|
||||
`include "Zfhmin_coverage.svh"
|
||||
// Note: Zmmul is a subset of M, so usually only one or the other would be used.
|
||||
`include "Zmmul_coverage.svh"
|
||||
`include "Zicond_coverage.svh"
|
||||
`include "Zca_coverage.svh"
|
||||
`include "Zcb_coverage.svh"
|
||||
|
@ -58,4 +60,3 @@
|
|||
// `include "RV64VM_PMP_coverage.svh"
|
||||
// `include "RV64CBO_VM_coverage.svh"
|
||||
// `include "RV64CBO_PMP_coverage.svh"
|
||||
// `include "RV64Zicbom_coverage.svh"
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
# 64 KiB continuous huge pages supported
|
||||
--override cpu/Svpbmt=T
|
||||
--override cpu/aligned_uncached_PBMT=T # when PBMT designates a page as uncachable, require aligned accesses
|
||||
--override cpu/Svnapot_page_mask=65536
|
||||
|
||||
# SV39 and SV48 supported
|
||||
|
|
|
@ -117,8 +117,6 @@ $(TARGET).memfile: $(TARGET)
|
|||
@echo 'Making memory file'
|
||||
riscv64-unknown-elf-elf2hex --bit-width 64 --input $^ --output $@
|
||||
extractFunctionRadix.sh $<.objdump
|
||||
mkdir -p ../../imperas-riscv-tests/work/rv64BP/
|
||||
cp -f $(TARGETDIR)/* ../../imperas-riscv-tests/work/rv64BP/
|
||||
@echo 'Splitting memfile.'
|
||||
./splitfile.sh $@
|
||||
mv boot.mem ../src/boot.mem
|
||||
|
|
|
@ -1,21 +1,11 @@
|
|||
BUILDROOT := buildroot
|
||||
IMAGES := ${BUILDROOT}/output/images
|
||||
WALLY := $(shell dirname $(shell pwd))
|
||||
WALLYLINUX := $(shell pwd)
|
||||
WALLYLINUX := $(WALLY)/linux
|
||||
DIS := ${IMAGES}/disassembly
|
||||
BRPACKAGES := $(WALLYLINUX)/buildroot-packages
|
||||
BR2023 := $(WALLYLINUX)/buildroot-config-src/buildroot-2023.05.1
|
||||
BR2_EXTERNAL_TREE := $(WALLYLINUX)/br2-external-tree
|
||||
|
||||
# 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
|
||||
SUDO := $(shell mkdir -p $(RISCV)/.test > /dev/null 2>&1 || echo sudo)
|
||||
|
||||
# Device tree files
|
||||
DTS ?= $(shell find devicetree -type f -regex ".*\.dts" | sort)
|
||||
|
@ -105,19 +95,13 @@ $(IMAGES)/busybox:
|
|||
cp $$busyboxDir/busybox $@ ;\
|
||||
|
||||
# Generating new Buildroot directories --------------------------------
|
||||
download: $(WALLYBOARD)
|
||||
cp $(WALLYBOARD)/main.config $(BUILDROOT)/.config
|
||||
download: $(BUILDROOT)
|
||||
$(MAKE) -C $(BUILDROOT) wally_defconfig BR2_EXTERNAL=$(BR2_EXTERNAL_TREE)
|
||||
@echo "Buildroot successfully download."
|
||||
|
||||
# CONFIG DEPENDENCIES 2023.05.1 ---------------------------------------
|
||||
$(WALLYBOARD): $(BUILDROOT)
|
||||
cp -r $(WALLYBOARDSRC) $(BUILDROOT)/board
|
||||
cp $(BR2023)/main.config $(WALLYBOARD)/main.config
|
||||
cp $(BR2023)/linux.config $(WALLYBOARD)/linux.config
|
||||
|
||||
$(BUILDROOT):
|
||||
git clone https://github.com/buildroot/buildroot.git $@
|
||||
cd $@; git checkout 2023.05.x
|
||||
cd $@; git checkout 2024.11.x
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
|
|
2
linux/br2-external-tree/Config.in
Normal file
2
linux/br2-external-tree/Config.in
Normal file
|
@ -0,0 +1,2 @@
|
|||
# required for buildroot external tree
|
||||
# delibarately empty
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Busybox version: 1.33.1
|
||||
# Thu Jul 15 15:59:54 2021
|
||||
# Busybox version: 1.36.1
|
||||
# Fri Jan 3 15:38:08 2025
|
||||
#
|
||||
CONFIG_HAVE_DOT_CONFIG=y
|
||||
|
||||
|
@ -93,10 +93,16 @@ CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
|
|||
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
|
||||
CONFIG_PASSWORD_MINLEN=6
|
||||
CONFIG_MD5_SMALL=1
|
||||
CONFIG_SHA1_SMALL=3
|
||||
CONFIG_SHA1_HWACCEL=y
|
||||
CONFIG_SHA256_HWACCEL=y
|
||||
CONFIG_SHA3_SMALL=1
|
||||
# CONFIG_FEATURE_FAST_TOP is not set
|
||||
# CONFIG_FEATURE_ETC_NETWORKS is not set
|
||||
# CONFIG_FEATURE_ETC_SERVICES is not set
|
||||
# CONFIG_FEATURE_NON_POSIX_CP is not set
|
||||
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
|
||||
# CONFIG_FEATURE_USE_SENDFILE is not set
|
||||
CONFIG_FEATURE_COPYBUF_KB=4
|
||||
# CONFIG_MONOTONIC_SYSCALL is not set
|
||||
# CONFIG_IOCTL_HEX2STR_ERROR is not set
|
||||
# CONFIG_FEATURE_EDITING is not set
|
||||
CONFIG_FEATURE_EDITING_MAX_LEN=0
|
||||
# CONFIG_FEATURE_EDITING_VI is not set
|
||||
|
@ -120,14 +126,9 @@ CONFIG_LAST_SUPPORTED_WCHAR=0
|
|||
# CONFIG_UNICODE_BIDI_SUPPORT is not set
|
||||
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
|
||||
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
|
||||
# CONFIG_FEATURE_NON_POSIX_CP is not set
|
||||
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
|
||||
# CONFIG_FEATURE_USE_SENDFILE is not set
|
||||
CONFIG_FEATURE_COPYBUF_KB=4
|
||||
CONFIG_FEATURE_SKIP_ROOTFS=y
|
||||
# CONFIG_MONOTONIC_SYSCALL is not set
|
||||
# CONFIG_IOCTL_HEX2STR_ERROR is not set
|
||||
# CONFIG_FEATURE_HWIB is not set
|
||||
# CONFIG_LOOP_CONFIGURE is not set
|
||||
# CONFIG_NO_LOOP_CONFIGURE is not set
|
||||
CONFIG_TRY_LOOP_CONFIGURE=y
|
||||
|
||||
#
|
||||
# Applets
|
||||
|
@ -162,6 +163,8 @@ CONFIG_BZIP2_SMALL=0
|
|||
CONFIG_CPIO=y
|
||||
# CONFIG_FEATURE_CPIO_O is not set
|
||||
# CONFIG_FEATURE_CPIO_P is not set
|
||||
# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set
|
||||
# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set
|
||||
# CONFIG_DPKG is not set
|
||||
# CONFIG_DPKG_DEB is not set
|
||||
CONFIG_GZIP=y
|
||||
|
@ -197,6 +200,22 @@ CONFIG_FEATURE_UNZIP_CDF=y
|
|||
#
|
||||
# Coreutils
|
||||
#
|
||||
CONFIG_FEATURE_VERBOSE=y
|
||||
|
||||
#
|
||||
# Common options for date and touch
|
||||
#
|
||||
# CONFIG_FEATURE_TIMEZONE is not set
|
||||
|
||||
#
|
||||
# Common options for cp and mv
|
||||
#
|
||||
CONFIG_FEATURE_PRESERVE_HARDLINKS=y
|
||||
|
||||
#
|
||||
# Common options for df, du, ls
|
||||
#
|
||||
CONFIG_FEATURE_HUMAN_READABLE=y
|
||||
CONFIG_BASENAME=y
|
||||
CONFIG_CAT=y
|
||||
CONFIG_FEATURE_CATN=y
|
||||
|
@ -207,11 +226,13 @@ CONFIG_CHOWN=y
|
|||
# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
|
||||
CONFIG_CHROOT=y
|
||||
CONFIG_CKSUM=y
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_COMM is not set
|
||||
CONFIG_CP=y
|
||||
# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
|
||||
# CONFIG_FEATURE_CP_REFLINK is not set
|
||||
CONFIG_CUT=y
|
||||
CONFIG_FEATURE_CUT_REGEX=y
|
||||
CONFIG_DATE=y
|
||||
CONFIG_FEATURE_DATE_ISOFMT=y
|
||||
# CONFIG_FEATURE_DATE_NANO is not set
|
||||
|
@ -223,6 +244,7 @@ CONFIG_FEATURE_DD_IBS_OBS=y
|
|||
CONFIG_FEATURE_DD_STATUS=y
|
||||
CONFIG_DF=y
|
||||
# CONFIG_FEATURE_DF_FANCY is not set
|
||||
CONFIG_FEATURE_SKIP_ROOTFS=y
|
||||
CONFIG_DIRNAME=y
|
||||
# CONFIG_DOS2UNIX is not set
|
||||
# CONFIG_UNIX2DOS is not set
|
||||
|
@ -316,13 +338,13 @@ CONFIG_TEST2=y
|
|||
CONFIG_FEATURE_TEST_64=y
|
||||
# CONFIG_TIMEOUT is not set
|
||||
CONFIG_TOUCH=y
|
||||
# CONFIG_FEATURE_TOUCH_NODEREF is not set
|
||||
# CONFIG_FEATURE_TOUCH_SUSV3 is not set
|
||||
CONFIG_TR=y
|
||||
CONFIG_FEATURE_TR_CLASSES=y
|
||||
CONFIG_FEATURE_TR_EQUIV=y
|
||||
CONFIG_TRUE=y
|
||||
CONFIG_TRUNCATE=y
|
||||
CONFIG_TSORT=y
|
||||
CONFIG_TTY=y
|
||||
CONFIG_UNAME=y
|
||||
CONFIG_UNAME_OSNAME="GNU/Linux for Wally"
|
||||
|
@ -336,27 +358,12 @@ CONFIG_BASE64=y
|
|||
CONFIG_UUENCODE=y
|
||||
CONFIG_WC=y
|
||||
# CONFIG_FEATURE_WC_LARGE is not set
|
||||
CONFIG_WHOAMI=y
|
||||
# CONFIG_WHO is not set
|
||||
# CONFIG_W is not set
|
||||
# CONFIG_USERS is not set
|
||||
CONFIG_WHOAMI=y
|
||||
CONFIG_YES=y
|
||||
|
||||
#
|
||||
# Common options
|
||||
#
|
||||
CONFIG_FEATURE_VERBOSE=y
|
||||
|
||||
#
|
||||
# Common options for cp and mv
|
||||
#
|
||||
CONFIG_FEATURE_PRESERVE_HARDLINKS=y
|
||||
|
||||
#
|
||||
# Common options for df, du, ls
|
||||
#
|
||||
CONFIG_FEATURE_HUMAN_READABLE=y
|
||||
|
||||
#
|
||||
# Console Utilities
|
||||
#
|
||||
|
@ -420,6 +427,7 @@ CONFIG_VI=y
|
|||
CONFIG_FEATURE_VI_MAX_LEN=4096
|
||||
CONFIG_FEATURE_VI_8BIT=y
|
||||
CONFIG_FEATURE_VI_COLON=y
|
||||
CONFIG_FEATURE_VI_COLON_EXPAND=y
|
||||
CONFIG_FEATURE_VI_YANKMARK=y
|
||||
CONFIG_FEATURE_VI_SEARCH=y
|
||||
# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
|
||||
|
@ -433,6 +441,7 @@ CONFIG_FEATURE_VI_ASK_TERMINAL=y
|
|||
CONFIG_FEATURE_VI_UNDO=y
|
||||
CONFIG_FEATURE_VI_UNDO_QUEUE=y
|
||||
CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
|
||||
CONFIG_FEATURE_VI_VERBOSE_STATUS=y
|
||||
# CONFIG_FEATURE_ALLOW_EXEC is not set
|
||||
|
||||
#
|
||||
|
@ -441,7 +450,11 @@ CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256
|
|||
CONFIG_FIND=y
|
||||
CONFIG_FEATURE_FIND_PRINT0=y
|
||||
CONFIG_FEATURE_FIND_MTIME=y
|
||||
CONFIG_FEATURE_FIND_ATIME=y
|
||||
CONFIG_FEATURE_FIND_CTIME=y
|
||||
CONFIG_FEATURE_FIND_MMIN=y
|
||||
CONFIG_FEATURE_FIND_AMIN=y
|
||||
CONFIG_FEATURE_FIND_CMIN=y
|
||||
CONFIG_FEATURE_FIND_PERM=y
|
||||
CONFIG_FEATURE_FIND_TYPE=y
|
||||
CONFIG_FEATURE_FIND_EXECUTABLE=y
|
||||
|
@ -449,6 +462,7 @@ CONFIG_FEATURE_FIND_XDEV=y
|
|||
CONFIG_FEATURE_FIND_MAXDEPTH=y
|
||||
CONFIG_FEATURE_FIND_NEWER=y
|
||||
# CONFIG_FEATURE_FIND_INUM is not set
|
||||
CONFIG_FEATURE_FIND_SAMEFILE=y
|
||||
CONFIG_FEATURE_FIND_EXEC=y
|
||||
CONFIG_FEATURE_FIND_EXEC_PLUS=y
|
||||
CONFIG_FEATURE_FIND_USER=y
|
||||
|
@ -510,10 +524,10 @@ CONFIG_FEATURE_SHADOWPASSWDS=y
|
|||
# CONFIG_USE_BB_SHADOW is not set
|
||||
CONFIG_USE_BB_CRYPT=y
|
||||
CONFIG_USE_BB_CRYPT_SHA=y
|
||||
CONFIG_ADDGROUP=y
|
||||
# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
|
||||
# CONFIG_ADD_SHELL is not set
|
||||
# CONFIG_REMOVE_SHELL is not set
|
||||
CONFIG_ADDGROUP=y
|
||||
# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
|
||||
CONFIG_ADDUSER=y
|
||||
# CONFIG_FEATURE_CHECK_NAMES is not set
|
||||
CONFIG_LAST_ID=60000
|
||||
|
@ -739,6 +753,7 @@ CONFIG_FEATURE_VOLUMEID_FAT=y
|
|||
# Miscellaneous Utilities
|
||||
#
|
||||
# CONFIG_ADJTIMEX is not set
|
||||
CONFIG_ASCII=y
|
||||
# CONFIG_BBCONFIG is not set
|
||||
# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
|
||||
# CONFIG_BC is not set
|
||||
|
@ -772,10 +787,10 @@ CONFIG_CRONTAB=y
|
|||
# CONFIG_FEATURE_DEVFS is not set
|
||||
CONFIG_DEVMEM=y
|
||||
# CONFIG_FBSPLASH is not set
|
||||
# CONFIG_FLASHCP is not set
|
||||
# CONFIG_FLASH_ERASEALL is not set
|
||||
# CONFIG_FLASH_LOCK is not set
|
||||
# CONFIG_FLASH_UNLOCK is not set
|
||||
# CONFIG_FLASHCP is not set
|
||||
# CONFIG_HDPARM is not set
|
||||
# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
|
||||
# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
|
||||
|
@ -819,21 +834,24 @@ CONFIG_PARTPROBE=y
|
|||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_RUNLEVEL is not set
|
||||
# CONFIG_RX is not set
|
||||
CONFIG_SEEDRNG=y
|
||||
CONFIG_SETFATTR=y
|
||||
CONFIG_SETSERIAL=y
|
||||
CONFIG_STRINGS=y
|
||||
CONFIG_TIME=y
|
||||
CONFIG_TREE=y
|
||||
CONFIG_TS=y
|
||||
# CONFIG_TTYSIZE is not set
|
||||
CONFIG_UBIRENAME=y
|
||||
# CONFIG_UBIATTACH is not set
|
||||
# CONFIG_UBIDETACH is not set
|
||||
# CONFIG_UBIMKVOL is not set
|
||||
# CONFIG_UBIRMVOL is not set
|
||||
# CONFIG_UBIRSVOL is not set
|
||||
# CONFIG_UBIUPDATEVOL is not set
|
||||
CONFIG_UBIRENAME=y
|
||||
# CONFIG_VOLNAME is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set
|
||||
|
||||
#
|
||||
# Networking Utilities
|
||||
|
@ -842,6 +860,9 @@ CONFIG_WATCHDOG=y
|
|||
# CONFIG_FEATURE_UNIX_LOCAL is not set
|
||||
# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
|
||||
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
|
||||
# CONFIG_FEATURE_ETC_NETWORKS is not set
|
||||
# CONFIG_FEATURE_ETC_SERVICES is not set
|
||||
# CONFIG_FEATURE_HWIB is not set
|
||||
# CONFIG_FEATURE_TLS_SHA1 is not set
|
||||
# CONFIG_ARP is not set
|
||||
# CONFIG_ARPING is not set
|
||||
|
@ -860,6 +881,7 @@ CONFIG_WATCHDOG=y
|
|||
CONFIG_HOSTNAME=y
|
||||
# CONFIG_DNSDOMAINNAME is not set
|
||||
# CONFIG_HTTPD is not set
|
||||
CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0
|
||||
# CONFIG_FEATURE_HTTPD_RANGES is not set
|
||||
# CONFIG_FEATURE_HTTPD_SETUID is not set
|
||||
# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
|
||||
|
@ -952,6 +974,7 @@ CONFIG_FEATURE_IP_ROUTE_DIR=""
|
|||
# CONFIG_FEATURE_TELNET_WIDTH is not set
|
||||
# CONFIG_TELNETD is not set
|
||||
# CONFIG_FEATURE_TELNETD_STANDALONE is not set
|
||||
CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0
|
||||
# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
|
||||
# CONFIG_TFTP is not set
|
||||
# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
|
||||
|
@ -972,6 +995,7 @@ CONFIG_FEATURE_IP_ROUTE_DIR=""
|
|||
# CONFIG_WGET is not set
|
||||
# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
|
||||
# CONFIG_FEATURE_WGET_STATUSBAR is not set
|
||||
# CONFIG_FEATURE_WGET_FTP is not set
|
||||
# CONFIG_FEATURE_WGET_AUTHENTICATION is not set
|
||||
# CONFIG_FEATURE_WGET_TIMEOUT is not set
|
||||
# CONFIG_FEATURE_WGET_HTTPS is not set
|
||||
|
@ -988,11 +1012,13 @@ CONFIG_DHCPD_LEASES_FILE=""
|
|||
# CONFIG_FEATURE_UDHCPC_ARPING is not set
|
||||
# CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set
|
||||
CONFIG_UDHCPC_DEFAULT_SCRIPT=""
|
||||
CONFIG_UDHCPC6_DEFAULT_SCRIPT=""
|
||||
# CONFIG_UDHCPC6 is not set
|
||||
# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set
|
||||
# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set
|
||||
# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set
|
||||
# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set
|
||||
CONFIG_UDHCPC_DEFAULT_INTERFACE=""
|
||||
# CONFIG_FEATURE_UDHCP_PORT is not set
|
||||
CONFIG_UDHCP_DEBUG=0
|
||||
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0
|
||||
|
@ -1010,17 +1036,19 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
|
|||
#
|
||||
# Mail Utilities
|
||||
#
|
||||
CONFIG_FEATURE_MIME_CHARSET=""
|
||||
# CONFIG_MAKEMIME is not set
|
||||
# CONFIG_POPMAILDIR is not set
|
||||
# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
|
||||
# CONFIG_REFORMIME is not set
|
||||
# CONFIG_FEATURE_REFORMIME_COMPAT is not set
|
||||
# CONFIG_SENDMAIL is not set
|
||||
CONFIG_FEATURE_MIME_CHARSET=""
|
||||
|
||||
#
|
||||
# Process Utilities
|
||||
#
|
||||
# CONFIG_FEATURE_FAST_TOP is not set
|
||||
# CONFIG_FEATURE_SHOW_THREADS is not set
|
||||
CONFIG_FREE=y
|
||||
CONFIG_FUSER=y
|
||||
# CONFIG_IOSTAT is not set
|
||||
|
@ -1059,7 +1087,6 @@ CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
|
|||
CONFIG_UPTIME=y
|
||||
# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
|
||||
CONFIG_WATCH=y
|
||||
# CONFIG_FEATURE_SHOW_THREADS is not set
|
||||
|
||||
#
|
||||
# Runit Utilities
|
||||
|
@ -1116,6 +1143,7 @@ CONFIG_ASH_IDLE_TIMEOUT=y
|
|||
CONFIG_ASH_ECHO=y
|
||||
CONFIG_ASH_PRINTF=y
|
||||
CONFIG_ASH_TEST=y
|
||||
CONFIG_ASH_SLEEP=y
|
||||
CONFIG_ASH_HELP=y
|
||||
CONFIG_ASH_GETOPTS=y
|
||||
CONFIG_ASH_CMDCMD=y
|
||||
|
@ -1124,8 +1152,8 @@ CONFIG_ASH_CMDCMD=y
|
|||
# CONFIG_SHELL_HUSH is not set
|
||||
# CONFIG_HUSH_BASH_COMPAT is not set
|
||||
# CONFIG_HUSH_BRACE_EXPANSION is not set
|
||||
# CONFIG_HUSH_LINENO_VAR is not set
|
||||
# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set
|
||||
# CONFIG_HUSH_LINENO_VAR is not set
|
||||
# CONFIG_HUSH_INTERACTIVE is not set
|
||||
# CONFIG_HUSH_SAVEHISTORY is not set
|
||||
# CONFIG_HUSH_JOB is not set
|
92
linux/br2-external-tree/board/wally/linux.config
Normal file
92
linux/br2-external-tree/board/wally/linux.config
Normal file
|
@ -0,0 +1,92 @@
|
|||
CONFIG_DEFAULT_HOSTNAME="WallyDefaultHostname"
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE="${BR_BINARIES_DIR}/rootfs.cpio"
|
||||
# CONFIG_RD_GZIP is not set
|
||||
# CONFIG_RD_BZIP2 is not set
|
||||
# CONFIG_RD_LZMA is not set
|
||||
# CONFIG_RD_XZ is not set
|
||||
# CONFIG_RD_LZO is not set
|
||||
# CONFIG_RD_LZ4 is not set
|
||||
# CONFIG_RD_ZSTD is not set
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_SYSFS_SYSCALL is not set
|
||||
# CONFIG_RISCV_ISA_V is not set
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_JUMP_LABEL=y
|
||||
# CONFIG_COMPAT_32BIT_TIME is not set
|
||||
# CONFIG_GCC_PLUGINS is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_PAGE_REPORTING=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=1
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=1
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SERIAL_SIFIVE=y
|
||||
CONFIG_SERIAL_SIFIVE_CONSOLE=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_VIRTIO=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_SIFIVE=y
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_GPIOLIB_FASTPATH_LIMIT=32
|
||||
# CONFIG_GPIO_CDEV_V1 is not set
|
||||
CONFIG_GPIO_SIFIVE=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HID is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SPI=y
|
||||
# CONFIG_VIRTIO_MENU is not set
|
||||
# CONFIG_VHOST_MENU is not set
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_PROC_CHILDREN=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_EFIVAR_FS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,bpf"
|
||||
CONFIG_INIT_STACK_NONE=y
|
||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
|
||||
CONFIG_READABLE_ASM=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_PAGEALLOC=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
CONFIG_SCHED_STACK_END_CHECK=y
|
||||
CONFIG_DEBUG_VM=y
|
||||
CONFIG_DEBUG_VM_PGFLAGS=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_RWSEMS=y
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
CONFIG_STACKTRACE=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_DEBUG_PLIST=y
|
||||
CONFIG_DEBUG_SG=y
|
||||
CONFIG_RCU_EQS_DEBUG=y
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||
CONFIG_MEMTEST=y
|
44
linux/br2-external-tree/configs/wally_defconfig
Normal file
44
linux/br2-external-tree/configs/wally_defconfig
Normal file
|
@ -0,0 +1,44 @@
|
|||
BR2_riscv=y
|
||||
BR2_RISCV_ISA_RVC=y
|
||||
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_11=y
|
||||
BR2_BINUTILS_VERSION_2_43_X=y
|
||||
BR2_GCC_VERSION_14_X=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_CXX=y
|
||||
BR2_TOOLCHAIN_BUILDROOT_FORTRAN=y
|
||||
BR2_BACKUP_SITE="http://sources.buildroot.net"
|
||||
BR2_GNU_MIRROR="http://ftpmirror.gnu.org"
|
||||
BR2_ENABLE_DEBUG=y
|
||||
BR2_DEBUG_3=y
|
||||
# BR2_STRIP_strip is not set
|
||||
# BR2_PIC_PIE is not set
|
||||
BR2_SSP_NONE=y
|
||||
BR2_RELRO_NONE=y
|
||||
BR2_FORTIFY_SOURCE_NONE=y
|
||||
BR2_TARGET_GENERIC_HOSTNAME="WallyHostname"
|
||||
BR2_TARGET_GENERIC_ISSUE="Greetings! This RISC-V Linux image was built for Wally on Buildroot!"
|
||||
BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES=y
|
||||
BR2_SYSTEM_DHCP="eth0"
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_WALLY_PATH)/board/wally/rootfs_overlay"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.8"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_WALLY_PATH)/board/wally/linux.config"
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_WALLY_PATH)/board/wally/busybox.config"
|
||||
BR2_PACKAGE_COREMARK=y
|
||||
BR2_PACKAGE_DHRYSTONE=y
|
||||
BR2_PACKAGE_RAMSPEED=y
|
||||
BR2_PACKAGE_WHETSTONE=y
|
||||
BR2_PACKAGE_SDL=y
|
||||
BR2_PACKAGE_ZSH=y
|
||||
# BR2_PACKAGE_UEMACS=y # temporarily disabled due to build issues with gcc 14
|
||||
BR2_TARGET_ROOTFS_INITRAMFS=y
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
BR2_TARGET_OPENSBI=y
|
||||
BR2_TARGET_OPENSBI_CUSTOM_VERSION=y
|
||||
BR2_TARGET_OPENSBI_CUSTOM_VERSION_VALUE="1.6"
|
||||
BR2_TARGET_OPENSBI_PLAT="generic"
|
||||
# BR2_TARGET_OPENSBI_INSTALL_DYNAMIC_IMG is not set
|
||||
BR2_PACKAGE_HOST_E2FSPROGS=y
|
||||
BR2_PACKAGE_HOST_QEMU=y
|
||||
BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
|
2
linux/br2-external-tree/external.desc
Normal file
2
linux/br2-external-tree/external.desc
Normal file
|
@ -0,0 +1,2 @@
|
|||
name: WALLY
|
||||
desc: Buildroot configuration for wally
|
2
linux/br2-external-tree/external.mk
Normal file
2
linux/br2-external-tree/external.mk
Normal file
|
@ -0,0 +1,2 @@
|
|||
# required for buildroot external tree
|
||||
# delibarately empty
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -5,7 +5,7 @@
|
|||
#size-cells = <0x02>;
|
||||
compatible = "wally-virt";
|
||||
model = "wally-virt,qemu";
|
||||
|
||||
|
||||
chosen {
|
||||
linux,initrd-end = <0x85c43a00>;
|
||||
linux,initrd-start = <0x84200000>;
|
||||
|
@ -30,9 +30,9 @@
|
|||
reg = <0x00>;
|
||||
status = "okay";
|
||||
compatible = "riscv";
|
||||
riscv,isa = "rv64imafdcsu";
|
||||
riscv,isa-base = "rv64i";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zicbom", "zicbop", "zicbopz", "zicntr", "zicsr", "zifencei", "zihpm";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svadu", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zca", "zcb", "zcd", "zfa", "zfh", "zkn", "zkt", "zicbom", "zicboz", "zicntr", "zicond", "zicsr", "zifencei", "zihpm";
|
||||
riscv,cboz-block-size = <64>;
|
||||
riscv,cbom-block-size = <64>;
|
||||
mmu-type = "riscv,sv48";
|
||||
|
||||
|
|
|
@ -30,9 +30,9 @@
|
|||
reg = <0x00>;
|
||||
status = "okay";
|
||||
compatible = "riscv";
|
||||
riscv,isa = "rv64imafdcsu";
|
||||
riscv,isa-base = "rv64i";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zicbom", "zicbop", "zicbopz", "zicntr", "zicsr", "zifencei", "zihpm";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svadu", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zca", "zcb", "zcd", "zfa", "zfh", "zkn", "zkt", "zicbom", "zicboz", "zicntr", "zicond", "zicsr", "zifencei", "zihpm";
|
||||
riscv,cboz-block-size = <64>;
|
||||
riscv,cbom-block-size = <64>;
|
||||
mmu-type = "riscv,sv48";
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
chosen {
|
||||
linux,initrd-end = <0x85c43a00>;
|
||||
linux,initrd-start = <0x84200000>;
|
||||
bootargs = "root=/dev/vda ro console=ttyS0,115200";
|
||||
bootargs = "root=/dev/vda ro console=ttyS0,115200";
|
||||
stdout-path = "/soc/uart@10000000";
|
||||
};
|
||||
|
||||
|
@ -30,8 +30,10 @@
|
|||
reg = <0x00>;
|
||||
status = "okay";
|
||||
compatible = "riscv";
|
||||
riscv,isa = "rv64imafdcsu";
|
||||
riscv,isa-extensions = "imafdc", "sstc", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zicbom", "zicbop", "zicbopz", "zicntr", "zicsr", "zifencei", "zihpm";
|
||||
riscv,isa-base = "rv64i";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svadu", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zca", "zcb", "zcd", "zfa", "zfh", "zkn", "zkt", "zicbom", "zicboz", "zicntr", "zicond", "zicsr", "zifencei", "zihpm";
|
||||
riscv,cboz-block-size = <64>;
|
||||
riscv,cbom-block-size = <64>;
|
||||
mmu-type = "riscv,sv48";
|
||||
|
||||
interrupt-controller {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
memory@80000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x00 0x80000000 0x00 0x10000000>;
|
||||
reg = <0x00 0x80000000 0x00 0x10000000>;
|
||||
};
|
||||
|
||||
cpus {
|
||||
|
@ -30,8 +30,10 @@
|
|||
reg = <0x00>;
|
||||
status = "okay";
|
||||
compatible = "riscv";
|
||||
riscv,isa = "rv64imafdcsu";
|
||||
riscv,isa-extensions = "svadu";
|
||||
riscv,isa-base = "rv64i";
|
||||
riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "sstc", "svadu", "svinval", "svnapot", "svpbmt", "zba", "zbb", "zbc", "zbs", "zca", "zcb", "zcd", "zfa", "zfh", "zkn", "zkt", "zicbom", "zicboz", "zicntr", "zicond", "zicsr", "zifencei", "zihpm";
|
||||
riscv,cboz-block-size = <64>;
|
||||
riscv,cbom-block-size = <64>;
|
||||
mmu-type = "riscv,sv48";
|
||||
|
||||
interrupt-controller {
|
||||
|
|
|
@ -29,7 +29,7 @@ echo "Launching QEMU in replay mode!"
|
|||
(qemu-system-riscv64 \
|
||||
-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.bin -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" \
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
.PHONY: all clean
|
||||
|
||||
all:
|
||||
./make-img.sh test.img
|
||||
|
||||
clean:
|
||||
rm -f test.img
|
|
@ -1,116 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Exit on any error (return code != 0)
|
||||
set -e
|
||||
|
||||
# Output colors
|
||||
GREEN='\033[1;32m'
|
||||
NC='\033[0m'
|
||||
NAME="$GREEN"${0:2}"$NC"
|
||||
|
||||
# File location variables
|
||||
IMAGES=$RISCV/buildroot/output/images
|
||||
FW_JUMP=$IMAGES/fw_jump.bin
|
||||
LINUX_KERNEL=$IMAGES/Image
|
||||
DEVICE_TREE=$IMAGES/wally-vcu108.dtb
|
||||
|
||||
# Mount Directory
|
||||
MNT_DIR=wallyimg
|
||||
|
||||
if [ ! -z "$2" ] ; then
|
||||
MNT_DIR=$2
|
||||
fi
|
||||
|
||||
# If images are not built, exit
|
||||
if [ ! -e $FW_JUMP ] || [ ! -e $LINUX_KERNEL ] ; then
|
||||
echo 'ERROR: Missing images in buildroot output directory.'
|
||||
echo ' Build images before running this script.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -e $DEVICE_TREE ] ; then
|
||||
echo 'ERROR: Missing device tree file'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Size of OpenSBI and the Kernel in 512B blocks
|
||||
DST_SIZE=$(ls -la --block-size=512 $DEVICE_TREE | cut -d' ' -f 5 )
|
||||
FW_JUMP_SIZE=$(ls -la --block-size=512 $FW_JUMP | cut -d' ' -f 5 )
|
||||
KERNEL_SIZE=$(ls -la --block-size=512 $LINUX_KERNEL | cut -d' ' -f 5 )
|
||||
|
||||
# Start sectors of OpenSBI and Kernel Partitions
|
||||
FW_JUMP_START=$(( 34 + $DST_SIZE ))
|
||||
KERNEL_START=$(( $FW_JUMP_START + $FW_JUMP_SIZE ))
|
||||
FS_START=$(( $KERNEL_START + $KERNEL_SIZE ))
|
||||
|
||||
# Print out the sizes of the binaries in 512B blocks
|
||||
echo -e "$NAME: Device tree block size: $DST_SIZE"
|
||||
echo -e "$NAME: OpenSBI FW_JUMP block size: $FW_JUMP_SIZE"
|
||||
echo -e "$NAME: Kernel block size: $KERNEL_SIZE"
|
||||
|
||||
if [ ! -e $1 ] ; then
|
||||
# Make empty image
|
||||
echo -e "$NAME: Creating blank image"
|
||||
sudo dd if=/dev/zero of=$1 bs=1M count=1536
|
||||
|
||||
# GUID Partition Tables (GPT)
|
||||
# ===============================================
|
||||
# -g Converts any existing mbr record to a gpt record
|
||||
# --clear clears any GPT partition table that already exists.
|
||||
# --set-alignment=1 that we want to align partition starting sectors
|
||||
# to 1 sector boundaries I think? This would normally be set to 2048
|
||||
# apparently.
|
||||
|
||||
# sudo sgdisk -g --clear --set-alignment=1 \
|
||||
# --new=1:34:+$FW_JUMP_SIZE: --change-name=1:'opensbi' --typecode=1:2E54B353-1271-4842-806F-E436D6AF6985 \
|
||||
# --new=2:$KERNEL_START:+$KERNEL_SIZE --change-name=2:'kernel' --typecode=2:3000 \
|
||||
# --new=3:$FS_START:-0 --change-name=3:'filesystem' \
|
||||
# $1
|
||||
|
||||
# echo -e "$NAME: Creating GUID Partition Table"
|
||||
# sudo sgdisk -g --clear --set-alignment=1 \
|
||||
# --new=1:34:+$DST_SIZE: --change-name=1:'fdt' \
|
||||
# --new=2:$FW_JUMP_START:+$FW_JUMP_SIZE --change-name=2:'opensbi' --typecode=1:2E54B353-1271-4842-806F-E436D6AF6985 \
|
||||
# --new=3:$KERNEL_START:+$KERNEL_SIZE --change-name=3:'kernel' \
|
||||
# --new=4:$FS_START:-0 --change-name=4:'filesystem' \
|
||||
# $1
|
||||
|
||||
echo -e "$NAME: Creating GUID Partition Table"
|
||||
sudo sgdisk -g --clear --set-alignment=1 \
|
||||
--new=1:34:+$DST_SIZE: --change-name=1:'fdt' \
|
||||
--new=2:$FW_JUMP_START:+$FW_JUMP_SIZE --change-name=2:'opensbi' --typecode=1:2E54B353-1271-4842-806F-E436D6AF6985 \
|
||||
--new=3:$KERNEL_START:+$KERNEL_SIZE --change-name=3:'kernel' \
|
||||
$1
|
||||
|
||||
LOOPDEVICE=$(sudo losetup -f)
|
||||
echo -e "$NAME: Loop device: $LOOPDEVICE"
|
||||
|
||||
sudo losetup --partscan $LOOPDEVICE $1
|
||||
|
||||
echo -e "$NAME: Copying binaries into their partitions."
|
||||
DD_FLAGS="bs=4k iflag=fullblock oflag=direct conv=fsync status=progress"
|
||||
# Store device tree in device tree partition
|
||||
|
||||
echo -e "$NAME: Copying device tree"
|
||||
sudo dd if=$DEVICE_TREE of="$LOOPDEVICE"p1 $DD_FLAGS
|
||||
|
||||
echo -e "$NAME: Copying OpenSBI"
|
||||
sudo dd if=$FW_JUMP of="$LOOPDEVICE"p2 $DD_FLAGS
|
||||
|
||||
echo -e "$NAME: Copying Kernel"
|
||||
sudo dd if=$LINUX_KERNEL of="$LOOPDEVICE"p3 $DD_FLAGS
|
||||
|
||||
# sudo mkfs.ext4 "$LOOPDEVICE"p4
|
||||
# sudo mkdir /mnt/$MNT_DIR
|
||||
|
||||
# sudo mount -v "$LOOPDEVICE"p4 /mnt/$MNT_DIR
|
||||
|
||||
# sudo umount -v /mnt/$MNT_DIR
|
||||
|
||||
# sudo rmdir /mnt/$MNT_DIR
|
||||
sudo losetup -d $LOOPDEVICE
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "GPT Information for $1 ==================================="
|
||||
sgdisk -p $1
|
|
@ -55,9 +55,9 @@ collect_functcov: remove_functcov_artifacts riscvdv_functcov combine_functcov
|
|||
|
||||
riscvdv_functcov:
|
||||
mkdir -p ${SIM}/questa/fcov_logs
|
||||
mkdir -p ${SIM}/questa/fcov_ucdbs
|
||||
mkdir -p ${SIM}/questa/fcov_ucdb
|
||||
rm -rf ${SIM}/questa/fcov_logs/*
|
||||
rm -rf ${SIM}/questa/fcov_ucdbs/*
|
||||
rm -rf ${SIM}/questa/fcov_ucdb/*
|
||||
$(MAKE) riscvdv test_name=riscv_arithmetic_basic_test >> ${SIM}/questa/fcov.log 2>&1
|
||||
$(MAKE) riscvdv test_name=riscv_amo_test >> ${SIM}/questa/fcov.log 2>&1
|
||||
$(MAKE) riscvdv test_name=riscv_ebreak_debug_mode_test >> ${SIM}/questa/fcov.log 2>&1
|
||||
|
@ -109,7 +109,7 @@ combine_functcov:
|
|||
grep "Total Coverage By Instance" ${SIM}/questa/fcov/fcov.log
|
||||
|
||||
remove_functcov_artifacts:
|
||||
rm -rf ${SIM}/questa/riscv.ucdb ${SIM}/questa/fcov.log ${SIM}/questa/covhtmlreport/ ${SIM}/questa/fcov_logs/ ${SIM}/questa/fcov_ucdbs/ ${SIM}/questa/fcov/
|
||||
rm -rf ${SIM}/questa/riscv.ucdb ${SIM}/questa/fcov.log ${SIM}/questa/covhtmlreport/ ${SIM}/questa/fcov_logs/ ${SIM}/questa/fcov_ucdb/ ${SIM}/questa/fcov/
|
||||
|
||||
benchmarks:
|
||||
$(MAKE) -C ${WALLY}benchmarks/embench build
|
||||
|
|
|
@ -118,7 +118,7 @@ module mmu import cvw::*; #(parameter cvw_t P,
|
|||
if (P.PMP_ENTRIES > 0) begin : pmp
|
||||
pmpchecker #(P) pmpchecker(.PhysicalAddress, .PrivilegeModeW,
|
||||
.PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,
|
||||
.ExecuteAccessF, .WriteAccessM, .ReadAccessM, .CMOpM,
|
||||
.ExecuteAccessF, .WriteAccessM, .ReadAccessM, .Size, .CMOpM,
|
||||
.PMPInstrAccessFaultF, .PMPLoadAccessFaultM, .PMPStoreAmoAccessFaultM);
|
||||
end else begin
|
||||
assign PMPInstrAccessFaultF = 1'b0;
|
||||
|
@ -131,7 +131,7 @@ module mmu import cvw::*; #(parameter cvw_t P,
|
|||
|
||||
// Misaligned faults
|
||||
always_comb // exclusion-tag: immu-wordaccess
|
||||
case(Size[1:0])
|
||||
case(Size)
|
||||
2'b00: DataMisalignedM = 1'b0; // lb, sb, lbu
|
||||
2'b01: DataMisalignedM = VAdr[0]; // lh, sh, lhu
|
||||
2'b10: DataMisalignedM = VAdr[1] | VAdr[0]; // lw, sw, flw, fsw, lwu
|
||||
|
|
|
@ -35,9 +35,11 @@ module pmpadrdec import cvw::*; #(parameter cvw_t P) (
|
|||
input logic [P.PA_BITS-1:0] PhysicalAddress,
|
||||
input logic [7:0] PMPCfg,
|
||||
input logic [P.PA_BITS-3:0] PMPAdr,
|
||||
input logic FirstMatch,
|
||||
input logic PAgePMPAdrIn,
|
||||
output logic PAgePMPAdrOut,
|
||||
output logic Match,
|
||||
output logic [P.PA_BITS-1:0] PMPTop,
|
||||
output logic L, X, W, R
|
||||
);
|
||||
|
||||
|
@ -50,7 +52,8 @@ module pmpadrdec import cvw::*; #(parameter cvw_t P) (
|
|||
logic PAltPMPAdr;
|
||||
logic [P.PA_BITS-1:0] CurrentAdrFull;
|
||||
logic [1:0] AdrMode;
|
||||
|
||||
logic [P.PA_BITS-1:0] PMPTop1;
|
||||
|
||||
assign AdrMode = PMPCfg[4:3];
|
||||
|
||||
// The two lsb of the physical address don't matter for this checking.
|
||||
|
@ -71,20 +74,22 @@ module pmpadrdec import cvw::*; #(parameter cvw_t P) (
|
|||
assign NAMask[P.PA_BITS-1:2] = (PMPAdr + {{(P.PA_BITS-3){1'b0}}, (AdrMode == NAPOT)}) ^ PMPAdr;
|
||||
// form a mask where the bottom k bits are 1, corresponding to a size of 2^k bytes for this memory region.
|
||||
// This assumes we're using at least an NA4 region, but works for any size NAPOT region.
|
||||
assign NABase = {(PMPAdr & ~NAMask[P.PA_BITS-1:2]), 2'b00}; // base physical address of the pmp.
|
||||
|
||||
assign NABase = {(PMPAdr & ~NAMask[P.PA_BITS-1:2]), 2'b00}; // base physical address of the pmp region
|
||||
assign NAMatch = &((NABase ~^ PhysicalAddress) | NAMask); // check if upper bits of base address match, ignore lower bits correspoonding to inside the memory range
|
||||
|
||||
// finally pick the appropriate match for the access type
|
||||
assign Match = (AdrMode == TOR) ? TORMatch :
|
||||
(AdrMode == NA4 | AdrMode == NAPOT) ? NAMatch :
|
||||
1'b0;
|
||||
|
||||
// Report top of region for first matching region
|
||||
assign PMPTop1 = {PMPAdr,2'b00} | NAMask; // top of the pmp region. All 1s in the lower bits. Used to check the address doesn't pass the top
|
||||
assign PMPTop = FirstMatch ? PMPTop1 : '0; // AND portion of distributed AND-OR mux (OR portion in pmpchhecker)
|
||||
|
||||
// PMP should match but fail if the size is too big (8-byte accesses spanning to TOR or NA4 region)
|
||||
assign L = PMPCfg[7];
|
||||
assign X = PMPCfg[2];
|
||||
assign W = PMPCfg[1];
|
||||
assign R = PMPCfg[0];
|
||||
|
||||
// known bug: The size of the access is not yet checked. For example, if an NA4 entry matches 0xC-0xF and the system
|
||||
// attempts an 8-byte access to 0x8, the access should fail (see page 60 of privileged specification 20211203). This
|
||||
// implementation will not detect the failure.
|
||||
endmodule
|
||||
endmodule
|
||||
|
|
|
@ -43,6 +43,7 @@ module pmpchecker import cvw::*; #(parameter cvw_t P) (
|
|||
input var logic [7:0] PMPCFG_ARRAY_REGW[P.PMP_ENTRIES-1:0],
|
||||
input var logic [P.PA_BITS-3:0] PMPADDR_ARRAY_REGW [P.PMP_ENTRIES-1:0],
|
||||
input logic ExecuteAccessF, WriteAccessM, ReadAccessM,
|
||||
input logic [1:0] Size,
|
||||
input logic [3:0] CMOpM,
|
||||
output logic PMPInstrAccessFaultF,
|
||||
output logic PMPLoadAccessFaultM,
|
||||
|
@ -55,29 +56,55 @@ module pmpchecker import cvw::*; #(parameter cvw_t P) (
|
|||
logic [P.PMP_ENTRIES-1:0] FirstMatch; // onehot encoding for the first pmpaddr to match the current address.
|
||||
logic [P.PMP_ENTRIES-1:0] L, X, W, R; // PMP matches and has flag set
|
||||
logic [P.PMP_ENTRIES-1:0] PAgePMPAdr; // for TOR PMP matching, PhysicalAddress > PMPAdr[i]
|
||||
logic [P.PA_BITS-1:0] PMPTop[P.PMP_ENTRIES-1:0]; // Upper end of each region, for checking that the access is fully within the region
|
||||
logic PMPCMOAccessFault, PMPCBOMAccessFault, PMPCBOZAccessFault;
|
||||
|
||||
logic [2:0] SizeBytesMinus1;
|
||||
logic MatchingR, MatchingW, MatchingX, MatchingL;
|
||||
logic [P.PA_BITS-1:0] MatchingPMPTop, PhysicalAddressTop;
|
||||
logic TooBig;
|
||||
|
||||
if (P.PMP_ENTRIES > 0) begin: pmp // prevent complaints about array of no elements when PMP_ENTRIES = 0
|
||||
pmpadrdec #(P) pmpadrdecs[P.PMP_ENTRIES-1:0](
|
||||
.PhysicalAddress,
|
||||
.PMPCfg(PMPCFG_ARRAY_REGW),
|
||||
.PMPAdr(PMPADDR_ARRAY_REGW),
|
||||
.FirstMatch,
|
||||
.PAgePMPAdrIn({PAgePMPAdr[P.PMP_ENTRIES-2:0], 1'b1}),
|
||||
.PAgePMPAdrOut(PAgePMPAdr),
|
||||
.Match, .L, .X, .W, .R);
|
||||
.Match, .PMPTop, .L, .X, .W, .R);
|
||||
end
|
||||
|
||||
priorityonehot #(P.PMP_ENTRIES) pmppriority(.a(Match), .y(FirstMatch)); // combine the match signal from all the adress decoders to find the first one that matches.
|
||||
|
||||
// Only enforce PMP checking for S and U modes or in Machine mode when L bit is set in selected region
|
||||
assign EnforcePMP = (PrivilegeModeW != P.M_MODE) | (|(L & FirstMatch));
|
||||
// Distributed AND-OR mux to select the first matching results
|
||||
// If the access does not match all bytes of the PMP region, it is too big and the matches are disabled
|
||||
assign MatchingR = |(R & FirstMatch) & ~TooBig;
|
||||
assign MatchingW = |(W & FirstMatch) & ~TooBig;
|
||||
assign MatchingX = |(X & FirstMatch) & ~TooBig;
|
||||
assign MatchingL = |(L & FirstMatch);
|
||||
or_rows #(P.PMP_ENTRIES, P.PA_BITS) PTEOr(PMPTop, MatchingPMPTop);
|
||||
|
||||
assign PMPCBOMAccessFault = EnforcePMP & (|CMOpM[2:0]) & ~|((R|W) & FirstMatch) ; // exclusion-tag: immu-pmpcbom
|
||||
assign PMPCBOZAccessFault = EnforcePMP & CMOpM[3] & ~|(W & FirstMatch) ; // exclusion-tag: immu-pmpcboz
|
||||
// Matching PMP entry must match all bytes of an access, or the access fails (Priv Spec 3.7.1.3)
|
||||
// First find the size of the access in terms of the offset to the most significant byte
|
||||
always_comb
|
||||
case (Size)
|
||||
2'b00: SizeBytesMinus1 = 3'd0;
|
||||
2'b01: SizeBytesMinus1 = 3'd1;
|
||||
2'b10: SizeBytesMinus1 = 3'd3;
|
||||
2'b11: SizeBytesMinus1 = 3'd7;
|
||||
endcase
|
||||
// Then find the top of the access and see if it is beyond the top of the region
|
||||
assign PhysicalAddressTop = PhysicalAddress + {{P.PA_BITS-3{1'b0}}, SizeBytesMinus1}; // top of the access range
|
||||
assign TooBig = PhysicalAddressTop > MatchingPMPTop; // check if the access goes beyond the top of the PMP region
|
||||
|
||||
// Only enforce PMP checking for S and U modes or in Machine mode when L bit is set in selected region
|
||||
assign EnforcePMP = (PrivilegeModeW != P.M_MODE) | MatchingL;
|
||||
|
||||
assign PMPCBOMAccessFault = EnforcePMP & (|CMOpM[2:0]) & ~MatchingR ; // checking R is sufficient because W implies R in PMP // exclusion-tag: immu-pmpcbom
|
||||
assign PMPCBOZAccessFault = EnforcePMP & CMOpM[3] & ~MatchingW ; // exclusion-tag: immu-pmpcboz
|
||||
assign PMPCMOAccessFault = PMPCBOZAccessFault | PMPCBOMAccessFault; // exclusion-tag: immu-pmpcboaccess
|
||||
|
||||
assign PMPInstrAccessFaultF = EnforcePMP & ExecuteAccessF & ~|(X & FirstMatch) ;
|
||||
assign PMPStoreAmoAccessFaultM = (EnforcePMP & WriteAccessM & ~|(W & FirstMatch)) | PMPCMOAccessFault; // exclusion-tag: immu-pmpstoreamoaccessfault
|
||||
assign PMPLoadAccessFaultM = EnforcePMP & ReadAccessM & ~WriteAccessM & ~|(R & FirstMatch) ;
|
||||
|
||||
assign PMPInstrAccessFaultF = EnforcePMP & ExecuteAccessF & ~MatchingX ;
|
||||
assign PMPStoreAmoAccessFaultM = (EnforcePMP & WriteAccessM & ~MatchingW) | PMPCMOAccessFault; // exclusion-tag: immu-pmpstoreamoaccessfault
|
||||
assign PMPLoadAccessFaultM = EnforcePMP & ReadAccessM & ~WriteAccessM & ~MatchingR;
|
||||
endmodule
|
||||
|
|
|
@ -61,7 +61,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
|
|||
logic TLBAccess;
|
||||
logic ImproperPrivilege;
|
||||
logic BadPBMT, BadNAPOT, BadReserved;
|
||||
logic ReservedEncoding;
|
||||
logic ReservedRW;
|
||||
logic InvalidAccess;
|
||||
logic PreUpdateDA, PrePageFault;
|
||||
|
||||
|
@ -89,7 +89,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
|
|||
assign BadPBMT = ((PTE_PBMT != 0) & ~(P.SVPBMT_SUPPORTED & ENVCFG_PBMTE)) | PTE_PBMT == 3; // PBMT must be zero if not supported; value of 3 is reserved
|
||||
assign BadNAPOT = PTE_N & (~P.SVNAPOT_SUPPORTED | ~NAPOT4); // N must be be 0 if CVNAPOT is not supported or not 64 KiB contiguous region
|
||||
assign BadReserved = PTE_RESERVED; // Reserved bits must be zero
|
||||
assign ReservedEncoding = PTE_W & ~PTE_R; // fault on reserved encoding with R=0, W=1 to match ImperasDV behavior
|
||||
assign ReservedRW = PTE_W & ~PTE_R; // page fault on reserved encoding with R=0, W=1 per Privileged Spec 10.3.1
|
||||
|
||||
// Check whether the access is allowed, page faulting if not.
|
||||
if (ITLB == 1) begin:itlb // Instruction TLB fault checking
|
||||
|
@ -97,7 +97,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
|
|||
// only execute non-user mode pages.
|
||||
assign ImproperPrivilege = ((PrivilegeModeW == P.U_MODE) & ~PTE_U) | ((PrivilegeModeW == P.S_MODE) & PTE_U);
|
||||
assign PreUpdateDA = ~PTE_A;
|
||||
assign InvalidAccess = ~PTE_X | ReservedEncoding;
|
||||
assign InvalidAccess = ~PTE_X | ReservedRW;
|
||||
end else begin:dtlb // Data TLB fault checking
|
||||
logic InvalidRead, InvalidWrite;
|
||||
logic InvalidCBOM, InvalidCBOZ;
|
||||
|
@ -114,7 +114,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) (
|
|||
assign InvalidWrite = WriteAccess & ~PTE_W;
|
||||
assign InvalidCBOM = (|CMOpM[2:0]) & (~PTE_R & (~STATUS_MXR | ~PTE_X));
|
||||
assign InvalidCBOZ = CMOpM[3] & ~PTE_W;
|
||||
assign InvalidAccess = InvalidRead | InvalidWrite | InvalidCBOM | InvalidCBOZ | ReservedEncoding;
|
||||
assign InvalidAccess = InvalidRead | InvalidWrite | InvalidCBOM | InvalidCBOZ | ReservedRW;
|
||||
assign PreUpdateDA = ~PTE_A | WriteAccess & ~PTE_D;
|
||||
end
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ module csrm import cvw::*; #(parameter cvw_t P) (
|
|||
assign ADDRLocked[i] = PMPCFG_ARRAY_REGW[i][7];
|
||||
else
|
||||
assign ADDRLocked[i] = PMPCFG_ARRAY_REGW[i][7] | (PMPCFG_ARRAY_REGW[i+1][7] & PMPCFG_ARRAY_REGW[i+1][4:3] == 2'b01);
|
||||
|
||||
|
||||
assign WritePMPADDRM[i] = (CSRMWriteM & (CSRAdrM == (PMPADDR0+i))) & ~ADDRLocked[i];
|
||||
flopenr #(P.PA_BITS-2) PMPADDRreg(clk, reset, WritePMPADDRM[i], CSRWriteValM[P.PA_BITS-3:0], PMPADDR_ARRAY_REGW[i]);
|
||||
if (P.XLEN==64) begin
|
||||
|
@ -134,7 +134,7 @@ module csrm import cvw::*; #(parameter cvw_t P) (
|
|||
|
||||
assign CSRPMPWRLegalizedWriteValM[i] = {(CSRPMPWriteValM[i][1] & CSRPMPWriteValM[i][0]), CSRPMPWriteValM[i][0]}; // legalize WR fields (reserved 10 written as 00)
|
||||
assign CSRPMPLegalizedWriteValM[i] = {CSRPMPWriteValM[i][7], 2'b00, CSRPMPWriteValM[i][4:2], CSRPMPWRLegalizedWriteValM[i]};
|
||||
flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRPMPWriteValM[i], PMPCFG_ARRAY_REGW[i]);
|
||||
flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRPMPLegalizedWriteValM[i], PMPCFG_ARRAY_REGW[i]);
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -22,337 +22,418 @@
|
|||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// decode the instruction name, to help the test bench
|
||||
module instrNameDecTB(
|
||||
module instrNameDecTB #(parameter XLEN) (
|
||||
input logic [31:0] instr,
|
||||
output string name);
|
||||
|
||||
logic [6:0] op;
|
||||
logic funct1;
|
||||
logic [1:0] funct2;
|
||||
logic [2:0] funct3;
|
||||
logic [4:0] funct5;
|
||||
logic [6:0] funct7;
|
||||
logic [11:0] imm;
|
||||
logic [4:0] rs2, rd;
|
||||
logic [4:0] rs2, rd, CRrs2;
|
||||
logic [1:0] compressedOp;
|
||||
logic [5:0] compressed15_10;
|
||||
|
||||
|
||||
assign op = instr[6:0];
|
||||
assign funct1 = instr[6];
|
||||
assign funct2 = instr[6:5];
|
||||
assign funct3 = instr[14:12];
|
||||
assign funct5 = instr[6:2];
|
||||
assign funct7 = instr[31:25];
|
||||
assign imm = instr[31:20];
|
||||
assign rs2 = instr[24:20];
|
||||
assign rd = instr[11:7];
|
||||
assign compressedOp = instr[1:0];
|
||||
assign compressed15_10 = instr[15:10];
|
||||
assign CRrs2 = instr[6:2];
|
||||
|
||||
// it would be nice to add the operands to the name
|
||||
// create another variable called decoded
|
||||
|
||||
always_comb
|
||||
casez({op, funct3})
|
||||
10'b0000000_000: name = "BAD";
|
||||
10'b0000011_000: name = "LB";
|
||||
10'b0000011_001: name = "LH";
|
||||
10'b0000011_010: name = "LW";
|
||||
10'b0000011_011: name = "LD";
|
||||
10'b0000011_100: name = "LBU";
|
||||
10'b0000011_101: name = "LHU";
|
||||
10'b0000011_110: name = "LWU";
|
||||
10'b0010011_000: if (instr[31:15] == 0 & instr[11:7] ==0) name = "NOP/FLUSH";
|
||||
else name = "ADDI";
|
||||
10'b0010011_001: if (funct7[6:1] == 6'b000000) name = "SLLI";
|
||||
else if (funct7[6:1] == 6'b010010) name = "BCLRI";
|
||||
else if (funct7[6:1] == 6'b011010) name = "BINVI";
|
||||
else if (funct7[6:1] == 6'b001010) name = "BSETI";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "ZIP";
|
||||
else if (funct7 == 7'b0011000 & rs2 == 5'b00000) name = "AES64IM";
|
||||
else if (funct7 == 7'b0011000 & rs2[4] == 1'b1) name = "AES64KS1I";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00010) name = "SHA256SIG0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00011) name = "SHA256SIG1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00000) name = "SHA256SUM0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00001) name = "SHA256SUM1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00110) name = "SHA512SIG0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00111) name = "SHA512SIG1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00100) name = "SHA512SUM0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00101) name = "SHA512SUM1";
|
||||
else if (funct7 == 7'b0110000) begin
|
||||
case (rs2)
|
||||
5'b00000: name = "CLZ";
|
||||
5'b00010: name = "CPOP";
|
||||
5'b00001: name = "CTZ";
|
||||
5'b00100: name = "SEXT.B";
|
||||
5'b00101: name = "SEXT.H";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
end else name = "ILLEGAL";
|
||||
10'b0010011_010: name = "SLTI";
|
||||
10'b0010011_011: name = "SLTIU";
|
||||
10'b0010011_100: name = "XORI";
|
||||
10'b0010011_101: if (funct7[6:1] == 6'b000000) name = "SRLI";
|
||||
else if (funct7[6:1] == 6'b010000) name = "SRAI";
|
||||
else if (funct7[6:1] == 6'b011010 & rs2 == 5'b11000) name = "REV8";
|
||||
else if (funct7[6:1] == 6'b011000) name = "RORI";
|
||||
else if (funct7[6:1] == 6'b010010) name = "BEXTI";
|
||||
else if (funct7 == 7'b0010100 & rs2 == 5'b00111) name = "ORC.B";
|
||||
else if (imm == 12'b011010000111) name = "BREV8";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "UNZIP";
|
||||
else name = "ILLEGAL";
|
||||
10'b0010011_110: if (rd == 0 & rs2 == 0) name = "PREFETCH.I";
|
||||
else if (rd == 0 & rs2 == 1) name = "PREFETCH.R";
|
||||
else if (rd == 0 & rs2 == 3) name = "PREFETCH.W";
|
||||
else name = "ORI";
|
||||
10'b0010011_111: name = "ANDI";
|
||||
10'b0010111_???: name = "AUIPC";
|
||||
10'b0100011_000: name = "SB";
|
||||
10'b0100011_001: name = "SH";
|
||||
10'b0100011_010: name = "SW";
|
||||
10'b0100011_011: name = "SD";
|
||||
10'b0011011_000: name = "ADDIW";
|
||||
10'b0011011_001: if (funct7 == 7'b0000000 )name = "SLLIW";
|
||||
else if (funct7[6:1] == 6'b000010) name = "SLLI.UW";
|
||||
else if (funct7 == 7'b0110000) begin
|
||||
case (rs2)
|
||||
5'b00000: name = "CLZW";
|
||||
5'b00010: name = "CPOPW";
|
||||
5'b00001: name = "CTZW";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
end else name = "ILLEGAL";
|
||||
10'b0011011_101: if (funct7 == 7'b0000000) name = "SRLIW";
|
||||
else if (funct7 == 7'b0100000) name = "SRAIW";
|
||||
else if (funct7 == 7'b0110000) name = "RORIW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_000: if (funct7 == 7'b0000000) name = "ADDW";
|
||||
else if (funct7 == 7'b0100000) name = "SUBW";
|
||||
else if (funct7 == 7'b0000001) name = "MULW";
|
||||
else if (funct7 == 7'b0000100) name = "ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_001: if (funct7 == 7'b0000000) name = "SLLW";
|
||||
else if (funct7 == 7'b0000001) name = "DIVW";
|
||||
else if (funct7 == 7'b0110000) name = "ROLW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_010: if (funct7 == 7'b0010000) name = "SH1ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_100: if (funct7 == 7'b0010000) name = "SH2ADD.UW";
|
||||
else if (funct7 == 7'b0000100) name = "ZEXT.H";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_101: if (funct7 == 7'b0000000) name = "SRLW";
|
||||
else if (funct7 == 7'b0100000) name = "SRAW";
|
||||
else if (funct7 == 7'b0000001) name = "DIVUW";
|
||||
else if (funct7 == 7'b0110000) name = "RORW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_110: if (funct7 == 7'b0000001) name = "REMW";
|
||||
else if (funct7 == 7'b0010000) name = "SH3ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_111: if (funct7 == 7'b0000001) name = "REMUW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_000: if (funct7 == 7'b0000000) name = "ADD";
|
||||
else if (funct7 == 7'b0000001) name = "MUL";
|
||||
else if (funct7 == 7'b0100000) name = "SUB";
|
||||
else if (funct7[4:0] == 5'b10101) name = "AES32DSI";
|
||||
else if (funct7[4:0] == 5'b10111) name = "AES32DSMI";
|
||||
else if (funct7 == 7'b0011101) name = "AES64DS";
|
||||
else if (funct7 == 7'b0011111) name = "AES64DSM";
|
||||
else if (funct7[4:0] == 5'b10001) name = "AES32ESI";
|
||||
else if (funct7[4:0] == 5'b10011) name = "AES32ESMI";
|
||||
else if (funct7 == 7'b0011001) name = "AES64ES";
|
||||
else if (funct7 == 7'b0011011) name = "AES64ESM";
|
||||
else if (funct7 == 7'b0111111) name = "AES64KS2";
|
||||
else if (funct7 == 7'b0101110) name = "SHA512SIG0H";
|
||||
else if (funct7 == 7'b0101010) name = "SHA512SIG0L";
|
||||
else if (funct7 == 7'b0101111) name = "SHA512SIG1H";
|
||||
else if (funct7 == 7'b0101011) name = "SHA512SIG1L";
|
||||
else if (funct7 == 7'b0101000) name = "SHA512SUM0R";
|
||||
else if (funct7 == 7'b0101001) name = "SHA512SUM1R";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_001: if (funct7 == 7'b0000000) name = "SLL";
|
||||
else if (funct7 == 7'b0000001) name = "MULH";
|
||||
else if (funct7 == 7'b0110000) name = "ROL";
|
||||
else if (funct7 == 7'b0000101) name = "CLMUL";
|
||||
else if (funct7 == 7'b0100100) name = "BCLR";
|
||||
else if (funct7 == 7'b0110100) name = "BINV";
|
||||
else if (funct7 == 7'b0010100) name = "BSET";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_010: if (funct7 == 7'b0000000) name = "SLT";
|
||||
else if (funct7 == 7'b0000001) name = "MULHSU";
|
||||
else if (funct7 == 7'b0010000) name = "SH1ADD";
|
||||
else if (funct7 == 7'b0000101) name = "CLMULR";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_011: if (funct7 == 7'b0000000) name = "SLTU";
|
||||
else if (funct7 == 7'b0000001) name = "MULHU";
|
||||
else if (funct7 == 7'b0000101) name = "CLMULH";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_100: if (funct7 == 7'b0000000) name = "XOR";
|
||||
else if (funct7 == 7'b0000001) name = "DIV";
|
||||
else if (funct7 == 7'b0010000) name = "SH2ADD";
|
||||
else if (funct7 == 7'b0000101) name = "MIN";
|
||||
else if (funct7 == 7'b0100000) name = "ORN";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b00000) name = "ZEXT.H";
|
||||
else if (funct7 == 7'b0000100 & op == 7'b0110011) name = "PACK";
|
||||
else if (funct7 == 7'b0000100 & op == 7'b0111011) name = "PACKW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_101: if (funct7 == 7'b0000000) name = "SRL";
|
||||
else if (funct7 == 7'b0000001) name = "DIVU";
|
||||
else if (funct7 == 7'b0100000) name = "SRA";
|
||||
else if (funct7 == 7'b0000101) name = "MINU";
|
||||
else if (funct7 == 7'b0110000) name = "ROR";
|
||||
else if (funct7 == 7'b0100100) name = "BEXT";
|
||||
else if (funct7 == 7'b0000111) name = "CZERO.EQZ";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_110: if (funct7 == 7'b0000000) name = "OR";
|
||||
else if (funct7 == 7'b0000001) name = "REM";
|
||||
else if (funct7 == 7'b0010000) name = "SH3ADD";
|
||||
else if (funct7 == 7'b0000101) name = "MAX";
|
||||
else if (funct7 == 7'b0100000) name = "XNOR";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_111: if (funct7 == 7'b0000000) name = "AND";
|
||||
else if (funct7 == 7'b0000001) name = "REMU";
|
||||
else if (funct7 == 7'b0000101) name = "MAXU";
|
||||
else if (funct7 == 7'b0100000) name = "ANDN";
|
||||
else if (funct7 == 7'b0000111) name = "CZERO.NEZ";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110111_???: name = "LUI";
|
||||
10'b1100011_000: name = "BEQ";
|
||||
10'b1100011_001: name = "BNE";
|
||||
10'b1100011_100: name = "BLT";
|
||||
10'b1100011_101: name = "BGE";
|
||||
10'b1100011_110: name = "BLTU";
|
||||
10'b1100011_111: name = "BGEU";
|
||||
10'b1100111_000: name = "JALR";
|
||||
10'b1101111_???: name = "JAL";
|
||||
10'b1110011_000: if (imm == 0) name = "ECALL";
|
||||
else if (imm == 1) name = "EBREAK";
|
||||
else if (imm == 258) name = "SRET";
|
||||
else if (imm == 770) name = "MRET";
|
||||
else if (funct7 == 9) name = "SFENCE.VMA";
|
||||
else if (funct7 == 11) name = "SINVAL.VMA";
|
||||
else if (funct7 == 12 & rs2 == 0) name = "SFENCE.W.INVAL";
|
||||
else if (funct7 == 12 & rs2 == 1) name = "SFENCE.INVAL.IR";
|
||||
else if (imm == 259) name = "WFI";
|
||||
else if (imm == 261) name = "WFI";
|
||||
else name = "ILLEGAL";
|
||||
10'b1110011_001: name = "CSRRW";
|
||||
10'b1110011_010: name = "CSRRS";
|
||||
10'b1110011_011: name = "CSRRC";
|
||||
10'b1110011_101: name = "CSRRWI";
|
||||
10'b1110011_110: name = "CSRRSI";
|
||||
10'b1110011_111: name = "CSRRCI";
|
||||
10'b0101111_010: if (funct7[6:2] == 5'b00010) name = "LR.W";
|
||||
else if (funct7[6:2] == 5'b00011) name = "SC.W";
|
||||
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.W";
|
||||
else if (funct7[6:2] == 5'b00000) name = "AMOADD.W";
|
||||
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.W";
|
||||
else if (funct7[6:2] == 5'b01100) name = "AMOAND.W";
|
||||
else if (funct7[6:2] == 5'b01000) name = "AMOOR.W";
|
||||
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.W";
|
||||
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.W";
|
||||
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.W";
|
||||
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.W";
|
||||
else name = "ILLEGAL";
|
||||
10'b0101111_011: if (funct7[6:2] == 5'b00010) name = "LR.D";
|
||||
else if (funct7[6:2] == 5'b00011) name = "SC.D";
|
||||
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.D";
|
||||
else if (funct7[6:2] == 5'b00000) name = "AMOADD.D";
|
||||
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.D";
|
||||
else if (funct7[6:2] == 5'b01100) name = "AMOAND.D";
|
||||
else if (funct7[6:2] == 5'b01000) name = "AMOOR.D";
|
||||
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.D";
|
||||
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.D";
|
||||
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.D";
|
||||
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D";
|
||||
else name = "ILLEGAL";
|
||||
10'b0001111_000: name = "FENCE";
|
||||
10'b0001111_001: name = "FENCE.I";
|
||||
10'b0001111_010: if (instr[31:20] == 12'd0) name = "CBO.INVAL";
|
||||
else if (instr[31:20] == 12'd1) name = "CBO.CLEAN";
|
||||
else if (instr[31:20] == 12'd2) name = "CBO.FLUSH";
|
||||
else if (instr[31:20] == 12'd4) name = "CBO.ZERO";
|
||||
else name = "ILLEGAL";
|
||||
10'b1000011_???: name = "FMADD";
|
||||
10'b1000111_???: name = "FMSUB";
|
||||
10'b1001011_???: name = "FNMSUB";
|
||||
10'b1001111_???: name = "FNMADD";
|
||||
10'b1010011_???: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00000) name = "FCVT.W.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00010) name = "FCVT.L.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00011) name = "FCVT.LU.S";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00000) name = "FCVT.S.W";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00010) name = "FCVT.S.L";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00011) name = "FCVT.S.LU";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00000) name = "FCVT.W.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00001) name = "FCVT.WU.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00010) name = "FCVT.L.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00011) name = "FCVT.LU.D";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00000) name = "FCVT.D.W";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00001) name = "FCVT.D.WU";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00010) name = "FCVT.D.L";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00011) name = "FCVT.D.LU";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00000) name = "FCVT.W.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00001) name = "FCVT.WU.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00010) name = "FCVT.L.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00011) name = "FCVT.LU.H";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00000) name = "FCVT.H.W";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00001) name = "FCVT.H.WU";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00010) name = "FCVT.H.L";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00011) name = "FCVT.H.LU";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00000) name = "FCVT.W.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00001) name = "FCVT.WU.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00010) name = "FCVT.L.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00011) name = "FCVT.LU.Q";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00000) name = "FCVT.Q.W";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00001) name = "FCVT.Q.WU";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00010) name = "FCVT.Q.L";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00011) name = "FCVT.Q.LU";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00010) name = "FCVT.S.H";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00011) name = "FCVT.S.Q";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00010) name = "FCVT.D.H";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00011) name = "FCVT.D.Q";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00000) name = "FCVT.H.S";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00001) name = "FCVT.H.D";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00011) name = "FCVT.H.Q";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00000) name = "FCVT.Q.S";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00001) name = "FCVT.Q.D";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00010) name = "FCVT.Q.H";
|
||||
else if (funct7 == 7'b1110000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.W";
|
||||
else if (funct7 == 7'b1111000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.W.X";
|
||||
else if (funct7 == 7'b1110001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.D";
|
||||
else if (funct7 == 7'b1111001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.D.X";
|
||||
else if (funct7 == 7'b1110010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.H";
|
||||
else if (funct7 == 7'b1111010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.H.X";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b000) name = "FSGNJ";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b000) name = "FMIN";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b000) name = "FLE";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b001) name = "FSGNJN";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b001) name = "FMAX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b001) name = "FLT";
|
||||
else if (funct7[6:2] == 5'b11100 & funct3 == 3'b001) name = "FCLASS";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b010) name = "FSGNJX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b010) name = "FEQ";
|
||||
else if (funct7[6:2] == 5'b11110 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FLI";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b010) name = "FMINM";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b011) name = "FMAXM";
|
||||
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00100) name = "FROUND";
|
||||
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00101) name = "FROUNDNX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b100) name = "FLEQ";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b101) name = "FLTQ";
|
||||
else if (funct7 == 7'b1110001 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.D";
|
||||
else if (funct7 == 7'b1110011 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.Q";
|
||||
else if (funct7 == 7'b1011001 & funct3 == 3'b000) name = "FMVP.D.X";
|
||||
else if (funct7 == 7'b1011011 & funct3 == 3'b000) name = "FMVP.Q.X";
|
||||
else if (funct7 == 7'b1100001 & funct3 == 3'b001 & rs2 == 5'b01000) name = "FCVTMOD.W.D";
|
||||
else name = "ILLEGAL";
|
||||
10'b0000111_001: name = "FLH";
|
||||
10'b0000111_010: name = "FLW";
|
||||
10'b0000111_011: name = "FLD";
|
||||
10'b0000111_100: name = "FLQ";
|
||||
10'b0100111_001: name = "FSH";
|
||||
10'b0100111_010: name = "FSW";
|
||||
10'b0100111_011: name = "FSD";
|
||||
10'b0100111_100: name = "FSQ";
|
||||
default: name = "ILLEGAL";
|
||||
always_comb
|
||||
case (compressedOp)
|
||||
2'b00:
|
||||
casez (compressed15_10)
|
||||
6'b000???: if (instr[12:5] != 8'b0) name = "C.ADDI4SPN";
|
||||
else if(compressed15_10 == 6'b000000 & op == 7'b0000000 & funct3 == 3'b000) name = "BAD";
|
||||
6'b010???: name = "C.LW";
|
||||
6'b110???: name = "C.SW";
|
||||
6'b011???: if (XLEN == 32'd32) name = "C.FLW";
|
||||
else name = "C.LD";
|
||||
6'b111???: if (XLEN == 32'd32) name = "C.FSW";
|
||||
else name = "C.SD";
|
||||
6'b100000: name = "C.LBU";
|
||||
6'b100001: if (funct1 == 1'b1) name = "C.LH";
|
||||
else if (funct1 == 1'b0) name = "C.LHU";
|
||||
6'b100010: name = "C.SB";
|
||||
6'b100011: if (funct1 == 1'b0) name = "C.SH";
|
||||
6'b001???: name = "C.FLD";
|
||||
6'b101???: name = "C.FSD";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
2'b01:
|
||||
casez (compressed15_10)
|
||||
6'b000???: if (instr[12:10] == 3'b0 & rd == 5'b00000 & instr[6:2] == 5'b00000) name = "C.NOP";
|
||||
else if (rd != 5'b00000 & instr[6:2] != 5'b00000) name = "C.ADDI";
|
||||
6'b010???: if (rd != 5'b00000) name = "C.LI";
|
||||
6'b011???: if (rd != 5'b00000 & rd != 5'b00010 & instr[6:2] != 5'b00000) name = "C.LUI";
|
||||
else if (rd == 5'b00010 & instr[6:2] != 5'b00000) name = "C.ADDI16SP";
|
||||
6'b100?00: name = "C.SRLI";
|
||||
6'b100?01: name = "C.SRAI";
|
||||
6'b100?10: name = "C.ANDI";
|
||||
6'b100011: if (funct2 == 2'b00) name = "C.SUB";
|
||||
else if (funct2 == 2'b01) name = "C.XOR";
|
||||
else if (funct2 == 2'b10) name = "C.OR";
|
||||
else if (funct2 == 2'b11) name = "C.AND";
|
||||
6'b101???: name = "C.J";
|
||||
6'b110???: name = "C.BEQZ";
|
||||
6'b111???: name = "C.BNEZ";
|
||||
6'b001???: if (XLEN == 32'd32) name = "C.JAL";
|
||||
else if (XLEN == 32'd64 & rd != 5'b00000) name = "C.ADDIW";
|
||||
6'b100111: if (XLEN == 32'd64 & funct2 == 2'b00) name = "C.SUBW";
|
||||
else if (XLEN == 32'd64 & funct2 == 2'b01) name = "C.ADDW";
|
||||
else if (funct5 == 5'b11000) name = "C.ZEXT.B";
|
||||
else if (funct5 == 5'b11001) name = "C.SEXT.B";
|
||||
else if (funct5 == 5'b11010) name = "C.ZEXT.H";
|
||||
else if (funct5 == 5'b11011) name = "C.SEXT.H";
|
||||
else if (funct5 == 5'b11101) name = "C.NOT";
|
||||
else if (funct2 == 2'b10) name = "C.MUL";
|
||||
else if (funct5 == 5'b11100) name = "C.ZEXT.W";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
2'b10:
|
||||
casez (compressed15_10)
|
||||
6'b000???: if (rd != 5'b00000) name = "C.SLLI";
|
||||
6'b010???: if (rd != 5'b00000) name = "C.LWSP";
|
||||
6'b1000??: if (rd != 5'b00000 & CRrs2 == 5'b00000 ) name = "C.JR";
|
||||
else if (rd != 5'b00000 & CRrs2 != 5'b00000 ) name = "C.MV";
|
||||
6'b1001??: if (rd == 5'b00000 & CRrs2 == 5'b00000 ) name = "C.EBREAK";
|
||||
else if (rd != 5'b00000 & CRrs2 == 5'b00000 ) name = "C.JALR";
|
||||
else if (rd != 5'b00000 & CRrs2 != 5'b00000 ) name = "C.ADD";
|
||||
6'b110???: name = "C.SWSP";
|
||||
6'b011???: if (XLEN == 32'd32) name = "C.FLWSP";
|
||||
else if (rd != 5'b00000) name = "C.LDSP";
|
||||
6'b111???: if (XLEN == 32'd32) name = "C.FSWSP";
|
||||
else name = "C.SDSP";
|
||||
6'b001???: name = "C.FLDSP";
|
||||
6'b101???: name = "C.FSDSP";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
2'b11:
|
||||
casez({op, funct3})
|
||||
10'b0000011_000: name = "LB";
|
||||
10'b0000011_001: name = "LH";
|
||||
10'b0000011_010: name = "LW";
|
||||
10'b0000011_011: name = "LD";
|
||||
10'b0000011_100: name = "LBU";
|
||||
10'b0000011_101: name = "LHU";
|
||||
10'b0000011_110: name = "LWU";
|
||||
10'b0010011_000: if (instr[31:15] == 0 & instr[11:7] ==0) name = "NOP/FLUSH";
|
||||
else name = "ADDI";
|
||||
10'b0010011_001: if (funct7[6:1] == 6'b000000) name = "SLLI";
|
||||
else if (funct7[6:1] == 6'b010010) name = "BCLRI";
|
||||
else if (funct7[6:1] == 6'b011010) name = "BINVI";
|
||||
else if (funct7[6:1] == 6'b001010) name = "BSETI";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "ZIP";
|
||||
else if (funct7 == 7'b0011000 & rs2 == 5'b00000) name = "AES64IM";
|
||||
else if (funct7 == 7'b0011000 & rs2[4] == 1'b1) name = "AES64KS1I";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00010) name = "SHA256SIG0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00011) name = "SHA256SIG1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00000) name = "SHA256SUM0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00001) name = "SHA256SUM1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00110) name = "SHA512SIG0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00111) name = "SHA512SIG1";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00100) name = "SHA512SUM0";
|
||||
else if (funct7 == 7'b0001000 & rs2 == 5'b00101) name = "SHA512SUM1";
|
||||
else if (funct7 == 7'b0110000) begin
|
||||
case (rs2)
|
||||
5'b00000: name = "CLZ";
|
||||
5'b00010: name = "CPOP";
|
||||
5'b00001: name = "CTZ";
|
||||
5'b00100: name = "SEXT.B";
|
||||
5'b00101: name = "SEXT.H";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
end else name = "ILLEGAL";
|
||||
10'b0010011_010: name = "SLTI";
|
||||
10'b0010011_011: name = "SLTIU";
|
||||
10'b0010011_100: name = "XORI";
|
||||
10'b0010011_101: if (funct7[6:1] == 6'b000000) name = "SRLI";
|
||||
else if (funct7[6:1] == 6'b010000) name = "SRAI";
|
||||
else if (funct7[6:1] == 6'b011010 & rs2 == 5'b11000) name = "REV8";
|
||||
else if (funct7[6:1] == 6'b011000) name = "RORI";
|
||||
else if (funct7[6:1] == 6'b010010) name = "BEXTI";
|
||||
else if (funct7 == 7'b0010100 & rs2 == 5'b00111) name = "ORC.B";
|
||||
else if (imm == 12'b011010000111) name = "BREV8";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b01111) name = "UNZIP";
|
||||
else name = "ILLEGAL";
|
||||
10'b0010011_110: if (rd == 0 & rs2 == 0) name = "PREFETCH.I";
|
||||
else if (rd == 0 & rs2 == 1) name = "PREFETCH.R";
|
||||
else if (rd == 0 & rs2 == 3) name = "PREFETCH.W";
|
||||
else name = "ORI";
|
||||
10'b0010011_111: name = "ANDI";
|
||||
10'b0010111_???: name = "AUIPC";
|
||||
10'b0100011_000: name = "SB";
|
||||
10'b0100011_001: name = "SH";
|
||||
10'b0100011_010: name = "SW";
|
||||
10'b0100011_011: name = "SD";
|
||||
10'b0011011_000: name = "ADDIW";
|
||||
10'b0011011_001: if (funct7 == 7'b0000000 )name = "SLLIW";
|
||||
else if (funct7[6:1] == 6'b000010) name = "SLLI.UW";
|
||||
else if (funct7 == 7'b0110000) begin
|
||||
case (rs2)
|
||||
5'b00000: name = "CLZW";
|
||||
5'b00010: name = "CPOPW";
|
||||
5'b00001: name = "CTZW";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
end else name = "ILLEGAL";
|
||||
10'b0011011_101: if (funct7 == 7'b0000000) name = "SRLIW";
|
||||
else if (funct7 == 7'b0100000) name = "SRAIW";
|
||||
else if (funct7 == 7'b0110000) name = "RORIW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_000: if (funct7 == 7'b0000000) name = "ADDW";
|
||||
else if (funct7 == 7'b0100000) name = "SUBW";
|
||||
else if (funct7 == 7'b0000001) name = "MULW";
|
||||
else if (funct7 == 7'b0000100) name = "ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_001: if (funct7 == 7'b0000000) name = "SLLW";
|
||||
else if (funct7 == 7'b0000001) name = "DIVW";
|
||||
else if (funct7 == 7'b0110000) name = "ROLW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_010: if (funct7 == 7'b0010000) name = "SH1ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_100: if (funct7 == 7'b0010000) name = "SH2ADD.UW";
|
||||
else if (funct7 == 7'b0000100) name = "ZEXT.H";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_101: if (funct7 == 7'b0000000) name = "SRLW";
|
||||
else if (funct7 == 7'b0100000) name = "SRAW";
|
||||
else if (funct7 == 7'b0000001) name = "DIVUW";
|
||||
else if (funct7 == 7'b0110000) name = "RORW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_110: if (funct7 == 7'b0000001) name = "REMW";
|
||||
else if (funct7 == 7'b0010000) name = "SH3ADD.UW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0111011_111: if (funct7 == 7'b0000001) name = "REMUW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_000: if (funct7 == 7'b0000000) name = "ADD";
|
||||
else if (funct7 == 7'b0000001) name = "MUL";
|
||||
else if (funct7 == 7'b0100000) name = "SUB";
|
||||
else if (funct7[4:0] == 5'b10101) name = "AES32DSI";
|
||||
else if (funct7[4:0] == 5'b10111) name = "AES32DSMI";
|
||||
else if (funct7 == 7'b0011101) name = "AES64DS";
|
||||
else if (funct7 == 7'b0011111) name = "AES64DSM";
|
||||
else if (funct7[4:0] == 5'b10001) name = "AES32ESI";
|
||||
else if (funct7[4:0] == 5'b10011) name = "AES32ESMI";
|
||||
else if (funct7 == 7'b0011001) name = "AES64ES";
|
||||
else if (funct7 == 7'b0011011) name = "AES64ESM";
|
||||
else if (funct7 == 7'b0111111) name = "AES64KS2";
|
||||
else if (funct7 == 7'b0101110) name = "SHA512SIG0H";
|
||||
else if (funct7 == 7'b0101010) name = "SHA512SIG0L";
|
||||
else if (funct7 == 7'b0101111) name = "SHA512SIG1H";
|
||||
else if (funct7 == 7'b0101011) name = "SHA512SIG1L";
|
||||
else if (funct7 == 7'b0101000) name = "SHA512SUM0R";
|
||||
else if (funct7 == 7'b0101001) name = "SHA512SUM1R";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_001: if (funct7 == 7'b0000000) name = "SLL";
|
||||
else if (funct7 == 7'b0000001) name = "MULH";
|
||||
else if (funct7 == 7'b0110000) name = "ROL";
|
||||
else if (funct7 == 7'b0000101) name = "CLMUL";
|
||||
else if (funct7 == 7'b0100100) name = "BCLR";
|
||||
else if (funct7 == 7'b0110100) name = "BINV";
|
||||
else if (funct7 == 7'b0010100) name = "BSET";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_010: if (funct7 == 7'b0000000) name = "SLT";
|
||||
else if (funct7 == 7'b0000001) name = "MULHSU";
|
||||
else if (funct7 == 7'b0010000) name = "SH1ADD";
|
||||
else if (funct7 == 7'b0000101) name = "CLMULR";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_011: if (funct7 == 7'b0000000) name = "SLTU";
|
||||
else if (funct7 == 7'b0000001) name = "MULHU";
|
||||
else if (funct7 == 7'b0000101) name = "CLMULH";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_100: if (funct7 == 7'b0000000) name = "XOR";
|
||||
else if (funct7 == 7'b0000001) name = "DIV";
|
||||
else if (funct7 == 7'b0010000) name = "SH2ADD";
|
||||
else if (funct7 == 7'b0000101) name = "MIN";
|
||||
else if (funct7 == 7'b0100000) name = "ORN";
|
||||
else if (funct7 == 7'b0000100 & rs2 == 5'b00000) name = "ZEXT.H";
|
||||
else if (funct7 == 7'b0000100 & op == 7'b0110011) name = "PACK";
|
||||
else if (funct7 == 7'b0000100 & op == 7'b0111011) name = "PACKW";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_101: if (funct7 == 7'b0000000) name = "SRL";
|
||||
else if (funct7 == 7'b0000001) name = "DIVU";
|
||||
else if (funct7 == 7'b0100000) name = "SRA";
|
||||
else if (funct7 == 7'b0000101) name = "MINU";
|
||||
else if (funct7 == 7'b0110000) name = "ROR";
|
||||
else if (funct7 == 7'b0100100) name = "BEXT";
|
||||
else if (funct7 == 7'b0000111) name = "CZERO.EQZ";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_110: if (funct7 == 7'b0000000) name = "OR";
|
||||
else if (funct7 == 7'b0000001) name = "REM";
|
||||
else if (funct7 == 7'b0010000) name = "SH3ADD";
|
||||
else if (funct7 == 7'b0000101) name = "MAX";
|
||||
else if (funct7 == 7'b0100000) name = "XNOR";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110011_111: if (funct7 == 7'b0000000) name = "AND";
|
||||
else if (funct7 == 7'b0000001) name = "REMU";
|
||||
else if (funct7 == 7'b0000101) name = "MAXU";
|
||||
else if (funct7 == 7'b0100000) name = "ANDN";
|
||||
else if (funct7 == 7'b0000111) name = "CZERO.NEZ";
|
||||
else name = "ILLEGAL";
|
||||
10'b0110111_???: name = "LUI";
|
||||
10'b1100011_000: name = "BEQ";
|
||||
10'b1100011_001: name = "BNE";
|
||||
10'b1100011_100: name = "BLT";
|
||||
10'b1100011_101: name = "BGE";
|
||||
10'b1100011_110: name = "BLTU";
|
||||
10'b1100011_111: name = "BGEU";
|
||||
10'b1100111_000: name = "JALR";
|
||||
10'b1101111_???: name = "JAL";
|
||||
10'b1110011_000: if (imm == 0) name = "ECALL";
|
||||
else if (imm == 1) name = "EBREAK";
|
||||
else if (imm == 258) name = "SRET";
|
||||
else if (imm == 770) name = "MRET";
|
||||
else if (funct7 == 9) name = "SFENCE.VMA";
|
||||
else if (funct7 == 11) name = "SINVAL.VMA";
|
||||
else if (funct7 == 12 & rs2 == 0) name = "SFENCE.W.INVAL";
|
||||
else if (funct7 == 12 & rs2 == 1) name = "SFENCE.INVAL.IR";
|
||||
else if (imm == 259) name = "WFI";
|
||||
else if (imm == 261) name = "WFI";
|
||||
else name = "ILLEGAL";
|
||||
10'b1110011_001: name = "CSRRW";
|
||||
10'b1110011_010: name = "CSRRS";
|
||||
10'b1110011_011: name = "CSRRC";
|
||||
10'b1110011_101: name = "CSRRWI";
|
||||
10'b1110011_110: name = "CSRRSI";
|
||||
10'b1110011_111: name = "CSRRCI";
|
||||
10'b0101111_010: if (funct7[6:2] == 5'b00010) name = "LR.W";
|
||||
else if (funct7[6:2] == 5'b00011) name = "SC.W";
|
||||
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.W";
|
||||
else if (funct7[6:2] == 5'b00000) name = "AMOADD.W";
|
||||
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.W";
|
||||
else if (funct7[6:2] == 5'b01100) name = "AMOAND.W";
|
||||
else if (funct7[6:2] == 5'b01000) name = "AMOOR.W";
|
||||
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.W";
|
||||
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.W";
|
||||
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.W";
|
||||
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.W";
|
||||
else name = "ILLEGAL";
|
||||
10'b0101111_011: if (funct7[6:2] == 5'b00010) name = "LR.D";
|
||||
else if (funct7[6:2] == 5'b00011) name = "SC.D";
|
||||
else if (funct7[6:2] == 5'b00001) name = "AMOSWAP.D";
|
||||
else if (funct7[6:2] == 5'b00000) name = "AMOADD.D";
|
||||
else if (funct7[6:2] == 5'b00100) name = "AMOAXOR.D";
|
||||
else if (funct7[6:2] == 5'b01100) name = "AMOAND.D";
|
||||
else if (funct7[6:2] == 5'b01000) name = "AMOOR.D";
|
||||
else if (funct7[6:2] == 5'b10000) name = "AMOMIN.D";
|
||||
else if (funct7[6:2] == 5'b10100) name = "AMOMAX.D";
|
||||
else if (funct7[6:2] == 5'b11000) name = "AMOMINU.D";
|
||||
else if (funct7[6:2] == 5'b11100) name = "AMOMAXU.D";
|
||||
else name = "ILLEGAL";
|
||||
10'b0001111_000: name = "FENCE";
|
||||
10'b0001111_001: name = "FENCE.I";
|
||||
10'b0001111_010: if (instr[31:20] == 12'd0) name = "CBO.INVAL";
|
||||
else if (instr[31:20] == 12'd1) name = "CBO.CLEAN";
|
||||
else if (instr[31:20] == 12'd2) name = "CBO.FLUSH";
|
||||
else if (instr[31:20] == 12'd4) name = "CBO.ZERO";
|
||||
else name = "ILLEGAL";
|
||||
10'b1000011_???: name = "FMADD";
|
||||
10'b1000111_???: name = "FMSUB";
|
||||
10'b1001011_???: name = "FNMSUB";
|
||||
10'b1001111_???: name = "FNMADD";
|
||||
10'b1010011_???: if (funct7[6:2] == 5'b00000) name = "FADD";
|
||||
else if (funct7[6:2] == 5'b00001) name = "FSUB";
|
||||
else if (funct7[6:2] == 5'b00010) name = "FMUL";
|
||||
else if (funct7[6:2] == 5'b00011) name = "FDIV";
|
||||
else if (funct7[6:2] == 5'b01011) name = "FSQRT";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00000) name = "FCVT.W.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00001) name = "FCVT.WU.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00010) name = "FCVT.L.S";
|
||||
else if (funct7 == 7'b1100000 & rs2 == 5'b00011) name = "FCVT.LU.S";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00000) name = "FCVT.S.W";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00001) name = "FCVT.S.WU";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00010) name = "FCVT.S.L";
|
||||
else if (funct7 == 7'b1101000 & rs2 == 5'b00011) name = "FCVT.S.LU";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00000) name = "FCVT.W.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00001) name = "FCVT.WU.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00010) name = "FCVT.L.D";
|
||||
else if (funct7 == 7'b1100001 & rs2 == 5'b00011) name = "FCVT.LU.D";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00000) name = "FCVT.D.W";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00001) name = "FCVT.D.WU";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00010) name = "FCVT.D.L";
|
||||
else if (funct7 == 7'b1101001 & rs2 == 5'b00011) name = "FCVT.D.LU";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00000) name = "FCVT.W.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00001) name = "FCVT.WU.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00010) name = "FCVT.L.H";
|
||||
else if (funct7 == 7'b1100010 & rs2 == 5'b00011) name = "FCVT.LU.H";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00000) name = "FCVT.H.W";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00001) name = "FCVT.H.WU";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00010) name = "FCVT.H.L";
|
||||
else if (funct7 == 7'b1101010 & rs2 == 5'b00011) name = "FCVT.H.LU";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00000) name = "FCVT.W.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00001) name = "FCVT.WU.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00010) name = "FCVT.L.Q";
|
||||
else if (funct7 == 7'b1100011 & rs2 == 5'b00011) name = "FCVT.LU.Q";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00000) name = "FCVT.Q.W";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00001) name = "FCVT.Q.WU";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00010) name = "FCVT.Q.L";
|
||||
else if (funct7 == 7'b1101011 & rs2 == 5'b00011) name = "FCVT.Q.LU";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00001) name = "FCVT.S.D";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00010) name = "FCVT.S.H";
|
||||
else if (funct7 == 7'b0100000 & rs2 == 5'b00011) name = "FCVT.S.Q";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00000) name = "FCVT.D.S";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00010) name = "FCVT.D.H";
|
||||
else if (funct7 == 7'b0100001 & rs2 == 5'b00011) name = "FCVT.D.Q";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00000) name = "FCVT.H.S";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00001) name = "FCVT.H.D";
|
||||
else if (funct7 == 7'b0100010 & rs2 == 5'b00011) name = "FCVT.H.Q";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00000) name = "FCVT.Q.S";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00001) name = "FCVT.Q.D";
|
||||
else if (funct7 == 7'b0100011 & rs2 == 5'b00010) name = "FCVT.Q.H";
|
||||
else if (funct7 == 7'b1110000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.W";
|
||||
else if (funct7 == 7'b1111000 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.W.X";
|
||||
else if (funct7 == 7'b1110001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.D";
|
||||
else if (funct7 == 7'b1111001 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.D.X";
|
||||
else if (funct7 == 7'b1110010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.X.H";
|
||||
else if (funct7 == 7'b1111010 & rs2 == 5'b00000 & funct3 == 3'b000) name = "FMV.H.X";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b000) name = "FSGNJ";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b000) name = "FMIN";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b000) name = "FLE";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b001) name = "FSGNJN";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b001) name = "FMAX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b001) name = "FLT";
|
||||
else if (funct7[6:2] == 5'b11100 & funct3 == 3'b001) name = "FCLASS";
|
||||
else if (funct7[6:2] == 5'b00100 & funct3 == 3'b010) name = "FSGNJX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b010) name = "FEQ";
|
||||
else if (funct7[6:2] == 5'b11110 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FLI";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b010) name = "FMINM";
|
||||
else if (funct7[6:2] == 5'b00101 & funct3 == 3'b011) name = "FMAXM";
|
||||
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00100) name = "FROUND";
|
||||
else if (funct7[6:2] == 5'b01000 & rs2 == 5'b00101) name = "FROUNDNX";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b100) name = "FLEQ";
|
||||
else if (funct7[6:2] == 5'b10100 & funct3 == 3'b101) name = "FLTQ";
|
||||
else if (funct7 == 7'b1110001 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.D";
|
||||
else if (funct7 == 7'b1110011 & funct3 == 3'b000 & rs2 == 5'b00001) name = "FMVH.X.Q";
|
||||
else if (funct7 == 7'b1011001 & funct3 == 3'b000) name = "FMVP.D.X";
|
||||
else if (funct7 == 7'b1011011 & funct3 == 3'b000) name = "FMVP.Q.X";
|
||||
else if (funct7 == 7'b1100001 & funct3 == 3'b001 & rs2 == 5'b01000) name = "FCVTMOD.W.D";
|
||||
else name = "ILLEGAL";
|
||||
10'b0000111_001: name = "FLH";
|
||||
10'b0000111_010: name = "FLW";
|
||||
10'b0000111_011: name = "FLD";
|
||||
10'b0000111_100: name = "FLQ";
|
||||
10'b0100111_001: name = "FSH";
|
||||
10'b0100111_010: name = "FSW";
|
||||
10'b0100111_011: name = "FSD";
|
||||
10'b0100111_100: name = "FSQ";
|
||||
default: name = "ILLEGAL";
|
||||
endcase
|
||||
endcase
|
||||
endmodule
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// and limitations under the License.
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module instrTrackerTB(
|
||||
module instrTrackerTB #(parameter XLEN) (
|
||||
input logic clk, reset, FlushE,
|
||||
input logic [31:0] InstrF, InstrD,
|
||||
input logic [31:0] InstrE, InstrM,
|
||||
|
@ -30,9 +30,9 @@ module instrTrackerTB(
|
|||
// stage Instr to Writeback for visualization
|
||||
// flopr #(32) InstrWReg(clk, reset, InstrM, InstrW);
|
||||
|
||||
instrNameDecTB fdec(InstrF, InstrFName);
|
||||
instrNameDecTB ddec(InstrD, InstrDName);
|
||||
instrNameDecTB edec(InstrE, InstrEName);
|
||||
instrNameDecTB mdec(InstrM, InstrMName);
|
||||
instrNameDecTB wdec(InstrW, InstrWName);
|
||||
instrNameDecTB #(XLEN) fdec(InstrF, InstrFName);
|
||||
instrNameDecTB #(XLEN) ddec(InstrD, InstrDName);
|
||||
instrNameDecTB #(XLEN) edec(InstrE, InstrEName);
|
||||
instrNameDecTB #(XLEN) mdec(InstrM, InstrMName);
|
||||
instrNameDecTB #(XLEN) wdec(InstrW, InstrWName);
|
||||
endmodule
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
`define NUM_REGS 32
|
||||
`define NUM_CSRS 4096
|
||||
|
||||
`define STD_LOG 1
|
||||
`define STD_LOG 0
|
||||
`define PRINT_PC_INSTR 0
|
||||
`define PRINT_MOST 0
|
||||
`define PRINT_ALL 0
|
||||
|
@ -733,7 +733,7 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi);
|
|||
int file;
|
||||
string LogFile;
|
||||
if(`STD_LOG) begin
|
||||
instrNameDecTB NameDecoder(rvvi.insn[0][0], instrWName);
|
||||
instrNameDecTB #(P.XLEN) NameDecoder(rvvi.insn[0][0], instrWName);
|
||||
initial begin
|
||||
LogFile = "logs/boottrace.log";
|
||||
file = $fopen(LogFile, "w");
|
||||
|
|
|
@ -145,7 +145,9 @@ module testbench;
|
|||
"arch64i": tests = arch64i;
|
||||
"arch64priv": tests = arch64priv;
|
||||
"arch64c": if (P.ZCA_SUPPORTED)
|
||||
if (P.ZICSR_SUPPORTED) tests = {arch64c, arch64cpriv};
|
||||
if (P.ZICSR_SUPPORTED)
|
||||
if (P.ZCD_SUPPORTED) tests = {arch64c, arch64cpriv, arch64zcd};
|
||||
else tests = {arch64c, arch64cpriv};
|
||||
else tests = {arch64c};
|
||||
"arch64m": if (P.M_SUPPORTED) tests = arch64m;
|
||||
"arch64a_amo": if (P.ZAAMO_SUPPORTED) tests = arch64a_amo;
|
||||
|
@ -172,7 +174,9 @@ module testbench;
|
|||
"arch64zbs": if (P.ZBS_SUPPORTED) tests = arch64zbs;
|
||||
"arch64zicboz": if (P.ZICBOZ_SUPPORTED) tests = arch64zicboz;
|
||||
"arch64zcb": if (P.ZCB_SUPPORTED) tests = arch64zcb;
|
||||
"arch64zfh": if (P.ZFH_SUPPORTED) tests = arch64zfh;
|
||||
"arch64zfh": if (P.ZFH_SUPPORTED)
|
||||
if (P.D_SUPPORTED) tests = {arch64zfh, arch64zfh_d};
|
||||
else tests = arch64zfh;
|
||||
"arch64zfh_fma": if (P.ZFH_SUPPORTED) tests = arch64zfh_fma;
|
||||
"arch64zfh_divsqrt": if (P.ZFH_SUPPORTED) tests = arch64zfh_divsqrt;
|
||||
"arch64zfaf": if (P.ZFA_SUPPORTED) tests = arch64zfaf;
|
||||
|
@ -192,7 +196,11 @@ module testbench;
|
|||
"arch32i": tests = arch32i;
|
||||
"arch32priv": tests = arch32priv;
|
||||
"arch32c": if (P.C_SUPPORTED)
|
||||
if (P.ZICSR_SUPPORTED) tests = {arch32c, arch32cpriv};
|
||||
if (P.ZICSR_SUPPORTED)
|
||||
if (P.ZCF_SUPPORTED)
|
||||
if (P.ZCD_SUPPORTED) tests = {arch32c, arch32cpriv, arch32zcf, arch32zcd};
|
||||
else tests = {arch32c, arch32cpriv, arch32zcf};
|
||||
else tests = {arch32c, arch32cpriv};
|
||||
else tests = {arch32c};
|
||||
"arch32m": if (P.M_SUPPORTED) tests = arch32m;
|
||||
"arch32a_amo": if (P.ZAAMO_SUPPORTED) tests = arch32a_amo;
|
||||
|
@ -216,7 +224,9 @@ module testbench;
|
|||
"arch32zbs": if (P.ZBS_SUPPORTED) tests = arch32zbs;
|
||||
"arch32zicboz": if (P.ZICBOZ_SUPPORTED) tests = arch32zicboz;
|
||||
"arch32zcb": if (P.ZCB_SUPPORTED) tests = arch32zcb;
|
||||
"arch32zfh": if (P.ZFH_SUPPORTED) tests = arch32zfh;
|
||||
"arch32zfh": if (P.ZFH_SUPPORTED)
|
||||
if (P.D_SUPPORTED) tests = {arch32zfh, arch32zfh_d};
|
||||
else tests = arch32zfh;
|
||||
"arch32zfh_fma": if (P.ZFH_SUPPORTED) tests = arch32zfh_fma;
|
||||
"arch32zfh_divsqrt": if (P.ZFH_SUPPORTED) tests = arch32zfh_divsqrt;
|
||||
"arch32zfaf": if (P.ZFA_SUPPORTED) tests = arch32zfaf;
|
||||
|
@ -659,7 +669,7 @@ module testbench;
|
|||
string InstrFName, InstrDName, InstrEName, InstrMName, InstrWName;
|
||||
logic [31:0] InstrW;
|
||||
flopenr #(32) InstrWReg(clk, reset, ~dut.core.ieu.dp.StallW, InstrM, InstrW);
|
||||
instrTrackerTB it(clk, reset, dut.core.ieu.dp.FlushE,
|
||||
instrTrackerTB #(P.XLEN) it(clk, reset, dut.core.ieu.dp.FlushE,
|
||||
dut.core.ifu.InstrRawF[31:0],
|
||||
dut.core.ifu.InstrD, dut.core.ifu.InstrE,
|
||||
InstrM, InstrW,
|
||||
|
|
|
@ -194,69 +194,78 @@ string arch32pmp[] = '{
|
|||
"rv32i_m/pmp32/src/pmp-TOR-X.S"
|
||||
};
|
||||
|
||||
// Tests commented out pending riscv-arch-test issue #588
|
||||
string arch64pmp[] = '{
|
||||
`RISCVARCHTEST,
|
||||
"rv64i_m/pmp64/pmp64-CFG-reg.S",
|
||||
"rv64i_m/pmp64/pmp64-CSR-access.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-R-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-R.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RW-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RW-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RW.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RWX.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RX-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-RX.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-X-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NA4-X.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-R-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-R.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RW-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RW-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RW.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RWX.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RX-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-RX.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-X-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-NAPOT-X.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-R-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-R.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RW-priority-level-2..S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RW-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RW.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RWX.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RX-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-RX.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-X-priority.S",
|
||||
"rv64i_m/pmp64/pmp64-TOR-X.S"
|
||||
"rv64i_m/pmp64/src/pmp64-CFG-reg.S",
|
||||
"rv64i_m/pmp64/src/pmp64-CSR-access.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-R-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-R.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RW-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RW-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RW.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RWX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RX-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-RX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-X-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NA4-X.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-R-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-R.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RW-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RW-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RW.S",
|
||||
// "rv64i_m/pmp64/src/pmp64-NAPOT-RWX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RX-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-RX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-X-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-NAPOT-X.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-R-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-R-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-R.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RW-priority-level-2..S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RW-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RW.S",
|
||||
// "rv64i_m/pmp64/src/pmp64-TOR-RWX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RX-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RX-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-RX.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-X-priority-level-2.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-X-priority.S",
|
||||
"rv64i_m/pmp64/src/pmp64-TOR-X.S"
|
||||
};
|
||||
|
||||
string arch32vm_sv32[] = '{
|
||||
`RISCVARCHTEST,
|
||||
"rv32i_m/vm_sv32/src/mstatus_tvm_test.S",
|
||||
"rv32i_m/vm_sv32/src/pmp_check_on_pa_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/pmp_check_on_pa_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/pmp_check_on_pte_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/pmp_check_on_pte_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/satp_access_tests.S",
|
||||
"rv32i_m/vm_sv32/src/vm_A_and_D_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_A_and_D_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_invalid_pte_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_invalid_pte_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_misaligned_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_misaligned_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mprv_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mprv_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mprv_U_set_sum_set_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mprv_U_set_sum_unset_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mxr_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_mxr_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_nleaf_pte_level0_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_nleaf_pte_level0_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_pte_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_pte_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_rsw_pte_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_rsw_pte_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_rwx_pte_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_reserved_rwx_pte_U_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_sum_set_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_sum_unset_S_mode.S",
|
||||
"rv32i_m/vm_sv32/src/vm_U_Bit_set_U_mode.S",
|
||||
|
@ -528,6 +537,14 @@ string arch64cpriv[] = '{
|
|||
"rv64i_m/C/src/cebreak-01.S"
|
||||
};
|
||||
|
||||
string arch64zcd[] = '{
|
||||
// `RISCVARCHTEST,
|
||||
"rv64i_m/D_Zcd/src/c.fld-01.S",
|
||||
"rv64i_m/D_Zcd/src/c.fldsp-01.S",
|
||||
"rv64i_m/D_Zcd/src/c.fsd-01.S",
|
||||
"rv64i_m/D_Zcd/src/c.fsdsp-01.S"
|
||||
};
|
||||
|
||||
string arch64i[] = '{
|
||||
`RISCVARCHTEST,
|
||||
"rv64i_m/I/src/add-01.S",
|
||||
|
@ -1000,10 +1017,23 @@ string arch64zfh[] = '{
|
|||
"rv64i_m/Zfh/src/fadd_b7-01.S",
|
||||
"rv64i_m/Zfh/src/fadd_b8-01.S",
|
||||
"rv64i_m/Zfh/src/fclass_b1-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b1-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b22-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b23-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b24-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b27-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b28-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.s_b29-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.w_b25-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.w_b26-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.wu_b25-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.wu_b26-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b22-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b23-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b24-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b27-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b28-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.s.h_b29-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.w.h_b1-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.w.h_b22-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.w.h_b23-01.S",
|
||||
|
@ -1130,7 +1160,23 @@ string arch64zfh[] = '{
|
|||
"rv64i_m/Zfh/src/fnmsub_b8-01.S"
|
||||
};
|
||||
|
||||
|
||||
string arch64zfh_d[] = '{
|
||||
// `RISCVARCHTEST,
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b1-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b22-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b23-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b24-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b27-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b28-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.d.h_b29-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b1-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b22-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b23-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b24-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b27-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b28-01.S",
|
||||
"rv64i_m/Zfh/src/fcvt.h.d_b29-01.S"
|
||||
};
|
||||
|
||||
string arch64d_fma[] = '{
|
||||
`RISCVARCHTEST,
|
||||
|
@ -2413,10 +2459,23 @@ string arch32zfh[] = '{
|
|||
"rv32i_m/Zfh/src/fadd_b7-01.S",
|
||||
"rv32i_m/Zfh/src/fadd_b8-01.S",
|
||||
"rv32i_m/Zfh/src/fclass_b1-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b1-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b22-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b23-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b24-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b27-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b28-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.s_b29-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.w_b25-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.w_b26-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.wu_b25-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.wu_b26-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b22-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b23-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b24-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b27-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b28-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.s.h_b29-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.w.h_b1-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.w.h_b22-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.w.h_b23-01.S",
|
||||
|
@ -2525,6 +2584,24 @@ string arch32zfh[] = '{
|
|||
"rv32i_m/Zfh/src/fnmsub_b8-01.S"
|
||||
};
|
||||
|
||||
string arch32zfh_d[] = '{
|
||||
// `RISCVARCHTEST,
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b1-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b22-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b23-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b24-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b27-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b28-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.d.h_b29-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b1-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b22-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b23-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b24-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b27-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b28-01.S",
|
||||
"rv32i_m/Zfh/src/fcvt.h.d_b29-01.S"
|
||||
};
|
||||
|
||||
string arch32zfaf[] = '{
|
||||
`RISCVARCHTEST,
|
||||
"rv32i_m/F_Zfa/src/fround_b1-01.S",
|
||||
|
@ -3353,6 +3430,21 @@ string arch32cpriv[] = '{
|
|||
"rv32i_m/C/src/cebreak-01.S"
|
||||
};
|
||||
|
||||
string arch32zcf[] = '{
|
||||
// `RISCVARCHTEST,
|
||||
"rv32i_m/F_Zcf/src/c.flw-01.S",
|
||||
"rv32i_m/F_Zcf/src/c.flwsp-01.S",
|
||||
"rv32i_m/F_Zcf/src/c.fsw-01.S",
|
||||
"rv32i_m/F_Zcf/src/c.fswsp-01.S"
|
||||
};
|
||||
|
||||
string arch32zcd[] = '{
|
||||
// `RISCVARCHTEST,
|
||||
"rv32i_m/D_Zcd/src/c.fld-01.S",
|
||||
"rv32i_m/D_Zcd/src/c.fldsp-01.S",
|
||||
"rv32i_m/D_Zcd/src/c.fsd-01.S",
|
||||
"rv32i_m/D_Zcd/src/c.fsdsp-01.S"
|
||||
};
|
||||
|
||||
string arch32i[] = '{
|
||||
`RISCVARCHTEST,
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
hart_ids: [0]
|
||||
hart0:
|
||||
# ISA: RV32IMAFDCZicboz_Zicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
ISA: RV32IMAFDCZicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
ISA: RV32IMAFDCSUZicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zcd_Zcf_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
physical_addr_sz: 32
|
||||
User_Spec_Version: '2.3'
|
||||
supported_xlen: [32]
|
||||
misa:
|
||||
reset-val: 0x4000112D
|
||||
reset-val: 0x4014112D
|
||||
rv32:
|
||||
accessible: true
|
||||
mxl:
|
||||
|
@ -24,6 +24,6 @@ hart0:
|
|||
warl:
|
||||
dependency_fields: []
|
||||
legal:
|
||||
- extensions[25:0] bitmask [0x000112D, 0x0000000]
|
||||
- extensions[25:0] bitmask [0x014112D, 0x0000000]
|
||||
wr_illegal:
|
||||
- Unchanged
|
||||
- Unchanged
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
hart_ids: [0]
|
||||
hart0:
|
||||
# ISA: RV64IMAFDQCSUZicboz_Zicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
ISA: RV64IMAFDCSUZicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
ISA: RV64IMAFDCSUZicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zcd_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
# ISA: RV64IMAFDQCSUZicsr_Zicond_Zifencei_Zfa_Zfh_Zca_Zcb_Zba_Zbb_Zbc_Zbkb_Zbkc_Zbkx_Zbs_Zknd_Zkne_Zknh
|
||||
physical_addr_sz: 56
|
||||
User_Spec_Version: '2.3'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue