瀏覽代碼

RegMap and Top changes

Anatoliy Chigirinskiy 2 年之前
父節點
當前提交
f77cb6b547

+ 5 - 9
SRAM/QuadSPIm.v

@@ -5,12 +5,13 @@ module QuadSPIm(
     input Start_i,
     input CPHA_i,
     input [31:0] SPIdata,
+	input SpiDataVal_i,
     input SELST_i,
     input [1:0] WidthSel_i,
-    input [1:0] LAG_i,
-    input [1:0] LEAD_i,
+    input  LAG_i,
+    input  LEAD_i,
     input EndianSel_i,
-    input [1:0] Stop_i,
+    input [5:0] Stop_i,
     input PulsePol_i,
 
 
@@ -232,12 +233,7 @@ end
 
 
 always @(posedge Clk_i) begin
-    if (Rst_i) begin
-        SSr <=1'b0;
-    end
-    else begin 
-        SSr <= Ss;
-    end
+    SSr <= Ss;
 end
 
 

+ 38 - 14
constrs_1/new/S5443_3.xdc

@@ -95,8 +95,12 @@ set_property PACKAGE_PIN H2 [get_ports {Mosi2_o[0]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[0]}]
 set_property PACKAGE_PIN L1  [get_ports {Mosi3_o[0]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[0]}]
-set_property PACKAGE_PIN J2 [get_ports {SpiRst_i[0]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[0]}]
+set_property PACKAGE_PIN J2 [get_ports {SpiRst_o[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[0]}]
+set_property PACKAGE_PIN M13 [get_ports {LD_i[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[0]}]
+
+
 
 #SPI1
 set_property PACKAGE_PIN N2 [get_ports {Sck_o[1]}]
@@ -111,8 +115,11 @@ set_property PACKAGE_PIN N1 [get_ports {Mosi2_o[1]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[1]}]
 set_property PACKAGE_PIN M2 [get_ports {Mosi3_o[1]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[1]}]
-set_property PACKAGE_PIN P2 [get_ports {SpiRst_i[1]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[1]}]
+set_property PACKAGE_PIN P2 [get_ports {SpiRst_o[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[1]}]
+set_property PACKAGE_PIN N11 [get_ports {LD_i[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[1]}]
+
 
 
 #SPI2
@@ -128,8 +135,11 @@ set_property PACKAGE_PIN F2 [get_ports {Mosi2_o[2]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[2]}]
 set_property PACKAGE_PIN G1 [get_ports {Mosi3_o[2]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[2]}]
-set_property PACKAGE_PIN E3 [get_ports {SpiRst_i[2]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[2]}]
+set_property PACKAGE_PIN E3 [get_ports {SpiRst_o[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[2]}]
+set_property PACKAGE_PIN N9 [get_ports {LD_i[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[2]}]
+
 
 #SPI3
 set_property PACKAGE_PIN R10 [get_ports {Sck_o[3]}]
@@ -144,8 +154,11 @@ set_property PACKAGE_PIN R11 [get_ports {Mosi2_o[3]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[3]}]
 set_property PACKAGE_PIN P11 [get_ports {Mosi3_o[3]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[3]}]
-set_property PACKAGE_PIN R9 [get_ports {SpiRst_i[3]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[3]}]
+set_property PACKAGE_PIN R9 [get_ports {SpiRst_o[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[3]}]
+set_property PACKAGE_PIN N13 [get_ports {LD_i[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[3]}]
+
 
 
 
@@ -162,8 +175,11 @@ set_property PACKAGE_PIN M15 [get_ports {Mosi2_o[4]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[4]}]
 set_property PACKAGE_PIN M14 [get_ports {Mosi3_o[4]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[4]}]
-set_property PACKAGE_PIN N15 [get_ports {SpiRst_i[4]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[4]}]
+set_property PACKAGE_PIN N15 [get_ports {SpiRst_o[4]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[4]}]
+set_property PACKAGE_PIN P15 [get_ports {LD_i[4]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[4]}]
+
 
 
 #SPI5
@@ -179,8 +195,10 @@ set_property PACKAGE_PIN N7 [get_ports {Mosi2_o[5]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[5]}]
 set_property PACKAGE_PIN R7 [get_ports {Mosi3_o[5]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[5]}]
-set_property PACKAGE_PIN N6 [get_ports {SpiRst_i[5]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[5]}]
+set_property PACKAGE_PIN N6 [get_ports {SpiRst_o[5]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[5]}]
+set_property PACKAGE_PIN N12 [get_ports {LD_i[5]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[5]}]
 
 
 #SPI6
@@ -196,8 +214,14 @@ set_property PACKAGE_PIN B4 [get_ports {Mosi2_o[6]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi2_o[6]}]
 set_property PACKAGE_PIN A3 [get_ports {Mosi3_o[6]}]
 set_property IOSTANDARD LVCMOS33 [get_ports {Mosi3_o[6]}]
-set_property PACKAGE_PIN A2 [get_ports {SpiRst_i[6]}]
-set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_i[6]}]
+set_property PACKAGE_PIN A2 [get_ports {SpiRst_o[6]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SpiRst_o[6]}]
+set_property PACKAGE_PIN M8 [get_ports {LD_i[6]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {LD_i[6]}]
+
+
+set_property PACKAGE_PIN M7 [get_ports LD_o]
+set_property IOSTANDARD LVCMOS33 [get_ports LD_o]
 
 #==========================================================================
 #	INPUT CLOCKS

文件差異過大導致無法顯示
+ 585 - 0
sources_1/ip/DataFifo/DataFifo.xci


+ 14 - 8
sources_1/ip/clk_wiz_0_1/clk_wiz_0.xci

@@ -99,7 +99,7 @@
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT0_ACTUAL_FREQ">100.00000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_1">0000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_2">0000</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_ACTUAL_FREQ">100.000</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_ACTUAL_FREQ">60.80114</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_DRIVES">BUFG</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_DUTY_CYCLE">50.0</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_MATCHED_ROUTING">false</spirit:configurableElementValue>
@@ -113,12 +113,12 @@
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_2">0000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_ACTUAL_FREQ">100.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_DRIVES">BUFG</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_DUTY_CYCLE">50.000</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_DUTY_CYCLE">50.0</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_MATCHED_ROUTING">false</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_OUT_FREQ">100.000</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_OUT_FREQ">60.80114</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_PHASE">0.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_OUT_FREQ">61.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_PHASE">0.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_SEQUENCE_NUMBER">1</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_USED">0</spirit:configurableElementValue>
@@ -201,7 +201,7 @@
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIN_PORT">din</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVCLK">0000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE1_AUTO">1</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE2_AUTO">1.0</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE2_AUTO">1.639344262295082</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE3_AUTO">1.0</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE4_AUTO">1.0</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIVIDE5_AUTO">1.0</spirit:configurableElementValue>
@@ -421,11 +421,11 @@
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_SEQUENCE_NUMBER">1</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_USED">true</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_DRIVES">BUFG</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_JITTER">0.0</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_JITTER">114.866</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_MATCHED_ROUTING">false</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR">0.0</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR">79.684</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue>
-        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue>
+        <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_OUT_FREQ">61.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_PHASE">0.000</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_SEQUENCE_NUMBER">1</spirit:configurableElementValue>
         <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_USED">false</spirit:configurableElementValue>
@@ -691,10 +691,16 @@
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKIN1_JITTER_PS" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_JITTER" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_PHASE_ERROR" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_JITTER" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_OUT_FREQ" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_USED" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_MULT_F" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKIN1_PERIOD" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT0_DIVIDE_F" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_DIVCLK_DIVIDE" xilinx:valueSource="user"/>
+            <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.NUM_OUT_CLKS" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.PRIM_IN_FREQ" xilinx:valueSource="user"/>
             <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.USE_DYN_RECONFIG" xilinx:valueSource="user"/>
           </xilinx:configElementInfos>

+ 49 - 0
sources_1/new/DataFifo/DataFifoWrapper.v

@@ -0,0 +1,49 @@
+
+module DataFifoWrapper 
+#(
+    parameter	CmdRegWidth	=	32,
+    parameter	AddrRegWidth=	12,
+	
+	parameter	FifoNum	=	7
+)
+(
+    input	WrClk_i,
+	input	RdClk_i,
+    input	Rst_i,
+	input   readEn_i,
+
+	input	ToFifoVal_i,
+	input	[CmdRegWidth-1:0]	ToFifoData_i,
+	
+	output	ToSpiVal_o,
+	output	[CmdRegWidth-1:0]	ToSpiData_o
+);
+//================================================================================
+//	REG/WIRE
+//================================================================================
+	
+//================================================================================
+//	ASSIGNMENTS
+//================================================================================
+	assign	ToSpiVal_o	=	1'b1;
+//================================================================================
+//	LOCALPARAMS
+//================================================================================
+
+//================================================================================
+//	CODING
+//================================================================================
+
+DataFifo	DataFifo
+( 
+	.wr_clk		(WrClk_i), 
+	.rd_clk		(RdClk_i), 
+	.din		(ToFifoData_i), 
+	.wr_en		(!fullFlag && ToFifoVal_i), 
+	.rd_en		(!readEn_i && !emptyFlag), 
+	.dout		(ToSpiData_o), 
+	.full		(fullFlag), 
+	.empty		(emptyFlag)
+);
+
+endmodule

+ 96 - 0
sources_1/new/DataFifo/DataMuxer — копия.v

@@ -0,0 +1,96 @@
+
+module SmcDataMux 
+#(
+    parameter	CmdRegWidth	=	32,
+    parameter	AddrRegWidth=	12,
+	
+	parameter	FifoNum	=	7,
+	
+	parameter	Fifo0WriteAddr	=	12'h0+12'h16,
+	parameter	Fifo1WriteAddr	=	12'h50+12'h16,
+	parameter	Fifo2WriteAddr	=	12'hF0+12'h16,
+	parameter	Fifo3WriteAddr	=	12'h140+12'h16,
+	parameter	Fifo4WriteAddr	=	12'h190+12'h16,
+	parameter	Fifo5WriteAddr	=	12'h1e0+12'h16,
+	parameter	Fifo6WriteAddr	=	12'h230+12'h16
+)
+(
+    input	Clk_i,
+    input	Rst_i,
+
+	input	SmcVal_i,
+	input	[CmdRegWidth-1:0]	SmcData_i,
+    input	[AddrRegWidth-1:0]	SmcAddr_i,
+
+	output	reg	ToRegMapVal_o,
+	output	reg	[CmdRegWidth-1:0]	ToRegMapData_o,
+    output	reg	[AddrRegWidth-1:0]	ToRegMapAddr_o,
+	
+	output	reg	[FifoNum-1:0]	ToFifoVal_o,
+	output	reg	[CmdRegWidth*FifoNum-1:0]	ToFifoData_o
+	
+);
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+//================================================================================
+//	ASSIGNMENTS
+//================================================================================
+
+//================================================================================
+//	LOCALPARAMS
+//================================================================================
+
+//================================================================================
+//	CODING
+//================================================================================
+
+always	@(posedge	Clk_i	or	posedge	Rst_i)	begin
+	if	(Rst_i)	begin
+		ToRegMapVal_o	<=	1'b0;
+		ToRegMapData_o	<=	32'h0;
+		ToRegMapAddr_o	<=	12'h0;
+		
+		ToFifoVal_o		<=	7'h0;
+		ToFifoData_o	<=	32'h0;
+	end	else	begin
+		if	(SmcAddr_i	==	Fifo0WriteAddr||SmcAddr_i==Fifo1WriteAddr||SmcAddr_i==Fifo2WriteAddr||SmcAddr_i==Fifo3WriteAddr||SmcAddr_i==Fifo4WriteAddr||SmcAddr_i==Fifo5WriteAddr||SmcAddr_i==Fifo6WriteAddr)	begin	
+			case(SmcAddr_i)	
+				Fifo0WriteAddr:	begin
+									ToFifoVal_o[0]	<=	SmcVal_i;
+									ToFifoData_o[32*0+:32]	<=	SmcData_i;
+								end
+				Fifo1WriteAddr:	begin
+									ToFifoVal_o[1]	<=	SmcVal_i;
+									ToFifoData_o[32*1-1+:32]	<=	SmcData_i;
+								end
+				Fifo2WriteAddr:	begin
+									ToFifoVal_o[2]	<=	SmcVal_i;
+									ToFifoData_o[32*2-1+:32]	<=	SmcData_i;
+								end
+				Fifo3WriteAddr:	begin
+									ToFifoVal_o[3]	<=	SmcVal_i;
+									ToFifoData_o[32*3-1+:32]	<=	SmcData_i;
+								end
+				Fifo4WriteAddr:	begin
+									ToFifoVal_o[4]	<=	SmcVal_i;
+									ToFifoData_o[32*4-1+:32]	<=	SmcData_i;
+								end
+				Fifo5WriteAddr:	begin
+									ToFifoVal_o[5]	<=	SmcVal_i;
+									ToFifoData_o[32*5-1+:32]	<=	SmcData_i;
+								end
+				Fifo6WriteAddr:	begin
+									ToFifoVal_o[6]	<=	SmcVal_i;
+									ToFifoData_o[32*6-1+:32]	<=	SmcData_i;
+								end
+			endcase
+		end	else	begin
+			ToRegMapVal_o	<=	SmcVal_i;
+			ToRegMapData_o	<=	SmcData_i;
+			ToRegMapAddr_o	<=	SmcAddr_i;
+		end
+	end
+end
+endmodule

+ 96 - 0
sources_1/new/Mux/DataMuxer.v

@@ -0,0 +1,96 @@
+
+module SmcDataMux 
+#(
+    parameter	CmdRegWidth	=	32,
+    parameter	AddrRegWidth=	12,
+	
+	parameter	FifoNum	=	7,
+	
+	parameter	Fifo0WriteAddr	=	12'h0+12'h24,
+	parameter	Fifo1WriteAddr	=	12'h50+12'h24,
+	parameter	Fifo2WriteAddr	=	12'hF0+12'h24,
+	parameter	Fifo3WriteAddr	=	12'h140+12'h24,
+	parameter	Fifo4WriteAddr	=	12'h190+12'h24,
+	parameter	Fifo5WriteAddr	=	12'h1e0+12'h24,
+	parameter	Fifo6WriteAddr	=	12'h230+12'h24
+)
+(
+    input	Clk_i,
+    input	Rst_i,
+
+	input	SmcVal_i,
+	input	[CmdRegWidth-1:0]	SmcData_i,
+    input	[AddrRegWidth-1:0]	SmcAddr_i,
+
+	output	reg	ToRegMapVal_o,
+	output	reg	[CmdRegWidth-1:0]	ToRegMapData_o,
+    output	reg	[AddrRegWidth-1:0]	ToRegMapAddr_o,
+	
+	output	reg	[FifoNum-1:0]	ToFifoVal_o,
+	output	reg	[CmdRegWidth*FifoNum-1:0]	ToFifoData_o
+	
+);
+//================================================================================
+//	REG/WIRE
+//================================================================================
+
+//================================================================================
+//	ASSIGNMENTS
+//================================================================================
+
+//================================================================================
+//	LOCALPARAMS
+//================================================================================
+
+//================================================================================
+//	CODING
+//================================================================================
+
+always	@(posedge	Clk_i	or	posedge	Rst_i)	begin
+	if	(Rst_i)	begin
+		ToRegMapVal_o	<=	1'b0;
+		ToRegMapData_o	<=	32'h0;
+		ToRegMapAddr_o	<=	12'h0;
+		
+		ToFifoVal_o		<=	7'h0;
+		ToFifoData_o	<=	32'h0;
+	end	else	begin
+		if	(SmcAddr_i	==	Fifo0WriteAddr||SmcAddr_i==Fifo1WriteAddr||SmcAddr_i==Fifo2WriteAddr||SmcAddr_i==Fifo3WriteAddr||SmcAddr_i==Fifo4WriteAddr||SmcAddr_i==Fifo5WriteAddr||SmcAddr_i==Fifo6WriteAddr)	begin	
+			case(SmcAddr_i)	
+				Fifo0WriteAddr:	begin
+									ToFifoVal_o[0]	<=	SmcVal_i;
+									ToFifoData_o[32*0+:32]	<=	SmcData_i;
+								end
+				Fifo1WriteAddr:	begin
+									ToFifoVal_o[1]	<=	SmcVal_i;
+									ToFifoData_o[32*1-1+:32]	<=	SmcData_i;
+								end
+				Fifo2WriteAddr:	begin
+									ToFifoVal_o[2]	<=	SmcVal_i;
+									ToFifoData_o[32*2-1+:32]	<=	SmcData_i;
+								end
+				Fifo3WriteAddr:	begin
+									ToFifoVal_o[3]	<=	SmcVal_i;
+									ToFifoData_o[32*3-1+:32]	<=	SmcData_i;
+								end
+				Fifo4WriteAddr:	begin
+									ToFifoVal_o[4]	<=	SmcVal_i;
+									ToFifoData_o[32*4-1+:32]	<=	SmcData_i;
+								end
+				Fifo5WriteAddr:	begin
+									ToFifoVal_o[5]	<=	SmcVal_i;
+									ToFifoData_o[32*5-1+:32]	<=	SmcData_i;
+								end
+				Fifo6WriteAddr:	begin
+									ToFifoVal_o[6]	<=	SmcVal_i;
+									ToFifoData_o[32*6-1+:32]	<=	SmcData_i;
+								end
+			endcase
+		end	else	begin
+			ToRegMapVal_o	<=	SmcVal_i;
+			ToRegMapData_o	<=	SmcData_i;
+			ToRegMapAddr_o	<=	SmcAddr_i;
+		end
+	end
+end
+endmodule

+ 206 - 26
sources_1/new/S5443_3Top.v

@@ -30,12 +30,13 @@ module S5443_3Top #(
     input Clk123_i,
     input [AddrRegWidth-2:0] Addr_i,
     inout [CmdRegWidth/2-1:0] Data_i,
-    input [SpiNum-1:0] SpiRst_i,
+    
     input writeEn_i,
     input readEn_i,
     // input DspRst_i,
     input [1:0] BE_i,
     input outputEn_i,
+    output [SpiNum-1:0] LD_i,
 
     output  Led_o,
    
@@ -44,7 +45,9 @@ module S5443_3Top #(
     output  [SpiNum-1:0] Mosi2_o,
     output  [SpiNum-1:0] Mosi3_o,
     output  [SpiNum-1:0] Ss_o,
-    output  [SpiNum-1:0] Sck_o
+    output  [SpiNum-1:0] Sck_o,
+    output  [SpiNum-1:0] SpiRst_o,
+    output  LD_o
 
 );
 
@@ -61,10 +64,10 @@ wire [SpiNum-1:0]Mosi3;
 wire [SpiNum-1:0] ten;
 wire clk80;
 wire clk61;
-wire Rst_i;
+wire initRst;
 wire gclk;
-wire [15:0] baudRate [SpiNum-1:0];
-wire [19:0] baudRateexp;
+wire [0:15] baudRate [SpiNum-1:0];
+
 
 //SPI0
 wire [CmdRegWidth-1:0] Spi0Ctrl;
@@ -134,6 +137,30 @@ wire [CmdRegWidth-1:0] SpiTxRxEn;
 wire [CmdRegWidth-1:0] GPIOA;
 
 
+wire	[AddrRegWidth-1:0]	toRegMapAddr;
+wire	[CmdRegWidth-1:0]	toRegMapData;
+wire	toRegMapVal;
+
+wire	[SpiNum-1:0]	toFifoVal;
+wire	[CmdRegWidth*SpiNum-1:0]	toFifoData;
+
+wire	[SpiNum-1:0]	toSpiVal;
+wire	[CmdRegWidth-1:0]	toSpiData;
+
+wire [0:1] widthSel [SpiNum-1:0];
+wire [SpiNum-1:0] CPOL;
+wire [SpiNum-1:0] CPHA;
+wire [SpiNum-1:0] endianSel;
+wire [SpiNum-1:0] selSt;
+
+wire [0:5] stopDelay [SpiNum-1:0];
+wire [SpiNum-1:0] leadx;
+wire [SpiNum-1:0] lagx; 
+wire [SpiNum-1:0] FifoRxRst;
+wire [SpiNum-1:0] FifoTxRst;
+wire [0:7]  WordCntTx [SpiNum-1:0];
+wire [0:7]  WordCntRx [SpiNum-1:0];
+
 
 
 //================================================================================
@@ -148,13 +175,128 @@ assign Mosi2_o = Mosi2;
 assign Mosi3_o = Mosi3;
 assign Ss_o = Ss;
 assign Sck_o = Sck;
-// assign baudRate[15:0][0] =Spi0Clk[15:0];
-// assign baudRate[15:0][1] =Spi1Clk[15:0];
-// assign baudRate[15:0][2] =Spi2Clk[15:0];
-// assign baudRate[15:0][3] =Spi3Clk[15:0];
-// assign baudRate[15:0][4] =Spi4Clk[15:0];
-// assign baudRate[15:0][5] =Spi5Clk[15:0];
-// assign baudRate[15:0][6] =Spi6Clk[15:0];
+
+assign widthSel[0] = Spi0Ctrl[6:5];
+assign widthSel[1] = Spi1Ctrl[6:5];
+assign widthSel[2] = Spi2Ctrl[6:5];
+assign widthSel[3] = Spi3Ctrl[6:5];
+assign widthSel[4] = Spi4Ctrl[6:5];
+assign widthSel[5] = Spi5Ctrl[6:5];
+assign widthSel[6] = Spi6Ctrl[6:5];
+
+assign CPOL[0] = Spi0Ctrl[2];
+assign CPOL[1] = Spi1Ctrl[2];
+assign CPOL[2] = Spi2Ctrl[2];
+assign CPOL[3] = Spi3Ctrl[2];
+assign CPOL[4] = Spi4Ctrl[2];
+assign CPOL[5] = Spi5Ctrl[2];
+assign CPOL[6] = Spi6Ctrl[2];
+
+assign CPHA[0] = Spi0Ctrl[1];
+assign CPHA[1] = Spi1Ctrl[1];
+assign CPHA[2] = Spi2Ctrl[1];
+assign CPHA[3] = Spi3Ctrl[1];
+assign CPHA[4] = Spi4Ctrl[1];
+assign CPHA[5] = Spi5Ctrl[1];
+assign CPHA[6] = Spi6Ctrl[1];
+
+assign endianSel[0] = Spi0Ctrl[8];
+assign endianSel[1] = Spi1Ctrl[8];
+assign endianSel[2] = Spi2Ctrl[8];
+assign endianSel[3] = Spi3Ctrl[8];
+assign endianSel[4] = Spi4Ctrl[8];
+assign endianSel[5] = Spi5Ctrl[8];
+assign endianSel[6] = Spi6Ctrl[8];
+
+assign selSt[0] = Spi0Ctrl[4];
+assign selSt[1] = Spi1Ctrl[4];
+assign selSt[2] = Spi2Ctrl[4];
+assign selSt[3] = Spi3Ctrl[4];
+assign selSt[4] = Spi4Ctrl[4];
+assign selSt[5] = Spi5Ctrl[4];
+assign selSt[6] = Spi6Ctrl[4];
+
+assign stopDelay[0] = Spi0CsDelay[7:2];
+assign stopDelay[1] = Spi1CsDelay[7:2];
+assign stopDelay[2] = Spi2CsDelay[7:2];
+assign stopDelay[3] = Spi3CsDelay[7:2];
+assign stopDelay[4] = Spi4CsDelay[7:2];
+assign stopDelay[5] = Spi5CsDelay[7:2];
+assign stopDelay[6] = Spi6CsDelay[7:2];
+
+assign leadx[0] = Spi0CsDelay[1];
+assign leadx[1] = Spi1CsDelay[1];
+assign leadx[2] = Spi2CsDelay[1];
+assign leadx[3] = Spi3CsDelay[1];
+assign leadx[4] = Spi4CsDelay[1];
+assign leadx[5] = Spi5CsDelay[1];
+assign leadx[6] = Spi6CsDelay[1];
+
+assign lagx[0] = Spi0CsDelay[0];
+assign lagx[1] = Spi1CsDelay[0];
+assign lagx[2] = Spi2CsDelay[0];
+assign lagx[3] = Spi3CsDelay[0];
+assign lagx[4] = Spi4CsDelay[0];
+assign lagx[5] = Spi5CsDelay[0];
+assign lagx[6] = Spi6CsDelay[0];
+
+assign baudRate[0] = Spi0Clk[15:0];
+assign baudRate[1] = Spi1Clk[15:0];
+assign baudRate[2] = Spi2Clk[15:0];
+assign baudRate[3] = Spi3Clk[15:0];
+assign baudRate[4] = Spi4Clk[15:0];
+assign baudRate[5] = Spi5Clk[15:0];
+assign baudRate[6] = Spi6Clk[15:0];
+
+
+assign SpiRst_o[0] = GPIOA[0];
+assign SpiRst_o[1] = GPIOA[1];
+assign SpiRst_o[2] = GPIOA[2];
+assign SpiRst_o[3] = GPIOA[3];
+assign SpiRst_o[4] = GPIOA[4];
+assign SpiRst_o[5] = GPIOA[5];
+assign SpiRst_o[6] = GPIOA[6];
+
+assign FifoRxRst[0] = Spi0RxFifoCtrl[0];
+assign FifoRxRst[1] = Spi1RxFifoCtrl[0];
+assign FifoRxRst[2] = Spi2RxFifoCtrl[0];
+assign FifoRxRst[3] = Spi3RxFifoCtrl[0];
+assign FifoRxRst[4] = Spi4RxFifoCtrl[0];
+assign FifoRxRst[5] = Spi5RxFifoCtrl[0];
+assign FifoRxRst[6] = Spi6RxFifoCtrl[0];
+
+assign FifoTxRst[0] = Spi0TxFifoCtrl[0];
+assign FifoTxRst[1] = Spi1TxFifoCtrl[0];
+assign FifoTxRst[2] = Spi2TxFifoCtrl[0];
+assign FifoTxRst[3] = Spi3TxFifoCtrl[0];
+assign FifoTxRst[4] = Spi4TxFifoCtrl[0];
+assign FifoTxRst[5] = Spi5TxFifoCtrl[0];
+assign FifoTxRst[6] = Spi6TxFifoCtrl[0];
+
+assign LD_i[0] = GPIOA[16];
+assign LD_i[1] = GPIOA[17];
+assign LD_i[2] = GPIOA[18];
+assign LD_i[3] = GPIOA[19];
+assign LD_i[4] = GPIOA[20];
+assign LD_i[5] = GPIOA[21];
+assign LD_i[6] = GPIOA[22];
+assign LD_o = LD_i[0]&LD_i[1]&LD_i[2]&LD_i[3]&LD_i[4]&LD_i[5]&LD_i[6];
+
+assign WordCntRx[0] = Spi0RxFifoCtrl[15:8];
+assign WordCntRx[1] = Spi1RxFifoCtrl[15:8];
+assign WordCntRx[2] = Spi2RxFifoCtrl[15:8];
+assign WordCntRx[3] = Spi3RxFifoCtrl[15:8];
+assign WordCntRx[4] = Spi4RxFifoCtrl[15:8];
+assign WordCntRx[5] = Spi5RxFifoCtrl[15:8];
+assign WordCntRx[6] = Spi6RxFifoCtrl[15:8];
+
+assign WordCntTx[0] = Spi0TxFifoCtrl[15:8];
+assign WordCntTx[1] = Spi1TxFifoCtrl[15:8];
+assign WordCntTx[2] = Spi2TxFifoCtrl[15:8];
+assign WordCntTx[3] = Spi3TxFifoCtrl[15:8];
+assign WordCntTx[4] = Spi4TxFifoCtrl[15:8];
+assign WordCntTx[5] = Spi5TxFifoCtrl[15:8];
+assign WordCntTx[6] = Spi6TxFifoCtrl[15:8];
 
 
 //================================================================================
@@ -167,7 +309,7 @@ BUFG BUFG_inst (
 );
 
 
-  clk_wiz_0 ClkGen
+ clk_wiz_0 ClkGen
    (
    .s_axi_aclk      (),        // input s_axi_aclk                        
    .s_axi_aresetn   (),     // input s_axi_aresetn,                                                          
@@ -190,11 +332,30 @@ BUFG BUFG_inst (
    .s_axi_rready    (),      // input s_axi_rready,                                                         
     // Clock out ports
     .clk_out1(Clk100_i),     // output clk_out1
+    // .clk_out2(clk61),     // output clk_out2
     // Status and control signals
     .locked(),       // output locked
    // Clock in ports
     .clk_in1(gclk));      // input clk_in1
 
+SmcDataMux SmcDataMuxer
+(
+    .Clk_i	(gclk),
+    .Rst_i	(initRst),
+
+	.SmcVal_i	(1'b1),
+	.SmcData_i	({Data_i,Data_i}),
+    .SmcAddr_i	({Addr_i,1'b0}),
+
+	.ToRegMapVal_o	(toRegMapVal),
+	.ToRegMapData_o	(toRegMapData),
+    .ToRegMapAddr_o	(toRegMapAddr),
+	
+	.ToFifoVal_o	(toFifoVal),
+	.ToFifoData_o	(toFifoData)
+	
+);
+
 
 RegMap #(
     .CmdRegWidth(32),
@@ -202,10 +363,10 @@ RegMap #(
 )
 RegMap_inst (
     .Clk_i(gclk),
-    .Rst_i(Rst_i),
-    .Data_i(Data_i),
-    .Addr_i(addr),
-    .wrEn_i(writeEn_i),
+    .Rst_i(initRst),
+    .Data_i(toRegMapData),
+    .Addr_i(toRegMapAddr),
+    .wrEn_i(writeEn_i|toRegMapVal),
     .rdEn_i(readEn_i),
     .BE_i(BE_i),
     .Led_o(Led_o),
@@ -286,23 +447,42 @@ genvar i;
 
 generate
     for  (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
+	
+		DataFifoWrapper DataFifoWrapepr
+		(
+			.WrClk_i	(gclk),
+			.RdClk_i	(Clk100_i),
+			.Rst_i		(initRst | FifoRxRst[i]),
+            .readEn_i   (readEn_i),
+	
+			.ToFifoVal_i	(toFifoVal[i]),
+			.ToFifoData_i	(toFifoData[32*i+:32]),
+			
+			.ToSpiVal_o		(toSpiVal[i]),
+			.ToSpiData_o	(toSpiData[i])
+		);
+	
         QuadSPIm QuadSPIm_inst (
             .Clk_i(Clk100_i),
             .Start_i(ten[i]),
-            .Rst_i(Rst_i|SpiRst_i[i]),
-            .SPIdata(32'h2aaa00aa),
+            .Rst_i(initRst),
+			.SpiDataVal_i	(toSpiVal),
+            // .SPIdata(32'h2aaa00aa),
+            .SPIdata(toSpiData[i]),
             .Sck_o(Sck[i]),
             .Ss_o(Ss[i]),
             .Mosi0_i(Mosi0[i]),
             .Mosi1_i(Mosi1[i]),
             .Mosi2_i(Mosi2[i]),
             .Mosi3_i(Mosi3[i]),
-            .WidthSel_i(3),
-            .PulsePol_i(0),
-            .EndianSel_i(1),
-            .LAG_i(0),
-            .LEAD_i(0),
-            .SELST_i(1)
+            .WidthSel_i(widthSel[i]),
+            .PulsePol_i(CPOL[i]),
+            .CPHA_i(CPHA[i]),
+            .EndianSel_i(endianSel[i]),
+            .LAG_i(lagx[i]),
+            .LEAD_i(leadx[i]),
+            .Stop_i(stopDelay[i]),
+            .SELST_i(selSt[i])
         );
     end
 endgenerate
@@ -310,7 +490,7 @@ endgenerate
 
 InitRst InitRst_inst (
     .clk_i(gclk),
-    .signal_o(Rst_i)
+    .signal_o(initRst)
 
 );