From 35dd1b5c9fa30fe7e01cdc7f8e485516d10c96cc Mon Sep 17 00:00:00 2001
From: Ross Thompson <ross1728@gmail.com>
Date: Fri, 3 Dec 2021 10:05:13 -0600
Subject: [PATCH 1/5] Improved FPGA makefile and fixed timing constraints in
 clock converter.

---
 fpga/generator/Makefile                     | 18 +++++++++++++++---
 fpga/generator/xlnx_axi_clock_converter.tcl |  8 +++++++-
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/fpga/generator/Makefile b/fpga/generator/Makefile
index d397c5edb..c65e522f2 100644
--- a/fpga/generator/Makefile
+++ b/fpga/generator/Makefile
@@ -1,7 +1,11 @@
 dst := IP
 
+all: FPGA
 
-all: $(dst)/xlnx_proc_sys_reset.log \
+FPGA: IP
+	vivado -mode batch -source wally.tcl | tee wally.log
+
+IP: $(dst)/xlnx_proc_sys_reset.log \
 	$(dst)/xlnx_ddr4.log \
 	$(dst)/xlnx_axi_clock_converter.log \
 	 $(dst)/xlnx_ahblite_axi_bridge.log
@@ -11,5 +15,13 @@ $(dst)/%.log: %.tcl
 	cd IP;\
 	vivado -mode batch -source ../$*.tcl | tee $*.log
 
-clean:
-	rm -rf IP vivado.jou vivado.log
+cleanIP:
+	rm -rf IP
+
+cleanLogs:
+	rm -rf  *.jou *.log
+
+cleanFPGA:
+	rm -rf WallyFPGA.* reports sim .Xil
+
+cleanAll: cleanIP cleanLogs cleanFPGA
diff --git a/fpga/generator/xlnx_axi_clock_converter.tcl b/fpga/generator/xlnx_axi_clock_converter.tcl
index c63d8761f..9e581c29d 100644
--- a/fpga/generator/xlnx_axi_clock_converter.tcl
+++ b/fpga/generator/xlnx_axi_clock_converter.tcl
@@ -11,7 +11,13 @@ set_property board_part $boardName [current_project]
 
 create_ip -name axi_clock_converter -vendor xilinx.com -library ip -module_name $ipName
 
-set_property -dict [list CONFIG.ACLK_ASYNC {1} CONFIG.PROTOCOL {AXI4} CONFIG.ADDR_WIDTH {32} CONFIG.DATA_WIDTH {64} CONFIG.ID_WIDTH {4}] [get_ips $ipName]
+set_property -dict [list CONFIG.ACLK_ASYNC {1} \
+			CONFIG.PROTOCOL {AXI4} \
+			CONFIG.ADDR_WIDTH {32} \
+			CONFIG.DATA_WIDTH {64} \
+			CONFIG.ID_WIDTH {4} \
+		        CONFIG.MI_CLK.FREQ_HZ {208333333} \
+			CONFIG.SI_CLK.FREQ_HZ {10000000}] [get_ips $ipName]
 
 generate_target {instantiation_template} [get_files ./$ipName.srcs/sources_1/ip/$ipName/$ipName.xci]
 generate_target all [get_files  ./$ipName.srcs/sources_1/ip/$ipName/$ipName.xci]

From a69ab3bd1bae1ea0c247195bc37c17f8a94a8e31 Mon Sep 17 00:00:00 2001
From: Skylar Litz <slitz@hmc.edu>
Date: Fri, 3 Dec 2021 12:32:38 -0800
Subject: [PATCH 2/5] fix some interrupt timing bugs

---
 wally-pipelined/testbench/testbench-linux.sv | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/wally-pipelined/testbench/testbench-linux.sv b/wally-pipelined/testbench/testbench-linux.sv
index 2aaacee8f..50559b9d0 100644
--- a/wally-pipelined/testbench/testbench-linux.sv
+++ b/wally-pipelined/testbench/testbench-linux.sv
@@ -430,7 +430,7 @@ module testbench();
               NextMIPexpected = ExpectedCSRArrayValueE[NumCSRE]; \
             end \
             if(ExpectedCSRArrayE[NumCSRE].substr(0,3) == "mepc") begin \
-              $display("hello! we are here."); \
+              // $display("hello! we are here."); \
               MepcExpected = ExpectedCSRArrayValueE[NumCSRE]; \
               $display("%tns: MepcExpected: %x",$time,MepcExpected); \
             end \
@@ -469,7 +469,7 @@ module testbench();
       // $display("%tns: ExpectedPCM %x",$time,ExpectedPCM);
       // $display("%tns: ExpectedPCE %x",$time,ExpectedPCE);
       // $display("%tns: ExpectedPCW %x",$time,ExpectedPCW);
-      if((ExpectedPCE != MepcExpected) & ((MepcExpected - ExpectedPCE) * (MepcExpected - ExpectedPCE) <= 16)) begin
+      if((ExpectedPCE != MepcExpected) & ((MepcExpected - ExpectedPCE) * (MepcExpected - ExpectedPCE) <= 200) || ~dut.hart.ieu.c.InstrValidM) begin
         RequestDelayedMIP <= 1;
         $display("%tns: Requesting Delayed MIP. Current MEPC value is %x",$time,MepcExpected);
       end else begin // update MIP immediately

From cb744280c3207d36a56ee93c730a3273fc28be58 Mon Sep 17 00:00:00 2001
From: Ross Thompson <ross1728@gmail.com>
Date: Fri, 3 Dec 2021 17:47:54 -0600
Subject: [PATCH 3/5] Fixed a bunch of fpga issues.

---
 fpga/constraints/constraints.xdc |  3 +-
 fpga/generator/wally.tcl         | 75 ++++++++++++++++++++++++++------
 2 files changed, 64 insertions(+), 14 deletions(-)

diff --git a/fpga/constraints/constraints.xdc b/fpga/constraints/constraints.xdc
index 51bc8722e..9059dc7f1 100644
--- a/fpga/constraints/constraints.xdc
+++ b/fpga/constraints/constraints.xdc
@@ -17,7 +17,8 @@
 
 #create_generated_clock -name mmcm_clkout1 -source [get_pins xlnx_ddr4_c0/c0_sys_clk_p] -edges {1 2 3} -edge_shift {0.000 48.000 96.000} [get_pins xlnx_ddr4_c0/addn_ui_clkout1]
 
-create_generated_clock -name mmcm_clkout1 xlnx_ddr4_c0/addn_ui_clkout1
+#create_generated_clock -name mmcm_clkout1 xlnx_ddr4_c0/addn_ui_clkout1
+#create_generated_clock -name mmcm_clkout1 mmcm_clkout1 
 
 create_generated_clock -name CLKDiv64_Gen -source [get_pins wallypipelinedsoc/uncore/sdc.SDC/sd_top/slow_clk_divider/clkMux/I0] -multiply_by 1 [get_pins wallypipelinedsoc/uncore/sdc.SDC/sd_top/slow_clk_divider/clkMux/O]
 
diff --git a/fpga/generator/wally.tcl b/fpga/generator/wally.tcl
index 405ba4394..affeb45bd 100644
--- a/fpga/generator/wally.tcl
+++ b/fpga/generator/wally.tcl
@@ -21,50 +21,99 @@ set_property include_dirs {../../wally-pipelined/config/fpga ../../wally-pipelin
 
 # contrainsts generated by the IP blocks
 add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_0/bd_1ba7_microblaze_I_0.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_0/bd_1ba7_microblaze_I_0.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_1/bd_1ba7_rst_0_0_board.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_1/bd_1ba7_rst_0_0_board.xdc]
+
 add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_1/bd_1ba7_rst_0_0.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_1/bd_1ba7_rst_0_0.xdc]
+
 add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_2/bd_1ba7_ilmb_0.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_2/bd_1ba7_ilmb_0.xdc]
+
 add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_3/bd_1ba7_dlmb_0.xdc
-add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/par/xlnx_ddr4.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_3/bd_1ba7_dlmb_0.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_10/bd_1ba7_iomodule_0_0_board.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_10/bd_1ba7_iomodule_0_0_board.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_board.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_board.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_board.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_board.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset.xdc]
+
+add_files -fileset constrs_1 -norecurse ../constraints/constraints.xdc
+set_property PROCESSING_ORDER NORMAL [get_files  ../constraints/constraints.xdc]
+
 add_files -fileset constrs_1 -norecurse IP/xlnx_axi_clock_converter.gen/sources_1/ip/xlnx_axi_clock_converter/xlnx_axi_clock_converter_clocks.xdc
+set_property PROCESSING_ORDER LATE [get_files IP/xlnx_axi_clock_converter.gen/sources_1/ip/xlnx_axi_clock_converter/xlnx_axi_clock_converter_clocks.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/xlnx_ddr4_board.xdc
+set_property PROCESSING_ORDER LATE [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/xlnx_ddr4_board.xdc]
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ahblite_axi_bridge.gen/sources_1/ip/xlnx_ahblite_axi_bridge/xlnx_ahblite_axi_bridge_ooc.xdc
+set_property PROCESSING_ORDER EARLY [get_files  IP/xlnx_ahblite_axi_bridge.gen/sources_1/ip/xlnx_ahblite_axi_bridge/xlnx_ahblite_axi_bridge_ooc.xdc]
+
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/par/xlnx_ddr4.xdc
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/par/xlnx_ddr4.xdc]
+
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_1/par/xlnx_ddr4_phy_ooc.xdc
 
 
 
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_1/par/xlnx_ddr4_phy_ooc.xdc
+add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_ooc.xdc
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_axi_clock_converter.gen/sources_1/ip/xlnx_axi_clock_converter/xlnx_axi_clock_converter_ooc.xdc
+
+
+add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_ooc.xdc
+
 
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_10/bd_1ba7_iomodule_0_0_board.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_1/bd_1ba7_rst_0_0_board.xdc
 
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_0/bd_1ba7_microblaze_I_0_ooc_debug.xdc
-
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_9/bd_1ba7_second_lmb_bram_I_0_ooc.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/ip/ip_6/bd_1ba7_lmb_bram_I_0_ooc.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/bd_0/bd_1ba7_ooc.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_board.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_ooc.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/xlnx_ddr4_board.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_axi_clock_converter.gen/sources_1/ip/xlnx_axi_clock_converter/xlnx_axi_clock_converter_ooc.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ahblite_axi_bridge.runs/xlnx_ahblite_axi_bridge_synth_1/dont_touch.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_ahblite_axi_bridge.gen/sources_1/ip/xlnx_ahblite_axi_bridge/xlnx_ahblite_axi_bridge_ooc.xdc
+
 #add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.runs/xlnx_proc_sys_reset_synth_1/dont_touch.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_ooc.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset.xdc
-#add_files -fileset constrs_1 -norecurse IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_board.xdc
+
+
+
 #add_files -fileset constrs_1 -norecurse IP/xlnx_axi_clock_converter.runs/xlnx_axi_clock_converter_synth_1/.Xil/xlnx_axi_clock_converter_propImpl.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_axi_clock_converter.runs/xlnx_axi_clock_converter_synth_1/dont_touch.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.runs/xlnx_ddr4_synth_1/.Xil/xlnx_ddr4_propImpl.xdc
 #add_files -fileset constrs_1 -norecurse IP/xlnx_ddr4.runs/xlnx_ddr4_synth_1/dont_touch.xdc
 
 # constraints for wally top level
-add_files -fileset constrs_1 -norecurse ../constraints/constraints.xdc
 
 # define top level
 set_property top fpgaTop [current_fileset]
 
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_axi_clock_converter.gen/sources_1/ip/xlnx_axi_clock_converter/xlnx_axi_clock_converter_ooc.xdc]
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_1/par/xlnx_ddr4_phy_ooc.xdc]
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_ddr4.gen/sources_1/ip/xlnx_ddr4/ip_0/xlnx_ddr4_microblaze_mcs_ooc.xdc]
+set_property PROCESSING_ORDER EARLY [get_files IP/xlnx_proc_sys_reset.gen/sources_1/ip/xlnx_proc_sys_reset/xlnx_proc_sys_reset_ooc.xdc]
+
+
 update_compile_order -fileset sources_1
+update_compile_order -fileset constrs_1
+# This is important as the ddr4 IP contains the generate clock constraint which the user constraints depend on.
+report_compile_order -constraints > reports/compile_order.rpt
 
 # this is elaboration not synthesis.
 synth_design -rtl -name rtl_1
 
+report_clocks -file reports/clocks.rpt
+
 # this does synthesis? wtf?
 launch_runs synth_1 -jobs 4
 

From 41258529f087e5feb365db576dc828520d3f086b Mon Sep 17 00:00:00 2001
From: Ross Thompson <ross1728@gmail.com>
Date: Fri, 3 Dec 2021 17:55:36 -0600
Subject: [PATCH 4/5] Fixed bug in the top level of fpga verilog.

---
 fpga/src/fpgaTop.v | 1 -
 1 file changed, 1 deletion(-)

diff --git a/fpga/src/fpgaTop.v b/fpga/src/fpgaTop.v
index eb78e89d6..d9751c9ce 100644
--- a/fpga/src/fpgaTop.v
+++ b/fpga/src/fpgaTop.v
@@ -44,7 +44,6 @@ module fpgaTop
 
    output 	   calib,
    output 	   cpu_reset,
-   output 	   ddr4_sdram_c1_062,
    output 	   ahblite_resetn,
 
    output [16 : 0] c0_ddr4_adr,

From 83765ea3bc3226bf0cc46dfcd3561e11e7da0067 Mon Sep 17 00:00:00 2001
From: David Harris <david_harris@hmc.edu>
Date: Sat, 4 Dec 2021 20:25:33 -0800
Subject: [PATCH 5/5] Added files to repo

---
 .gitignore                                    |   1 +
 Makefile                                      |  35 ++++--------
 wally-pipelined/README.txt                    |  50 ++++++++++++++++++
 .../linux-testgen/linux-testvectors/all.txt   |   1 +
 .../linux-testvectors/bootmem.txt             |   1 +
 .../linux-testvectors/checkpoint8500000       |   1 +
 .../linux-testgen/linux-testvectors/ram.txt   |   1 +
 .../linux-testvectors/vmlinux.objdump         |   1 +
 .../linux-testvectors/vmlinux.objdump.addr    |   1 +
 .../linux-testvectors/vmlinux.objdump.lab     |   1 +
 wally-pipelined/srt/sqrttestgen               | Bin 0 -> 13168 bytes
 wally-pipelined/srt/testgen                   | Bin 0 -> 13088 bytes
 wally-setup.sh                                |  26 +++++++++
 13 files changed, 95 insertions(+), 24 deletions(-)
 create mode 100644 wally-pipelined/README.txt
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/all.txt
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/bootmem.txt
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/checkpoint8500000
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/ram.txt
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.addr
 create mode 120000 wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.lab
 create mode 100755 wally-pipelined/srt/sqrttestgen
 create mode 100755 wally-pipelined/srt/testgen
 create mode 100644 wally-setup.sh

diff --git a/.gitignore b/.gitignore
index 2542dd881..1f1454f92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ wlft*
 /imperas-riscv-tests/logs
 *.o
 *.d
+*.vstf
 testsBP/*/*/*.elf*
 testsBP/*/OBJ/*
 testsBP/*/*.a
diff --git a/Makefile b/Makefile
index a8ca63fe6..d715d72d3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,31 +1,18 @@
-#make all: submodules other
-#make all: submodules other
-#submodules: addins/riscv-isa-sim addins/riscv-arch-test
-#	git pull --recurse-submodules
-#
-#other:
 make all:
 # move these parts into compiling archtest separtately
-	cp -r addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/I addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/F
-	cp -r addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/I addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/D
-<<<<<<< HEAD
-#why cat
-	cat addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/F/Makefile.include
-=======
->>>>>>> 29f2a1c5479d7a80debdb1ac337fcda628cc57a3
-	sed -i 's/--isa=rv32i /--isa=32if/' addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/F/Makefile.include
-	sed -i 's/--isa=rv64i /--isa=64if/' addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/D/Makefile.include
-	if [ -d "addins/riscv-isa-sim/build" ]; then echo "Build exists"; else mkdir addins/riscv-isa-sim/build; fi
-	cd addins/riscv-isa-sim/build; ../configure --prefix=/cad/riscv/gcc/bin
-	make -C addins/riscv-isa-sim/build
-# does sudo work?
-
-	sudo make install -C addins/riscv-isa-sim/build
-
-	cp addins/riscv-isa-sim/arch_test_target/spike/Makefile.include addins/riscv-arch-test/
+#	cp -r addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/I addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/F
+#	cp -r addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/I addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/D
+#	sed -i 's/--isa=rv32i /--isa=32if/' addins/riscv-isa-sim/arch_test_target/spike/device/rv32i_m/F/Makefile.include
+#	sed -i 's/--isa=rv64i /--isa=64id/' addins/riscv-isa-sim/arch_test_target/spike/device/rv64i_m/D/Makefile.include
+#	if [ -d "addins/riscv-isa-sim/build" ]; then echo "Build exists"; else mkdir addins/riscv-isa-sim/build; fi
+#	cd addins/riscv-isa-sim/build; ../configure --prefix=/cad/riscv/gcc/bin
+#	make -C addins/riscv-isa-sim/build
+#	sudo make install -C addins/riscv-isa-sim/build
+#	cp addins/riscv-isa-sim/arch_test_target/spike/Makefile.include addins/riscv-arch-test/
 # update with path including $RISCV_TOOLS
 # separate into make tests and make regression
-	sed -i '/export TARGETDIR ?=/c\export TARGETDIR ?= /home/harris/riscv-wally/addins/riscv-isa-sim/arch_test_target' tests/wally-riscv-arch-test/Makefile.include
+    cp $RISCV/riscv-isa-sim/arch_test_target/spike/Makefile.include addins/riscv-arch-test/
+	sed -i '/export TARGETDIR ?=/c\export TARGETDIR ?= $RISCV/riscv-isa-sim/arch_test_target' tests/wally-riscv-arch-test/Makefile.include
 	echo export RISCV_PREFIX = riscv64-unknown-elf- >> tests/wally-riscv-arch-test/Makefile.include
 	make -C addins/riscv-arch-test
 	make -C addins/riscv-arch-test XLEN=32
diff --git a/wally-pipelined/README.txt b/wally-pipelined/README.txt
new file mode 100644
index 000000000..250554603
--- /dev/null
+++ b/wally-pipelined/README.txt
@@ -0,0 +1,50 @@
+Code Improvements
+David_Harris@hmc.edu 15 Nov 2021
+
+Remove depricated N-Mode stuff, including sd in privileged.sv
+Look at version 13? of privileged spec.  What should we add?
+Reduce size of repo
+
+Timing optimization (Kip, Shreya)
+    Use ForwardSrcA instead of SrcA for mdu / fpu
+    Look at TLB -> PMP -> Access Fault -> Trap
+        may be able to precompute
+    Try flattening, see speedup
+    Take out Mul synthesis modes
+
+RISCV-Arch-tests 
+    Port MMU tests
+
+FPU
+    spec difference on signaling/quiet NAN propagation
+    SRT Div/Sqrt (Katherine, maybe Udeema)
+    Get riscv-arch-tests running (James, Katherine)
+    Get testfloat all passing
+    Katherine's FPU optimization
+
+Linux Boot
+    Ben, Skyler
+
+FPGA Boot Linux (Ross)
+
+IFU/LSU
+    Block diagrams, code cleanup
+    Burst mode transfers to speed up IPC
+    Implications of no byte enables on subword write - do stores take extra cycle, should this be avoided?
+
+28 nm Implementation
+    Install processor  
+    Memory macros
+    Synthesis & PNR
+    Timing review
+
+Benchmarking
+
+Flow
+    Kevin Kim has a makefile to check out and build all the pieces.  Make sure this is running; change Repo README to use his makefile
+
+Code cleanup    
+    .* fixes by thanksgiving
+    Rename top-level modules to abbreviations
+    Rename muldiv to mdu
+    Get rid of DESIGN_COMPILER flag and redundant multiplier
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/all.txt b/wally-pipelined/linux-testgen/linux-testvectors/all.txt
new file mode 120000
index 000000000..4275ab31a
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/all.txt
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/all.txt
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/bootmem.txt b/wally-pipelined/linux-testgen/linux-testvectors/bootmem.txt
new file mode 120000
index 000000000..33bff4ce4
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/bootmem.txt
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/bootmem.txt
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/checkpoint8500000 b/wally-pipelined/linux-testgen/linux-testvectors/checkpoint8500000
new file mode 120000
index 000000000..e48344418
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/checkpoint8500000
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/checkpoint8500000
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/ram.txt b/wally-pipelined/linux-testgen/linux-testvectors/ram.txt
new file mode 120000
index 000000000..209d4eed6
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/ram.txt
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/ram.txt
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump
new file mode 120000
index 000000000..8f52aac07
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/vmlinux.objdump
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.addr b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.addr
new file mode 120000
index 000000000..62079f3a2
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.addr
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/vmlinux.objdump.addr
\ No newline at end of file
diff --git a/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.lab b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.lab
new file mode 120000
index 000000000..fe8ecc6e4
--- /dev/null
+++ b/wally-pipelined/linux-testgen/linux-testvectors/vmlinux.objdump.lab
@@ -0,0 +1 @@
+/courses/e190ax/buildroot_boot/vmlinux.objdump.lab
\ No newline at end of file
diff --git a/wally-pipelined/srt/sqrttestgen b/wally-pipelined/srt/sqrttestgen
new file mode 100755
index 0000000000000000000000000000000000000000..d4b68062699e467b77274618e35a4e7cd2690e24
GIT binary patch
literal 13168
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
SCY%1#;?NhKaWW<o%l-oj<*mU0

literal 0
HcmV?d00001

diff --git a/wally-pipelined/srt/testgen b/wally-pipelined/srt/testgen
new file mode 100755
index 0000000000000000000000000000000000000000..bb01f81bc94bff6c806ca199a9d5f0f60e259183
GIT binary patch
literal 13088
zcmeHNeQaCR6~DHVH2t#OQrfgY^Tt|8yTwhvvXrXJa}u{NC@G~)_!v!J+}KVGiCygH
zHU$-eLMp7#l4)ZqLrB#|H%*%allY@UtZ@iy=zlE|TLqKm0iB$Fh_r>`u~6@v`|fd`
zUu;0yChd=$<h^sx@1Aq-x#!+@{XWjqo~Er<i-i$c*$){?LnShY^fP1a-{YddYS?Th
zvvRhal>kx<hs<k`>m}l8(KPW=p=SeL1V@ck2WqS`FA%?7hZ%A55IOcYMY1UBe1lyV
zi8Cf~0PWCMa9OA2?K#{h{OA>&>`+9zGGSLH?1(3YW5j8EI5s?5M0+h(86=ctWUPUo
zr#R{&?YN-%usk%6i@;@GAl{_Ij5yid4|aTfqW+thQz+~d{S}G}qj(4|hRfD;2lrNQ
zSkvvR><)%vy_LN+)s@v7T+y&=9UnKgkGk8oxALASjuJ@d^CCEK4PgBbK6!A*=_6yq
zt(z0KzP9k#J@Vr3+=2RY;mFRL-ZA$A@lDqTX=#8ooi+osa5~I37QovI;OKq6cF+e2
z4l}I*AfNuS0{H3z`1S&LT>*R>;0xF?)+Mz=i7{G-4Cbi^r=^;yYG+S4q((JwL{n83
z=njV?Slyvl`+I{L3xxOiLoBc_rggADM|U{tXAy76$D*3gABnKQfk;sELwzI|(gM&T
znu`{DyulFL*3?*6udZ{gb77!i@#ue8vKb_tSNvlP*NFs2Y*}zNu81&{k+4<*PU}>!
zw`S|p<?T?bUz^7LfX0s)&Jj_Wh|4ShuwNp{fb+#ADk==Pjg)~`8F0Gxu)4;88?Qsz
zfMef8iUH5g6;$pp;1G~3J!HV=WKqVH{>!DxU~%O#i75jKtvK~ts8ssjDIL|7G8^xN
zs?5q2aCVf-P(ry2E60-=pq0x|#*mDk<?=$5F%;toF3&;PhVtuNwxWzfA3x6JFPDOh
z;T|92@->t(1mk^NzKAjoeS9C6KSCLYJl@Xb2*`mUkU6cr(ilItM~Q!=^nWt3qor{y
z(LPsZ%Gk)n9AsmMX2~q|AQ*lYaFjPNb}|fsX;mt5-j)8eU5Q^fU~L;ciH%`EK5HAs
zs!Y;R-iO#plt_OhZ3BHJ{<bo5u~xC1RnDbjVEiU3Dg*C<u@XP6+kYhN`?hQXe_3on
zD_EwU0!P|T7vBYt<@zYbSLxq!axo}q%d;*lY8`gMuLkI6&bEy|2_}wmHXa3zZ79!N
zPGEOOUfco5sU(c{<N^fZe^KHi*Oe2ejsrCO3pk~ozM07=anFR(e`tcmDq!AElu4jD
z@+S1iPT?dDzmAHBL2($xR5z5yJd;pl<452$=$TZGDTB}c344RKQe&PpR$dAYdeS*H
z$!iX$2TprDscVh}p7Y9JGaRicWzdsU24fRS{D=Z=fYyu1l{jZ0a#)EEh+58-_!p@$
z=%(M3w)7uLJD>V-zh@FklTOFcAXt-&&w)<L0jm$X)C~uPy(gLa0!B0)2k-v7ewK4T
zCoRt$n!FA@I*vYu!yAOK$H!7{O=dD@M)}0`U#?Q(hte3F2{<)lm|7t;pg7o?hS;7*
z&(6a{raGZXr~vTvu!=(*fMx)IV45_ym^B~KHKART<}C(I+!0c1&93ozOJ1^z06mmI
zS7An-#rq+`0f)<zJn-?Q#iH6dAFq0t?-5e-BtfTmC!hyD6ccnQ1YRezV@rMYFTMhr
zq1D~*1{@VxTST12%Xy0rXHo3^`-zuEF5YfA+n;o-Ive+-aa<6IQ(bVU0}<wzO=<wz
zg%wf+D`fps&u0VfOufZBT%CZ{=fBI>1N!Tn|0*v(#CyW_F#a$#PEY#GXu#zte-<JH
zV;*up=#FRH4>ZPaxLX_J@4H)?j;u^ClweCZQi*(5)2a(=KU7A(vf<8}dgV))r-3Wl
za%!O|ez7TjqXF8;Ec&a`KWb4nU5Z`A4fl~Y_ilHadyiWk9h&O#`Y6mi?$J|QGWUc|
z7Wh^CIy%5Ke^lG=@6f`LC@9v4W8J>c-I~OIi6uj&6bN?vjXw>BW+!TOAuaf4f?pH-
zs^F7?->f~l`9%NcnN01^UqZTCyPnha+Eu$>c>D8;iP}fs(tc7_G*SEb?*>2YViUDX
z+O%_?C0A-&Ib9HT<F&VsJr4huYghIf+yQ+d$vUs%JdydEY`M+08SicJ2V%!RGnr$k
z0F%%K><aJ%@L$0~PXc#;mC4|b`4ZUUB;f79W#DIlKL;EM?=z7sPwZrtUZ>@@d9zA~
zEVG=5;|=5x^syQh1m)LfYz5S#{_E*X<~Zuwom=f?_d4btDD7jl%QmlGzv51WQ3rmO
z*h=vA59ov2?mTR*pI>5o!vbCNdLO{2U>&~<JX>%58CLUpT&tU4jDOClKbNh474T1?
z9`}l@eJ`)(eZK>68N|kq^>udV3s#T4?5NFSmyQ&9>=n-!EB30xC5pYKe^#?y?zY#s
z?Nx4jMV(!$vzLK>oxPODZ65e9Lpxu;La~z>nu)+n1ZE;I6M>ls%tT-&0y7bqiNH(*
zW+E^Xftd)*MBx890z2S+I#QM3T!52!eKL(pLSdfZiDH?T<_p;eub+{Y@-v*^%{S6*
z{5<tt3crUTm5O?NZ-RvHeULuCnc<&;j#*_Cv)_D^HeIG~ED5VF(~GYsnNIZWr%cGV
z3Qo*M1^66*MDIAxb7|_m5q`KpTB0+SDw27L@RLF&zpI4aY{992cqPTh(<}7hl`@y9
z-w7e_7WKmXf6nMTwz;DlVqQy1WL~vc@Vf-B7JRGV4+tI*e81pmysf_e9;pJp^sbUN
zxN2M*rFB(nH&#`zTQ61Y^!p^mtLb><`s!8RUU|cYRot_}CmXEZ8ml}_0l!4H<i%}F
z%ZnGWV|npnmdJ~jFj}X~KsGju<(pp{ta@4(26gxvI-Ak@%Ejko*I_O`m(lf@i_c?8
zF`v2keAZ`}C#thCdp7@rFyuDoV03-w;!f5luKQekK{kIO7hlMdBCjDAhi@8UKgh)w
zW%r3({8olv*34vMiy>blAHIaqcVnZCjloqa_JLe{DQnM*Pkm?4)u&x<3dMc2h+WN0
zA$ke-PYavwKkl1Wh=0N~FW55T6DHgxaP$7%z}sKO_6h%KKi|di>G6C*v_roKAaXhk
zXA7G?FDC%cH?BhCeT}!XkX6}bC{58Hp_nfYsFAPzGu-r+Y3tzw-p=%S|5)go*VPS<
zPhX$2VE~pq>!BR*g%JOCvCe7V9spc|Upw<UStInTXUn{&m-(5oYQUYK?=!8dEnHtH
z8Q3b0PrvT&FQD%$fcFEA{hIw8DxiM?aLM2Y72g1Sfz`>LGhOc^h(iyw4-^T5vw&mV
z@bf(q|0V(aeK?$uuhMIZLtN-n{u$aJB>_i$bKEWqeas6$;@@0=UlsT{5r6(I1@JEg
z{%hgS7Bm8y1rwS#Z>IoWSpcssfbRl)fpuv%KS%GCu@AUE)Awz)Ks%3PJNfc_IwD$B
ziv<F%4oJ(nw|=ME)VQk!(tIFq$KM%@YW|3-^{9~26Y@tv!xvUNyTg0E-Kr12EUMmE
zFY5^R?CbVxexIv){l<;?mDE5m6jZ&Di1(oC4{4EuED-Vb_*Gx5r{^G;7$g-mwH#Ia
zTG{CjaTmAlbT@lc&-MoJQFoZiIc7elHaxuD-P~9YT80{)#RL%CRj3|C)mu{<b~1Ha
z(|vXBCiT9pTX%U{)E0MLlLvd?nMxhe7#{!&$27=sVyfTg)x09pNtTV-OFRcE7n+vt
zWUj`>^lT_fkuq!KWMIK8M8j$q<X3h3nc8?CnEHYtH5T>5sHYspQG>iU8WnBxOe>y(
z)#dNy`B~u}hz$;i=Wpe9%JaN(Ax!nkMfAk3TufD4n(M_3VG>wwt)3B<i!oR9V2|eA
z3tWrnyo*YZFy@c!W3EtG^Sj)2jg^|WQ%Iemm}_q=2)TqoA9JD9<&AbRm+xQ*+S9of
z(QEemBhg?ulq0B67x8y{(Lj{;b!*JU1LuOGt1}Fu=I@0wu3u0J^NDx)yTpp^@<Agc
z>8AS9)h(#}Xa}f4H{PCL2lx=yuz5gm6}e!Bm<ukV9=I^*`u<Nj{_evTk$pa)`&r7H
zrROH<2X&3~T@dhD1-1=Nbl*#Psgl5n(Y{UcS|}Lp>Hb&~4Xz+X!Oiv!fZu>;8|t6#
zqmP;Fi-kQsM^Uqw2Z_&eWS_9gAThY_=8Q>Vz$GAJk?i4)j?)8hw!uO6Nt?{^B!WOs
z>MVOU$8QhR;IkUp)BXEyF;MD<{3ku)kAXct`;kod`Mttk7Coc?s6+k>nBjdHs**iD
z51bVC^t?&^lRf$Mtgx>W4bt;#O4y$lINGC)+5RYC7!&jlDIuOC5~4$Tj@N5-U#W~d
z4u{b`DeRNN{x~Wbi1Iy&{}k$s_I)KX*X|Pzk-yZ0S$@T2Pxlo=!u~xG2ePMrN&cnD
zo}PbvxF~^U>nwXVHOGDfHRwOhAKf4I341428b~sfvG{v9jP{fVPWj<YCVg}N!zTNr
zc<xGy7dS1Z{>||_1NL?}#N{&ed?xbY&H5x0$NM~o!JgjtlzvP5zk@BhNd43Ep7R^*
z!GzO4;EYpE_Vipx`TR*Sez6>~>z~%aF|alEPtT9(a^8GaUzet?9~%FsCj0Djrlec6
z>nwXFJK|}mG4@aQ@9mOqVxDg?oNRkHp@ePG_%Zzz$tQ6J_td#W{Ss<}2C>a50t6@f
zADM9K-^gk08&wmME|ubs3(y^Ktbv32$Gr#%uP^eQ1LE}V-Fjib)HwA^x|m9v&%RkC
MePNE1kxU}{H*I5|R{#J2

literal 0
HcmV?d00001

diff --git a/wally-setup.sh b/wally-setup.sh
new file mode 100644
index 000000000..4dba54959
--- /dev/null
+++ b/wally-setup.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# wally-setup.sh
+# David_Harris@hmc.edu and kekim@hmc.edu 1 December 2021
+# Set up tools for riscv-wally
+
+echo "Executing wally-setup.sh"
+
+# Path to RISC-V Tools
+export RISCV=/opt/riscv   # change this if you installed the tools in a different location
+
+# Tools
+export PATH=$RISCV/riscv-gnu-toolchain/bin:$RISCV/riscv-gnu-toolchain/riscv64-unknown-elf/bin:$PATH       # GCC tools
+export PATH=~/riscv-wally/bin:$PATH    # exe2memfile; change this if riscv-wally isn't at your home directory
+export PATH=/cad/mentor/questa_sim-2021.2_1/questasim/bin:$PATH    # Change this for your path to Modelsim
+export PATH=/usr/local/bin/verilator:$PATH # Change this for your path to Verilator
+export LD_LIBRARY_PATH=$RISCV/riscv-gnu-toolchain/lib:$RISCV/riscv-gnu-toolchain/riscv64-unknown-elf/lib:$LD_LIBRARY_PATH
+
+export MGLS_LICENSE_FILE=1717@solidworks.eng.hmc.edu # *** is this the right license server now
+
+# Imperas; *** remove if not using
+PATH=/cad/riscv/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64:/cad/riscv/imperas-riscv-tests/riscv-ovpsim/bin/Liux64:$PATH  # *** maybe take this out based on Imperas
+export LD_LIBRARY_PATH=/cad/imperas/Imperas.20200630/bin/Linux64:$LD_LIBRARY_PATH # remove if no imperas
+IMPERAS_HOME=/cad/imperas/Imperas.20200630
+source $IMPERAS_HOME/bin/setup.sh
+setupImperas $IMPERAS_HOME