| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- `timescale 1ns / 1ps
- module QuadSPIs_tb ();
- reg Clk70_i;
- reg Clk50_i;
- wire Sck_i;
- wire Rst_i;
- reg[7:0] mosiReg0_tb;
- reg[7:0] mosiReg1_tb;
- reg[7:0] mosiReg2_tb;
- reg[7:0] mosiReg3_tb;
- reg [7:0] Mosi0_i;
- reg [7:0] Mosi1_i;
- reg [7:0] Mosi2_i;
- reg [7:0] Mosi3_i;
- reg EnEdge_i;
- reg Ss;
- reg SSr;
- reg SSm;
- reg Start_i;
- reg startFlag;
- reg [5:0] ssCnt;
- reg [3:0] ssNum;
- reg [1:0] WidthSel_i;
- reg [31:0] SPIdata;
- // assign Mosi0_i = (!Ss) ? (mosiReg3_tb[7]):1'b0;
- // assign Mosi1_i = (!Ss) ? (mosiReg2_tb[7]):1'b0;
- // assign Mosi2_i = (!Ss) ? (mosiReg1_tb[7]):1'b0;
- // assign Mosi3_i = (!Ss) ? (mosiReg0_tb[7]):1'b0;
- assign Sck_i = (!Ss) ? (Clk70_i) : 1'b0;
- // always #(24.390243902439/2) Clk70_i = ~Clk70_i;// 41Mhz
- always #(14.285714285714/2) Clk70_i = ~Clk70_i;// 70Mhz
- // always #10 Clk70_i = ~Clk70_i;// 50 Mhz
- always #10 Clk50_i = ~Clk50_i;
- always @(*) begin
- case (WidthSel_i)
- 0 : begin
- Mosi0_i = (!Ss) ? (mosiReg3_tb[1]):1'b0;
- Mosi1_i = (!Ss) ? (mosiReg2_tb[1]):1'b0;
- Mosi2_i = (!Ss) ? (mosiReg1_tb[1]):1'b0;
- Mosi3_i = (!Ss) ? (mosiReg0_tb[1]):1'b0;
- end
- 1 : begin
- Mosi0_i = (!Ss) ? (mosiReg3_tb[3]):1'b0;
- Mosi1_i = (!Ss) ? (mosiReg2_tb[3]):1'b0;
- Mosi2_i = (!Ss) ? (mosiReg1_tb[3]):1'b0;
- Mosi3_i = (!Ss) ? (mosiReg0_tb[3]):1'b0;
- end
- 2 : begin
- Mosi0_i = (!Ss) ? (mosiReg3_tb[5]):1'b0;
- Mosi1_i = (!Ss) ? (mosiReg2_tb[5]):1'b0;
- Mosi2_i = (!Ss) ? (mosiReg1_tb[5]):1'b0;
- Mosi3_i = (!Ss) ? (mosiReg0_tb[5]):1'b0;
- end
- 3 : begin
- Mosi0_i = (!Ss) ? (mosiReg3_tb[7]):1'b0;
- Mosi1_i = (!Ss) ? (mosiReg2_tb[7]):1'b0;
- Mosi2_i = (!Ss) ? (mosiReg1_tb[7]):1'b0;
- Mosi3_i = (!Ss) ? (mosiReg0_tb[7]):1'b0;
- end
- endcase
- end
- initial begin
- Clk70_i = 1'b1;
- // Clk70_i = 1'b0;//50 Mhz out of phase with src clk
- Clk50_i = 1'b1;
- Start_i = 1'b0;
- EnEdge_i = 1'b1;
- SPIdata = {1'h0, 7'h2a, 8'haa,8'h00,8'haa};
- WidthSel_i = 2'b11;
- #100Start_i = 1'b1;
- #500 Start_i = 1'b0;
- #600 Start_i = 1'b1;
- SPIdata = {1'h1, 7'h29, 24'd520050};
- #100 Start_i = 1'b0;
- #1500 Start_i = 1'b1;
- SPIdata = {1'h0, 7'h2a, 24'd10};
- #100 Start_i = 1'b0;
- end
- always @(posedge Clk70_i) begin
- if (Rst_i) begin
- SSr <=1'b0;
- end
- else begin
- SSr <= Ss;
- end
- end
- always @(posedge Clk70_i) begin
- if (Rst_i) begin
- startFlag <= 1'b0;
- end
- else begin
- if (!Start_i) begin
- startFlag <= 1'b1;
- end
- else begin
- startFlag <= 1'b0;
- end
- end
- end
- always @(*) begin
- if (Rst_i) begin
- ssNum = 1'b0;
- end
- else begin
- case (WidthSel_i)
- 0 : begin
- ssNum = 2;
- end
- 1 : begin
- ssNum = 4;
- end
- 2 : begin
- ssNum = 6;
- end
- 3 : begin
- ssNum = 8;
- end
- endcase
- end
- end
- always @(posedge Clk70_i) begin
- if (Rst_i) begin
- ssCnt <= 1'b0;
- end
- else if (ssCnt < ssNum && startFlag ) begin
- ssCnt <= ssCnt + 1'b1;
- end
- else begin
- if (ssCnt == ssNum-1 || !startFlag) begin
- ssCnt <= 1'b0;
- end
- end
- end
- always @(negedge Clk70_i) begin
- if (Rst_i) begin
- Ss <= 1'b1;
- end
- else begin
- if (ssCnt < ssNum && startFlag ) begin
- Ss <= 1'b0;
- end
- else begin
- Ss <= 1'b1;
- end
- end
- end
- always @(negedge Clk70_i) begin
- if (Rst_i) begin
- mosiReg0_tb <= SPIdata[31:24];
- end
- else begin
- if (!SSr) begin
- mosiReg0_tb <= { mosiReg0_tb[6:0],1'b0 };
- end
- else begin
- mosiReg0_tb <= SPIdata[31:24];
- end
- end
- end
- always @(negedge Clk70_i) begin
- if (Rst_i) begin
- mosiReg1_tb <= SPIdata[23:16];
- end
- else begin
- if (!SSr) begin
- mosiReg1_tb <= { mosiReg1_tb[6:0],1'b0 };
- end
- else begin
- mosiReg1_tb <= SPIdata[23:16];
- end
- end
- end
- always @(negedge Clk70_i) begin
- if (Rst_i) begin
- mosiReg2_tb <= SPIdata[15:8];
- end
- else begin
- if (!SSr) begin
- mosiReg2_tb <= { mosiReg2_tb[6:0],1'b0 };
- end
- else begin
- mosiReg2_tb <= SPIdata[15:8];
- end
- end
- end
- always @(negedge Clk70_i) begin
- if (Rst_i) begin
- mosiReg3_tb <= SPIdata[7:0];
- end
- else begin
- if (!SSr) begin
- mosiReg3_tb <= { mosiReg3_tb[6:0],1'b0 };
- end
- else begin
- mosiReg3_tb <= SPIdata[7:0];
- end
- end
- end
- QuadSPIs QuadSPI_inst (
- .Sck_i(Sck_i),
- .Clk_i(Clk50_i),
- .Rst_i(Rst_i),
- .Ss_i(Ss),
- .WidthSel_i(WidthSel_i),
- .Mosi0_i(Mosi0_i),
- .Mosi1_i(Mosi1_i),
- .Mosi2_i(Mosi2_i),
- .Mosi3_i(Mosi3_i),
- .EnEdge_i(EnEdge_i),
- .PulsePol_i(1'b0)
- );
- InitRst InitRst_inst (
- .clk_i(Clk50_i),
- .signal_o(Rst_i)
- );
- endmodule
|