|
|
@@ -0,0 +1,95 @@
|
|
|
+module SPIs (
|
|
|
+ input Clk_i,
|
|
|
+ input Rst_i,
|
|
|
+
|
|
|
+ input Sck_i,
|
|
|
+ input Ss_i,
|
|
|
+ input Mosi0_i,
|
|
|
+
|
|
|
+ output reg [17:0] Data_o,
|
|
|
+ output reg [5:0] Addr_o,
|
|
|
+ output [23:0] DataToRxFifo_o,
|
|
|
+ output reg Val_o
|
|
|
+);
|
|
|
+
|
|
|
+//================================================================================
|
|
|
+// REG/WIRE
|
|
|
+//================================================================================
|
|
|
+
|
|
|
+ reg ssReg;
|
|
|
+ reg ssRegR;
|
|
|
+ reg [23:0] shiftReg;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//===============================================================================
|
|
|
+// ASSIGNMENTS
|
|
|
+
|
|
|
+
|
|
|
+ assign DataToRxFifo_o = {Addr_o, Data_o};
|
|
|
+
|
|
|
+//================================================================================
|
|
|
+// CODING
|
|
|
+//================================================================================
|
|
|
+
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ ssReg <= Ss_i;
|
|
|
+ ssRegR <= ssReg;
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ Data_o <= 18'h0;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ if (ssReg && !ssRegR) begin
|
|
|
+ Data_o <= shiftReg[17:0];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ Addr_o <= 8'h0;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ if (ssReg && !ssRegR) begin
|
|
|
+ Addr_o <= shiftReg[23:18];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+ always @(posedge Sck_i or posedge Rst_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ shiftReg<= 24'h0;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ if (!Ss_i) begin
|
|
|
+ shiftReg<= {shiftReg[22:0], Mosi0_i};
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ shiftReg<= 24'h0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (ssReg && !ssRegR) begin
|
|
|
+ Val_o <= 1'b1;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ Val_o <= 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ endmodule
|