Bläddra i källkod

Промежуточные изменения

Anatoliy Chigirinskiy 1 år sedan
förälder
incheckning
3b0e0867b3
2 ändrade filer med 31 tillägg och 13 borttagningar
  1. 4 2
      src/src/Top/TopSbTmsg.v
  2. 27 11
      src/src/Top/TopSbTmsgTb.sv

+ 4 - 2
src/src/Top/TopSbTmsg.v

@@ -51,6 +51,7 @@ module TopSbTmsg
 	output [DEVNUM-1:0] Mosi_o,
 	output [DEVNUM-1:0] Mosi_o,
 	
 	
 	output RfLd_o,
 	output RfLd_o,
+	output AnyFlag_o,
 
 
 	//GPIO
 	//GPIO
 	output RfSw1_o,
 	output RfSw1_o,
@@ -154,7 +155,8 @@ assign RfSw1_o 				= gpio1CtrlData[0];
 assign anyFlag = flagDirectTemp | flagDirectMax | flagDirectDds | flagDirectLmx | flagDirectGpio2;
 assign anyFlag = flagDirectTemp | flagDirectMax | flagDirectDds | flagDirectLmx | flagDirectGpio2;
 
 
 assign RfLd_o = MisoLdLmx_i && MisoLdMax2870_i;
 assign RfLd_o = MisoLdLmx_i && MisoLdMax2870_i;
-assign Miso1_io = misoReg;
+assign Miso1_io = (anyFlag) ? misoReg : 1'bz;
+assign AnyFlag_o = anyFlag;
 
 
 //================================================================================
 //================================================================================
 //  CODING
 //  CODING
@@ -179,7 +181,7 @@ always @(*) begin
 			misoReg = misoGpio2;
 			misoReg = misoGpio2;
 		end
 		end
 		else begin 
 		else begin 
-			misoReg = 1'bz;
+			misoReg = 1'b0;
 		end
 		end
 	end
 	end
 end
 end

+ 27 - 11
src/src/Top/TopSbTmsgTb.sv

@@ -1,6 +1,6 @@
 `timescale 1ns/1ps
 `timescale 1ns/1ps
 
 
-module TopSbTmsgTb;
+module TopSbTmsgTb(inout Mosi1_io);
    parameter CLK_PERIOD = 8.13; // Clock period in ns
    parameter CLK_PERIOD = 8.13; // Clock period in ns
 
 
     // Inputs
     // Inputs
@@ -28,12 +28,12 @@ module TopSbTmsgTb;
     // Outputs
     // Outputs
     wire Mosi0_o;
     wire Mosi0_o;
     wire Mosi1_o;
     wire Mosi1_o;
-    wire Mosi1_io;
     wire Mosi2_o;
     wire Mosi2_o;
     wire Mosi3_o;
     wire Mosi3_o;
     wire Sck_o;
     wire Sck_o;
     wire Ss_o;
     wire Ss_o;
     wire Val_o;
     wire Val_o;
+    wire anyFlag;
 
 
     wire valR;
     wire valR;
     wire valQ;
     wire valQ;
@@ -101,9 +101,11 @@ localparam [16:0] Gpio2InitWordNum = 17'd1;
 localparam [16:0] Lmx2594InitWordNum = 17'd113;
 localparam [16:0] Lmx2594InitWordNum = 17'd113;
 localparam [16:0] DDSInitWordNum = 17'd37;
 localparam [16:0] DDSInitWordNum = 17'd37;
 localparam [16:0] MaxInitWordNum = 17'd6;
 localparam [16:0] MaxInitWordNum = 17'd6;
+localparam [16:0] TempSensWordNum = 17'd1;
 
 
-localparam [23:0] InitGpio1Header        = {1'h0, DeviceIdGpio1, Gpio1InitWordNum, 1'h1};
-localparam [23:0] InitGpio2Header        = {1'b0, DeviceIdGpio2,Gpio2InitWordNum,1'h1 };
+localparam [23:0] InitGpio1Header       = {1'h0, DeviceIdGpio1, Gpio1InitWordNum, 1'h1};
+localparam [23:0] InitGpio2Header       = {1'b0, DeviceIdGpio2,Gpio2InitWordNum,1'h1 };
+localparam [23:0] TempSensHeader        = {1'h0, DeviceIdTemp, TempSensWordNum, 1'h1};
 localparam [23:0] InitLMX2594Header     = {1'h0, DeviceIdLmx2594, Lmx2594InitWordNum, 1'h1};
 localparam [23:0] InitLMX2594Header     = {1'h0, DeviceIdLmx2594, Lmx2594InitWordNum, 1'h1};
 localparam [23:0] InitDDSHeader         = {1'h0, DeviceIdDDS, DDSInitWordNum, 1'h1};
 localparam [23:0] InitDDSHeader         = {1'h0, DeviceIdDDS, DDSInitWordNum, 1'h1};
 localparam [23:0] InitMAX2870Header     = {1'h0, DeviceIdMax2870, MaxInitWordNum, 1'h1};
 localparam [23:0] InitMAX2870Header     = {1'h0, DeviceIdMax2870, MaxInitWordNum, 1'h1};
@@ -125,9 +127,10 @@ assign Val_o = (modeSel) ? valQ : valR;
 assign Sck_o = (modeSel) ? SckQ : SckR;
 assign Sck_o = (modeSel) ? SckQ : SckR;
 assign Ss_o = (modeSel) ? SsQ : SsR;
 assign Ss_o = (modeSel) ? SsQ : SsR;
 assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
 assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
+assign Mosi1_io = (anyFlag) ? 1'bz : Mosi1_o;
 assign MisoLdLmx_i = 1'b1;
 assign MisoLdLmx_i = 1'b1;
 
 
-assign emptyFlagTx = (trCnt > 187) ? 1'b1 : 1'b0;
+assign emptyFlagTx = (trCnt > 189) ? 1'b1 : 1'b0;
 assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
 assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
 
 
 //***********************************************
 //***********************************************
@@ -248,19 +251,22 @@ always_comb begin
             else if (trCnt == 2) begin 
             else if (trCnt == 2) begin 
                 SPIdata = InitGpio2Header;
                 SPIdata = InitGpio2Header;
             end
             end
-            else if (trCnt == 4) begin
+            else if (trCnt == 4) begin 
+                SPIdata = TempSensHeader;
+            end
+            else if (trCnt == 6) begin
                 SPIdata = InitLMX2594Header;
                 SPIdata = InitLMX2594Header;
             end
             end
             // else if (trCnt > 0 && trCnt < 114) begin 
             // else if (trCnt > 0 && trCnt < 114) begin 
             //     SPIdata = pkt.data;
             //     SPIdata = pkt.data;
             // end
             // end
-            else if (trCnt == 118) begin 
+            else if (trCnt == 120) begin 
                 SPIdata = InitDDSHeader;
                 SPIdata = InitDDSHeader;
             end
             end
-            else if (trCnt == 156) begin 
+            else if (trCnt == 158) begin 
                 SPIdata = InitMAX2870Header;
                 SPIdata = InitMAX2870Header;
             end
             end
-            else if (trCnt > 156 && trCnt < 163) begin 
+            else if (trCnt > 158 && trCnt < 165) begin 
                 // if (trCnt % 2 == 0) begin 
                 // if (trCnt % 2 == 0) begin 
                 //     SPIdata = 32'haaaaaaaa;
                 //     SPIdata = 32'haaaaaaaa;
                 // end
                 // end
@@ -270,7 +276,7 @@ always_comb begin
                 SPIdata = 32'haaaaaaaa;
                 SPIdata = 32'haaaaaaaa;
                 // SPIdata = pkt.data32;
                 // SPIdata = pkt.data32;
             end
             end
-            else if (trCnt == 163) begin 
+            else if (trCnt == 165) begin 
                 SPIdata = AllDevQSPIHeader;
                 SPIdata = AllDevQSPIHeader;
             end
             end
             else begin
             else begin
@@ -334,6 +340,13 @@ always_comb begin
         .Ss_o(SsQ),
         .Ss_o(SsQ),
         .Val_o(valQ)
         .Val_o(valQ)
     );
     );
+    
+    ExtI2cSlaveEmul ExtI2cSlaveEmul_inst (
+        .scl (i2cScl),
+        .sda (i2cSda)
+    );
+
+    pullup p2(i2cSda); // pullup sda line
 
 
     TopSbTmsg TopSbTmsg_inst (
     TopSbTmsg TopSbTmsg_inst (
         .Clk_i(Clk24),
         .Clk_i(Clk24),
@@ -342,8 +355,11 @@ always_comb begin
         .Ss_i(Ss_o),
         .Ss_i(Ss_o),
         .MisoLdLmx_i(1'b1),
         .MisoLdLmx_i(1'b1),
         .MisoLdMax2870_i(1'b1),
         .MisoLdMax2870_i(1'b1),
+        .I2cScl_o(i2cScl),
+        .I2cSda_io(i2cSda),
+        .AnyFlag_o(anyFlag),
         .Mosi0_i(Mosi0_o),
         .Mosi0_i(Mosi0_o),
-        .Mosi1_io(Mosi1_o),
+        .Mosi1_io(Mosi1_io),
         .Mosi2_i(Mosi2_o),
         .Mosi2_i(Mosi2_o),
         .Mosi3_i(Mosi3_o)
         .Mosi3_i(Mosi3_o)
     );
     );