forked from Github_Repos/cvw
linux testgen refactor
This commit is contained in:
parent
fe2cda493c
commit
526aff54a8
26
.gitignore
vendored
26
.gitignore
vendored
@ -19,27 +19,19 @@ wlft*
|
||||
/imperas-riscv-tests/FunctionRadix.addr
|
||||
/imperas-riscv-tests/ProgramMap.txt
|
||||
/imperas-riscv-tests/logs
|
||||
/wally-pipelined/linux-testgen/qemu_output.txt
|
||||
/wally-pipelined/linux-testgen/qemu_in_gdb_format.txt
|
||||
*.o
|
||||
*.d
|
||||
testsBP/*/*/*.elf*
|
||||
testsBP/*/OBJ/*
|
||||
testsBP/*/*.a
|
||||
wally-pipelined/linux-testgen/linux-testvectors/*
|
||||
wally-pipelined/linux-testgen/nohup*
|
||||
wally-pipelined/linux-testgen/x*
|
||||
!wally-pipelined/linux-testgen/linux-testvectors/tvCopier.py
|
||||
!wally-pipelined/linux-testgen/linux-testvectors/tvLinker.sh
|
||||
!wally-pipelined/linux-testgen/linux-testvectors/tvUnlinker.sh
|
||||
!wally-pipelined/linux-testgen/linux-testvectors/intermediate-outputs
|
||||
wally-pipelined/linux-testgen/linux-testvectors/intermediate-outputs/*
|
||||
!wally-pipelined/linux-testgen/linux-testvectors/intermediate-outputs/git_create_dir.txt
|
||||
wally-pipelined/linux-testgen/buildroot/
|
||||
wally-pipelined/linux-testgen/buildroot-image-output
|
||||
wally-pipelined/linux-testgen/buildroot-config-src/main.config.old
|
||||
wally-pipelined/linux-testgen/buildroot-config-src/linux.config.old
|
||||
wally-pipelined/linux-testgen/buildroot-config-src/busybox.config.old
|
||||
tests/linux-testgen/linux-testvectors/*
|
||||
!tests/linux-testgen/linux-testvectors/tvCopier.py
|
||||
!tests/linux-testgen/linux-testvectors/tvLinker.sh
|
||||
!tests/linux-testgen/linux-testvectors/tvUnlinker.sh
|
||||
tests/linux-testgen/buildroot
|
||||
tests/linux-testgen/buildroot-image-output
|
||||
tests/linux-testgen/buildroot-config-src/main.config.old
|
||||
tests/linux-testgen/buildroot-config-src/linux.config.old
|
||||
tests/linux-testgen/buildroot-config-src/busybox.config.old
|
||||
wally-pipelined/regression/slack-notifier/slack-webhook-url.txt
|
||||
wally-pipelined/regression/logs
|
||||
|
||||
|
@ -5,6 +5,7 @@ tcpPort=1237
|
||||
# Run without GDB
|
||||
($customQemu \
|
||||
-M virt \
|
||||
-m 128M \
|
||||
-nographic \
|
||||
-bios $imageDir/fw_jump.elf -kernel $imageDir/Image -append "root=/dev/vda ro" -initrd $imageDir/rootfs.cpio \
|
||||
-singlestep -rtc clock=vm -icount shift=1,align=off,sleep=on)
|
@ -3,7 +3,7 @@
|
||||
source genSettings.sh
|
||||
tcpPort=1236
|
||||
|
||||
instrs=480000000
|
||||
instrs=450000000
|
||||
checkOutDir="$outDir/checkpoint$instrs"
|
||||
checkIntermedDir="$checkOutDir/intermediate-outputs"
|
||||
|
@ -31,8 +31,7 @@
|
||||
`define BUILDROOT 1
|
||||
`define BUSYBEAR 0
|
||||
`define LINUX_FIX_READ {'h10000005}
|
||||
`define LINUX_TEST_VECTORS "../linux-testgen/linux-testvectors/"
|
||||
//`define LINUX_TEST_VECTORS "/courses/e190ax/buildroot_boot/"
|
||||
`define LINUX_TEST_VECTORS "../../tests/linux-testgen/linux-testvectors/"
|
||||
// RV32 or RV64: XLEN = 32 or 64
|
||||
`define XLEN 64
|
||||
|
||||
@ -114,8 +113,8 @@
|
||||
`define PLIC_NUM_SRC 53
|
||||
`define PLIC_UART_ID 4
|
||||
|
||||
`define TWO_BIT_PRELOAD "../config/busybear/twoBitPredictor.txt"
|
||||
`define BTB_PRELOAD "../config/busybear/BTBPredictor.txt"
|
||||
`define TWO_BIT_PRELOAD "../config/buildroot/twoBitPredictor.txt"
|
||||
`define BTB_PRELOAD "../config/buildroot/BTBPredictor.txt"
|
||||
`define BPRED_ENABLED 1
|
||||
`define BPTYPE "BPGSHARE" // BPLOCALPAg or BPGLOBAL or BPTWOBIT or BPGSHARE
|
||||
`define TESTSBP 0
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,127 +0,0 @@
|
||||
//////////////////////////////////////////
|
||||
// busybear-config.vh
|
||||
//
|
||||
// Written: David_Harris@hmc.edu 4 January 2021
|
||||
// Modified:
|
||||
//
|
||||
// Purpose: Specify which features are configured
|
||||
// Macros to determine which modes are supported based on MISA
|
||||
//
|
||||
// A component of the Wally configurable RISC-V project.
|
||||
//
|
||||
// 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
|
||||
// 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 shared configuration
|
||||
`include "wally-shared.vh"
|
||||
|
||||
`define QEMU 0
|
||||
`define BUILDROOT 0
|
||||
`define BUSYBEAR 1
|
||||
`define LINUX_FIX_READ {'h10000005}
|
||||
`define LINUX_TEST_VECTORS "/courses/e190ax/busybear_boot/"
|
||||
//`define LINUX_TEST_VECTORS "../../../busybear_boot/"
|
||||
// RV32 or RV64: XLEN = 32 or 64
|
||||
`define XLEN 64
|
||||
|
||||
`define MISA (32'h0014112D)
|
||||
`define ZICSR_SUPPORTED 1
|
||||
`define ZIFENCEI_SUPPORTED 1
|
||||
`define ZICOUNTERS_SUPPORTED 1
|
||||
`define COUNTERS 32
|
||||
`define DESIGN_COMPILER 0
|
||||
|
||||
// Microarchitectural Features
|
||||
`define UARCH_PIPELINED 1
|
||||
`define UARCH_SUPERSCALR 0
|
||||
`define UARCH_SINGLECYCLE 0
|
||||
`define MEM_DCACHE 1
|
||||
`define MEM_DTIM 1
|
||||
`define MEM_ICACHE 1
|
||||
`define MEM_VIRTMEM 1
|
||||
`define VECTORED_INTERRUPTS_SUPPORTED 1 // Domenico Ottolia 4/15: Support for vectored interrupts in _tvec csrs. Just implemented in src/privileged/trap.sv around line 75. Pretty sure this should be 1.
|
||||
|
||||
// TLB configuration. Entries should be a power of 2
|
||||
`define ITLB_ENTRIES 32
|
||||
`define DTLB_ENTRIES 32
|
||||
|
||||
// Cache configuration. Sizes should be a power of two
|
||||
// typical configuration 4 ways, 4096 bytes per way, 256 bit or more blocks
|
||||
`define DCACHE_NUMWAYS 4
|
||||
`define DCACHE_WAYSIZEINBYTES 2048
|
||||
`define DCACHE_BLOCKLENINBITS 256
|
||||
`define DCACHE_REPLBITS 3
|
||||
`define ICACHE_NUMWAYS 1
|
||||
`define ICACHE_WAYSIZEINBYTES 4096
|
||||
`define ICACHE_BLOCKLENINBITS 256
|
||||
|
||||
// Integer Divider Configuration
|
||||
// DIV_BITSPERCYCLE must be 1, 2, or 4
|
||||
`define DIV_BITSPERCYCLE 4
|
||||
|
||||
// Legal number of PMP entries are 0, 16, or 64
|
||||
`define PMP_ENTRIES 16
|
||||
|
||||
// Address space
|
||||
`define RESET_VECTOR 64'h0000000000001000
|
||||
|
||||
// Peripheral Addresses
|
||||
// Peripheral memory space extends from BASE to BASE+RANGE
|
||||
// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
|
||||
|
||||
`define BOOTTIM_SUPPORTED 1'b1
|
||||
//`define BOOTTIM_BASE 56'h00000000 // spec had been 0x1000 to 0x2FFF, but dh truncated to 0x1000 to 0x1FFF because upper half seems to be all zeros and this is easier for decoder
|
||||
//`define BOOTTIM_RANGE 56'h00003FFF
|
||||
`define BOOTTIM_BASE 56'h00001000 // spec had been 0x1000 to 0x2FFF, but dh truncated to 0x1000 to 0x1FFF because upper half seems to be all zeros and this is easier for decoder
|
||||
`define BOOTTIM_RANGE 56'h00000FFF
|
||||
`define TIM_SUPPORTED 1'b1
|
||||
`define TIM_BASE 56'h80000000
|
||||
`define TIM_RANGE 56'h07FFFFFF
|
||||
`define CLINT_SUPPORTED 1'b1
|
||||
`define CLINT_BASE 56'h02000000
|
||||
`define CLINT_RANGE 56'h0000FFFF
|
||||
`define GPIO_SUPPORTED 1'b1
|
||||
`define GPIO_BASE 56'h10012000
|
||||
`define GPIO_RANGE 56'h000000FF
|
||||
`define UART_SUPPORTED 1'b1
|
||||
`define UART_BASE 56'h10000000
|
||||
`define UART_RANGE 56'h00000007
|
||||
`define PLIC_SUPPORTED 1'b1
|
||||
`define PLIC_BASE 56'h0C000000
|
||||
`define PLIC_RANGE 56'h03FFFFFF
|
||||
|
||||
// Bus Interface width
|
||||
`define AHBW 64
|
||||
|
||||
// Test modes
|
||||
|
||||
// Tie GPIO outputs back to inputs
|
||||
`define GPIO_LOOPBACK_TEST 0
|
||||
|
||||
// Hardware configuration
|
||||
//`define UART_PRESCALE 1
|
||||
`define UART_PRESCALE 0
|
||||
|
||||
// Interrupt configuration
|
||||
`define PLIC_NUM_SRC 53
|
||||
`define PLIC_UART_ID 4
|
||||
|
||||
`define TWO_BIT_PRELOAD "../config/busybear/twoBitPredictor.txt"
|
||||
`define BTB_PRELOAD "../config/busybear/BTBPredictor.txt"
|
||||
`define BPTYPE "BPGSHARE" // BPGLOBAL or BPTWOBIT or BPGSHARE
|
||||
`define BPRED_ENABLED 1
|
||||
|
||||
|
||||
|
@ -1,38 +0,0 @@
|
||||
Many of the scripts to build the linux ram.txt and trace files have changed over the Summer.
|
||||
Specifically the parsed*.txt files have all been replaced by a single all.txt file which contains
|
||||
all of the changes concurrent with a specific instruction.
|
||||
Each line of all.txt is encoded in the following way.
|
||||
|
||||
The tokens are space deliminted (limitation the parsing function in system verilog). This could be
|
||||
improved with some effort.
|
||||
|
||||
<Token> denotes a required token.
|
||||
|
||||
()? is an optional set of tokens. Exactly 0 or 1 of this pattern will occur.
|
||||
The register update, memory operation, and CSR update are all possilbe but not present on all operations.
|
||||
()+ is used to denote a variable number of this pattern with at least 1 instance of the pattern.
|
||||
All integers are in hex and not zero extended.
|
||||
|
||||
<PC> <instruction bits> <instruction text> (<GPR> <Reg Number> <Value>)? (<MemR|MemW|MemRW> <Address> <WriteData if valid> <ReadData if valid>)? (<CSR> (<Name> <Value>)+)?
|
||||
|
||||
Example
|
||||
|
||||
1010 182b283 ld_t0,24(t0) GPR 5 80000000 MemR 1018 0 80000000
|
||||
|
||||
PC = 0x1010
|
||||
Instruction encoding = 0x182_b283
|
||||
instruction pneumonic (text) = ld_t0,24(t0)
|
||||
Updating x5 to 0x8000_0000
|
||||
Memory read at address 0x8000_0000 with read data of 0x8000_0000
|
||||
|
||||
CSR updates can occur in more than once for a single instruction. The multiple sets will appear as pairs of regsiter name followed by value.
|
||||
|
||||
**** This trace is generated using the CreateTrace.sh script.
|
||||
|
||||
Generation of ram.txt has not changed. Still use logBuildrootMem.sh
|
||||
|
||||
Only the all.txt and ram.txt are required to run modelsim's linux simulation. However there are three additional files will aid
|
||||
in the debugging process. logBuildrootMem.sh was modified to also create an object dump from the vmlinux image. Using
|
||||
extractFunctionRadix.sh the objdump is converted into two files vmlinux.objdump.addr and vmlinux.objdump.lab which contain
|
||||
the addresses and labels of global functions in the linux binarary. The linux test bench is configured to uses these two files
|
||||
to tell the user which function is currently being executed in modelsim.
|
@ -1,57 +0,0 @@
|
||||
If you do not need to update the Linux image, then go to ./linux-testvectors and
|
||||
use tvCopier.py or tvLinker.sh to copy/link premade RAMs and testvectors from Tera.
|
||||
The RAMs are needed for Wally to run the Linux code, and the testvectors are needed
|
||||
to verify Wally is executing the code correctly.
|
||||
|
||||
If you instead wish to regenerate the RAMs and testvectors from a new Linux image,
|
||||
you'll need to build the new Linux image, simulate it, and parse its output,
|
||||
as described below.
|
||||
|
||||
*To build a new Linux image:
|
||||
1. Git clone the Buildroot repository to ./buildroot:
|
||||
git clone https://github.com/buildroot/buildroot.git
|
||||
For reference, Wally (*** will) be proven to work on an image built using
|
||||
Buildroot when the following was the most recent commit to the Buildroot repo:
|
||||
commit 4047e10ed6e20492bae572d4929eaa5d67eed746
|
||||
Author: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
|
||||
Date: Wed Jun 30 06:27:10 2021 +0200
|
||||
|
||||
2. If you wish to modify the configs, then in ./buildroot:
|
||||
a. Run "make menuconfig" or "make linux-menuconfig" or "make busybox-menuconfig".
|
||||
b. Use the TUI (terminal UI) to load in the existing configs.
|
||||
|
||||
For menuconfig, you can load in the source file from
|
||||
"../buildroot-config-src/main.config"
|
||||
|
||||
For linux-menuconfig or busybox-menuconfig, load in from
|
||||
"../../../../buildroot-config-src/<type>.config"
|
||||
because for linux and busybox, make traverses down to
|
||||
./buildroot/output/build/<linux or busybox>.
|
||||
|
||||
One annoying thing about the TUI is that if it has a path already loaded,
|
||||
then before you can enter the new path to buildroot-config-src, you need to
|
||||
delete the existing one from the textbox. Doing so requires more than backspace.
|
||||
Once you've deleted as much of the existing path as you can see, arrow left to
|
||||
check if there is more text you need to delete.
|
||||
|
||||
c. Likewise, when you are done editing, tell the TUI to save to the same location.
|
||||
|
||||
3. Finally go to ./buildroot-config-src and run make-buildroot.sh.
|
||||
This script copies ./buildroot-config-src/main.config to ./buildroot/.config
|
||||
and then invokes make. This is clumsy but effective because buildroot
|
||||
sometimes does weird things to .config, like moving it to .config.old and
|
||||
making a new .config -- doing so can really mess up symbolic/hard links.
|
||||
|
||||
4. If you'd like debugging symbols, then reconfigure Buildroot to output "vmlinux"
|
||||
and run make-buildroot again.
|
||||
|
||||
*To generate new RAMs and testvectors from a Linux image:
|
||||
1. sym link ./buildroot-image-output to either your new image in ./buildroot/output/image
|
||||
or the existing image at /courses/e190ax/buildroot-image-output on Tera.
|
||||
This might require first deleting the empty buildroot-image-output directory.
|
||||
2. Then run ./testvector-generation/logBuildrootMem.sh to generate RAMs.
|
||||
3. Then run ./testvector-generation/logAllBuildroot.sh to generate testvectors.
|
||||
|
||||
These latter two steps require QEMU.
|
||||
Note that you can only have one instance of QEMU open at a time!
|
||||
At least on Tera, it seems. Check "ps -ef" to see if anybody else is running QEMU.
|
@ -1 +0,0 @@
|
||||
This file only exists so that git will create ./.
|
Loading…
Reference in New Issue
Block a user