Quellcode durchsuchen

Добавлен инстанс модуля TempRead. Добавлена логика управления двунаправленной линией.

Anatoliy Chigirinskiy vor 1 Jahr
Ursprung
Commit
e861cfddbe
2 geänderte Dateien mit 69 neuen und 16 gelöschten Zeilen
  1. 53 8
      src/src/Top/TopSbTmsg.v
  2. 16 8
      src/src/Top/TopSbTmsgTb.sv

+ 53 - 8
src/src/Top/TopSbTmsg.v

@@ -39,17 +39,19 @@ module TopSbTmsg
 	input Mosi2_i,
 	input Mosi3_i,
 	
-	input Miso1_i,
-	input Miso2_i,
-	input MisoMax2870_i,
+	input MisoLdLmx_i,
+	input MisoDds_i,
+	input MisoLdMax2870_i,
 	
-	output I2CSck_o,
-	inout I2CSda_io,
+	output I2cScl_o,
+	inout I2cSda_io,
 	
 	output [DEVNUM-1:0] Ss_o,
 	output [DEVNUM-1:0] Sck_o,
 	output [DEVNUM-1:0] Mosi_o,
 	
+	output RfLd_o,
+
 	//GPIO
 	output RfSw1_o,
 	output RfSw2_o,
@@ -114,10 +116,16 @@ module TopSbTmsg
 	wire flagDirectShReg;	
 	wire flagDirectMax;	
 	wire flagDirectGpio;	
-	wire flagDirectTemp;	
-	
+	wire flagDirectTemp;
+
+	wire misoTemp;
+	wire anyFlag;
+
+	reg misoReg;	
+
+ //================================================================================
+    //  ASSIGNMENTS
 //================================================================================
-//  ASSIGNMENTS
 assign DdsSaw1Fpga_o 		= gpio1CtrlData[21];
 assign GpioAdRfV2_o 		= gpio1CtrlData[20];
 assign GpioAdRfV1_o 		= gpio1CtrlData[19];
@@ -141,8 +149,35 @@ assign CtrlAmSw3_o 			= gpio1CtrlData[2];
 assign RfSw2_o 				= gpio1CtrlData[1];
 assign RfSw1_o 				= gpio1CtrlData[0];
 
+assign anyFlag = flagDirectTemp | flagDirectGpio | flagDirectMax | flagDirectDds | flagDirectLmx;
+
+assign RfLd_o = MisoLdLmx_i && MisoLdMax2870_i;
+assign Miso1_io = (anyFlag) ? misoReg : 1'bz;
+
 //================================================================================
 //  CODING
+always @(*) begin 
+	if (Rst_i) begin 
+		misoReg = 1'b0;
+	end
+	else begin 
+		if (flagDirectLmx) begin 
+			misoReg = MisoLdLmx_i;
+		end
+		else if (flagDirectDds) begin 
+			misoReg = MisoDds_i;
+		end
+		else if (flagDirectMax) begin 
+			misoReg = MisoLdMax2870_i;
+		end
+		else if (flagDirectTemp) begin 
+			misoReg = misoTemp;
+		end
+		else begin 
+			misoReg = 1'b0;
+		end
+	end
+end
 
 ClkGen ClkGen
 (
@@ -337,6 +372,16 @@ Max2870Wrapper #(
 	.Mosi_o			()
 );
 
+TempRead TempRead (
+	.Clk24Mhz_i				(clk24),
+	.Rst_i					(Rst_i),
+	.ClkSpi_i				(Sck_i),
+	.FlagDirectTempRead_i	(flagDirectTemp),
+	.I2cScl_o				(I2cScl_o),
+	.I2cSda_io				(I2cSda_io),
+	.MisoTemp_o				(misoTemp)
+);
+
 Gpio1Ctrl Gpio1Ctrl
 (
 	.Clk_i					(gclk100),

+ 16 - 8
src/src/Top/TopSbTmsgTb.sv

@@ -93,13 +93,15 @@ localparam [4:0]  DeviceIdShReg = 5'h5;
 localparam [4:0]  DeviceIdMax2870 = 5'h6;
 localparam [4:0]  DeviceIdGPIO = 5'h7;
 
+localparam [16:0] GpioInitWordNum = 17'd1;
 localparam [16:0] Lmx2594InitWordNum = 17'd113;
 localparam [16:0] DDSInitWordNum = 17'd37;
 localparam [16:0] MaxInitWordNum = 17'd6;
 
-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] InitGpioHeader        = {1'h0, DeviceIdGPIO, GpioInitWordNum, 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 [3:0]  LMXWordNum = 4'd14;
 localparam [1:0]  DDSWordNum = 2'd3;
 localparam        POTWordNum = 1'd1;
@@ -119,7 +121,7 @@ assign Sck_o = (modeSel) ? SckQ : SckR;
 assign Ss_o = (modeSel) ? SsQ : SsR;
 assign Mosi0_o = (modeSel) ? mosi0Q : mosi0R;
 
-assign emptyFlagTx = (trCnt > 183) ? 1'b1 : 1'b0;
+assign emptyFlagTx = (trCnt > 187) ? 1'b1 : 1'b0;
 assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
 
 //***********************************************
@@ -235,18 +237,24 @@ always_comb begin
     else begin 
         // if (!rstInit && locked) begin
             if (trCnt == 0) begin 
+                SPIdata = InitGpioHeader;
+            end
+            else if (trCnt == 2) begin 
+                SPIdata = InitGpioHeader;
+            end
+            else if (trCnt == 4) begin
                 SPIdata = InitLMX2594Header;
             end
             // else if (trCnt > 0 && trCnt < 114) begin 
             //     SPIdata = pkt.data;
             // end
-            else if (trCnt == 114) begin 
+            else if (trCnt == 118) begin 
                 SPIdata = InitDDSHeader;
             end
-            else if (trCnt == 152) begin 
+            else if (trCnt == 156) begin 
                 SPIdata = InitMAX2870Header;
             end
-            else if (trCnt > 152 && trCnt < 159) begin 
+            else if (trCnt > 156 && trCnt < 163) begin 
                 // if (trCnt % 2 == 0) begin 
                 //     SPIdata = 32'haaaaaaaa;
                 // end
@@ -256,7 +264,7 @@ always_comb begin
                 SPIdata = 32'haaaaaaaa;
                 // SPIdata = pkt.data32;
             end
-            else if (trCnt == 159) begin 
+            else if (trCnt == 163) begin 
                 SPIdata = AllDevQSPIHeader;
             end
             else begin