diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.v
index 5bba0f4..6678366 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.v
@@ -54,7 +54,7 @@
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1__25.00000______0.000______50.0______175.402_____98.575
-// clk_out2__200.00000______0.000______50.0______114.829_____98.575
+// clk_out2__25.00000______0.000______50.0______175.402_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.veo b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.veo
index f44f721..8e682f1 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.veo
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.veo
@@ -53,7 +53,7 @@
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1__25.00000______0.000______50.0______175.402_____98.575
-// clk_out2__200.00000______0.000______50.0______114.829_____98.575
+// clk_out2__25.00000______0.000______50.0______175.402_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.xml b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.xml
index 775f901..8ed3b55 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.xml
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0.xml
@@ -1314,11 +1314,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:7df132ee
+ 9:ad4d551b
@@ -1333,11 +1333,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:7df132ee
+ 9:ad4d551b
@@ -1352,11 +1352,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1371,11 +1371,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1386,7 +1386,7 @@
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1397,7 +1397,7 @@
outputProductCRC
- 9:ea0c8e5a
+ 9:7443706c
@@ -1411,11 +1411,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:0455ee43
+ 9:4527b5ca
@@ -1429,11 +1429,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1444,7 +1444,7 @@
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1460,11 +1460,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -1478,11 +1478,11 @@
GENtimestamp
- Fri Mar 13 07:18:52 UTC 2026
+ Sun Apr 05 17:27:05 UTC 2026
outputProductCRC
- 9:6e49cf90
+ 9:067c9c1a
@@ -2725,7 +2725,7 @@
C_OUTCLK_SUM_ROW2
- clk_out2__200.00000______0.000______50.0______114.829_____98.575
+ clk_out2__25.00000______0.000______50.0______175.402_____98.575
C_OUTCLK_SUM_ROW3
@@ -2753,7 +2753,7 @@
C_CLKOUT2_REQUESTED_OUT_FREQ
- 200.000
+ 25
C_CLKOUT3_REQUESTED_OUT_FREQ
@@ -2837,7 +2837,7 @@
C_CLKOUT2_OUT_FREQ
- 200.00000
+ 25.00000
C_CLKOUT3_OUT_FREQ
@@ -3005,7 +3005,7 @@
C_MMCM_CLKOUT1_DIVIDE
- 5
+ 40
C_MMCM_CLKOUT2_DIVIDE
@@ -3531,7 +3531,7 @@
C_DIVIDE2_AUTO
- 0.125
+ 1.0
C_DIVIDE3_AUTO
@@ -3639,7 +3639,7 @@
C_CLKOUT1_ACTUAL_FREQ
- 200.00000
+ 25.00000
C_CLKOUT2_ACTUAL_FREQ
@@ -4352,7 +4352,7 @@
CLKOUT2_REQUESTED_OUT_FREQ
- 200.000
+ 25
CLKOUT2_REQUESTED_PHASE
@@ -4688,7 +4688,7 @@
MMCM_CLKOUT1_DIVIDE
- 5
+ 40
MMCM_CLKOUT1_DUTY_CYCLE
@@ -4997,7 +4997,7 @@
CLKOUT2_JITTER
Clkout2 Jitter
- 114.829
+ 175.402
CLKOUT2_PHASE_ERROR
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v
index d319bf9..3bdbfa9 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v
@@ -54,7 +54,7 @@
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1__25.00000______0.000______50.0______175.402_____98.575
-// clk_out2__200.00000______0.000______50.0______114.829_____98.575
+// clk_out2__25.00000______0.000______50.0______175.402_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
@@ -134,7 +134,7 @@ wire clk_in2_clk_wiz_0;
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT0_USE_FINE_PS ("FALSE"),
- .CLKOUT1_DIVIDE (5),
+ .CLKOUT1_DIVIDE (40),
.CLKOUT1_PHASE (0.000),
.CLKOUT1_DUTY_CYCLE (0.500),
.CLKOUT1_USE_FINE_PS ("FALSE"),
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v
index b25e7bc..3dd5440 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v
@@ -2,7 +2,7 @@
// Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2025.2 (lin64) Build 6299465 Fri Nov 14 12:34:56 MST 2025
-// Date : Fri Mar 13 02:38:01 2026
+// Date : Sun Apr 5 13:21:14 2026
// Host : arya running 64-bit EndeavourOS Linux
// Command : write_verilog -force -mode funcsim -rename_top clk_wiz_0 -prefix
// clk_wiz_0_ clk_wiz_0_sim_netlist.v
@@ -111,7 +111,7 @@ module clk_wiz_0_clk_wiz_0_clk_wiz
.CLKOUT0_DUTY_CYCLE(0.500000),
.CLKOUT0_PHASE(0.000000),
.CLKOUT0_USE_FINE_PS("FALSE"),
- .CLKOUT1_DIVIDE(5),
+ .CLKOUT1_DIVIDE(40),
.CLKOUT1_DUTY_CYCLE(0.500000),
.CLKOUT1_PHASE(0.000000),
.CLKOUT1_USE_FINE_PS("FALSE"),
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl
index f3a5f3c..ac9abb0 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl
@@ -2,7 +2,7 @@
-- Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2025.2 (lin64) Build 6299465 Fri Nov 14 12:34:56 MST 2025
--- Date : Fri Mar 13 02:38:01 2026
+-- Date : Sun Apr 5 13:21:14 2026
-- Host : arya running 64-bit EndeavourOS Linux
-- Command : write_vhdl -force -mode funcsim -rename_top clk_wiz_0 -prefix
-- clk_wiz_0_ clk_wiz_0_sim_netlist.vhdl
@@ -94,7 +94,7 @@ mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
CLKOUT0_DUTY_CYCLE => 0.500000,
CLKOUT0_PHASE => 0.000000,
CLKOUT0_USE_FINE_PS => false,
- CLKOUT1_DIVIDE => 5,
+ CLKOUT1_DIVIDE => 40,
CLKOUT1_DUTY_CYCLE => 0.500000,
CLKOUT1_PHASE => 0.000000,
CLKOUT1_USE_FINE_PS => false,
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v
index cc40900..22daff1 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v
@@ -2,7 +2,7 @@
// Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2025.2 (lin64) Build 6299465 Fri Nov 14 12:34:56 MST 2025
-// Date : Fri Mar 13 02:38:01 2026
+// Date : Sun Apr 5 13:21:14 2026
// Host : arya running 64-bit EndeavourOS Linux
// Command : write_verilog -force -mode synth_stub -rename_top clk_wiz_0 -prefix
// clk_wiz_0_ clk_wiz_0_stub.v
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
index 5515e7b..de31cff 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
@@ -2,7 +2,7 @@
-- Copyright 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2025.2 (lin64) Build 6299465 Fri Nov 14 12:34:56 MST 2025
--- Date : Fri Mar 13 02:38:01 2026
+-- Date : Sun Apr 5 13:21:14 2026
-- Host : arya running 64-bit EndeavourOS Linux
-- Command : write_vhdl -force -mode synth_stub -rename_top clk_wiz_0 -prefix
-- clk_wiz_0_ clk_wiz_0_stub.vhdl
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0.veo b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0.veo
index f44f721..8e682f1 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0.veo
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0.veo
@@ -53,7 +53,7 @@
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1__25.00000______0.000______50.0______175.402_____98.575
-// clk_out2__200.00000______0.000______50.0______114.829_____98.575
+// clk_out2__25.00000______0.000______50.0______175.402_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh
index 3f46253..3f07532 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh
index 03f7951..3663c88 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh
index 5d50237..fe45b67 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh
index 0c8da79..2de1372 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh
index 5472820..206ce22 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt
index 63015d2..77b73c8 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt
@@ -5,7 +5,7 @@
# run the exported script and how to fetch design source file details
# from the file_info.txt file.
#
-# Generated by export_simulation on Fri Mar 13 03:18:53 EDT 2026
+# Generated by export_simulation on Sun Apr 05 13:27:06 EDT 2026
#
################################################################################
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh
index 9ac4270..3d4a5d5 100755
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh
@@ -2,7 +2,7 @@
#**********************************************************************************************************
# Vivado (TM) v2025.2 (64-bit)
#
-# Script generated by Vivado on Fri Mar 13 03:18:53 EDT 2026
+# Script generated by Vivado on Sun Apr 05 13:27:06 EDT 2026
# SW Build 6299465 on Fri Nov 14 12:34:56 MST 2025
#
# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.xci b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.xci
index 537c13a..f9777fc 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.xci
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.xci
@@ -87,7 +87,7 @@
"CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "25", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
- "CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "200.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
+ "CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "25", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
@@ -171,7 +171,7 @@
"MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
- "MMCM_CLKOUT1_DIVIDE": [ { "value": "5", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
+ "MMCM_CLKOUT1_DIVIDE": [ { "value": "40", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
@@ -247,7 +247,7 @@
"CLKOUTPHY_REQUESTED_FREQ": [ { "value": "600.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT1_JITTER": [ { "value": "175.402", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT1_PHASE_ERROR": [ { "value": "98.575", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
- "CLKOUT2_JITTER": [ { "value": "114.829", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
+ "CLKOUT2_JITTER": [ { "value": "175.402", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT2_PHASE_ERROR": [ { "value": "98.575", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT3_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT3_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
@@ -339,14 +339,14 @@
"C_OUTCLK_SUM_ROW0A": [ { "value": " Output Output Phase Duty Cycle Pk-to-Pk Phase", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW0B": [ { "value": " Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW1": [ { "value": "clk_out1__25.00000______0.000______50.0______175.402_____98.575", "resolve_type": "generated", "usage": "all" } ],
- "C_OUTCLK_SUM_ROW2": [ { "value": "clk_out2__200.00000______0.000______50.0______114.829_____98.575", "resolve_type": "generated", "usage": "all" } ],
+ "C_OUTCLK_SUM_ROW2": [ { "value": "clk_out2__25.00000______0.000______50.0______175.402_____98.575", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW3": [ { "value": "no_CLK_OUT3_output", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW4": [ { "value": "no_CLK_OUT4_output", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW5": [ { "value": "no_CLK_OUT5_output", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW6": [ { "value": "no_CLK_OUT6_output", "resolve_type": "generated", "usage": "all" } ],
"C_OUTCLK_SUM_ROW7": [ { "value": "no_CLK_OUT7_output", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "25", "resolve_type": "generated", "format": "float", "usage": "all" } ],
- "C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "25", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
@@ -367,7 +367,7 @@
"C_CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT1_OUT_FREQ": [ { "value": "25.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
- "C_CLKOUT2_OUT_FREQ": [ { "value": "200.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_CLKOUT2_OUT_FREQ": [ { "value": "25.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT3_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT4_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_CLKOUT5_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
@@ -409,7 +409,7 @@
"C_MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_MMCM_STARTUP_WAIT": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
"C_MMCM_CLKOUT0_DIVIDE_F": [ { "value": "40.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
- "C_MMCM_CLKOUT1_DIVIDE": [ { "value": "5", "resolve_type": "generated", "format": "long", "usage": "all" } ],
+ "C_MMCM_CLKOUT1_DIVIDE": [ { "value": "40", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MMCM_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
@@ -540,7 +540,7 @@
"C_FILTER_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
"C_FILTER_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
"C_DIVIDE1_AUTO": [ { "value": "1", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE2_AUTO": [ { "value": "0.125", "resolve_type": "generated", "usage": "all" } ],
+ "C_DIVIDE2_AUTO": [ { "value": "1.0", "resolve_type": "generated", "usage": "all" } ],
"C_DIVIDE3_AUTO": [ { "value": "0.025", "resolve_type": "generated", "usage": "all" } ],
"C_DIVIDE4_AUTO": [ { "value": "0.025", "resolve_type": "generated", "usage": "all" } ],
"C_DIVIDE5_AUTO": [ { "value": "0.025", "resolve_type": "generated", "usage": "all" } ],
@@ -567,7 +567,7 @@
"C_CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT0_ACTUAL_FREQ": [ { "value": "25.00000", "resolve_type": "generated", "usage": "all" } ],
- "C_CLKOUT1_ACTUAL_FREQ": [ { "value": "200.00000", "resolve_type": "generated", "usage": "all" } ],
+ "C_CLKOUT1_ACTUAL_FREQ": [ { "value": "25.00000", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT2_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT3_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT4_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
@@ -686,5 +686,5 @@
}
}
},
- "checksum": "2ec823c6"
+ "checksum": "eb66e59e"
}
\ No newline at end of file
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr
index 11d04dd..b6531a3 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr
@@ -66,12 +66,12 @@
-
-
-
+
+
+
-
-
+
+
@@ -106,6 +106,14 @@
+
+
+
+
+
+
+
+
@@ -127,6 +135,13 @@
+
+
+
+
+
+
+
diff --git a/convert.py b/convert.py
index 955be72..1d1acc4 100644
--- a/convert.py
+++ b/convert.py
@@ -1,7 +1,7 @@
-with open("./programs/hello.bin", "rb") as f:
+with open("./programs/mandelbrot.bin", "rb") as f:
data = f.read()
-with open("./programs/hello.hex", "w") as f:
+with open("./programs/mandelbrot.hex", "w") as f:
for i in range(0, len(data), 4):
word = data[i:i+4]
val = int.from_bytes(word, "little")
diff --git a/programs/mandelbrot.c b/programs/mandelbrot.c
new file mode 100644
index 0000000..662a3b6
--- /dev/null
+++ b/programs/mandelbrot.c
@@ -0,0 +1,70 @@
+__attribute__((naked)) void _start(void) {
+ __asm__ volatile(
+ "li sp, 0x4000\n"
+ "call main\n"
+ "loop: j loop\n"
+ );
+}
+
+#define SCALE 1024
+#define MAX_ITER 32
+
+void draw_mandelbrot(volatile unsigned char* frame, int cx, int cy, int zoom) {
+ int x_start = cx - zoom;
+ int y_start = cy - (zoom * 240 / 320);
+ int x_step = (zoom * 2) / 320;
+ int y_step = (zoom * 2 * 240 / 320) / 240;
+
+ if (x_step < 1) x_step = 1;
+ if (y_step < 1) y_step = 1;
+
+ for (int py = 0; py < 240; py++) {
+ int ci = y_start + py * y_step;
+ for (int px = 0; px < 320; px++) {
+ int cr = x_start + px * x_step;
+
+ int zr = 0;
+ int zi = 0;
+ int iter = 0;
+
+ while (iter < MAX_ITER) {
+ int zr2 = (zr * zr) >> 10;
+ int zi2 = (zi * zi) >> 10;
+
+ if (zr2 + zi2 > 4 * SCALE) break;
+
+ int new_zr = zr2 - zi2 + cr;
+ zi = ((2 * zr * zi) >> 10) + ci;
+ zr = new_zr;
+ iter++;
+ }
+
+ unsigned char color;
+ if (iter == MAX_ITER) {
+ color = 0x00;
+ } else {
+ color = (unsigned char)(iter * 7);
+ }
+
+ frame[0x4000 * (320 * py + px)] = color;
+ }
+ }
+}
+
+int main() {
+ volatile unsigned char* frame = (volatile unsigned char*)0x0;
+
+ int cx = -768;
+ int cy = 0;
+ int step = 0;
+
+ while (1) {
+ int zoom = 1536;
+ for (int i = 0; i < step; i++) {
+ zoom = (zoom * 3) / 4;
+ }
+ draw_mandelbrot(frame, cx, cy, zoom);
+ step++;
+ if (step > 8) step = 0;
+ }
+}
\ No newline at end of file
diff --git a/programs/mandelbrot.hex b/programs/mandelbrot.hex
new file mode 100644
index 0000000..7c3a3cc
--- /dev/null
+++ b/programs/mandelbrot.hex
@@ -0,0 +1,196 @@
+00004137
+268000ef
+0000006f
+00000013
+fa010113
+04112e23
+04812c23
+06010413
+faa42623
+fab42423
+fac42223
+fad42023
+fa842703
+fa042783
+40f707b3
+fcf42623
+fa042703
+00070793
+00479793
+40e787b3
+00479793
+66666737
+66770713
+02e79733
+40775713
+41f7d793
+40e787b3
+fa442703
+00f707b3
+fcf42423
+fa042783
+66666737
+66770713
+02e79733
+40675713
+41f7d793
+40f707b3
+fef42623
+fa042783
+66666737
+66770713
+02e79733
+40675713
+41f7d793
+40f707b3
+fef42423
+fec42783
+00f04663
+00100793
+fef42623
+fe842783
+00f04663
+00100793
+fef42423
+fe042223
+16c0006f
+fe442703
+fe842783
+02f707b3
+fc842703
+00f707b3
+fcf42223
+fe042023
+1340006f
+fe042703
+fec42783
+02f707b3
+fcc42703
+00f707b3
+fcf42023
+fc042e23
+fc042c23
+fc042a23
+0840006f
+fdc42783
+02f787b3
+40a7d793
+faf42e23
+fd842783
+02f787b3
+40a7d793
+faf42c23
+fbc42703
+fb842783
+00f70733
+000017b7
+06e7c063
+fbc42703
+fb842783
+40f707b3
+fc042703
+00f707b3
+faf42a23
+fdc42703
+fd842783
+02f707b3
+00179793
+40a7d793
+fc442703
+00f707b3
+fcf42c23
+fb442783
+fcf42e23
+fd442783
+00178793
+fcf42a23
+fd442703
+01f00793
+f6e7dce3
+0080006f
+00000013
+fd442703
+02000793
+00f71663
+fc0409a3
+0200006f
+fd442783
+0ff7f793
+00078713
+00070793
+00379793
+40e787b3
+fcf409a3
+fe442703
+00070793
+00279793
+00e787b3
+00679793
+00078713
+fe042783
+00f707b3
+00e79793
+00078713
+fac42783
+00e787b3
+fd344703
+00e78023
+fe042783
+00178793
+fef42023
+fe042703
+13f00793
+ece7d4e3
+fe442783
+00178793
+fef42223
+fe442703
+0ef00793
+e8e7d8e3
+00000013
+00000013
+05c12083
+05812403
+06010113
+00008067
+fd010113
+02112623
+02812423
+03010413
+fe042023
+d0000793
+fcf42e23
+fc042c23
+fe042623
+60000793
+fef42423
+fe042223
+0340006f
+fe842703
+00070793
+00179793
+00e787b3
+41f7d713
+00377713
+00f707b3
+4027d793
+fef42423
+fe442783
+00178793
+fef42223
+fe442703
+fec42783
+fcf744e3
+fe842683
+fd842603
+fdc42583
+fe042503
+d25ff0ef
+fec42783
+00178793
+fef42623
+fec42703
+00800793
+f8e7d6e3
+fe042623
+f85ff06f
diff --git a/src/main/scala/RISCV/ALU.scala b/src/main/scala/RISCV/ALU.scala
index 8ee4a17..ada1b62 100644
--- a/src/main/scala/RISCV/ALU.scala
+++ b/src/main/scala/RISCV/ALU.scala
@@ -4,71 +4,128 @@ import chisel3._
import chisel3.util._
import _root_.circt.stage.ChiselStage
-/** @param width
- * Bit width (default: 32 bits)
- *
- * The Arithmetic Logic Unit (ALU) for RISC-V Supports: Addition, Multiplication, Comparison, Bitwise operations
- *
- * I/O: operation: 4-bit operation code signed: boolean to indicate if operands are signed (Only used for comparisons) a: first operand b:
- * second operand output: result of the operation
- *
- * Operation Codes: 0000: Addition 0001: Multiplication 0010: Comparison (outputs 3 bits: gt, eq, lt) 0011: Bitwise AND 0100: Bitwise OR
- * 0101: Bitwise XOR 0110: Bitwise NOT (outputs NOT a) 0111: Logical shift left 1000: Logical shift right 1001: Arithmetic shift right
- */
+
class ALU(val width: Int = 32) extends Module {
val io = IO(new Bundle {
- val operation = Input(UInt(4.W)); // 4-bit operation code
- val signed = Input(Bool()); // Treat operands as signed if true
+ val func7 = Input(UInt(7.W));
+ val func3 = Input(UInt(3.W));
+ val isM = Input(Bool());
val a = Input(UInt(width.W)); // First operand
val b = Input(UInt(width.W)); // Second operand
val output = Output(UInt(width.W)); // Result of the operation
})
-
io.output := 0.U;
+ val i_alu = Wire(UInt(width.W));
+ val m_alu = Wire(UInt(width.W));
+ i_alu := 0.U;
+ m_alu := 0.U
+
+
+
+
+
+
+ val a_s = io.a.asSInt
+ val b_s = io.b.asSInt
- switch(io.operation) {
- is("b0000".U) {
- io.output := io.a + io.b; // Addition
+ switch(io.func3) {
+ //MUL
+ is("b000".U) {
+ m_alu := (a_s * b_s).asUInt(31, 0)
}
- is("b0001".U) {
- io.output := io.a * io.b; // Multiplication
+ //MULH
+ is("b001".U) {
+ m_alu := (a_s * b_s).asUInt(63, 32)
}
- is("b0010".U) {
- when(io.signed) {
- val a_s = io.a.asSInt
- val b_s = io.b.asSInt
- val gt_s = a_s > b_s
- val eq_s = a_s === b_s
- val lt_s = a_s < b_s
- io.output := Cat(0.U((width - 3).W), gt_s, eq_s, lt_s);
+ //MULHSU
+ is("b010".U) {
+ val a_ext = Cat(io.a(31), io.a).asSInt
+ val b_ext = Cat(0.U(1.W), io.b).asSInt
+ m_alu := (a_ext * b_ext).asUInt(63, 32)
+ }
+ //MULHU
+ is("b011".U) {
+ m_alu := (io.a * io.b)(63, 32)
+ }
+ //DIV
+ is("b100".U) {
+ when(io.b === 0.U) {
+ m_alu := Fill(width, 1.U)
+ }.elsewhen(io.a === (1.U << (width-1)) && b_s === (-1).S) {
+ m_alu := io.a
}.otherwise {
- val gt = io.a > io.b; // Comparison
- val eq = io.a === io.b;
- val lt = io.a < io.b;
-
- io.output := Cat(0.U((width - 3).W), gt, eq, lt);
+ m_alu := (a_s / b_s).asUInt
}
}
- is("b0011".U) {
- io.output := io.a & io.b; // Bitwise AND
+ //DIVU
+ is("b101".U) {
+ when(io.b === 0.U) {
+ m_alu := Fill(width, 1.U)
+ }.otherwise {
+ m_alu := io.a / io.b
+ }
}
- is("b0100".U) {
- io.output := io.a | io.b; // Bitwise OR
+ //REM
+ is("b110".U) {
+ when(io.b === 0.U) {
+ m_alu := io.a
+ }.elsewhen(io.a === (1.U << (width-1)) && b_s === (-1).S){
+ m_alu := 0.U
+ }.otherwise {
+ m_alu := (a_s % b_s).asUInt
+ }
}
- is("b0101".U) {
- io.output := io.a ^ io.b; // Bitwise XOR
+ //REMU
+ is("b111".U) {
+ when(io.b === 0.U) {
+ m_alu := io.a
+ }.otherwise {
+ m_alu := io.a % io.b
+ }
+ }
+ }
+
+ switch(io.func3){
+ is("b000".U){
+ i_alu := io.a + io.b
+
+ }
+ //SLLI
+ is("b001".U){
+ i_alu := io.a << io.b(4,0)
+
}
- is("b0110".U) {
- io.output := ~io.a; // Bitwise NOT
+ //SLTI
+ is("b010".U){
+ i_alu := Mux(io.a.asSInt < io.b.asSInt, 1.U, 0.U)
}
- is("b0111".U) {
- io.output := io.a << io.b(4, 0); // Logical shift left
+ //SLTIU
+ is("b011".U){
+ i_alu := Mux(io.a < io.b, 1.U, 0.U)
}
- is("b1000".U) {
- io.output := io.a >> io.b(4, 0); // Logical shift right
+ //XOR
+ is("b100".U){
+ i_alu := io.a ^ io.b;
}
- is("b1001".U) {
- io.output := (io.a.asSInt >> io.b(4, 0)).asUInt // Arithmetic shift right
+ //SRAI, SRLI
+ is("b101".U) {
+ when(io.func7(5)) {
+ i_alu := (io.a.asSInt >> io.b(4, 0)).asUInt
+ }.otherwise {
+ i_alu := io.a >> io.b(4, 0)
+ }
+ }
+ // OR
+ is("b110".U) {
+ i_alu := io.a | io.b
}
+ //AND
+ is("b111".U) {
+ i_alu := io.a & io.b
+ }
+
}
-}
+ io.output := Mux(io.isM, m_alu, i_alu)
+ // io.output := i_alu
+
+ }
diff --git a/src/main/scala/RISCV/Main.scala b/src/main/scala/RISCV/Main.scala
index f9799c4..3e2ae24 100644
--- a/src/main/scala/RISCV/Main.scala
+++ b/src/main/scala/RISCV/Main.scala
@@ -40,11 +40,7 @@ class Main() extends Module {
registers.io.read_address_c := 0.U(5.W)
registers.io.in := 0.U(32.W)
- val alu = Module(new ALU())
- alu.io.operation := 0.U(3.W)
- alu.io.signed := false.B
- alu.io.a := 0.U(32.W)
- alu.io.b := 0.U(32.W)
+
val memory = Module(new Memory())
memory.io.btns := io.btns
@@ -98,6 +94,12 @@ class Main() extends Module {
io.debug_1 := program_pointer
io.debug_2 := stage ## opcode_buffer
+ val alu = Module(new ALU())
+ alu.io.func7 := funct7_buffer;
+ alu.io.func3 := funct3_buffer;
+ alu.io.a := out_a_buffer;
+ alu.io.b := 0.U(32.W)
+ alu.io.isM := false.B
when(io.execute) {
printf("\n");
printf("Stage: %d\n", stage);
@@ -179,52 +181,12 @@ class Main() extends Module {
registers.io.write_enable := true.B
program_pointer := pc_plus_4
stage := 0.U
+ val neg = Mux(opcode_buffer === "b0110011".U && funct7_buffer(5), - out_b_buffer, out_b_buffer)
+ val alu_b = Mux(opcode_buffer === "b0010011".U, immediate_buffer, neg)
+ alu.io.b := alu_b
+ alu.io.isM := opcode_buffer === "b0110011".U && funct7_buffer === "b0000001".U
+ registers.io.in := alu.io.output
- val alu_b = Mux(opcode_buffer === "b0010011".U, immediate_buffer, out_b_buffer)
-
- switch(funct3_buffer){
- is("b000".U){
- when(opcode_buffer === "b0110011".U && funct7_buffer(5)) {
- registers.io.in := out_a_buffer - alu_b
- }.otherwise {
- registers.io.in := out_a_buffer + alu_b
- }
- }
- //SLLI
- is("b001".U){
- registers.io.in := out_a_buffer << alu_b(4,0)
- }
- //SLTI
- is("b010".U){
- registers.io.in := Mux(out_a_buffer.asSInt < alu_b.asSInt, 1.U, 0.U)
- }
- //SLTIU
- is("b011".U){
- registers.io.in := Mux(out_a_buffer < alu_b, 1.U, 0.U)
- }
- //XOR
- is("b100".U){
- registers.io.in := out_a_buffer ^ alu_b;
- }
- //SRAI, SRLI
- is("b101".U) {
- when(funct7_buffer(5)) {
- registers.io.in := (out_a_buffer.asSInt >> alu_b(4, 0)).asUInt
- }.otherwise {
- registers.io.in := out_a_buffer >> alu_b(4, 0)
- }
- }
- // OR
- is("b110".U) {
- registers.io.in := out_a_buffer | alu_b
- }
- //AND
- is("b111".U) {
- registers.io.in := out_a_buffer & alu_b
- }
-
-
- }
}
//Branch
is("b1100011".U){