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 c1b4390..c87b924 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
@@ -53,7 +53,8 @@
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
-// clk_out1__25.00000______0.000______50.0______181.828____104.359
+// clk_out1__25.00000______0.000______50.0______175.402_____98.575
+// clk_out2__100.00000______0.000______50.0______130.958_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
@@ -62,12 +63,13 @@
`timescale 1ps/1ps
-(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
+(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=2,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
module clk_wiz_0
(
// Clock out ports
output clk_out1,
+ output clk_out2,
// Status and control signals
input reset,
output locked,
@@ -79,6 +81,7 @@ module clk_wiz_0
(
// Clock out ports
.clk_out1(clk_out1),
+ .clk_out2(clk_out2),
// Status and control signals
.reset(reset),
.locked(locked),
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 086388b..26aa6aa 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
@@ -52,7 +52,8 @@
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
-// clk_out1__25.00000______0.000______50.0______181.828____104.359
+// clk_out1__25.00000______0.000______50.0______175.402_____98.575
+// clk_out2__100.00000______0.000______50.0______130.958_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
@@ -69,6 +70,7 @@
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
+ .clk_out2(clk_out2), // output clk_out2
// Status and control signals
.reset(reset), // input reset
.locked(locked), // output locked
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 49c8b39..7ea7dd2 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
@@ -1210,6 +1210,96 @@
+
+ clock_CLK_OUT2
+
+
+
+
+
+
+ CLK_OUT2
+
+
+ clk_out2
+
+
+
+
+
+ FREQ_HZ
+ 100000000
+
+
+ none
+
+
+
+
+ FREQ_TOLERANCE_HZ
+ 0
+
+
+ none
+
+
+
+
+ PHASE
+ 0.0
+
+
+ none
+
+
+
+
+ CLK_DOMAIN
+
+
+
+ none
+
+
+
+
+ ASSOCIATED_BUSIF
+
+
+
+ none
+
+
+
+
+ ASSOCIATED_PORT
+
+
+
+ none
+
+
+
+
+ ASSOCIATED_RESET
+
+
+
+ none
+
+
+
+
+ INSERT_VIP
+ 0
+
+
+ simulation.rtl
+
+
+
+
+
@@ -1224,11 +1314,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:00fdc114
+ 9:4b09b841
@@ -1243,11 +1333,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:00fdc114
+ 9:4b09b841
@@ -1262,11 +1352,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1281,11 +1371,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1296,7 +1386,7 @@
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1307,7 +1397,7 @@
outputProductCRC
- 9:424814e7
+ 9:7e84de70
@@ -1321,11 +1411,11 @@
GENtimestamp
- Wed Mar 11 20:44:32 UTC 2026
+ Fri Mar 13 05:23:39 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1339,11 +1429,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1354,7 +1444,7 @@
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1370,11 +1460,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:21 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -1388,11 +1478,11 @@
GENtimestamp
- Wed Mar 11 20:44:14 UTC 2026
+ Fri Mar 13 05:23:22 UTC 2026
outputProductCRC
- 9:dd394782
+ 9:4111229a
@@ -2308,6 +2398,19 @@
+
+ clk_out2
+
+ out
+
+
+ std_logic
+ xilinx_anylanguagesynthesis
+ xilinx_anylanguagebehavioralsimulation
+
+
+
+
locked
@@ -2325,7 +2428,7 @@
C_CLKOUT2_USED
- 0
+ 1
C_USER_CLK_FREQ0
@@ -2565,7 +2668,7 @@
C_NUM_OUT_CLKS
- 1
+ 2
C_CLKOUT1_DRIVES
@@ -2618,11 +2721,11 @@
C_OUTCLK_SUM_ROW1
- clk_out1__25.00000______0.000______50.0______181.828____104.359
+ clk_out1__25.00000______0.000______50.0______175.402_____98.575
C_OUTCLK_SUM_ROW2
- no_CLK_OUT2_output
+ clk_out2__100.00000______0.000______50.0______130.958_____98.575
C_OUTCLK_SUM_ROW3
@@ -2650,7 +2753,7 @@
C_CLKOUT2_REQUESTED_OUT_FREQ
- 25.000
+ 100.000
C_CLKOUT3_REQUESTED_OUT_FREQ
@@ -2734,7 +2837,7 @@
C_CLKOUT2_OUT_FREQ
- 25.00000
+ 100.00000
C_CLKOUT3_OUT_FREQ
@@ -2858,7 +2961,7 @@
C_MMCM_CLKFBOUT_MULT_F
- 9.125
+ 10.000
C_MMCM_CLKIN1_PERIOD
@@ -2898,11 +3001,11 @@
C_MMCM_CLKOUT0_DIVIDE_F
- 36.500
+ 40.000
C_MMCM_CLKOUT1_DIVIDE
- 1
+ 10
C_MMCM_CLKOUT2_DIVIDE
@@ -3428,27 +3531,27 @@
C_DIVIDE2_AUTO
- 0.0273972602739726
+ 0.25
C_DIVIDE3_AUTO
- 0.0273972602739726
+ 0.025
C_DIVIDE4_AUTO
- 0.0273972602739726
+ 0.025
C_DIVIDE5_AUTO
- 0.0273972602739726
+ 0.025
C_DIVIDE6_AUTO
- 0.0273972602739726
+ 0.025
C_DIVIDE7_AUTO
- 0.0273972602739726
+ 0.025
C_PLLBUFGCEDIV
@@ -3536,7 +3639,7 @@
C_CLKOUT1_ACTUAL_FREQ
- 25.00000
+ 100.00000
C_CLKOUT2_ACTUAL_FREQ
@@ -4105,7 +4208,7 @@
CLKOUT2_USED
- false
+ true
CLKOUT3_USED
@@ -4129,7 +4232,7 @@
NUM_OUT_CLKS
- 1
+ 2
CLK_OUT1_USE_FINE_PS_GUI
@@ -4249,7 +4352,7 @@
CLKOUT2_REQUESTED_OUT_FREQ
- 25.000
+ 100.000
CLKOUT2_REQUESTED_PHASE
@@ -4525,7 +4628,7 @@
MMCM_CLKFBOUT_MULT_F
- 9.125
+ 10.000
MMCM_CLKFBOUT_PHASE
@@ -4569,7 +4672,7 @@
MMCM_CLKOUT0_DIVIDE_F
- 36.500
+ 40.000
MMCM_CLKOUT0_DUTY_CYCLE
@@ -4585,7 +4688,7 @@
MMCM_CLKOUT1_DIVIDE
- 1
+ 10
MMCM_CLKOUT1_DUTY_CYCLE
@@ -4884,17 +4987,17 @@
CLKOUT1_JITTER
Clkout1 Jitter
- 181.828
+ 175.402
CLKOUT1_PHASE_ERROR
Clkout1 Phase
- 104.359
+ 98.575
CLKOUT2_JITTER
Clkout2 Jitter
- 175.402
+ 130.958
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 034bdd5..1b69f37 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
@@ -53,7 +53,8 @@
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
-// clk_out1__25.00000______0.000______50.0______181.828____104.359
+// clk_out1__25.00000______0.000______50.0______175.402_____98.575
+// clk_out2__100.00000______0.000______50.0______130.958_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
@@ -67,6 +68,7 @@ module clk_wiz_0_clk_wiz
(// Clock in ports
// Clock out ports
output clk_out1,
+ output clk_out2,
// Status and control signals
input reset,
output locked,
@@ -107,7 +109,6 @@ wire clk_in2_clk_wiz_0;
wire clkfbout_buf_clk_wiz_0;
wire clkfboutb_unused;
wire clkout0b_unused;
- wire clkout1_unused;
wire clkout1b_unused;
wire clkout2_unused;
wire clkout2b_unused;
@@ -126,13 +127,17 @@ wire clk_in2_clk_wiz_0;
.COMPENSATION ("ZHOLD"),
.STARTUP_WAIT ("FALSE"),
.DIVCLK_DIVIDE (1),
- .CLKFBOUT_MULT_F (9.125),
+ .CLKFBOUT_MULT_F (10.000),
.CLKFBOUT_PHASE (0.000),
.CLKFBOUT_USE_FINE_PS ("FALSE"),
- .CLKOUT0_DIVIDE_F (36.500),
+ .CLKOUT0_DIVIDE_F (40.000),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT0_USE_FINE_PS ("FALSE"),
+ .CLKOUT1_DIVIDE (10),
+ .CLKOUT1_PHASE (0.000),
+ .CLKOUT1_DUTY_CYCLE (0.500),
+ .CLKOUT1_USE_FINE_PS ("FALSE"),
.CLKIN1_PERIOD (10.000))
mmcm_adv_inst
// Output clocks
@@ -141,7 +146,7 @@ wire clk_in2_clk_wiz_0;
.CLKFBOUTB (clkfboutb_unused),
.CLKOUT0 (clk_out1_clk_wiz_0),
.CLKOUT0B (clkout0b_unused),
- .CLKOUT1 (clkout1_unused),
+ .CLKOUT1 (clk_out2_clk_wiz_0),
.CLKOUT1B (clkout1b_unused),
.CLKOUT2 (clkout2_unused),
.CLKOUT2B (clkout2b_unused),
@@ -197,6 +202,10 @@ wire clk_in2_clk_wiz_0;
.I (clk_out1_clk_wiz_0));
+ BUFG clkout2_buf
+ (.O (clk_out2),
+ .I (clk_out2_clk_wiz_0));
+
endmodule
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 81a24ee..1651c3a 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 : Wed Mar 11 16:44:32 2026
+// Date : Fri Mar 13 01:23:39 2026
// Host : arya running 64-bit EndeavourOS Linux
// Command : write_verilog -force -mode funcsim
// /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v
@@ -16,32 +16,38 @@
(* NotValidForBitStream *)
module clk_wiz_0
(clk_out1,
+ clk_out2,
reset,
locked,
clk_in1);
output clk_out1;
+ output clk_out2;
input reset;
output locked;
input clk_in1;
(* IBUF_LOW_PWR *) wire clk_in1;
wire clk_out1;
+ wire clk_out2;
wire locked;
wire reset;
clk_wiz_0_clk_wiz inst
(.clk_in1(clk_in1),
.clk_out1(clk_out1),
+ .clk_out2(clk_out2),
.locked(locked),
.reset(reset));
endmodule
module clk_wiz_0_clk_wiz
(clk_out1,
+ clk_out2,
reset,
locked,
clk_in1);
output clk_out1;
+ output clk_out2;
input reset;
output locked;
input clk_in1;
@@ -50,6 +56,8 @@ module clk_wiz_0_clk_wiz
wire clk_in1_clk_wiz_0;
wire clk_out1;
wire clk_out1_clk_wiz_0;
+ wire clk_out2;
+ wire clk_out2_clk_wiz_0;
wire clkfbout_buf_clk_wiz_0;
wire clkfbout_clk_wiz_0;
wire locked;
@@ -58,7 +66,6 @@ module clk_wiz_0_clk_wiz
wire NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED;
- wire NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED;
@@ -89,18 +96,22 @@ module clk_wiz_0_clk_wiz
(.I(clk_out1_clk_wiz_0),
.O(clk_out1));
(* BOX_TYPE = "PRIMITIVE" *)
+ BUFG clkout2_buf
+ (.I(clk_out2_clk_wiz_0),
+ .O(clk_out2));
+ (* BOX_TYPE = "PRIMITIVE" *)
MMCME2_ADV #(
.BANDWIDTH("OPTIMIZED"),
- .CLKFBOUT_MULT_F(9.125000),
+ .CLKFBOUT_MULT_F(10.000000),
.CLKFBOUT_PHASE(0.000000),
.CLKFBOUT_USE_FINE_PS("FALSE"),
.CLKIN1_PERIOD(10.000000),
.CLKIN2_PERIOD(0.000000),
- .CLKOUT0_DIVIDE_F(36.500000),
+ .CLKOUT0_DIVIDE_F(40.000000),
.CLKOUT0_DUTY_CYCLE(0.500000),
.CLKOUT0_PHASE(0.000000),
.CLKOUT0_USE_FINE_PS("FALSE"),
- .CLKOUT1_DIVIDE(1),
+ .CLKOUT1_DIVIDE(10),
.CLKOUT1_DUTY_CYCLE(0.500000),
.CLKOUT1_PHASE(0.000000),
.CLKOUT1_USE_FINE_PS("FALSE"),
@@ -149,7 +160,7 @@ module clk_wiz_0_clk_wiz
.CLKINSTOPPED(NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED),
.CLKOUT0(clk_out1_clk_wiz_0),
.CLKOUT0B(NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED),
- .CLKOUT1(NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED),
+ .CLKOUT1(clk_out2_clk_wiz_0),
.CLKOUT1B(NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED),
.CLKOUT2(NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED),
.CLKOUT2B(NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED),
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 cbf9055..de421a2 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 : Wed Mar 11 16:44:32 2026
+-- Date : Fri Mar 13 01:23:39 2026
-- Host : arya running 64-bit EndeavourOS Linux
-- Command : write_vhdl -force -mode funcsim
-- /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl
@@ -18,6 +18,7 @@ use UNISIM.VCOMPONENTS.ALL;
entity clk_wiz_0_clk_wiz is
port (
clk_out1 : out STD_LOGIC;
+ clk_out2 : out STD_LOGIC;
reset : in STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
@@ -27,13 +28,13 @@ end clk_wiz_0_clk_wiz;
architecture STRUCTURE of clk_wiz_0_clk_wiz is
signal clk_in1_clk_wiz_0 : STD_LOGIC;
signal clk_out1_clk_wiz_0 : STD_LOGIC;
+ signal clk_out2_clk_wiz_0 : STD_LOGIC;
signal clkfbout_buf_clk_wiz_0 : STD_LOGIC;
signal clkfbout_clk_wiz_0 : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED : STD_LOGIC;
- signal NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED : STD_LOGIC;
@@ -55,6 +56,7 @@ architecture STRUCTURE of clk_wiz_0_clk_wiz is
attribute IFD_DELAY_VALUE : string;
attribute IFD_DELAY_VALUE of clkin1_ibufg : label is "AUTO";
attribute BOX_TYPE of clkout1_buf : label is "PRIMITIVE";
+ attribute BOX_TYPE of clkout2_buf : label is "PRIMITIVE";
attribute BOX_TYPE of mmcm_adv_inst : label is "PRIMITIVE";
begin
clkf_buf: unisim.vcomponents.BUFG
@@ -75,19 +77,24 @@ clkout1_buf: unisim.vcomponents.BUFG
I => clk_out1_clk_wiz_0,
O => clk_out1
);
+clkout2_buf: unisim.vcomponents.BUFG
+ port map (
+ I => clk_out2_clk_wiz_0,
+ O => clk_out2
+ );
mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
generic map(
BANDWIDTH => "OPTIMIZED",
- CLKFBOUT_MULT_F => 9.125000,
+ CLKFBOUT_MULT_F => 10.000000,
CLKFBOUT_PHASE => 0.000000,
CLKFBOUT_USE_FINE_PS => false,
CLKIN1_PERIOD => 10.000000,
CLKIN2_PERIOD => 0.000000,
- CLKOUT0_DIVIDE_F => 36.500000,
+ CLKOUT0_DIVIDE_F => 40.000000,
CLKOUT0_DUTY_CYCLE => 0.500000,
CLKOUT0_PHASE => 0.000000,
CLKOUT0_USE_FINE_PS => false,
- CLKOUT1_DIVIDE => 1,
+ CLKOUT1_DIVIDE => 10,
CLKOUT1_DUTY_CYCLE => 0.500000,
CLKOUT1_PHASE => 0.000000,
CLKOUT1_USE_FINE_PS => false,
@@ -137,7 +144,7 @@ mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
CLKINSTOPPED => NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED,
CLKOUT0 => clk_out1_clk_wiz_0,
CLKOUT0B => NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED,
- CLKOUT1 => NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED,
+ CLKOUT1 => clk_out2_clk_wiz_0,
CLKOUT1B => NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED,
CLKOUT2 => NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED,
CLKOUT2B => NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED,
@@ -169,6 +176,7 @@ use UNISIM.VCOMPONENTS.ALL;
entity clk_wiz_0 is
port (
clk_out1 : out STD_LOGIC;
+ clk_out2 : out STD_LOGIC;
reset : in STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
@@ -183,6 +191,7 @@ inst: entity work.clk_wiz_0_clk_wiz
port map (
clk_in1 => clk_in1,
clk_out1 => clk_out1,
+ clk_out2 => clk_out2,
locked => locked,
reset => reset
);
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 c79fbeb..585b16c 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 : Wed Mar 11 16:44:32 2026
+// Date : Fri Mar 13 01:23:39 2026
// Host : arya running 64-bit EndeavourOS Linux
// Command : write_verilog -force -mode synth_stub
// /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v
@@ -14,11 +14,13 @@
// This empty module with port declaration file causes synthesis tools to infer a black box for IP.
// The synthesis directives are for Synopsys Synplify support to prevent IO buffer insertion.
// Please paste the declaration into a Verilog source file or add the file as an additional source.
-(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
-module clk_wiz_0(clk_out1, reset, locked, clk_in1)
+(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=2,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
+module clk_wiz_0(clk_out1, clk_out2, reset, locked, clk_in1)
/* synthesis syn_black_box black_box_pad_pin="reset,locked,clk_in1" */
-/* synthesis syn_force_seq_prim="clk_out1" */;
+/* synthesis syn_force_seq_prim="clk_out1" */
+/* synthesis syn_force_seq_prim="clk_out2" */;
output clk_out1 /* synthesis syn_isclock = 1 */;
+ output clk_out2 /* synthesis syn_isclock = 1 */;
input reset;
output locked;
input clk_in1;
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 a8189c4..34c896b 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 : Wed Mar 11 16:44:32 2026
+-- Date : Fri Mar 13 01:23:39 2026
-- Host : arya running 64-bit EndeavourOS Linux
-- Command : write_vhdl -force -mode synth_stub
-- /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
@@ -16,19 +16,20 @@ use IEEE.STD_LOGIC_1164.ALL;
entity clk_wiz_0 is
Port (
clk_out1 : out STD_LOGIC;
+ clk_out2 : out STD_LOGIC;
reset : in STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute CORE_GENERATION_INFO : string;
- attribute CORE_GENERATION_INFO of clk_wiz_0 : entity is "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}";
+ attribute CORE_GENERATION_INFO of clk_wiz_0 : entity is "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=2,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}";
end clk_wiz_0;
architecture stub of clk_wiz_0 is
attribute syn_black_box : boolean;
attribute black_box_pad_pin : string;
attribute syn_black_box of stub : architecture is true;
- attribute black_box_pad_pin of stub : architecture is "clk_out1,reset,locked,clk_in1";
+ attribute black_box_pad_pin of stub : architecture is "clk_out1,clk_out2,reset,locked,clk_in1";
begin
end;
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 086388b..26aa6aa 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
@@ -52,7 +52,8 @@
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
-// clk_out1__25.00000______0.000______50.0______181.828____104.359
+// clk_out1__25.00000______0.000______50.0______175.402_____98.575
+// clk_out2__100.00000______0.000______50.0______130.958_____98.575
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
@@ -69,6 +70,7 @@
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
+ .clk_out2(clk_out2), // output clk_out2
// Status and control signals
.reset(reset), // input reset
.locked(locked), // output locked
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.v
index c79fbeb..585b16c 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/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 : Wed Mar 11 16:44:32 2026
+// Date : Fri Mar 13 01:23:39 2026
// Host : arya running 64-bit EndeavourOS Linux
// Command : write_verilog -force -mode synth_stub
// /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v
@@ -14,11 +14,13 @@
// This empty module with port declaration file causes synthesis tools to infer a black box for IP.
// The synthesis directives are for Synopsys Synplify support to prevent IO buffer insertion.
// Please paste the declaration into a Verilog source file or add the file as an additional source.
-(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
-module clk_wiz_0(clk_out1, reset, locked, clk_in1)
+(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=2,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
+module clk_wiz_0(clk_out1, clk_out2, reset, locked, clk_in1)
/* synthesis syn_black_box black_box_pad_pin="reset,locked,clk_in1" */
-/* synthesis syn_force_seq_prim="clk_out1" */;
+/* synthesis syn_force_seq_prim="clk_out1" */
+/* synthesis syn_force_seq_prim="clk_out2" */;
output clk_out1 /* synthesis syn_isclock = 1 */;
+ output clk_out2 /* synthesis syn_isclock = 1 */;
input reset;
output locked;
input clk_in1;
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.vhdl b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
index a8189c4..34c896b 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.ip_user_files/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 : Wed Mar 11 16:44:32 2026
+-- Date : Fri Mar 13 01:23:39 2026
-- Host : arya running 64-bit EndeavourOS Linux
-- Command : write_vhdl -force -mode synth_stub
-- /home/arya/Documents/Github/RISC-V/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.gen/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl
@@ -16,19 +16,20 @@ use IEEE.STD_LOGIC_1164.ALL;
entity clk_wiz_0 is
Port (
clk_out1 : out STD_LOGIC;
+ clk_out2 : out STD_LOGIC;
reset : in STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute CORE_GENERATION_INFO : string;
- attribute CORE_GENERATION_INFO of clk_wiz_0 : entity is "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}";
+ attribute CORE_GENERATION_INFO of clk_wiz_0 : entity is "clk_wiz_0,clk_wiz_v6_0_17_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=2,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}";
end clk_wiz_0;
architecture stub of clk_wiz_0 is
attribute syn_black_box : boolean;
attribute black_box_pad_pin : string;
attribute syn_black_box of stub : architecture is true;
- attribute black_box_pad_pin of stub : architecture is "clk_out1,reset,locked,clk_in1";
+ attribute black_box_pad_pin of stub : architecture is "clk_out1,clk_out2,reset,locked,clk_in1";
begin
end;
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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 a90d55d..8979a61 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 e901369..75c07c1 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 d662743..8d68349 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 be6a5d0..c16976b 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 ed1572a..d61eba1 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 1c77c7a..83abdbe 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 Wed Mar 11 16:44:15 EDT 2026
+# Generated by export_simulation on Fri Mar 13 01:23:22 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 486c5b2..f1954b3 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 Wed Mar 11 16:44:15 EDT 2026
+# Script generated by Vivado on Fri Mar 13 01:23:22 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 9da8ffe..56510d1 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
@@ -51,13 +51,13 @@
"CLKIN1_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
"CLKOUT1_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ],
- "CLKOUT2_USED": [ { "value": "false", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ],
+ "CLKOUT2_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUT3_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUT4_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUT5_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUT6_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUT7_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
- "NUM_OUT_CLKS": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
+ "NUM_OUT_CLKS": [ { "value": "2", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
"CLK_OUT1_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLK_OUT2_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLK_OUT3_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
@@ -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": "25.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
+ "CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "100.000", "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" } ],
@@ -156,7 +156,7 @@
"MMCM_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ],
"MMCM_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
"MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ],
- "MMCM_CLKFBOUT_MULT_F": [ { "value": "9.125", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
+ "MMCM_CLKFBOUT_MULT_F": [ { "value": "10.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"MMCM_CLKIN1_PERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
@@ -167,11 +167,11 @@
"MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
"MMCM_STARTUP_WAIT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
- "MMCM_CLKOUT0_DIVIDE_F": [ { "value": "36.500", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
+ "MMCM_CLKOUT0_DIVIDE_F": [ { "value": "40.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
"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": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
+ "MMCM_CLKOUT1_DIVIDE": [ { "value": "10", "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" } ],
@@ -245,9 +245,9 @@
"CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "user", "usage": "all" } ],
"ENABLE_CLKOUTPHY": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
"CLKOUTPHY_REQUESTED_FREQ": [ { "value": "600.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
- "CLKOUT1_JITTER": [ { "value": "181.828", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
- "CLKOUT1_PHASE_ERROR": [ { "value": "104.359", "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" } ],
+ "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": "130.958", "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" } ],
@@ -265,7 +265,7 @@
"PHASE_DUTY_CONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ]
},
"model_parameters": {
- "C_CLKOUT2_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
+ "C_CLKOUT2_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ],
"C_USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
@@ -325,7 +325,7 @@
"C_USE_POWER_DOWN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_USE_STATUS": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_USE_FREEZE": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
- "C_NUM_OUT_CLKS": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
+ "C_NUM_OUT_CLKS": [ { "value": "2", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
"C_CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
@@ -338,15 +338,15 @@
"C_INCLK_SUM_ROW2": [ { "value": "no_secondary_input_clock ", "resolve_type": "generated", "usage": "all" } ],
"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______181.828____104.359", "resolve_type": "generated", "usage": "all" } ],
- "C_OUTCLK_SUM_ROW2": [ { "value": "no_CLK_OUT2_output", "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__100.00000______0.000______50.0______130.958_____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": "25.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "100.000", "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": "25.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_CLKOUT2_OUT_FREQ": [ { "value": "100.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" } ],
@@ -398,7 +398,7 @@
"C_CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
"C_MMCM_NOTES": [ { "value": "None", "resolve_type": "generated", "usage": "all" } ],
"C_MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ],
- "C_MMCM_CLKFBOUT_MULT_F": [ { "value": "9.125", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_MMCM_CLKFBOUT_MULT_F": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_MMCM_CLKIN1_PERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_MMCM_CLKIN2_PERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"C_MMCM_CLKOUT4_CASCADE": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ],
@@ -408,8 +408,8 @@
"C_MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
"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": "36.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
- "C_MMCM_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
+ "C_MMCM_CLKOUT0_DIVIDE_F": [ { "value": "40.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
+ "C_MMCM_CLKOUT1_DIVIDE": [ { "value": "10", "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,12 +540,12 @@
"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.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE3_AUTO": [ { "value": "0.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE4_AUTO": [ { "value": "0.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE5_AUTO": [ { "value": "0.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE6_AUTO": [ { "value": "0.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
- "C_DIVIDE7_AUTO": [ { "value": "0.0273972602739726", "resolve_type": "generated", "usage": "all" } ],
+ "C_DIVIDE2_AUTO": [ { "value": "0.25", "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" } ],
+ "C_DIVIDE6_AUTO": [ { "value": "0.025", "resolve_type": "generated", "usage": "all" } ],
+ "C_DIVIDE7_AUTO": [ { "value": "0.025", "resolve_type": "generated", "usage": "all" } ],
"C_PLLBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
"C_MMCMBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
"C_PLLBUFGCEDIV1": [ { "value": "false", "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": "25.00000", "resolve_type": "generated", "usage": "all" } ],
+ "C_CLKOUT1_ACTUAL_FREQ": [ { "value": "100.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" } ],
@@ -611,6 +611,7 @@
"reset": [ { "direction": "in", "driver_value": "0" } ],
"clk_in1": [ { "direction": "in" } ],
"clk_out1": [ { "direction": "out" } ],
+ "clk_out2": [ { "direction": "out" } ],
"locked": [ { "direction": "out" } ]
},
"interfaces": {
@@ -663,9 +664,27 @@
"port_maps": {
"CLK_OUT1": [ { "physical_name": "clk_out1" } ]
}
+ },
+ "clock_CLK_OUT2": {
+ "vlnv": "xilinx.com:signal:clock:1.0",
+ "abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
+ "mode": "master",
+ "parameters": {
+ "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
+ "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
+ "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
+ "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
+ "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
+ "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
+ "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
+ "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
+ },
+ "port_maps": {
+ "CLK_OUT2": [ { "physical_name": "clk_out2" } ]
+ }
}
}
}
},
- "checksum": "7c331cae"
+ "checksum": "1dfc4686"
}
\ No newline at end of file
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/new/top.v b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/new/top.v
index cee8080..58bc133 100644
--- a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/new/top.v
+++ b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.srcs/sources_1/new/top.v
@@ -18,12 +18,25 @@ module Top(
// -------------------------------------------------------
// Clock divider: 100MHz -> 25MHz
// -------------------------------------------------------
- reg [1:0] clk_div;
- always @(posedge clk) begin
- if (btnC) clk_div <= 2'h0;
- else clk_div <= clk_div + 2'h1;
- end
- wire clk_25 = clk_div[1];
+ wire cpu_clk;
+ wire clk_25;
+ wire locked;
+ clk_wiz_0 instance_name
+ (
+ // Clock out ports
+ .clk_out1(clk_25), // output clk_out1
+ .clk_out2(cpu_clk), // output clk_out2
+ // Status and control signals
+ .reset(btnC), // input reset
+ .locked(locked), // output locked
+ .clk_in1(clk) // input clk_in1
+ );
+// reg [1:0] clk_div;
+// always @(posedge clk) begin
+// if (btnC) clk_div <= 2'h0;
+// else clk_div <= clk_div + 2'h1;
+// end
+// wire clk_25 = clk_div[1];
wire [3:0] btns = {btnU,btnR,btnL,btnD};
// -------------------------------------------------------
// UART program loader
@@ -54,7 +67,7 @@ module Top(
wire [31:0] debug_1, debug_2;
Main cpu (
- .clock (clk),
+ .clock (cpu_clk),
.reset (reset),
.io_execute (execute),
.io_debug_write (debug_write),
diff --git a/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr b/RISC-V-Scaffold-Basys3/RISC-V-Scaffold-Basys3.xpr
index 98baa2f..128abb8 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 @@
-
-
-
+
+
+
-
-
+
+
@@ -251,7 +251,6 @@
-
diff --git a/src/main/scala/RISCV/Decoder.scala b/src/main/scala/RISCV/Decoder.scala
index a00b0cd..2756eb9 100644
--- a/src/main/scala/RISCV/Decoder.scala
+++ b/src/main/scala/RISCV/Decoder.scala
@@ -20,6 +20,9 @@ class Decoder(val width: Int = 32) extends Module {
val rs2 = Output(UInt(5.W));
val rd = Output(UInt(5.W));
val immediate = Output(UInt(32.W));
+ val opcode = Output(UInt(7.W));
+ val func3 = Output(UInt(3.W));
+ val func7 = Output(UInt(7.W));
})
io.rs1 := io.instruction(19, 15);
@@ -29,11 +32,11 @@ class Decoder(val width: Int = 32) extends Module {
val format = Wire(InstructionFormat());
format := InstructionFormat.R;
- val opcode = io.instruction(6, 0);
- val func3 = io.instruction(14, 12);
- val func7 = io.instruction(31, 25);
+ io.opcode := io.instruction(6, 0);
+ io.func3 := io.instruction(14, 12);
+ io.func7 := io.instruction(31, 25);
- switch(opcode) {
+ switch(io.opcode) {
is(0b0110111.U) { format := InstructionFormat.U; } // lui
is(0b0010111.U) { format := InstructionFormat.U; } // auipc
is(0b0010011.U) { format := InstructionFormat.I; } // addi, slti, sltiu, xori, ori, andi, slli, srli, srai
@@ -54,27 +57,27 @@ class Decoder(val width: Int = 32) extends Module {
switch(format) {
is(InstructionFormat.R) {
- io.operation := io.instruction(31, 25) ## io.instruction(14, 12) ## io.instruction(6, 0);
+ io.operation := io.func7 ## io.func3 ## io.opcode;
}
is(InstructionFormat.I) {
- io.operation := io.instruction(14, 12) ## io.instruction(6, 0);
+ io.operation := io.func3 ## io.opcode;
io.immediate := Fill(21, io.instruction(31, 31)) ## io.instruction(30, 20);
}
is(InstructionFormat.S) {
- io.operation := io.instruction(14, 12) ## io.instruction(6, 0);
+ io.operation := io.func3 ## io.opcode;
io.immediate := Fill(21, io.instruction(31, 31)) ## io.instruction(31, 25) ## io.instruction(11, 7);
}
is(InstructionFormat.B) {
- io.operation := io.instruction(14, 12) ## io.instruction(6, 0);
+ io.operation := io.func3 ## io.opcode;
io.immediate := Fill(20, io.instruction(31, 31)) ## io.instruction(7, 7) ## io.instruction(31, 25) ## io.instruction(11, 8) ## 0
.U(1.W);
}
is(InstructionFormat.U) {
- io.operation := io.instruction(6, 0);
+ io.operation := io.opcode;
io.immediate := io.instruction(31, 12) ## 0.U(12.W);
}
is(InstructionFormat.J) {
- io.operation := io.instruction(6, 0);
+ io.operation := io.opcode;
io.immediate := Fill(12, io.instruction(31, 31)) ## io.instruction(19, 12) ## io.instruction(20, 20) ## io.instruction(
30,
21
diff --git a/src/main/scala/RISCV/Main.scala b/src/main/scala/RISCV/Main.scala
index dd11e05..3d0f591 100644
--- a/src/main/scala/RISCV/Main.scala
+++ b/src/main/scala/RISCV/Main.scala
@@ -6,6 +6,8 @@ import _root_.circt.stage.ChiselStage
import scala.math._
import os.read
+
+
class Main() extends Module {
val io = IO(new Bundle {
val execute = Input(Bool());
@@ -85,6 +87,10 @@ class Main() extends Module {
val rs1_buffer = RegInit(0.U(5.W));
val rs2_buffer = RegInit(0.U(5.W));
val rd_buffer = RegInit(0.U(5.W));
+ val opcode_buffer = RegInit(0.U(7.W));
+ val funct3_buffer = RegInit(0.U(3.W));
+ val funct7_buffer = RegInit(0.U(7.W));
+
when(io.execute) {
printf("\n");
@@ -122,148 +128,114 @@ class Main() extends Module {
rs1_buffer := decoder.io.rs1
rs2_buffer := decoder.io.rs2
rd_buffer := decoder.io.rd
+ opcode_buffer := decoder.io.opcode
+ funct3_buffer := decoder.io.func3
+ funct7_buffer := decoder.io.func7
- switch(decoder.io.operation) {
- // LB
- is("b000_0000011".U) {
- registers.io.read_address_a := decoder.io.rs1
-
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
-
- printf(
- "[LB] Rs1: %d Immediate: %b\n",
- decoder.io.rs1,
- registers.io.out_a + decoder.io.immediate
- );
- }
-
- // LH
- is("b001_0000011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
-
- printf(
- "[LH] Rs1: %d Immediate: %b\n",
- decoder.io.rs1,
- registers.io.out_a + decoder.io.immediate
- );
- }
-
- // LW
- is("b010_0000011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
-
- printf(
- "[LW] Rs1: %d Immediate: %b\n",
- decoder.io.rs1,
- registers.io.out_a + decoder.io.immediate
- );
- }
-
- // LBU
- is("b100_0000011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
+ val pc_plus_4 = program_pointer + 4.U
+ val pc_plus_imm = program_pointer + decoder.io.immediate
+ val addr = registers.io.out_a + decoder.io.immediate
- printf(
- "[LBU] Rs1: %d Immediate: %b\n",
- decoder.io.rs1,
- registers.io.out_a + decoder.io.immediate
- );
- }
+ switch(decoder.io.opcode){
+ //Load
+ is("b0000011".U) {
- // LHU
- is("b101_0000011".U) {
registers.io.read_address_a := decoder.io.rs1;
memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
+ memory.io.address_1 := (addr) / 4.U;
memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
+ memory.io.address_2 := (addr) / 4.U + 1.U;
- printf(
- "[LHU] Rs1: %d Immediate: %b\n",
- decoder.io.rs1,
- registers.io.out_a + decoder.io.immediate
- );
}
-
- // SB
- is("b000_0100011".U) {
+ //Store
+ is("b0100011".U){
registers.io.read_address_a := decoder.io.rs1;
registers.io.read_address_b := decoder.io.rs2;
memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
+ memory.io.address_1 := (addr) / 4.U;
+ memory.io.read_2 := true.B
+ memory.io.address_2 := (addr) / 4.U + 1.U;
- printf(
- "[SB] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- registers.io.out_a + decoder.io.immediate
- );
}
+ //ALU Imm,Reg
+ is("b0010011".U, "b0110011".U){
+ registers.io.read_address_a := decoder.io.rs1
+ registers.io.read_address_b := decoder.io.rs2
+ registers.io.write_address := decoder.io.rd
+ registers.io.write_enable := true.B
+ program_pointer := pc_plus_4
+ stage := 0.U
+
+ val alu_b = Mux(decoder.io.opcode === "b0010011".U, decoder.io.immediate, registers.io.out_b)
+
+ switch(decoder.io.func3){
+ is("b000".U){
+ when(decoder.io.opcode === "b0110011".U && decoder.io.func7(5)) {
+ registers.io.in := registers.io.out_a - alu_b
+ }.otherwise {
+ registers.io.in := registers.io.out_a + alu_b
+ }
+ }
+ //SLLI
+ is("b001".U){
+ registers.io.in := registers.io.out_a << alu_b(4,0)
+ }
+ //SLTI
+ is("b010".U){
+ registers.io.in := Mux(registers.io.out_a.asSInt < alu_b.asSInt, 1.U, 0.U)
+ }
+ //SLTIU
+ is("b011".U){
+ registers.io.in := Mux(registers.io.out_a < alu_b, 1.U, 0.U)
+ }
+ //XOR
+ is("b100".U){
+ registers.io.in := registers.io.out_a ^ alu_b;
+ }
+ //SRAI, SRLI
+ is("b101".U) {
+ when(decoder.io.func7(5)) {
+ registers.io.in := (registers.io.out_a.asSInt >> alu_b(4, 0)).asUInt
+ }.otherwise {
+ registers.io.in := registers.io.out_a >> alu_b(4, 0)
+ }
+ }
+ // OR
+ is("b110".U) {
+ registers.io.in := registers.io.out_a | alu_b
+ }
+ //AND
+ is("b111".U) {
+ registers.io.in := registers.io.out_a & alu_b
+ }
- // SH
- is("b001_0100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
- printf(
- "[SH] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- registers.io.out_a + decoder.io.immediate
- );
+ }
}
- // SW
- is("b010_0100011".U) {
+ //Branch
+ is("b1100011".U){
registers.io.read_address_a := decoder.io.rs1;
registers.io.read_address_b := decoder.io.rs2;
-
- memory.io.read_1 := true.B
- memory.io.address_1 := (registers.io.out_a + decoder.io.immediate) / 4.U;
- memory.io.read_2 := true.B
- memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
-
- printf(
- "[SW] Rs1: %d Rs2: %d Immediate: %b Raw Address: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- registers.io.out_a + decoder.io.immediate,
- (registers.io.out_a + decoder.io.immediate) / 4.U
- );
- }
-
- // LUI
- is("b0110111".U) {
+ stage := 0.U;
+ val eq = registers.io.out_a === registers.io.out_b
+ val lt_signed = registers.io.out_a.asSInt < registers.io.out_b.asSInt
+ val lt_unsigned = registers.io.out_a < registers.io.out_b
+ val lt_sel = Mux(decoder.io.func3(1), lt_unsigned,lt_signed)
+ val lt_eq_sel = Mux(decoder.io.func3(2),lt_sel,eq)
+ val take_branch = lt_eq_sel ^ decoder.io.func3(0)
+ program_pointer := Mux(take_branch, pc_plus_imm, pc_plus_4)
+ }
+ //LUI
+ is("b0110111".U){
registers.io.write_address := decoder.io.rd;
registers.io.write_enable := true.B;
registers.io.in := decoder.io.immediate;
- program_pointer := program_pointer + 4.U;
+ program_pointer := pc_plus_4;
stage := 0.U;
printf(
@@ -272,14 +244,13 @@ class Main() extends Module {
decoder.io.immediate
);
}
-
- // AUIPC
- is("b0010111".U) {
+ //AUIPC
+ is("b0010111".U){
registers.io.write_address := decoder.io.rd;
registers.io.write_enable := true.B;
- registers.io.in := program_pointer + decoder.io.immediate;
+ registers.io.in := pc_plus_imm;
- program_pointer := program_pointer + 4.U;
+ program_pointer := pc_plus_4;
stage := 0.U;
printf(
@@ -288,405 +259,13 @@ class Main() extends Module {
decoder.io.immediate
);
}
-
- // ADDI
- is("b000_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a + decoder.io.immediate;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[ADDI] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // SLTI
- is("b010_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(
- registers.io.out_a.asSInt < decoder.io.immediate.asSInt
- ) {
- registers.io.in := 1.U;
- }.otherwise {
- registers.io.in := 0.U;
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLTI] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // SLTIU
- is("b011_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(registers.io.out_a < decoder.io.immediate) {
- registers.io.in := 1.U;
- }.otherwise {
- registers.io.in := 0.U;
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLTIU] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // XORI
- is("b100_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a ^ decoder.io.immediate;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[XORI] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // ORI
- is("b110_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a | decoder.io.immediate;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[ORI] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // ANDI
- is("b111_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a & decoder.io.immediate;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[ANDI] Rs1: %d Rd: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate
- );
- }
-
- // ADD
- is("b0000000_000_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a + registers.io.out_b;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[ADD] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // SUB
- is("b0110000_000_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a - registers.io.out_b;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SUB] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // SLLI
- is("b001_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a << decoder.io
- .immediate(5, 0);
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLLI] Rs1: %d Rd: %d Shift: %d\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate(5, 0)
- );
- }
-
- // SRLI and SRAI
- is("b101_0010011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(decoder.io.immediate(10) === 1.U) { // SRAI
- registers.io.in := (registers.io.out_a.asSInt >> decoder.io
- .immediate(5, 0)).asUInt;
- }.otherwise { // SLAI
- registers.io.in := registers.io.out_a >> decoder.io
- .immediate(5, 0);
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- when(decoder.io.immediate(10) === 1.U) { // SRAI
- printf(
- "[SRAI] Rs1: %d Rd: %d Shift: %d\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate(5, 0)
- );
- }.otherwise { // SLAI
- printf(
- "[SRLI] Rs1: %d Rd: %d Shift: %d\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate(5, 0)
- );
- }
- }
-
- // SLL
- is("b001_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a << registers.io.out_b(
- 5,
- 0
- );
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLL] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // SRL and SRA
- is("b101_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(decoder.io.immediate(10) === 1.U) { // SRA
- registers.io.in := (registers.io.out_a.asSInt >> decoder.io
- .immediate(5, 0)).asUInt;
- }.otherwise { // SLA
- registers.io.in := registers.io.out_a >> decoder.io
- .immediate(5, 0);
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- when(decoder.io.immediate(10) === 1.U) { // SRA
- printf(
- "[SRA] Rs1: %d Rd: %d Shift: %d\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate(5, 0)
- );
- }.otherwise { // SLA
- printf(
- "[SRL] Rs1: %d Rd: %d Shift: %d\n",
- decoder.io.rs1,
- decoder.io.rd,
- decoder.io.immediate(5, 0)
- );
- }
- }
-
- // SLT
- is("b010_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(
- registers.io.out_a.asSInt < registers.io.out_b.asSInt
- ) {
- registers.io.in := 1.U;
- }.otherwise {
- registers.io.in := 0.U;
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLT] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // SLTU
- is("b011_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
-
- when(registers.io.out_a < registers.io.out_b) {
- registers.io.in := 1.U;
- }.otherwise {
- registers.io.in := 0.U;
- }
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[SLTU] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // XOR
- is("b100_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a ^ registers.io.out_b;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[XOR] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // OR
- is("b110_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a | registers.io.out_b;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[OR] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // AND
- is("b111_0110011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- registers.io.write_address := decoder.io.rd;
- registers.io.write_enable := true.B;
- registers.io.in := registers.io.out_a & registers.io.out_b;
-
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf(
- "[AND] Rs1: %d Rs2: %d Rd: %d\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.rd
- );
- }
-
- // JAL
- is("b1101111".U) {
+ //JAL
+ is("b1101111".U){
registers.io.write_address := decoder.io.rd;
registers.io.write_enable := true.B;
- registers.io.in := program_pointer + 4.U;
+ registers.io.in := pc_plus_4
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
+ program_pointer := pc_plus_imm;
stage := 0.U;
printf(
@@ -695,16 +274,15 @@ class Main() extends Module {
decoder.io.immediate
);
}
-
- // JALR
- is("b000_1100111".U) {
+ //JALR
+ is("b1100111".U){
registers.io.read_address_a := decoder.io.rs1;
registers.io.write_address := decoder.io.rd;
registers.io.write_enable := true.B;
- registers.io.in := program_pointer + 4.U;
+ registers.io.in :=pc_plus_4;
- program_pointer := (registers.io.out_a.zext + decoder.io.immediate.asSInt).asUInt;
+ program_pointer := addr & ~1.U(32.W)
stage := 0.U;
printf(
@@ -713,421 +291,120 @@ class Main() extends Module {
decoder.io.rd,
decoder.io.immediate
);
+
}
-
- // BEQ
- is("b000_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(registers.io.out_a === registers.io.out_b) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
- stage := 0.U;
-
- printf(
- "[BEQ] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
- }
-
- // BNEQ
- is("b001_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(registers.io.out_a =/= registers.io.out_b) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
- stage := 0.U;
-
- printf(
- "[BNEQ] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
- }
-
- // BLT
- is("b100_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(
- registers.io.out_a.asSInt < registers.io.out_b.asSInt
- ) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
- stage := 0.U;
-
- printf(
- "[BLT] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
- }
-
- // BGE
- is("b101_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(
- registers.io.out_a.asSInt >= registers.io.out_b.asSInt
- ) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
- stage := 0.U;
-
- printf(
- "[BGE] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
- }
-
- // BLTU
- is("b110_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(registers.io.out_a < registers.io.out_b) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
- stage := 0.U;
-
- printf(
- "[BLTU] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
- }
-
- // BGEU
- is("b111_1100011".U) {
- registers.io.read_address_a := decoder.io.rs1;
- registers.io.read_address_b := decoder.io.rs2;
-
- when(registers.io.out_a >= registers.io.out_b) {
- program_pointer := (program_pointer.zext + decoder.io.immediate.asSInt).asUInt;
- }.otherwise {
- program_pointer := program_pointer + 4.U;
- }
-
+ //FENCE
+ is("b0001111".U){
+ program_pointer := pc_plus_4;
stage := 0.U;
+ printf("[FENCE]");
- printf(
- "[BGEU] Rs1: %d Rs2: %d Immediate: %b\n",
- decoder.io.rs1,
- decoder.io.rs2,
- decoder.io.immediate
- );
}
+
- // FENCE - NoOP
- is("b000_0001111".U) {
- program_pointer := program_pointer + 4.U;
- stage := 0.U;
-
- printf("[FENCE]");
- }
}
+
}
when(stage === 2.U) {
- stage := 0.U;
-
- switch(operation_buffer) {
- // LB
- is("b000_0000011".U) {
- registers.io.write_address := rd_buffer
- registers.io.write_enable := true.B
-
- val address = registers.io.out_a + immediate_buffer
- val data =
- (memory.io.read_value_1 >> (address % 4.U) * 8.U) | (memory.io.read_value_2 << (4.U - (address % 4.U)) * 8.U)
-
- registers.io.in := Fill(24, data(7)) ## data(7, 0)
-
- program_pointer := program_pointer + 4.U
-
- printf(
- "[LB] Rd: %d Data: %b\n",
- rd_buffer,
- Fill(24, data(7)) ## data(7, 0)
- )
- }
-
- // LH
- is("b001_0000011".U) {
- registers.io.write_address := rd_buffer
- registers.io.write_enable := true.B
-
- val address = registers.io.out_a + immediate_buffer
- val data =
- (memory.io.read_value_1 >> (address % 4.U) * 8.U) | (memory.io.read_value_2 << (4.U - (address % 4.U)) * 8.U)
-
- registers.io.in := Fill(16, data(15)) ## data(15, 0)
-
- program_pointer := program_pointer + 4.U
-
- printf(
- "[LH] Rd: %d Data: %b\n",
- rd_buffer,
- Fill(16, data(15)) ## data(15, 0)
- )
- }
-
- // LW
- is("b010_0000011".U) {
- registers.io.write_address := rd_buffer
- registers.io.write_enable := true.B
-
- val address = registers.io.out_a + immediate_buffer
- val data =
- (memory.io.read_value_1 >> (address % 4.U) * 8.U) | (memory.io.read_value_2 << (4.U - (address % 4.U)) * 8.U)
-
- registers.io.in := data
-
- program_pointer := program_pointer + 4.U
-
- printf(
- "[LW] Rd: %d Data: %b\n",
- rd_buffer,
- data
- )
- }
-
- // LBU
- is("b100_0000011".U) {
- registers.io.write_address := rd_buffer
- registers.io.write_enable := true.B
-
- val address = registers.io.out_a + immediate_buffer
- val data =
- (memory.io.read_value_1 >> (address % 4.U) * 8.U) | (memory.io.read_value_2 << (4.U - (address % 4.U)) * 8.U)
+ stage := 0.U
+ program_pointer := program_pointer + 4.U
- registers.io.in := 0.U(24.W) ## data(7, 0)
+ val addr = registers.io.out_a + immediate_buffer
+ val byte_offset = addr(1, 0)
+ val shift_amount = byte_offset ## 0.U(3.W)
- program_pointer := program_pointer + 4.U
+ switch(opcode_buffer){
+ //Loads
+ is("b0000011".U){
- printf(
- "[LBU] Rd: %d Data: %b\n",
- rd_buffer,
- 0.U(24.W) ## data(7, 0)
- )
- }
-
- // LHU
- is("b101_0000011".U) {
+ registers.io.read_address_a := rs1_buffer
registers.io.write_address := rd_buffer
registers.io.write_enable := true.B
- val address = registers.io.out_a + immediate_buffer
- val data =
- (memory.io.read_value_1 >> (address % 4.U) * 8.U) | (memory.io.read_value_2 << (4.U - (address % 4.U)) * 8.U)
-
- registers.io.in := 0.U(16.W) ## data(15, 0)
-
- program_pointer := program_pointer + 4.U
-
- printf(
- "[LHU] Rd: %d Data: %b\n",
- rd_buffer,
- 0.U(16.W) ## data(15, 0)
- )
- }
-
- // SB
- is("b000_0100011".U) {
- registers.io.read_address_a := rs1_buffer
- registers.io.read_address_b := rs2_buffer
-
- val address = registers.io.out_a + immediate_buffer
+ val raw_data = (memory.io.read_value_1 >> shift_amount | memory.io.read_value_2 << (32.U - shift_amount))
- val value_1 =
- WireDefault(memory.io.read_value_1)
-
- switch(address % 4.U) {
- is(0.U) {
- value_1 := Cat(
- memory.io.read_value_1(31, 8),
- registers.io.out_b(7, 0)
- )
+ switch(funct3_buffer){
+ //LB
+ is("b000".U){
+ registers.io.in := Fill(24, raw_data(7)) ## raw_data(7, 0)
+ }
+ //LH
+ is("b001".U){
+ registers.io.in := Fill(16, raw_data(15)) ## raw_data(15, 0)
}
- is(1.U) {
- value_1 := Cat(
- memory.io.read_value_1(31, 16),
- registers.io.out_b(7, 0),
- memory.io.read_value_1(7, 0)
- )
+ //LW
+ is("b010".U){
+ registers.io.in := raw_data
}
- is(2.U) {
- value_1 := Cat(
- memory.io.read_value_1(31, 24),
- registers.io.out_b(7, 0),
- memory.io.read_value_1(15, 0)
- )
+ //LBU
+ is("b100".U){
+ registers.io.in := 0.U(24.W) ## raw_data(7, 0)
}
- is(3.U) {
- value_1 := Cat(
- registers.io.out_b(7, 0),
- memory.io.read_value_1(23, 0)
- )
+ //LHU
+ is("b101".U){
+ registers.io.in := 0.U(16.W) ## raw_data(15, 0)
}
}
-
- memory.io.write_1 := true.B
- memory.io.address_1 := address / 4.U
- memory.io.write_value_1 := value_1
-
- program_pointer := program_pointer + 4.U
-
- printf("[SB] Address: %d Value 1: %b\n", address, value_1)
}
-
- // SH
- is("b001_0100011".U) {
+ is("b0100011".U){
registers.io.read_address_a := rs1_buffer
registers.io.read_address_b := rs2_buffer
- val address = registers.io.out_a + immediate_buffer
-
- val value_1 = WireDefault(memory.io.read_value_1)
- val value_2 = WireDefault(memory.io.read_value_2)
-
- switch(address % 4.U) {
- is(0.U) {
- value_1 := Cat(
- memory.io.read_value_1(31, 16),
- registers.io.out_b(15, 0)
- )
- }
-
- is(1.U) {
- value_1 := Cat(
- memory.io.read_value_1(31, 24),
- registers.io.out_b(15, 0),
- memory.io.read_value_1(7, 0)
- )
- }
-
- is(2.U) {
- value_1 := Cat(
- registers.io.out_b(15, 0),
- memory.io.read_value_1(15, 0)
- )
- }
-
- is(3.U) {
- value_1 := Cat(
- registers.io.out_b(7, 0),
- memory.io.read_value_1(23, 0)
- )
- value_2 := Cat(
- memory.io.read_value_2(31, 8),
- registers.io.out_b(15, 8)
- )
- }
- }
-
memory.io.write_1 := true.B
- memory.io.address_1 := address / 4.U
- memory.io.write_value_1 := value_1
-
+ memory.io.address_1 := addr / 4.U
memory.io.write_2 := true.B
- memory.io.address_2 := address / 4.U + 1.U
- memory.io.write_value_2 := value_2
-
- program_pointer := program_pointer + 4.U
-
- printf("[SH]\n")
- }
-
- // SW
- is("b010_0100011".U) {
- registers.io.read_address_a := rs1_buffer
- registers.io.read_address_b := rs2_buffer
-
- val address = registers.io.out_a + immediate_buffer
+ memory.io.address_2 := addr / 4.U + 1.U
val value_1 = WireDefault(memory.io.read_value_1)
val value_2 = WireDefault(memory.io.read_value_2)
- switch(address % 4.U) {
- is(0.U) {
- value_1 := registers.io.out_b
+ switch(funct3_buffer){
+ is("b000".U) { // SB
+ switch(byte_offset) {
+ is(0.U) { value_1 := Cat(memory.io.read_value_1(31, 8), registers.io.out_b(7, 0)) }
+ is(1.U) { value_1 := Cat(memory.io.read_value_1(31, 16), registers.io.out_b(7, 0), memory.io.read_value_1(7, 0)) }
+ is(2.U) { value_1 := Cat(memory.io.read_value_1(31, 24), registers.io.out_b(7, 0), memory.io.read_value_1(15, 0)) }
+ is(3.U) { value_1 := Cat(registers.io.out_b(7, 0), memory.io.read_value_1(23, 0)) }
+ }
}
-
- is(1.U) {
- value_1 := Cat(
- registers.io.out_b(23, 0),
- memory.io.read_value_1(7, 0)
- )
- value_2 := Cat(
- memory.io.read_value_2(31, 8),
- registers.io.out_b(31, 24)
- )
+ is("b001".U){ //SH
+ switch(byte_offset) {
+ is(0.U) { value_1 := Cat(memory.io.read_value_1(31, 16), registers.io.out_b(15, 0)) }
+ is(1.U) { value_1 := Cat(memory.io.read_value_1(31, 24), registers.io.out_b(15, 0), memory.io.read_value_1(7, 0)) }
+ is(2.U) { value_1 := Cat(registers.io.out_b(15, 0), memory.io.read_value_1(15, 0)) }
+ is(3.U) {
+ value_1 := Cat(registers.io.out_b(7, 0), memory.io.read_value_1(23, 0))
+ value_2 := Cat(memory.io.read_value_2(31, 8), registers.io.out_b(15, 8))
+ }
+ }
}
-
- is(2.U) {
- value_1 := Cat(
- registers.io.out_b(15, 0),
- memory.io.read_value_1(15, 0)
- )
- value_2 := Cat(
- memory.io.read_value_2(31, 16),
- registers.io.out_b(31, 16)
- )
- }
-
- is(3.U) {
- value_1 := Cat(
- registers.io.out_b(7, 0),
- memory.io.read_value_1(23, 0)
- )
- value_2 := Cat(
- memory.io.read_value_2(31, 24),
- registers.io.out_b(31, 8)
- )
+ is("b010".U) { // SW
+ switch(byte_offset) {
+ is(0.U) { value_1 := registers.io.out_b }
+ is(1.U) {
+ value_1 := Cat(registers.io.out_b(23, 0), memory.io.read_value_1(7, 0))
+ value_2 := Cat(memory.io.read_value_2(31, 8), registers.io.out_b(31, 24))
+ }
+ is(2.U) {
+ value_1 := Cat(registers.io.out_b(15, 0), memory.io.read_value_1(15, 0))
+ value_2 := Cat(memory.io.read_value_2(31, 16), registers.io.out_b(31, 16))
+ }
+ is(3.U) {
+ value_1 := Cat(registers.io.out_b(7, 0), memory.io.read_value_1(23, 0))
+ value_2 := Cat(memory.io.read_value_2(31, 24), registers.io.out_b(31, 8))
+ }
+ }
}
}
-
- memory.io.write_1 := true.B
- memory.io.address_1 := address / 4.U
memory.io.write_value_1 := value_1
-
- memory.io.write_2 := true.B
- memory.io.address_2 := address / 4.U + 1.U
memory.io.write_value_2 := value_2
- program_pointer := program_pointer + 4.U
-
- printf("[SW]\n")
}
}
+
+
}
}
}