ソースを参照

Merge branch 'dev' into Mikhail/feature_MuxSpi

Mihail Zaytsev 1 年間 前
コミット
c0a1140efb
2 ファイル変更76 行追加35 行削除
  1. 4 2
      src/src/Top/TopSbTmsg.v
  2. 72 33
      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 RfLd_o,
+	output AnyFlag_o,
 
 	//GPIO
 	output RfSw1_o,
@@ -210,10 +211,11 @@ assign CtrlAmSw3_o 			= gpio1CtrlData[2];
 assign RfSw2_o 				= gpio1CtrlData[1];
 assign RfSw1_o 				= gpio1CtrlData[0];
 
-assign anyFlag = flagDirectTemp | flagDirectMax | flagDirectDds | flagDirectLmx | flagDirectGpio2;
+assign anyFlag = flagDirectTemp | flagDirectMax | flagDirectDds | flagDirectLmx | flagDirectGpio2;//Debug-only
 
 assign RfLd_o = MisoLdLmx_i && MisoLdMax2870_i;
-assign Miso1_io = misoReg;
+assign Mosi1_io = misoReg;
+assign AnyFlag_o = anyFlag;//Debug-only
 
 //================================================================================
 //  CODING

+ 72 - 33
src/src/Top/TopSbTmsgTb.sv

@@ -1,6 +1,6 @@
-`timescale 1ns/1ps
+`timescale 1ns/1ns
 
-module TopSbTmsgTb;
+module TopSbTmsgTb(inout Mosi1_io);
    parameter CLK_PERIOD = 8.13; // Clock period in ns
 
     // Inputs
@@ -28,12 +28,12 @@ module TopSbTmsgTb;
     // Outputs
     wire Mosi0_o;
     wire Mosi1_o;
-    wire Mosi1_io;
     wire Mosi2_o;
     wire Mosi3_o;
     wire Sck_o;
     wire Ss_o;
     wire Val_o;
+    wire anyFlag;
 
     wire valR;
     wire valQ;
@@ -47,6 +47,8 @@ module TopSbTmsgTb;
     wire locked;
     wire rstInit;
 
+    logic mosi1Reg;
+
     logic [16:0] trCnt;
     logic [4:0] trCntSync;
 
@@ -98,15 +100,26 @@ localparam [4:0]  DeviceIdGpio2 = 5'h9;
 
 localparam [16:0] Gpio1InitWordNum = 17'd1;
 localparam [16:0] Gpio2InitWordNum = 17'd1;
-localparam [16:0] Lmx2594InitWordNum = 17'd113;
-localparam [16:0] DDSInitWordNum = 17'd37;
+localparam [16:0] PotWordInitNum = 17'd1;
+localparam [16:0] DacWordInitNum = 17'd1;
+localparam [16:0] AttWordInitNum = 17'd1;
+localparam [16:0] ShRegWordInitNum = 17'd1;
+localparam [16:0] Lmx2594InitWordNum = 17'd13;
+localparam [16:0] DDSInitWordNum = 17'd7;
 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] InitDDSHeader         = {1'h0, DeviceIdDDS, DDSInitWordNum, 1'h1};
 localparam [23:0] InitMAX2870Header     = {1'h0, DeviceIdMax2870, MaxInitWordNum, 1'h1};
+localparam [23:0] InitPotHeader         = {1'h0, DeviceIdPot, PotWordInitNum, 1'h1};
+localparam [23:0] InitDacHeader         = {1'h0, DeviceIdDac, DacWordInitNum, 1'h1};
+localparam [23:0] InitAttHeader         = {1'h0, DeviceIdAtt, AttWordInitNum, 1'h1};
+localparam [23:0] InitShRegHeader       = {1'h0, DeviceIdShReg, ShRegWordInitNum, 1'h1};
+
 localparam [3:0]  LMXWordNum = 4'd14;
 localparam [1:0]  DDSWordNum = 2'd3;
 localparam        POTWordNum = 1'd1;
@@ -125,9 +138,10 @@ assign Val_o = (modeSel) ? valQ : valR;
 assign Sck_o = (modeSel) ? SckQ : SckR;
 assign Ss_o = (modeSel) ? SsQ : SsR;
 assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
+assign Mosi1_io = (anyFlag) ? 1'bz : Mosi1_o;
 assign MisoLdLmx_i = 1'b1;
 
-assign emptyFlagTx = (trCnt > 187) ? 1'b1 : 1'b0;
+assign emptyFlagTx = (trCnt > 69) ? 1'b1 : 1'b0;
 assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
 
 //***********************************************
@@ -169,7 +183,7 @@ initial begin
       #(CLK_PERIOD*10) Rst_i = 0;
       #(300000-60) rstForFPGA = 1;
       #(CLK_PERIOD*74) rstForFPGA = 0;
-      #(20) Start_i = 1; // Start SPI transaction
+      #(165000) Start_i = 1; // Start SPI transaction
     
   end
 //***********************************************
@@ -185,13 +199,24 @@ always_ff @(posedge Clk10) begin
     end
 end
 
+always_comb begin 
+    if (Rst_i) begin 
+        mosi1Reg = 0;
+    end
+    else begin 
+        mosi1Reg = Mosi1_io;
+    end
+end
+
+
+
 genvar i;
 always_comb begin 
     if (Rst_i) begin 
         WidthSel_i = 2'd0;
     end
     else begin 
-        if (trCnt > 152 && trCnt < 159) begin 
+        if (trCnt > 36 && trCnt < 43) begin 
             WidthSel_i = 2'd3;
         end
         else begin 
@@ -205,7 +230,7 @@ always_comb begin
         modeSel = 0;
     end
     else begin 
-        if (trCnt == 159) begin 
+        if (trCnt == 45) begin 
             modeSel = 1;
         end
     end
@@ -243,45 +268,49 @@ always_comb begin
     else begin 
         // if (!rstInit && locked) begin
             if (trCnt == 0) begin 
-                SPIdata = InitGpio2Header;
+                SPIdata = InitGpio1Header;
             end
             else if (trCnt == 2) begin 
-                SPIdata = InitGpio2Header;
+                SPIdata = InitGpio1Header;
+            end
+            else if (trCnt == 4) begin 
+                SPIdata = TempSensHeader;
             end
-            else if (trCnt == 4) begin
+            else if (trCnt == 6) begin
                 SPIdata = InitLMX2594Header;
             end
             // else if (trCnt > 0 && trCnt < 114) begin 
             //     SPIdata = pkt.data;
             // end
-            else if (trCnt == 118) begin 
+            else if (trCnt == 20) begin 
                 SPIdata = InitDDSHeader;
             end
-            else if (trCnt == 156) begin 
+            else if (trCnt == 28) begin 
+                SPIdata = InitPotHeader;
+            end
+            else if (trCnt == 30) begin 
+                SPIdata = InitDacHeader;
+            end
+            else if (trCnt == 32) begin 
+                SPIdata = InitAttHeader;
+            end
+            else if (trCnt == 34) begin 
+                SPIdata = InitShRegHeader;
+            end
+            else if (trCnt == 36) begin 
                 SPIdata = InitMAX2870Header;
             end
-            else if (trCnt > 156 && trCnt < 163) begin 
-                // if (trCnt % 2 == 0) begin 
-                //     SPIdata = 32'haaaaaaaa;
-                // end
-                // else begin 
-                //     SPIdata = 32'h55555555;
-                // end
+            else if (trCnt > 36 && trCnt < 43) begin 
                 SPIdata = 32'haaaaaaaa;
-                // SPIdata = pkt.data32;
             end
-            else if (trCnt == 163) begin 
+            else if (trCnt == 43) begin 
+                SPIdata = InitGpio2Header;
+            end
+            else if (trCnt == 45) begin 
                 SPIdata = AllDevQSPIHeader;
             end
             else begin
-                // if (trCnt % 2 == 0) begin 
-                //     SPIdata = 24'haaaaaa;
-                // end
-                // else begin 
-                //     SPIdata = 24'h555555;
-                // end
                 SPIdata = 24'haaaaaa;
-                // SPIdata = pkt.data;
             end
         end
     end
@@ -334,6 +363,13 @@ always_comb begin
         .Ss_o(SsQ),
         .Val_o(valQ)
     );
+    
+    ExtI2cSlaveEmul ExtI2cSlaveEmul_inst (
+        .scl (i2cScl),
+        .sda (i2cSda)
+    );
+
+    pullup p2(i2cSda); // pullup sda line
 
     TopSbTmsg TopSbTmsg_inst (
         .Clk_i(Clk24),
@@ -342,8 +378,11 @@ always_comb begin
         .Ss_i(Ss_o),
         .MisoLdLmx_i(1'b1),
         .MisoLdMax2870_i(1'b1),
+        .I2cScl_o(i2cScl),
+        .I2cSda_io(i2cSda),
+        .AnyFlag_o(anyFlag),
         .Mosi0_i(Mosi0_o),
-        .Mosi1_io(Mosi1_o),
+        .Mosi1_io(Mosi1_io),
         .Mosi2_i(Mosi2_o),
         .Mosi3_i(Mosi3_o)
     );