Anatoliy Chigirinskiy 1 gadu atpakaļ
vecāks
revīzija
c192bd20eb

+ 28 - 5
src/src/InterfaceArbiter/InterfaceArbiter.v

@@ -77,6 +77,7 @@ module InterfaceArbiter
 	reg ssRegRR;
 	
 	reg spiMode;
+	reg qSpiDirectMode;
 	
 	wire ssPos;
 	reg ssPosR;
@@ -84,10 +85,10 @@ module InterfaceArbiter
 	reg dataValReg;
 	
 	reg [OUTWORDWIDTH/4-1:0] ssCnt;
-	reg [16:0] wordsCnt;
+	reg [15:0] wordsCnt;
 	// wire [OUTWORDWIDTH/4-1:0] ssCntRstThresh = (spiMode) ? QSPIWORDWIDTH-1:SSPIWORDWIDTH-1;
 	
-	reg [16:0] wordsNum;
+	reg [15:0] wordsNum;
 	
 	reg [1:0] nextState;
 	reg [1:0] currState;
@@ -277,14 +278,36 @@ module InterfaceArbiter
 			end
 		end
 	end
-	
+
+	always @(posedge Sck_i or posedge Rst_i) begin 
+		if (Rst_i) begin 
+			qSpiDirectMode <= 1'b0;
+		end
+		else begin 
+			if (currState == IDLE) begin 
+				if (ssCnt == 2) begin 
+					if (captRegSspi[1:0] == 2'b11) begin 
+						qSpiDirectMode <= 1'b1; 
+					end 
+					else begin 
+						qSpiDirectMode <= 1'b0; 
+					end
+				end
+			end
+		end
+	end
+
 	always @(posedge Clk_i) begin
 		if (!Rst_i) begin
 			if (currState == IDLE) begin
 				if (!spiMode) begin
-					wordsNum <= dataRegSSpi[17:1];
+					wordsNum <= dataRegSSpi[16:1];
 				end else begin
-					wordsNum <= dataRegQSpi[21:19]+dataRegQSpi[17:16]+dataRegQSpi[15:12]+dataRegQSpi[10:9]+dataRegQSpi[7:6]+dataRegQSpi[4:3]+dataRegQSpi[2]+dataRegQSpi[1];
+					if (!qSpiDirectMode) begin
+						wordsNum <= dataRegQSpi[21:19]+dataRegQSpi[17:16]+dataRegQSpi[15:12]+dataRegQSpi[10:9]+dataRegQSpi[7:6]+dataRegQSpi[4:3]+dataRegQSpi[2]+dataRegQSpi[1];
+					end else begin
+						wordsNum <= dataRegQSpi[16:1];
+					end
 				end 
 			end
 		end else begin

+ 27 - 3
src/src/PacketAnalyzer1Mosi/PacketAnalyzer1Mosi.v

@@ -34,6 +34,7 @@ module PacketAnalyzer1Mosi (
 	input BusyMosi4_i,
 
 	output reg FlagDirectLmx_o,
+	output reg FlagQSpiDirect_o,
 	output reg FlagDirectDds_o,
 	output reg FlagDirectPot_o,
 	output reg FlagDirectDac_o,
@@ -53,6 +54,7 @@ module PacketAnalyzer1Mosi (
 //==========================================
 reg [4:0] devId;
 reg [16:0] cntData;
+reg directQspi;
 
 //==========================================
 // Wires
@@ -80,6 +82,24 @@ localparam DEV_ID_SERVICE_INFO	= 5'd10;
 //==========================================================================//
 //									CODING									//
 //==========================================================================//
+always @(posedge Clk_i) begin 
+	if (Rst_i || BusyMosi4_i) begin 
+		directQspi <= 1'b0;
+	end
+	else begin 
+		if (ValDataFromSpi_i) begin 
+			if (cntData == 0) begin 
+				if (DataFromSpi_i[23:22] == 2'b11) begin 
+					directQspi <= 1'b1;
+				end
+				else begin 
+					directQspi <= 1'b0;
+				end
+			end
+		end
+	end
+end
+
 always @(posedge Clk_i) begin
 	if(Rst_i || BusyMosi4_i) begin
 		devId 	<= 5'b0;
@@ -87,9 +107,9 @@ always @(posedge Clk_i) begin
 	end 
 	else if (ValDataFromSpi_i) begin
 		if (cntData == 0) begin 
-			if (DataFromSpi_i[23] == 0) begin
-				cntData <= DataFromSpi_i[17:1];
-				devId 	<= DataFromSpi_i[22:18];
+			if (DataFromSpi_i[22] == 1'b1) begin
+				cntData <= DataFromSpi_i[16:1];
+				devId 	<= DataFromSpi_i[21:17];
 			end
 			else begin
 				cntData <= 5'b0;
@@ -118,11 +138,15 @@ always @(posedge Clk_i) begin
 		FlagDirectTemp_o 	<= 1'b0;
 		FlagDirectGpio2_o 	<= 1'b0;
 		FlagDirectServInfo_o <= 1'b0;
+		FlagQSpiDirect_o <= 1'b0;
 	end
 	else if (cntData != 0) begin
 		case (devId)
 			DEV_ID_LMX : begin
 				FlagDirectLmx_o <= 1'b1;
+				if (directQspi) begin
+					FlagQSpiDirect_o <= 1'b1;
+				end
 			end
 			DEV_ID_DDS : begin
 				FlagDirectDds_o <= 1'b1;

+ 1 - 1
src/src/PacketAnalyzer4Mosi/PacketAnalyzer4Mosi.v

@@ -126,7 +126,7 @@ always @(posedge Clk_i) begin
 		ValWordNum_o <= 1'b0;
 	end
 	else if (ValDataFromSpi_i) begin
-		if ((dataSpiReg == 0) && (DataFromSpi_i[23] == 1'b1)) begin
+		if ((dataSpiReg == 0) && (DataFromSpi_i[23:22] == 2'b10)) begin
 			dataSpiReg[22:1] <= DataFromSpi_i[22:1];
 			LmxWordNum_o <= DataFromSpi_i[15:12];
 			DdsWordNum_o <= DataFromSpi_i[21:19];

+ 24 - 1
src/src/Top/TopSbTmsg.v

@@ -77,6 +77,11 @@ module TopSbTmsg
 	output reg CsLmx94_o,
 	output reg ClkLmx94_o,
 	output reg DataLmx94_o,
+	output reg Mosi1Lmx94_io,
+	output reg Mosi2Lmx94_o,
+	output reg Mosi3Lmx94_o,
+	output reg CsFlashLmx94_o,
+	output reg RstLmx94_o,
 
 	output reg CsAd9912Fpga_o,
 	output reg ClkAd9912Fpga_o,
@@ -197,6 +202,8 @@ localparam [11:0] FIRMWARE_VER	= 12'h1;
 
 	wire [23:0] servInfo;
 
+	wire flagQSpiDirect;
+
 //================================================================================
 //  ASSIGNMENTS
 //================================================================================
@@ -238,7 +245,12 @@ always @(*) begin
 	end
 	else begin 
 		if (flagDirectLmx) begin 
-			misoReg = MisoLdLmx_i;
+			if (flagQSpiDirect) begin 
+				misoReg = 1'bz;
+			end
+			else begin 
+				misoReg = MisoLdLmx_i;
+			end
 		end
 		else if (flagDirectDds) begin 
 			misoReg = MisoDds_i;
@@ -269,11 +281,21 @@ always @(*) begin
 		CsLmx94_o 	= Ss_i;
 		ClkLmx94_o 	= Sck_i;
 		DataLmx94_o = Mosi0_i;
+		Mosi1Lmx94_io = Mosi1_io;
+		Mosi2Lmx94_o = Mosi2_i;
+		Mosi3Lmx94_o = Mosi3_i;
+		CsFlashLmx94_o = 1'b0;
+		RstLmx94_o = Rst_i;
 	end
 	else begin
 		CsLmx94_o 	= lmxCsSpiM;
 		ClkLmx94_o 	= lmxClkSpiM;
 		DataLmx94_o = lmxMosiSpiM;
+		Mosi1Lmx94_io = 1'b0;
+		Mosi2Lmx94_o = 1'b0;
+		Mosi3Lmx94_o = 1'b0;
+		CsFlashLmx94_o = 1'b1;
+		RstLmx94_o = 1'b0;
 	end
 	if (flagDirectDds) begin	//DDS
 		CsAd9912Fpga_o 		= Ss_i;
@@ -424,6 +446,7 @@ PacketAnalyzer1Mosi	PacketAnalyzer1Mosi
 	.BusyMosi4_i			(busyMosi4),
 	
 	.FlagDirectLmx_o		(flagDirectLmx),
+	.FlagQSpiDirect_o		(flagQSpiDirect),
 	.FlagDirectDds_o		(flagDirectDds),
 	.FlagDirectPot_o		(flagDirectPot),
 	.FlagDirectDac_o		(flagDirectDac),

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

@@ -101,27 +101,29 @@ localparam [4:0]  DeviceIdGpio1 = 5'h7;
 localparam [4:0]  DeviceIdTemp = 5'h8;
 localparam [4:0]  DeviceIdGpio2 = 5'h9;
 
-localparam [16:0] Gpio1InitWordNum = 17'd1;
-localparam [16:0] Gpio2InitWordNum = 17'd1;
-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] 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 [15:0] Gpio1InitWordNum = 16'd1;
+localparam [15:0] Gpio2InitWordNum = 16'd1;
+localparam [15:0] PotWordInitNum = 16'd1;
+localparam [15:0] DacWordInitNum = 16'd1;
+localparam [15:0] AttWordInitNum = 16'd1;
+localparam [15:0] ShRegWordInitNum = 16'd1;
+localparam [15:0] Lmx2594InitWordNum = 16'd13;
+localparam [15:0] DDSInitWordNum = 16'd7;
+localparam [15:0] MaxInitWordNum = 16'd6;
+localparam [15:0] TempSensWordNum = 16'd1;
+
+localparam [23:0] InitGpio1Header       = {2'b01, DeviceIdGpio1, Gpio1InitWordNum, 1'h1};
+localparam [23:0] InitGpio2Header       = {2'b01, DeviceIdGpio2,Gpio2InitWordNum,1'h1 };
+localparam [23:0] TempSensHeader        = {2'b01, DeviceIdTemp, TempSensWordNum, 1'h1};
+localparam [23:0] InitLMX2594Header     = {2'b01, DeviceIdLmx2594, Lmx2594InitWordNum, 1'h1};
+localparam [23:0] InitDDSHeader         = {2'b01, DeviceIdDDS, DDSInitWordNum, 1'h1};
+localparam [23:0] InitMAX2870Header     = {2'b01, DeviceIdMax2870, MaxInitWordNum, 1'h1};
+localparam [23:0] InitPotHeader         = {2'b01, DeviceIdPot, PotWordInitNum, 1'h1};
+localparam [23:0] InitDacHeader         = {2'b01, DeviceIdDac, DacWordInitNum, 1'h1};
+localparam [23:0] InitAttHeader         = {2'b01, DeviceIdAtt, AttWordInitNum, 1'h1};
+localparam [23:0] InitShRegHeader       = {2'b01, DeviceIdShReg, ShRegWordInitNum, 1'h1};
+
+localparam [23:0] QSpiDirectHeader = {2'b11, DeviceIdLmx2594, 16'd26, 1'h1};
 
 localparam [3:0]  LMXWordNum = 4'd14;
 localparam [2:0]  DDSWordNum = 3'd4;
@@ -178,7 +180,7 @@ assign MisoLdLmx_i = 1'b1;
 assign emptyFlagTx = (trCnt > 71) ? 1'b1 : 1'b0;
 assign QSPITotalWordNum = LMXWordNum + DDSWordNum + POTWordNum + DACWordNum + ATTWordNum + ShRegWordNum + MaxWordNum + GPIOWordNum; 
 
-assign currClk = (modeSel) ? Clk60 : Clk10;
+assign currClk = (modeSel) ? Clk10 : Clk10;
 
 //***********************************************
 //	           CLOCK GENERATION
@@ -355,13 +357,13 @@ always_comb begin
                 SPIdata = InitMAX2870Header;
             end
             else if (trCnt > 36 && trCnt < 43) begin 
-                SPIdata = 32'haaaaaaaa;
+                SPIdata = 32'h55555555;
             end
             else if (trCnt == 43) begin 
                 SPIdata = InitGpio2Header;
             end
             else if (trCnt == 45) begin 
-                SPIdata = AllDevQSPIHeader;
+                SPIdata = QSpiDirectHeader;
             end
             else if (trCnt == 46) begin 
                 SPIdata = 7'h55;
@@ -370,7 +372,7 @@ always_comb begin
                 SPIdata = AllDevQSPIHeader;
             end
             else begin
-                SPIdata = 24'haaaaaa;
+                SPIdata = 24'h555555;
             end
         end
     end