Modified code to let SPI master control the housekeeping SPI through
a configuration bit setting in the SPI master. Revised the "sysctrl"
testbench to work with the SPI master controlling the housekeeping
SPI.
diff --git a/verilog/rtl/simple_spi_master.v b/verilog/rtl/simple_spi_master.v
index a2a33b6..447f0f1 100755
--- a/verilog/rtl/simple_spi_master.v
+++ b/verilog/rtl/simple_spi_master.v
@@ -46,6 +46,9 @@
// irqena:
// 0 = disable interrupt
// 1 = enable interrupt
+// hkconn:
+// 0 = housekeeping SPI disconnected
+// 1 = housekeeping SPI connected (when SPI master enabled)
// prescaler: count (in master clock cycles) of 1/2 SCK cycle.
//
// reg_dat_we:
@@ -78,6 +81,7 @@
output wb_ack_o,
output [31:0] wb_dat_o,
+ output hk_connect, // Connect to housekeeping SPI
input sdi, // SPI input
output csb, // SPI chip select
output sck, // SPI clock
@@ -118,6 +122,7 @@
.reg_dat_do(simple_spi_master_reg_dat_do),
.reg_dat_wait(reg_dat_wait),
+ .hk_connect(hk_connect), // Attach to housekeeping SPI slave
.sdi(sdi), // SPI input
.csb(csb), // SPI chip select
.sck(sck), // SPI clock
@@ -142,6 +147,7 @@
output irq_out,
output err_out,
+ output hk_connect, // Connect to housekeeping SPI
input sdi, // SPI input
output csb, // SPI chip select
output sck, // SPI clock
@@ -171,12 +177,14 @@
reg stream;
reg mode;
reg enable;
+ reg hkconn;
wire csb;
wire irq_out;
wire sck;
wire sdo;
wire sdoenb;
+ wire hk_connect;
// Define behavior for inverted SCK and inverted CSB
assign csb = (enable == 1'b0) ? 1'bz : (invcsb) ? ~icsb : icsb;
@@ -188,9 +196,11 @@
assign sdo = (enable == 1'b0) ? 1'bz : isdo;
assign irq_out = irqena & done;
+ assign hk_connect = (enable == 1'b1) ? hkconn : 1'b0;
// Read configuration and data registers
- assign reg_cfg_do = {17'd0, irqena, enable, stream, mode, invsck, invcsb, mlb, prescaler};
+ assign reg_cfg_do = {16'd0, hkconn, irqena, enable, stream, mode,
+ invsck, invcsb, mlb, prescaler};
assign reg_dat_wait = ~done;
assign reg_dat_do = done ? rreg : ~0;
@@ -205,6 +215,7 @@
irqena <= 1'b0;
stream <= 1'b0;
mode <= 1'b0;
+ hkconn <= 1'b0;
end else begin
if (reg_cfg_we[0]) prescaler <= reg_cfg_di[7:0];
if (reg_cfg_we[1]) begin
@@ -215,6 +226,7 @@
stream <= reg_cfg_di[12];
enable <= reg_cfg_di[13];
irqena <= reg_cfg_di[14];
+ hkconn <= reg_cfg_di[15];
end //reg_cfg_we[1]
end //resetn
end //always