This commit is contained in:
Ross Thompson 2023-02-10 10:38:39 -06:00
commit eafb406c9e
20 changed files with 27 additions and 28 deletions

View File

@ -110,12 +110,12 @@ Ubuntu users may need to install and update various tools. Beware when cutting
### Install RISC-V GCC Cross-Compiler ### Install RISC-V GCC Cross-Compiler
To install GCC from source can take hours to compile. This configuration enables multilib to target many flavors of RISC-V. This book is tested with GCC 12.2 (tagged 2022.09.21), but will likely work with newer versions as well. To install GCC from source can take hours to compile. This configuration enables multilib to target many flavors of RISC-V. This book is tested with GCC 12.2 (tagged 2023.01.31), but will likely work with newer versions as well.
$ git clone https://github.com/riscv/riscv-gnu-toolchain $ git clone https://github.com/riscv/riscv-gnu-toolchain
$ cd riscv-gnu-toolchain $ cd riscv-gnu-toolchain
$ git checkout 2022.09.21 $ git checkout 2023.01.31
$ ./configure --prefix=$RISCV --enable-multilib --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;" $ ./configure --prefix=$RISCV --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;"
$ make --jobs $ make --jobs
Note: make --jobs will reduce compile time by compiling in parallel. However, adding this option could dramatically increase the memory utilization of your local machine. Note: make --jobs will reduce compile time by compiling in parallel. However, adding this option could dramatically increase the memory utilization of your local machine.
@ -143,7 +143,7 @@ Spike also takes a while to install and compile, but this can be done concurrent
$ git clone https://github.com/riscv-software-src/riscv-isa-sim $ git clone https://github.com/riscv-software-src/riscv-isa-sim
$ mkdir riscv-isa-sim/build $ mkdir riscv-isa-sim/build
$ cd riscv-isa-sim/build $ cd riscv-isa-sim/build
$ ../configure --prefix=$RISCV --enable-commitlog $ ../configure --prefix=$RISCV
$ make --jobs $ make --jobs
$ make install $ make install
$ cd ../arch_test_target/spike/device $ cd ../arch_test_target/spike/device

View File

@ -54,13 +54,15 @@ fi
cd $RISCV cd $RISCV
git clone https://github.com/riscv/riscv-gnu-toolchain git clone https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain cd riscv-gnu-toolchain
./configure --prefix=${RISCV} --enable-multilib --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;" git checkout 2023.01.31
./configure --prefix=${RISCV} --with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;"
make -j ${NUM_THREADS} make -j ${NUM_THREADS}
make install make install
# elf2hex # elf2hex
cd $RISCV cd $RISCV
export PATH=$RISCV/riscv-gnu-toolchain/bin:$PATH #export PATH=$RISCV/riscv-gnu-toolchain/bin:$PATH
gexport PATH=$RISCV/bin:$PATH
git clone https://github.com/sifive/elf2hex.git git clone https://github.com/sifive/elf2hex.git
cd elf2hex cd elf2hex
autoreconf -i autoreconf -i
@ -87,7 +89,7 @@ cd $RISCV
git clone https://github.com/riscv-software-src/riscv-isa-sim git clone https://github.com/riscv-software-src/riscv-isa-sim
mkdir -p riscv-isa-sim/build mkdir -p riscv-isa-sim/build
cd riscv-isa-sim/build cd riscv-isa-sim/build
../configure --prefix=$RISCV --enable-commitlog ../configure --prefix=$RISCV
make -j ${NUM_THREADS} make -j ${NUM_THREADS}
make install make install
cd ../arch_test_target/spike/device cd ../arch_test_target/spike/device

View File

@ -145,7 +145,7 @@ module csrsr (
STATUS_MXR_INT <= #1 0; STATUS_MXR_INT <= #1 0;
STATUS_SUM_INT <= #1 0; STATUS_SUM_INT <= #1 0;
STATUS_MPRV_INT <= #1 0; // Per Priv 3.3 STATUS_MPRV_INT <= #1 0; // Per Priv 3.3
STATUS_FS_INT <= #1 `F_SUPPORTED ? 2'b01 : 2'b00; STATUS_FS_INT <= #1 `F_SUPPORTED ? 2'b00 : 2'b00; // leave floating-point off until activated, even if F_SUPPORTED
STATUS_MPP <= #1 0; STATUS_MPP <= #1 0;
STATUS_SPP <= #1 0; STATUS_SPP <= #1 0;
STATUS_MPIE <= #1 0; STATUS_MPIE <= #1 0;
@ -156,8 +156,6 @@ module csrsr (
STATUS_SBE <= #1 0; STATUS_SBE <= #1 0;
STATUS_UBE <= #1 0; STATUS_UBE <= #1 0;
end else if (~StallW) begin end else if (~StallW) begin
if (FRegWriteM | WriteFRMM | WriteFFLAGSM) STATUS_FS_INT <= #1 2'b11; // mark Float State dirty *** this should happen in M stage, be part of if/else;
if (TrapM) begin if (TrapM) begin
// Update interrupt enables per Privileged Spec p. 21 // Update interrupt enables per Privileged Spec p. 21
// y = PrivilegeModeW // y = PrivilegeModeW
@ -211,6 +209,6 @@ module csrsr (
STATUS_SPIE <= #1 `S_SUPPORTED & CSRWriteValM[5]; STATUS_SPIE <= #1 `S_SUPPORTED & CSRWriteValM[5];
STATUS_SIE <= #1 `S_SUPPORTED & CSRWriteValM[1]; STATUS_SIE <= #1 `S_SUPPORTED & CSRWriteValM[1];
STATUS_UBE <= #1 CSRWriteValM[6] & `U_SUPPORTED & `BIGENDIAN_SUPPORTED; STATUS_UBE <= #1 CSRWriteValM[6] & `U_SUPPORTED & `BIGENDIAN_SUPPORTED;
end end else if (FRegWriteM | WriteFRMM | WriteFFLAGSM) STATUS_FS_INT <= #1 2'b11;
end end
endmodule endmodule

View File

@ -2,8 +2,15 @@
TARGET = debug TARGET = debug
$(TARGET).signature.output: $(TARGET).elf.memfile $(TARGET).elf
spike --isa=rv64gc +signature=$(TARGET).signature.output +signature-granularity=4 $(TARGET).elf
# diff --ignore-case $(TARGET).signature.output $(TARGET).reference_output || exit
# echo "Signature matches! Success!"
mkdir -p ../work
cp -f * ../work
$(TARGET).elf.memfile:$(TARGET).elf $(TARGET).elf.objdump.addr $(TARGET).elf.memfile:$(TARGET).elf $(TARGET).elf.objdump.addr
riscv64-unknown-elf-elf2hex --bit-width $(if $(findstring rv64,$*),64,32) --input $< --output $@ riscv64-unknown-elf-elf2hex --bit-width 64 --input $< --output $@
$(TARGET).elf.objdump.addr: $(TARGET).elf.objdump $(TARGET).elf.objdump.addr: $(TARGET).elf.objdump
extractFunctionRadix.sh $< extractFunctionRadix.sh $<
@ -15,13 +22,9 @@ $(TARGET).elf: $(TARGET).S Makefile
riscv64-unknown-elf-gcc -g -o $(TARGET).elf -march=rv64gc -mabi=lp64 -mcmodel=medany \ riscv64-unknown-elf-gcc -g -o $(TARGET).elf -march=rv64gc -mabi=lp64 -mcmodel=medany \
-nostartfiles -T$(WALLY)/examples/link/link.ld $(TARGET).S -nostartfiles -T$(WALLY)/examples/link/link.ld $(TARGET).S
sim:
spike --isa=rv64gc +signature=$(TARGET).signature.output +signature-granularity=8 $(TARGET).elf
diff --ignore-case $(TARGET).signature.output $(TARGET).reference_output || exit
echo "Signature matches! Success!"
clean: clean:
rm -f $(TARGET).elf $(TARGET).elf.* rm -f $(TARGET).elf $(TARGET).elf.* *.signature.output

View File

@ -5,6 +5,8 @@
.global rvtest_entry_point .global rvtest_entry_point
rvtest_entry_point: rvtest_entry_point:
lui t0, 0x1e # turn on Floating point and XS
csrs mstatus, t0
# openhwgroup/cvw Issue #55 # openhwgroup/cvw Issue #55
la a6, begin_signature la a6, begin_signature

View File

@ -1,21 +1,12 @@
// //
// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation // SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/////////////////////////////////////////// ///////////////////////////////////////////
#include "model_test.h" #include "model_test.h"
#include "arch_test.h" #include "arch_test.h"
RVTEST_ISA("RV64I")
.section .text.init .section .text.init
.globl rvtest_entry_point .globl rvtest_entry_point
@ -23,4 +14,7 @@ rvtest_entry_point:
RVMODEL_BOOT RVMODEL_BOOT
RVTEST_CODE_BEGIN RVTEST_CODE_BEGIN
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_1=True;",temp)
RVTEST_SIGBASE( x6, wally_signature) RVTEST_SIGBASE( x6, wally_signature)