Explorar o código

Добавлено вычитывание сервисной информации

Anatoliy Chigirinskiy hai 1 ano
pai
achega
b280856741
Modificáronse 3 ficheiros con 69 adicións e 14 borrados
  1. 2 0
      src/src/Top/TopSbTmsg.v
  2. 30 0
      src/src/Top/TopSbTmsgTb.sv
  3. 37 14
      src/src/WrapFifoChain/LmxWrapper.v

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

@@ -148,9 +148,11 @@ localparam [11:0] FIRMWARE_VER	= 12'h1;
 	wire flagDirectGpio1;
 	wire flagDirectGpio2;	
 	wire flagDirectTemp;
+	wire flagDirectServInfo;
 
 	wire misoTemp;
 	wire misoGpio2;
+	wire misoServInfo;
 	wire anyFlag;
 
 	//Output SpiM wires 

+ 30 - 0
src/src/Top/TopSbTmsgTb.sv

@@ -129,6 +129,36 @@ localparam [1:0]  ShRegWordNum = 2'd1;
 localparam [1:0]  MaxWordNum =   2'd2;
 localparam [1:0]  GPIOWordNum =  2'd1;
 
+//***********************************************
+//	           GPIO 1 REG 
+//***********************************************
+localparam [0:0] RF_SW1 = 1'h0;
+localparam [0:0] RF_SW2 = 1'h0;
+localparam [0:0] CTRL_AM_SW3 = 1'h0;
+localparam [0:0] DDS_SYNC_CTRL_FPGA = 1'h0;
+localparam [0:0] DDS_RESET_FPGA = 1'h0;
+localparam [0:0] DDS_SYNC_FPGA = 1'h0;
+localparam [0:0] SW_CAP4 = 1'h0;
+localparam [0:0] AM_ALC_SW = 1'h0;
+localparam [0:0] SW_CAP3 = 1'h0;
+localparam [0:0] SW_CAP2 = 1'h0;
+localparam [0:0] SW_CAP1 = 1'h0;
+localparam [0:0] AM_ALC_1_FIX = 1'h0;
+localparam [0:0] PLL_VTUNE_CTRL = 1'h0;
+localparam [0:0] PLL_SYNC_CTRL = 1'h0;
+localparam [0:0] PLL_SYNC = 1'h0;
+localparam [0:0] PLL_LOOP_CTRL = 1'h0;
+localparam [0:0] DDS_X2_FPGA = 1'h0;
+localparam [0:0] DDS_SAW2_FPGA = 1'h0;
+localparam [0:0] REF_OFFSET_CTRL_FPGA = 1'h0;
+localparam [0:0] GPIO_ADRF_V1 = 1'h0;
+localparam [0:0] GPIO_ADRF_V2 = 1'h0;
+localparam [0:0] DDS_SAW1_FPGA = 1'h0;
+
+localparam [23:0] GPIO_REG = {DDS_SAW1_FPGA,GPIO_ADRF_V2,GPIO_ADRF_V1,REF_OFFSET_CTRL_FPGA,DDS_SAW2_FPGA,DDS_X2_FPGA,PLL_LOOP_CTRL,PLL_SYNC,PLL_SYNC_CTRL,PLL_VTUNE_CTRL,AM_ALC_1_FIX,SW_CAP1,SW_CAP2,SW_CAP3,AM_ALC_SW,SW_CAP4,DDS_SYNC_FPGA,DDS_RESET_FPGA,DDS_SYNC_CTRL_FPGA,CTRL_AM_SW3,RF_SW2,RF_SW1};
+
+//***********************************************
+
 // localparam [23:0] AllDevQSPIHeader = {1'h1, LMXWordNum, DDSWordNum, POTWordNum, DACWordNum,ATTWordNum, ShRegWordNum,MaxWordNum, GPIOWordNum, 7'h1};
 localparam [23:0] AllDevQSPIHeader = {1'h1, 1'h0,DDSWordNum,1'h0,GPIOWordNum, LMXWordNum,1'h0,MaxWordNum,1'h0,ShRegWordNum,1'h0,POTWordNum,DACWordNum,ATTWordNum,1'h1};
 

+ 37 - 14
src/src/WrapFifoChain/LmxWrapper.v

@@ -49,14 +49,46 @@ wire valRdDataLMX;
 wire busySpiMLmx;
 wire lmxFifoFull;
 wire lmxFifoEmpty;
+wire lmxWordNumValSync;
+
+reg plsToggle;
+reg plsToggleSyncA;
+reg plsToggleSyncB;
 
 reg ssR;
 reg ssReg;
 reg [3:0] lmxWordNumReg; 
 reg [3:0] lmxWordNumRegR;
 //==========================================================================//
+//									ASSIGNMENTS								//
+//==========================================================================//
+assign lmxWordNumValSync = plsToggleSyncB^plsToggleSyncA;
+//==========================================================================//
 //									CODING									//
 //==========================================================================//
+always @(posedge WrClk_i) begin
+	if (Rst_i) begin 
+		plsToggle <= 1'b0;
+	end
+	else if (LmxWordNumVal_i) begin 
+		plsToggle <= ~plsToggle;
+	end
+	else begin 
+		plsToggle <= plsToggle;
+	end
+end
+
+always @(posedge RdClk_i) begin 
+	if (Rst_i) begin 
+		plsToggleSyncA <= 1'b0;
+		plsToggleSyncB <= 1'b0;
+	end
+	else begin 
+		plsToggleSyncA <= plsToggle;
+		plsToggleSyncB <= plsToggleSyncA;
+	end
+end
+
 always @(posedge WrClk_i) begin
 	if (Rst_i) begin 
 		ssR <= 1'b0;
@@ -75,41 +107,32 @@ always @(posedge RdClk_i) begin
 	end
 end
 
-always @(posedge WrClk_i) begin
+always @(posedge RdClk_i) begin
 	if (Rst_i) begin 
 		lmxWordNumReg <= 3'h0;
 	end
 	else begin 
-		if (LmxWordNumVal_i) begin 
+		if (lmxWordNumValSync) begin 
 			lmxWordNumReg <= LmxWordNum_i;
 		end
 		else begin 
-			if (Ss_o && !ssR && lmxWordNumReg != 0) begin 
+			if (Ss_o && !ssReg && lmxWordNumReg != 0) begin 
 				lmxWordNumReg <= lmxWordNumReg-1;
 			end
 		end
 	end
 end
 
-always @(posedge RdClk_i) begin 
-	if (Rst_i) begin 
-		lmxWordNumRegR <= 0;
-	end
-	else begin 
-		lmxWordNumRegR <= lmxWordNumReg;
-	end
-end
-
 always @(posedge RdClk_i) begin 
 	if (Rst_i) begin 
 		PllVtuneCtrl_o <=1'b0;
 	end
 	else begin
 		if (!LmxDirectFlag_i) begin  
-			if ((!Ss_o && ssReg) && (lmxWordNumRegR != 0) ) begin 
+			if ((!Ss_o && ssReg) && (lmxWordNumReg != 0) ) begin 
 				PllVtuneCtrl_o <= 1'b0;
 			end
-			else if (lmxWordNumRegR == 0 ) begin
+			else if (lmxWordNumReg == 0 ) begin
 				PllVtuneCtrl_o <= 1'b1;
 			end
 		end