diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v
index e5af073..fbaaa5c 100644
--- a/verilog/rtl/caravel.v
+++ b/verilog/rtl/caravel.v
@@ -344,6 +344,8 @@
 		.la_output(la_output_core),
 		.la_oen(la_oen),
 		// User Project IO Control
+		.mprj_pwrgood(mprj_pwrgood),
+		.mprj2_pwrgood(mprj2_pwrgood),
 		.mprj_io_loader_resetn(mprj_io_loader_resetn),
 		.mprj_io_loader_clock(mprj_io_loader_clock),
 		.mprj_io_loader_data(mprj_io_loader_data),
@@ -389,6 +391,8 @@
 	wire [3:0]  mprj_sel_o_user;
 	wire [31:0] mprj_adr_o_user;
 	wire [31:0] mprj_dat_o_user;
+	wire	    mprj_pwrgood;
+	wire	    mprj2_pwrgood;
 
 	mgmt_protect mgmt_buffers (
 		.vccd(vccd),
@@ -417,7 +421,9 @@
 		.mprj_sel_o_user(mprj_sel_o_user),
 		.mprj_adr_o_user(mprj_adr_o_user),
 		.mprj_dat_o_user(mprj_dat_o_user),
-		.la_data_in_mprj(la_data_in_mprj)
+		.la_data_in_mprj(la_data_in_mprj),
+		.user1_powergood(mprj_pwrgood),
+		.user2_powergood(mprj2_pwrgood)
 	);
 
 	
diff --git a/verilog/rtl/counter_timer.v b/verilog/rtl/counter_timer.v
index 9e25281..f569182 100755
--- a/verilog/rtl/counter_timer.v
+++ b/verilog/rtl/counter_timer.v
@@ -8,6 +8,7 @@
 ) (
     input wb_clk_i,
     input wb_rst_i,
+    input strobe_in,
     input [31:0] wb_adr_i,
     input [31:0] wb_dat_i,
     input [3:0] wb_sel_i,
@@ -17,6 +18,7 @@
 
     output wb_ack_o,
     output [31:0] wb_dat_o,
+    output strobe_out,
     output irq
 );
     wire [31:0] counter_timer_reg_cfg_do;
@@ -48,6 +50,7 @@
     counter_timer counter_timer_inst (
         .resetn(resetn),
         .clkin(wb_clk_i),
+	.strobe_in(strobe_in),
         .reg_val_we(reg_val_we),
         .reg_val_di(mem_wdata),
         .reg_val_do(counter_timer_reg_val_do),
@@ -57,6 +60,7 @@
         .reg_dat_we(reg_dat_we),
         .reg_dat_di(mem_wdata),
         .reg_dat_do(counter_timer_reg_dat_do),
+	.strobe_out(strobe_out),
 	.irq_out(irq)
    );
 
@@ -65,6 +69,7 @@
 module counter_timer (
     input resetn,
     input clkin,
+    input strobe_in,
 
     input  [3:0]  reg_val_we,
     input  [31:0] reg_val_di,
@@ -77,22 +82,25 @@
     input  [3:0]  reg_dat_we,
     input  [31:0] reg_dat_di,
     output [31:0] reg_dat_do,
+    output	  strobe_out,
     output	  irq_out
 );
 
 reg [31:0] value_cur;
 reg [31:0] value_reset;
-reg	   irq_out;
+reg	   strobe_out;
+wire	   irq_out;
 
 reg enable;	// Enable (start) the counter/timer
 reg lastenable;	// Previous state of enable (catch rising/falling edge)
 reg oneshot;	// Set oneshot (1) mode or continuous (0) mode
 reg updown;	// Count up (1) or down (0)
 reg irq_ena;	// Enable interrupt on timeout
+reg chain;	// Chain to a secondary timer
 
 // Configuration register
 
-assign reg_cfg_do = {28'd0, irq_ena, updown, oneshot, enable};
+assign reg_cfg_do = {27'd0, irq_ena, chain, updown, oneshot, enable};
 
 always @(posedge clkin or negedge resetn) begin
     if (resetn == 1'b0) begin
@@ -100,6 +108,7 @@
 	lastenable <= 1'b0;
 	oneshot <= 1'b0;
 	updown <= 1'b0;
+	chain <= 1'b0;
 	irq_ena <= 1'b0;
     end else begin
 	lastenable <= enable;
@@ -107,7 +116,8 @@
 	    enable <= reg_cfg_di[0];
 	    oneshot <= reg_cfg_di[1];
 	    updown <= reg_cfg_di[2];
-	    irq_ena <= reg_cfg_di[3];
+	    chain <= reg_cfg_di[3];
+	    irq_ena <= reg_cfg_di[4];
 	end
     end
 end
@@ -131,10 +141,12 @@
 
 // Counter/timer current value register and timer implementation
 
+assign irq_out = (irq_ena) ? strobe_out : 1'b0;
+
 always @(posedge clkin or negedge resetn) begin
     if (resetn == 1'b0) begin
 	value_cur <= 32'd0;	
-	irq_out <= 1'b0;
+	strobe_out <= 1'b0;
     end else begin
 	if (reg_dat_we != 4'b0000) begin
 	    if (reg_dat_we[3] == 1'b1) value_cur[31:24] <= reg_dat_di[31:24];
@@ -149,10 +161,12 @@
 		    if (oneshot != 1'b1) begin
 			value_cur <= 32'd0;
 		    end
-		    irq_out <= irq_ena;
+		    strobe_out <= 1'b1;
 		end else begin
-		    value_cur <= value_cur + 1;	// count up
-		    irq_out <= 1'b0;
+		    if ((chain == 1'b0) || ((chain == 1'b1) && (strobe_in == 1'b1))) begin
+			value_cur <= value_cur + 1;	// count up
+		    	strobe_out <= 1'b0;
+		    end
 		end
 	    end else begin
 		if (lastenable == 1'b0) begin
@@ -161,14 +175,16 @@
 		    if (oneshot != 1'b1) begin
 			value_cur <= value_reset;
 		    end
-		    irq_out <= irq_ena;
+		    strobe_out <= 1'b1;
 		end else begin
-		    value_cur <= value_cur - 1;	// count down
-		    irq_out <= 1'b0;
+		    if ((chain == 1'b0) || ((chain == 1'b1) && (strobe_in == 1'b1))) begin
+		    	value_cur <= value_cur - 1;	// count down
+		    	strobe_out <= 1'b0;
+		    end
 		end
 	    end
 	end else begin
-	    irq_out <= 1'b0;
+	    strobe_out <= 1'b0;
 	end
     end
 end
diff --git a/verilog/rtl/mgmt_core.v b/verilog/rtl/mgmt_core.v
index db8d599..4e99ee9 100644
--- a/verilog/rtl/mgmt_core.v
+++ b/verilog/rtl/mgmt_core.v
@@ -45,6 +45,8 @@
 	// User Project Control Signals
 	input [MPRJ_IO_PADS-1:0] mgmt_in_data,
 	output [MPRJ_IO_PADS-1:0] mgmt_out_data,
+	input mprj_pwrgood,
+	input mprj2_pwrgood,
 	output mprj_io_loader_resetn,
 	output mprj_io_loader_clock,
 	output mprj_io_loader_data,
@@ -123,6 +125,11 @@
 	// flash_sck = mgmt_out_data[9]      (output)	(user area flash)
 	// flash_io0 = mgmt_in/out_data[10]  (input)	(user area flash)
 	// flash_io1 = mgmt_in/out_data[11]  (output)	(user area flash)
+   	// irq2_pin  = mgmt_in_data[12]      (input)
+    	// trap_mon  = mgmt_in_data[13]      (output)
+    	// clk1_mon  = mgmt_in_data[14]      (output)
+    	// clk2_mon  = mgmt_in_data[15]      (output)
+
 
 	// OEB lines for [0] and [1] are the only ones connected directly to
 	// the pad.  All others have OEB controlled by the configuration bit
@@ -179,11 +186,15 @@
 		.pass_thru_mgmt_sdo(pass_thru_mgmt_sdo),
 		// SPI master->slave direct connection
 		.hk_connect(hk_connect),
+		// Secondary clock (for monitoring)
+		.user_clk(user_clk),
 		// Logic Analyzer
 		.la_input(la_input),
 		.la_output(la_output),
 		.la_oen(la_oen),
 		// User Project I/O Configuration
+		.mprj_pwrgood(mprj_pwrgood),
+		.mprj2_pwrgood(mprj2_pwrgood),
 		.mprj_io_loader_resetn(mprj_io_loader_resetn),
 		.mprj_io_loader_clock(mprj_io_loader_clock),
 		.mprj_io_loader_data(mprj_io_loader_data),
diff --git a/verilog/rtl/mgmt_protect.v b/verilog/rtl/mgmt_protect.v
index 8865ee4..df32f81 100644
--- a/verilog/rtl/mgmt_protect.v
+++ b/verilog/rtl/mgmt_protect.v
@@ -18,6 +18,8 @@
     inout	  vssd,
     inout	  vccd1,
     inout	  vssd1,
+    inout	  vccd2,
+    inout	  vssd2,
 
     input 	  caravel_clk,
     input 	  caravel_clk2,
@@ -40,12 +42,17 @@
     output [3:0]  mprj_sel_o_user,
     output [31:0] mprj_adr_o_user,
     output [31:0] mprj_dat_o_user,
-    output [127:0] la_data_in_mprj
+    output [127:0] la_data_in_mprj,
+    output	  user1_powergood,
+    output	  user2_powergood
 );
 
-	wire [73:0] mprj_logic1;
+	wire [74:0] mprj_logic1;
+	wire mprj2_logic1;
+	wire user1_powergood;
+	wire user2_powergood;
 
-        sky130_fd_sc_hd__conb_1 mprj_logic_high [73:0] (
+        sky130_fd_sc_hd__conb_1 mprj_logic_high [74:0] (
                 .VPWR(vccd1),
                 .VGND(vssd1),
                 .VPB(vccd1),
@@ -54,6 +61,16 @@
                 .LO()
         );
 
+        sky130_fd_sc_hd__conb_1 mprj2_logic_high (
+                .VPWR(vccd2),
+                .VGND(vssd2),
+                .VPB(vccd2),
+                .VNB(vssd2),
+                .HI(mprj2_logic1),
+                .LO()
+        );
+
+
         sky130_fd_sc_hd__einvp_8 mprj_rstn_buf (
                 .VPWR(vccd),
                 .VGND(vssd),
@@ -160,4 +177,26 @@
                 .TE(~la_oen)
         );
 
+	/* The conb cell output is a resistive connection directly to	*/
+	/* the power supply, so when returning the user1_powergood	*/
+	/* signal, make sure that it is buffered properly.		*/
+
+        sky130_fd_sc_hd__buf_8 mprj_pwrgood (
+                .VPWR(vccd),
+                .VGND(vssd),
+                .VPB(vccd),
+                .VNB(vssd),
+                .A(mprj_logic1[74]),
+                .X(user1_powergood)
+	);
+
+        sky130_fd_sc_hd__buf_8 mprj2_pwrgood (
+                .VPWR(vccd),
+                .VGND(vssd),
+                .VPB(vccd),
+                .VNB(vssd),
+                .A(mprj_logic2),
+                .X(user2_powergood)
+	);
+
 endmodule
diff --git a/verilog/rtl/mgmt_soc.v b/verilog/rtl/mgmt_soc.v
index 6778da0..6f2173f 100644
--- a/verilog/rtl/mgmt_soc.v
+++ b/verilog/rtl/mgmt_soc.v
@@ -70,6 +70,8 @@
     output [127:0] la_oen,              // LA output enable (active low) 
 
     // User Project I/O Configuration (serial load)
+    input  mprj_pwrgood,
+    input  mprj2_pwrgood,
     output mprj_io_loader_resetn,
     output mprj_io_loader_clock,
     output mprj_io_loader_data,
@@ -120,6 +122,8 @@
 
     // SPI master->slave direct link
     output hk_connect,
+    // User clock monitoring
+    input  user_clk,
 
     // WB MI A (User project)
     input mprj_ack_i,
@@ -197,9 +201,10 @@
     parameter LA_ENA_3  = 8'h1c;
     
     // System Control Registers
-    parameter PLL_OUT       = 8'h00;
-    parameter TRAP_OUT      = 8'h04;
-    parameter IRQ7_SRC      = 8'h08;
+    parameter PWRGOOD       = 8'h00;
+    parameter CLK_OUT       = 8'h04;
+    parameter TRAP_OUT      = 8'h08;
+    parameter IRQ_SRC       = 8'h0c;
 
     // Wishbone Interconnect 
     localparam ADR_WIDTH = 32;
@@ -254,6 +259,10 @@
     // flash_sck = mgmt_out_data[9]      (output)   (user area flash)
     // flash_io0 = mgmt_in/out_data[10]  (input)    (user area flash)
     // flash_io1 = mgmt_in/out_data[11]  (output)   (user area flash)
+    // irq2_pin	 = mgmt_in_data[12]	 (input)
+    // trap_mon	 = mgmt_in_data[13]	 (output)
+    // clk1_mon	 = mgmt_in_data[14]	 (output)
+    // clk2_mon	 = mgmt_in_data[15]	 (output)
 
     // OEB lines for [0] and [1] are the only ones connected directly to
     // the pad.  All others have OEB controlled by the configuration bit
@@ -265,20 +274,11 @@
     wire gpio_outenb;    	// Intermediate GPIO out enable (bar)
     wire gpio_out;      	// Intermediate GPIO output
 
-    wire gpio;		// GPIO output data
-    wire gpio_pu;	// GPIO pull-up enable
-    wire gpio_pd;	// GPIO pull-down enable
-    wire gpio_oeb;	// GPIO output enable (sense negative)
-
-    wire pll_output_dest;	// PLL clock output destination
     wire trap_output_dest; 	// Trap signal output destination
+    wire clk1_output_dest; 	// Core clock1 signal output destination
+    wire clk2_output_dest; 	// Core clock2 signal output destination
     wire irq_7_inputsrc;	// IRQ 7 source
-
-    // GPIO assignments
-    assign gpio_out = (trap_output_dest == 1'b1) ? trap : gpio;
-    assign gpio_outenb = (trap_output_dest == 1'b0) ? gpio_oeb : 1'b0;
-    assign gpio_pullup = (trap_output_dest == 1'b0) ? gpio_pu : 1'b0;
-    assign gpio_pulldown = (trap_output_dest == 1'b0) ? gpio_pd : 1'b0;
+    wire irq_8_inputsrc;	// IRQ 8 source
 
     // Convert GPIO signals to sky130_fd_io pad signals
     convert_gpio_sigs convert_gpio_bit (
@@ -295,6 +295,7 @@
 
     reg [31:0] irq;
     wire irq_7;
+    wire irq_8;
     wire irq_stall;
     wire irq_uart;
     wire irq_spi_master;
@@ -303,6 +304,7 @@
 
     assign irq_stall = 0;
     assign irq_7 = (irq_7_inputsrc == 1'b1) ? mgmt_in_data[7] : 1'b0;
+    assign irq_8 = (irq_8_inputsrc == 1'b1) ? mgmt_in_data[12] : 1'b0;
 
     always @* begin
         irq = 0;
@@ -491,6 +493,8 @@
 	.irq(irq_spi_master)
     );
 
+    wire strobe_counter_timer0, strobe_counter_timer1;
+
     // Wishbone Counter-timer 0
     wire counter_timer0_stb_i;
     wire counter_timer0_ack_o;
@@ -505,6 +509,7 @@
         // Wishbone Interface
         .wb_clk_i(wb_clk_i),
         .wb_rst_i(wb_rst_i),
+	.strobe_in(strobe_counter_timer1),
 
         .wb_adr_i(cpu_adr_o),      
         .wb_dat_i(cpu_dat_o),
@@ -515,6 +520,7 @@
         .wb_stb_i(counter_timer0_stb_i),
         .wb_ack_o(counter_timer0_ack_o),
         .wb_dat_o(counter_timer0_dat_o),
+	.strobe_out(strobe_counter_timer0),
 	.irq(irq_counter_timer0)
     );
 
@@ -532,6 +538,7 @@
         // Wishbone Interface
         .wb_clk_i(wb_clk_i),
         .wb_rst_i(wb_rst_i),
+	.strobe_in(strobe_counter_timer0),
 
         .wb_adr_i(cpu_adr_o),      
         .wb_dat_i(cpu_dat_o),
@@ -542,6 +549,7 @@
         .wb_stb_i(counter_timer1_stb_i),
         .wb_ack_o(counter_timer1_ack_o),
         .wb_dat_o(counter_timer1_dat_o),
+	.strobe_out(strobe_counter_timer1),
 	.irq(irq_counter_timer1)
     );
 
@@ -568,10 +576,10 @@
         .wb_ack_o(gpio_ack_o),
         .wb_dat_o(gpio_dat_o),
         .gpio_in_pad(gpio_in_pad),
-        .gpio(gpio),
-        .gpio_oeb(gpio_oeb),
-        .gpio_pu(gpio_pu),
-        .gpio_pd(gpio_pd)
+        .gpio(gpio_out),
+        .gpio_oeb(gpio_outenb),
+        .gpio_pu(gpio_pullup),
+        .gpio_pd(gpio_pulldown)
     );
 
     // Wishbone Slave System Control Register
@@ -581,9 +589,10 @@
     
     sysctrl_wb #(
         .BASE_ADR(SYS_BASE_ADR),
-        .PLL_OUT(PLL_OUT),
+        .PWRGOOD(PWRGOOD),
+        .CLK_OUT(CLK_OUT),
         .TRAP_OUT(TRAP_OUT),
-        .IRQ7_SRC(IRQ7_SRC)
+        .IRQ_SRC(IRQ_SRC)
     ) sysctrl (
         .wb_clk_i(wb_clk_i),
         .wb_rst_i(wb_rst_i),
@@ -598,9 +607,13 @@
         .wb_ack_o(sys_ack_o),
         .wb_dat_o(sys_dat_o),
 
-        .pll_output_dest(pll_output_dest),
+	.usr1_pwrgood(mprj_pwrgood),
+	.usr2_pwrgood(mprj2_pwrgood),
         .trap_output_dest(trap_output_dest),
-        .irq_7_inputsrc(irq_7_inputsrc)
+        .clk1_output_dest(clk1_output_dest),
+        .clk2_output_dest(clk2_output_dest),
+        .irq_7_inputsrc(irq_7_inputsrc),
+        .irq_8_inputsrc(irq_8_inputsrc)
     );
 
     // Logic Analyzer 
@@ -646,7 +659,14 @@
     // mprj GPIO-as-output from applying data when that function
     // is active
 
-    assign mgmt_out_data[MPRJ_IO_PADS-1:7] = mgmt_out_pre[MPRJ_IO_PADS-1:7];
+    assign mgmt_out_data[MPRJ_IO_PADS-1:16] = mgmt_out_pre[MPRJ_IO_PADS-1:16];
+
+    // Routing of output monitors (PLL, trap, clk1, clk2)
+    assign mgmt_out_data[15] = clk2_output_dest ? user_clk : mgmt_out_pre[15];
+    assign mgmt_out_data[14] = clk1_output_dest ? clk : mgmt_out_pre[14];
+    assign mgmt_out_data[13] = trap_output_dest ? trap : mgmt_out_pre[13];
+
+    assign mgmt_out_data[12:7] = mgmt_out_pre[12:7];
     assign mgmt_out_data[6] = uart_enabled ? ser_tx : mgmt_out_pre[6];
     assign mgmt_out_data[5:0] = mgmt_out_pre[5:0];
 
diff --git a/verilog/rtl/sysctrl.v b/verilog/rtl/sysctrl.v
index 86ec1e5..acdb045 100644
--- a/verilog/rtl/sysctrl.v
+++ b/verilog/rtl/sysctrl.v
@@ -1,8 +1,9 @@
 module sysctrl_wb #(
-    parameter BASE_ADR      = 32'h2F00_0000,
-    parameter PLL_OUT       = 8'h00,
-    parameter TRAP_OUT      = 8'h04,
-    parameter IRQ7_SRC      = 8'h08
+    parameter BASE_ADR     = 32'h2F00_0000,
+    parameter PWRGOOD	   = 8'h00,
+    parameter CLK_OUT      = 8'h04,
+    parameter TRAP_OUT     = 8'h08,
+    parameter IRQ_SRC      = 8'h0c
 ) (
     input wb_clk_i,
     input wb_rst_i,
@@ -17,9 +18,13 @@
     output [31:0] wb_dat_o,
     output wb_ack_o,
     
-    output pll_output_dest,
+    input  usr1_pwrgood,
+    input  usr2_pwrgood,
+    output clk1_output_dest,
+    output clk2_output_dest,
     output trap_output_dest,
-    output irq_7_inputsrc
+    output irq_7_inputsrc,
+    output irq_8_inputsrc
 
 );
 
@@ -36,9 +41,10 @@
     
     sysctrl #(
         .BASE_ADR(BASE_ADR),
-        .PLL_OUT(PLL_OUT),
+        .PWRGOOD(PWRGOOD),
+        .CLK_OUT(CLK_OUT),
         .TRAP_OUT(TRAP_OUT),
-        .IRQ7_SRC(IRQ7_SRC)
+        .IRQ_SRC(IRQ_SRC)
     ) sysctrl (
         .clk(wb_clk_i),
         .resetn(resetn),
@@ -50,9 +56,12 @@
         .iomem_rdata(wb_dat_o),
         .iomem_ready(ready),
         
-        .pll_output_dest(pll_output_dest),
+	.usr1_pwrgood(usr1_pwrgood),
+	.usr2_pwrgood(usr2_pwrgood),
+        .clk1_output_dest(clk1_output_dest),
+        .clk2_output_dest(clk2_output_dest),
         .trap_output_dest(trap_output_dest), 
-    
+        .irq_8_inputsrc(irq_8_inputsrc),
         .irq_7_inputsrc(irq_7_inputsrc)
     );
 
@@ -60,9 +69,10 @@
 
 module sysctrl #(
     parameter BASE_ADR = 32'h2300_0000,
-    parameter PLL_OUT       = 8'h00,
-    parameter TRAP_OUT      = 8'h04,
-    parameter IRQ7_SRC      = 8'h08
+    parameter PWRGOOD	   = 8'h00,
+    parameter CLK_OUT      = 8'h04,
+    parameter TRAP_OUT     = 8'h08,
+    parameter IRQ_SRC      = 8'h0c
 ) (
     input clk,
     input resetn,
@@ -74,45 +84,63 @@
     output reg [31:0] iomem_rdata,
     output reg iomem_ready,
 
-    output pll_output_dest,
+    input  usr1_pwrgood,
+    input  usr2_pwrgood,
+    output clk1_output_dest,
+    output clk2_output_dest,
     output trap_output_dest,
-    output irq_7_inputsrc
+    output irq_7_inputsrc,
+    output irq_8_inputsrc
 ); 
 
-    reg pll_output_dest;
+    reg clk1_output_dest;
+    reg clk2_output_dest;
     reg trap_output_dest;
     reg irq_7_inputsrc;
+    reg irq_8_inputsrc;
 
-    assign pll_out_sel  = (iomem_addr[7:0] == PLL_OUT);
+    wire usr1_pwrgood;
+    wire usr2_pwrgood;
+
+    assign pwrgood_sel  = (iomem_addr[7:0] == PWRGOOD);
+    assign clk_out_sel  = (iomem_addr[7:0] == CLK_OUT);
     assign trap_out_sel = (iomem_addr[7:0] == TRAP_OUT);
-
-    assign irq7_sel  = (iomem_addr[7:0] == IRQ7_SRC);
+    assign irq_sel  = (iomem_addr[7:0] == IRQ_SRC);
 
     always @(posedge clk) begin
         if (!resetn) begin
-            pll_output_dest <= 0;
+            clk1_output_dest <= 0;
+            clk2_output_dest <= 0;
             trap_output_dest <= 0;
             irq_7_inputsrc <= 0;
+            irq_8_inputsrc <= 0;
         end else begin
             iomem_ready <= 0;
             if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
                 iomem_ready <= 1'b 1;
                 
-                if (pll_out_sel) begin
-                    iomem_rdata <= {31'd0, pll_output_dest};
-                    if (iomem_wstrb[0])
-                        pll_output_dest <= iomem_wdata[0];
+                if (pwrgood_sel) begin
+                    iomem_rdata <= {30'd0, usr2_pwrgood, usr1_pwrgood};
+		    // These are read-only bits;  no write behavior on wstrb.
+
+                end else if (clk_out_sel) begin
+                    iomem_rdata <= {30'd0, clk2_output_dest, clk1_output_dest};
+                    if (iomem_wstrb[0]) begin
+                        clk1_output_dest <= iomem_wdata[0];
+                        clk2_output_dest <= iomem_wdata[1];
+		    end
 
                 end else if (trap_out_sel) begin
                     iomem_rdata <= {31'd0, trap_output_dest};
                     if (iomem_wstrb[0]) 
                         trap_output_dest <= iomem_wdata[0];
 
-                end else if (irq7_sel) begin
-                    iomem_rdata <= {31'd0, irq_7_inputsrc};
-                    if (iomem_wstrb[0])
+                end else if (irq_sel) begin
+                    iomem_rdata <= {30'd0, irq_8_inputsrc, irq_7_inputsrc};
+                    if (iomem_wstrb[0]) begin
                         irq_7_inputsrc <= iomem_wdata[0];
-
+                        irq_8_inputsrc <= iomem_wdata[1];
+		    end
                 end
             end
         end
