diff --git a/library/spi_engine/interfaces/spi_master.xml b/library/spi_engine/interfaces/spi_master.xml
index 525c27cac..b03644e64 100644
--- a/library/spi_engine/interfaces/spi_master.xml
+++ b/library/spi_engine/interfaces/spi_master.xml
@@ -10,4 +10,5 @@
false
1
1
+ SPI Engine physical interface
diff --git a/library/spi_engine/interfaces/spi_master_rtl.xml b/library/spi_engine/interfaces/spi_master_rtl.xml
index 89821262c..3c4063054 100644
--- a/library/spi_engine/interfaces/spi_master_rtl.xml
+++ b/library/spi_engine/interfaces/spi_master_rtl.xml
@@ -6,17 +6,19 @@
interface
spi_master_rtl
1.0
-
SCLK
+ SPI clock
required
1
+ out
required
@@ -27,150 +29,83 @@
SDI
+ Serial data in
- required
- 1
+ optional
in
- 1
+ optional
+ out
+ 0
- SDI_1
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_2
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_3
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_4
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_5
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_6
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
- SDI_7
-
-
- required
- 1
- in
-
-
- 1
-
-
-
-
SDO
+ Serial data out
+ optional
1
+ out
+ optional
1
in
+ 0
SDO_T
+ Serial data out three state controle line
+ optional
1
+ out
+ optional
1
in
+ 0
THREE_WIRE
+ Three wire mode
+ optional
1
+ out
+ optional
1
in
+ 0
CS
+ Chip select
+
+ required
+ out
+
+ required
in
+ 0
diff --git a/library/spi_engine/spi_engine_execution/spi_engine_execution.v b/library/spi_engine/spi_engine_execution/spi_engine_execution.v
index 734421023..258c616d1 100644
--- a/library/spi_engine/spi_engine_execution/spi_engine_execution.v
+++ b/library/spi_engine/spi_engine_execution/spi_engine_execution.v
@@ -70,14 +70,7 @@ module spi_engine_execution #(
output reg sclk,
output reg sdo,
output reg sdo_t,
- input sdi,
- input sdi_1,
- input sdi_2,
- input sdi_3,
- input sdi_4,
- input sdi_5,
- input sdi_6,
- input sdi_7,
+ input [NUM_OF_SDI-1:0] sdi,
output reg [NUM_OF_CS-1:0] cs,
output reg three_wire
);
@@ -146,16 +139,7 @@ reg [7:0] clk_div = DEFAULT_CLK_DIV;
wire sdo_enabled = cmd_d1[8];
wire sdi_enabled = cmd_d1[9];
-// supporting max 8 SDI channel
reg [(DATA_WIDTH-1):0] data_sdo_shift = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_1 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_2 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_3 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_4 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_5 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_6 = 'h0;
-reg [(DATA_WIDTH-1):0] data_sdi_shift_7 = 'h0;
reg [4:0] trigger_rx_d = 5'b0;
@@ -415,48 +399,26 @@ assign trigger_rx_s = (SDI_DELAY == 2'b00) ? trigger_rx_d[1] :
(SDI_DELAY == 2'b10) ? trigger_rx_d[3] :
(SDI_DELAY == 2'b11) ? trigger_rx_d[4] : trigger_rx_d[1];
-always @(posedge clk) begin
- if (inst_d1 == CMD_CHIPSELECT) begin
- data_sdi_shift <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_1 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_2 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_3 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_4 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_5 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_6 <= {DATA_WIDTH{1'b0}};
- data_sdi_shift_7 <= {DATA_WIDTH{1'b0}};
- end else if (trigger_rx_s == 1'b1) begin
- data_sdi_shift <= {data_sdi_shift[(DATA_WIDTH-2):0], sdi};
- data_sdi_shift_1 <= {data_sdi_shift_1[(DATA_WIDTH-2):0], sdi_1};
- data_sdi_shift_2 <= {data_sdi_shift_2[(DATA_WIDTH-2):0], sdi_2};
- data_sdi_shift_3 <= {data_sdi_shift_3[(DATA_WIDTH-2):0], sdi_3};
- data_sdi_shift_4 <= {data_sdi_shift_4[(DATA_WIDTH-2):0], sdi_4};
- data_sdi_shift_5 <= {data_sdi_shift_5[(DATA_WIDTH-2):0], sdi_5};
- data_sdi_shift_6 <= {data_sdi_shift_6[(DATA_WIDTH-2):0], sdi_6};
- data_sdi_shift_7 <= {data_sdi_shift_7[(DATA_WIDTH-2):0], sdi_7};
- end
-end
+// Load the serial data into SDI shift register(s), then link it to the output
+// register of the module
+genvar i;
+generate
+ for (i=0; i 1)"
-adi_set_ports_dependency "sdi_2" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 2)"
-adi_set_ports_dependency "sdi_3" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 3)"
-adi_set_ports_dependency "sdi_4" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 4)"
-adi_set_ports_dependency "sdi_5" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 5)"
-adi_set_ports_dependency "sdi_6" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 6)"
-adi_set_ports_dependency "sdi_7" \
- "(spirit:decode(id('MODELPARAM_VALUE.NUM_OF_SDI')) > 7)"
-
ipx::save_core [ipx::current_core]
diff --git a/projects/ad7134_fmc/zed/system_top.v b/projects/ad7134_fmc/zed/system_top.v
index 85a329ace..9c80bf850 100644
--- a/projects/ad7134_fmc/zed/system_top.v
+++ b/projects/ad7134_fmc/zed/system_top.v
@@ -217,14 +217,7 @@ module system_top (
.spi0_sdo_o (ad713x_spi_sdo),
.ad713x_di_sdo (),
.ad713x_di_sdo_t (),
- .ad713x_di_sdi (ad713x_din[0]),
- .ad713x_di_sdi_1 (ad713x_din[1]),
- .ad713x_di_sdi_2 (ad713x_din[2]),
- .ad713x_di_sdi_3 (ad713x_din[3]),
- .ad713x_di_sdi_4 (ad713x_din[4]),
- .ad713x_di_sdi_5 (ad713x_din[5]),
- .ad713x_di_sdi_6 (ad713x_din[6]),
- .ad713x_di_sdi_7 (ad713x_din[7]),
+ .ad713x_di_sdi (ad713x_din),
.ad713x_di_cs (),
.ad713x_di_sclk (ad713x_dclk),
.ad713x_odr (ad713x_odr),
diff --git a/projects/ad738x_fmc/zed/system_top.v b/projects/ad738x_fmc/zed/system_top.v
index b4afd47a2..4bb5bcd23 100644
--- a/projects/ad738x_fmc/zed/system_top.v
+++ b/projects/ad738x_fmc/zed/system_top.v
@@ -174,8 +174,7 @@ module system_top (
.iic_mux_sda_t (iic_mux_sda_t_s),
.spi_sdo (spi_sdo),
.spi_sdo_t (),
- .spi_sdi (spi_sdia),
- .spi_sdi_1 (spi_sdib),
+ .spi_sdi ({spi_sdib, spi_sdia}),
.spi_cs (spi_cs),
.spi_sclk (spi_sclk),
.otg_vbusoc (otg_vbusoc),