Jelajahi Sumber

Скорректирована длительность сигнала DdsSyncFpga.

Anatoliy Chigirinskiy 1 tahun lalu
induk
melakukan
07e4c050aa

+ 14 - 5
src/src/Top/TopSbTmsg.v

@@ -179,6 +179,11 @@ module TopSbTmsg
 	wire maxClkSpiM;
 	wire maxMosiSpiM;
 
+	wire [3:0] lmxWordNum;
+	wire [2:0] ddsWordNum;
+	wire valWordNum;
+	
+
 	reg misoReg;
 
 //================================================================================
@@ -360,6 +365,10 @@ PacketAnalyzer4Mosi PacketAnalyzer4Mosi
 
 	.BusyMosi1_i			(busyMosi1),
 
+	.LmxWordNum_o			(lmxWordNum),
+	.DdsWordNum_o			(ddsWordNum),
+	.ValWordNum_o			(valWordNum),
+
 	.ValLmxDataToFifo_o		(valLmxDataToFifo),
 	.ValDdsDataToFifo_o		(valDdsDataToFifo),
 	.ValPotDataToFifo_o		(valPotDataToFifo),
@@ -407,8 +416,8 @@ LmxWrapper #(
 	.Rst_i				(Rst_i),
 	.Data_i				(spiData),
 	.Val_i				(valLmxDataToFifo),
-	.LmxWordNum_i		(),
-	.LmxWordNumVal_i	(),	
+	.LmxWordNum_i		(lmxWordNum),
+	.LmxWordNumVal_i	(valWordNum),	
 	.PllVtuneCtrl_o		(PllVtuneCtrl_o),
 	.Ss_o				(lmxCsSpiM),
 	.Sck_o				(lmxClkSpiM),
@@ -424,11 +433,11 @@ DDSWrapper #(
 	.WrClk_i			(gclk100),
 	.RdClk_i			(clk50),
 	.Rst_i				(Rst_i),
-	.DdsWordNum_i		(),
-	.DdsWordNumVal_i	()
+	.DdsWordNum_i		(ddsWordNum),
+	.DdsWordNumVal_i	(valWordNum),
 	.Data_i				(spiData),
 	.Val_i				(valDdsDataToFifo),
-	.DdsSyncCtrlFpga_o	(DdsSyncFpga_o),
+	.DdsSyncFpga_o	(DdsSyncFpga_o),
 	.Ss_o				(ddsCsSpiM),
 	.Sck_o				(ddsClkSpiM),
 	.Mosi_o				(ddsMosiSpiM)

+ 19 - 6
src/src/WrapFifoChain/DDSWrapper.v

@@ -36,6 +36,11 @@ module DDSWrapper #(
     output Mosi_o
 
 );
+//==========================================================================//
+//									LOCALPARAMS									//
+//==========================================================================//
+localparam STAGES = 2;
+localparam WIDTH = 1;
 //================================================================================
 //	                                REG/WIRE
 //================================================================================    
@@ -49,8 +54,8 @@ wire ddsFifoFull;
 wire ddsFifoEmpty;
 
 reg ssR;
-reg [2:0] ddsWordNumReg; 
-
+reg ssReg;
+reg [2:0] ddsWordNumReg;
 //==========================================================================//
 //									CODING									//
 //==========================================================================//
@@ -63,13 +68,17 @@ always @(posedge WrClk_i) begin
 	end
 end
 
+always @(posedge RdClk_i) begin 
+	ssReg <= Ss_o;
+end
+
 always @(posedge WrClk_i) begin
 	if (Rst_i) begin 
 		ddsWordNumReg <= 3'h0;
 	end
 	else begin 
 		if (DdsWordNumVal_i) begin 
-			ddsWordNumReg <= DdsWordNum_i;
+			ddsWordNumReg <= (DdsWordNum_i + (DdsWordNum_i>>1)+ (DdsWordNum_i>>2))>>2;
 		end
 		else begin 
 			if (Ss_o && !ssR) begin 
@@ -79,22 +88,26 @@ always @(posedge WrClk_i) begin
 	end
 end
 
-always @(posedge WrClk_i) begin 
+always @(posedge RdClk_i) begin 
 	if (Rst_i) begin 
 		DdsSyncFpga_o <= 1'b0;
 	end
 	else begin 
-		if ((!Ss_o && ssR) && ddsWordNumReg != 0 ) begin 
+		if ((!Ss_o && ssReg) && (ddsWordNumReg != 0)) begin 
 			DdsSyncFpga_o <= 1'b0;
 		end
 		else begin 
-			if (ddsWordNumReg == 3'h1 && (Ss_o && !ssR)) begin 
+			if (ddsWordNumReg == 3'h1 && (Ss_o && !ssReg)) begin 
 				DdsSyncFpga_o <= 1'b1;
 			end
+			else begin 
+				DdsSyncFpga_o <= 1'b0;
+			end
 		end
 	end
 end 
 
+
 FifoCtrl #(
 	.IN_WIDTH		(IN_WIDTH),
 	.WR_NUM			(WR_NUM),

+ 7 - 5
src/src/WrapFifoChain/LmxWrapper.v

@@ -50,7 +50,7 @@ wire lmxFifoFull;
 wire lmxFifoEmpty;
 
 reg ssR;
-reg [2:0] lmxWordNumReg; 
+reg [3:0] lmxWordNumReg; 
 //==========================================================================//
 //									CODING									//
 //==========================================================================//
@@ -73,7 +73,7 @@ always @(posedge WrClk_i) begin
 		end
 		else begin 
 			if (Ss_o && !ssR) begin 
-				lmxWordNumReg <= LmxWordNum_i-1;
+				lmxWordNumReg <= lmxWordNumReg-1;
 			end
 		end
 	end
@@ -84,11 +84,13 @@ always @(posedge WrClk_i) begin
 		PllVtuneCtrl_o <=1'b0;
 	end
 	else begin 
-		if (lmxWordNumReg != 0) begin 
+		if ((!Ss_o && ssR) && (lmxWordNumReg != 0) ) begin 
 			PllVtuneCtrl_o <= 1'b0;
 		end
-		else begin 
-			PllVtuneCtrl_o <= 1'b1;
+		else begin
+			if (lmxWordNumReg == 0) begin  
+				PllVtuneCtrl_o <= 1'b1;
+			end
 		end
 	end
 end