|
|
@@ -17,15 +17,218 @@ wire [1:0] SmcBe_i;
|
|
|
reg SmcAoe_i;
|
|
|
|
|
|
reg [31:0] tb_cnt;
|
|
|
-
|
|
|
wire [15:0] smcData;
|
|
|
+reg mosi1reg;
|
|
|
+//***********************************************
|
|
|
+// SPI0 Adresses
|
|
|
+//***********************************************
|
|
|
|
|
|
+// Address map for SPI0
|
|
|
+localparam [10:0] BaseAddr0 = 11'h0;
|
|
|
+localparam [10:0] Spi0CtrlAddr = BaseAddr0;
|
|
|
+localparam [10:0] Spi0ClkAddr = (BaseAddr0 + 4)>>1;
|
|
|
+localparam [10:0] Spi0CsDelayAddr = (BaseAddr0 + 8)>>1;
|
|
|
+localparam [10:0] Spi0CsCtrlAddr = (BaseAddr0 + 12)>>1;
|
|
|
+localparam [10:0] Spi0TxFifoCtrlAddr = (BaseAddr0 + 16)>>1;
|
|
|
+localparam [10:0] Spi0RxFifoCtrlAddr = (BaseAddr0 + 20)>>1;
|
|
|
+localparam [10:0] Spi0TxFifoAddrL = (BaseAddr0 + 24)>>1;
|
|
|
+localparam [10:0] Spi0TxFifoAddrM = (BaseAddr0 + 26)>>1;
|
|
|
+localparam [10:0] Spi0RxFifoAddrL = (BaseAddr0 + 28)>>1;
|
|
|
+localparam [10:0] Spi0RxFifoAddrM = (BaseAddr0 + 30)>>1;
|
|
|
+
|
|
|
+// Data for SPI0CtrlReg
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Ctrl Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam SpiEn0 = 1'b1;//1 for enable, 0 for disable
|
|
|
+localparam ClockPhase0 = 1'b0;//
|
|
|
+localparam ClockPolarity0 = 1'b0;//0 for active high, 1 for active low
|
|
|
+localparam Assel0 = 1'b1;//0 for software control, 1 for hardware control
|
|
|
+localparam SelSt0 = 1'b1; //1 - assert slave select(low), 0 - deassert slave select(high)
|
|
|
+localparam Size0 = 2'd2; //0 - 8 bits, 1 - 16 bits, 2 - 24 bits, 3 - 32 bits
|
|
|
+localparam Mode0 = 1'b0; // 1 - 4 Mosi, 0 - 1 Mosi
|
|
|
+localparam LSBF0 = 1'b0; // 1 - LSB first, 0 - MSB first
|
|
|
+
|
|
|
+localparam [15:0] Spi0CtrlRegData = {8'h0,LSBF0, Mode0, Size0, SelSt0, Assel0, ClockPolarity0, ClockPhase0, SpiEn0};
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Clk Reg Data
|
|
|
+//***********************************************
|
|
|
+
|
|
|
+localparam Div = 4'd1; // Custom divider value(input clock frequency = 80 MHz)
|
|
|
+localparam Mux0 = 1'b1; // 0 - input clock, 1 - MMCM output clock
|
|
|
+localparam Mux1 = 3'd0; // MMCM output clock number
|
|
|
+
|
|
|
+localparam Spi0ClkRegData = {8'h0, Mux1, Mux0, Div};
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Cs Delay Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam Lag0 = 1'b0; //Extended SPI clock lag control, 0 - Disable, 1 - Enable
|
|
|
+localparam Lead0 = 1'b0; //Extended SPI clock lead control, 0 - Disable, 1 - Enable
|
|
|
+localparam Stop0 = 6'd0; //Number of clock cycles to wait after CS is deasserted
|
|
|
+
|
|
|
+localparam [15:0] Spi0CsDelayRegData = {8'h0, Stop0, Lead0, Lag0};
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Cs Ctrl Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam CS0 = 1'b1; // 1 - device selected, 0 - device deselected
|
|
|
+localparam CS1 = 1'b1; // 1 - device selected, 0 - device deselected
|
|
|
+
|
|
|
+localparam [15:0] Spi0CsCtrlRegData = {14'h0, CS1, CS0};
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Tx Fifo Ctrl Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam RstTxFifo0 = 1'b1; // 1 - Reset Tx FIFO, 0 - Normal operation
|
|
|
+// at least 5 clock cycles of a slow clock
|
|
|
+
|
|
|
+localparam [15:0] Spi0TxFifoCtrlRegDataRstOn = {15'h0, RstTxFifo0};
|
|
|
+localparam [15:0] Spi0TxFifoCtrlRegDataRstOff = {15'h0, 1'b0};
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI0 Rx Fifo Ctrl Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam RstRxFifo0 = 1'b1; // 1 - Reset Rx FIFO, 0 - Normal operation
|
|
|
+
|
|
|
+localparam [15:0] Spi0RxFifoCtrlRegDataRstOn = {15'h0, RstRxFifo0};
|
|
|
+localparam [15:0] Spi0RxFifoCtrlRegDataRstOff = {15'h0, 1'b0};
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPITXRX Enable Register
|
|
|
+//***********************************************
|
|
|
+localparam SpiTxRxEn0 = 1'b1;
|
|
|
+localparam SpiTxRxEn1 = 1'b0;
|
|
|
+localparam SpiTxRxEn2 = 1'b0;
|
|
|
+localparam SpiTxRxEn3 = 1'b0;
|
|
|
+localparam SpiTxRxEn4 = 1'b0;
|
|
|
+localparam SpiTxRxEn5 = 1'b0;
|
|
|
+localparam SpiTxRxEn6 = 1'b0;
|
|
|
+
|
|
|
+localparam [15:0] SpiTxRxEnRegData = {8'h0, SpiTxRxEn6, SpiTxRxEn5, SpiTxRxEn4, SpiTxRxEn3, SpiTxRxEn2, SpiTxRxEn1, SpiTxRxEn0};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// GPIO Reg Data
|
|
|
+//***********************************************
|
|
|
+localparam RstForSbTmsg = 1'b1; // 1 - Reset for SB TMSG, 0 - Normal operation
|
|
|
+
|
|
|
+
|
|
|
+localparam [15:0] GPIORegDataRstOn = {15'h0, RstForSbTmsg};
|
|
|
+localparam [15:0] GPIORegDataRstOff = {15'h0, 1'b0};
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI1HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr1 = 11'h50;
|
|
|
+localparam [10:0] Spi1CtrlAddr = BaseAddr1;
|
|
|
+localparam [10:0] Spi1ClkAddr = BaseAddr1 + 4;
|
|
|
+localparam [10:0] Spi1CsDelayAddr = BaseAddr1 + 8;
|
|
|
+localparam [10:0] Spi1CsCtrlAddr = BaseAddr1 + 12;
|
|
|
+localparam [10:0] Spi1TxFifoCtrlAddr = BaseAddr1 + 16;
|
|
|
+localparam [10:0] Spi1RxFifoCtrlAddr = BaseAddr1 + 20;
|
|
|
+localparam [10:0] Spi1TxFifoAddr = BaseAddr1 + 24;
|
|
|
+localparam [10:0] Spi1RxFifoAddr = BaseAddr1 + 28;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI2HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr2 = 11'hF0;
|
|
|
+localparam [10:0] Spi2CtrlAddr = BaseAddr2;
|
|
|
+localparam [10:0] Spi2ClkAddr = BaseAddr2 + 4;
|
|
|
+localparam [10:0] Spi2CsDelayAddr = BaseAddr2 + 8;
|
|
|
+localparam [10:0] Spi2CsCtrlAddr = BaseAddr2 + 12;
|
|
|
+localparam [10:0] Spi2TxFifoCtrlAddr = BaseAddr2 + 16;
|
|
|
+localparam [10:0] Spi2RxFifoCtrlAddr = BaseAddr2 + 20;
|
|
|
+localparam [10:0] Spi2TxFifoAddr = BaseAddr2 + 24;
|
|
|
+localparam [10:0] Spi2RxFifoAddr = BaseAddr2 + 28;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI3HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr3 = 11'h140;
|
|
|
+localparam [10:0] Spi3CtrlAddr = BaseAddr3;
|
|
|
+localparam [10:0] Spi3ClkAddr = BaseAddr3 + 4;
|
|
|
+localparam [10:0] Spi3CsDelayAddr = BaseAddr3 + 8;
|
|
|
+localparam [10:0] Spi3CsCtrlAddr = BaseAddr3 + 12;
|
|
|
+localparam [10:0] Spi3TxFifoCtrlAddr = BaseAddr3 + 16;
|
|
|
+localparam [10:0] Spi3RxFifoCtrlAddr = BaseAddr3 + 20;
|
|
|
+localparam [10:0] Spi3TxFifoAddr = BaseAddr3 + 24;
|
|
|
+localparam [10:0] Spi3RxFifoAddr = BaseAddr3 + 28;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI4HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr4 = 11'h190;
|
|
|
+localparam [10:0] Spi4CtrlAddr = BaseAddr4;
|
|
|
+localparam [10:0] Spi4ClkAddr = BaseAddr4 + 4;
|
|
|
+localparam [10:0] Spi4CsDelayAddr = BaseAddr4 + 8;
|
|
|
+localparam [10:0] Spi4CsCtrlAddr = BaseAddr4 + 12;
|
|
|
+localparam [10:0] Spi4TxFifoCtrlAddr = BaseAddr4 + 16;
|
|
|
+localparam [10:0] Spi4RxFifoCtrlAddr = BaseAddr4 + 20;
|
|
|
+localparam [10:0] Spi4TxFifoAddr = BaseAddr4 + 24;
|
|
|
+localparam [10:0] Spi4RxFifoAddr = BaseAddr4 + 28;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI5HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr5 = 11'h1E0;
|
|
|
+localparam [10:0] Spi5CtrlAddr = BaseAddr5;
|
|
|
+localparam [10:0] Spi5ClkAddr = BaseAddr5 + 4;
|
|
|
+localparam [10:0] Spi5CsDelayAddr = BaseAddr5 + 8;
|
|
|
+localparam [10:0] Spi5CsCtrlAddr = BaseAddr5 + 12;
|
|
|
+localparam [10:0] Spi5TxFifoCtrlAddr = BaseAddr5 + 16;
|
|
|
+localparam [10:0] Spi5RxFifoCtrlAddr = BaseAddr5 + 20;
|
|
|
+localparam [10:0] Spi5TxFifoAddr = BaseAddr5 + 24;
|
|
|
+localparam [10:0] Spi5RxFifoAddr = BaseAddr5 + 28;
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPI5HEADERS
|
|
|
+//***********************************************
|
|
|
+localparam [10:0] BaseAddr6 = 11'h230;
|
|
|
+localparam [10:0] Spi6CtrlAddr = BaseAddr6;
|
|
|
+localparam [10:0] Spi6ClkAddr = BaseAddr6 + 4;
|
|
|
+localparam [10:0] Spi6CsDelayAddr = BaseAddr6 + 8;
|
|
|
+localparam [10:0] Spi6CsCtrlAddr = BaseAddr6 + 12;
|
|
|
+localparam [10:0] Spi6TxFifoCtrlAddr = BaseAddr6 + 16;
|
|
|
+localparam [10:0] Spi6RxFifoCtrlAddr = BaseAddr6 + 20;
|
|
|
+localparam [10:0] Spi6TxFifoAddr = BaseAddr6 + 24;
|
|
|
+localparam [10:0] Spi6RxFifoAddr = BaseAddr6 + 28;
|
|
|
+
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// SPITXRX Enable Reg Adress
|
|
|
+//***********************************************
|
|
|
+
|
|
|
+localparam SpiTxRxEnAddr = 11'h780;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// GPIO Reg Adress
|
|
|
+//***********************************************
|
|
|
+
|
|
|
+localparam GPIOAddr = 11'hFF0;
|
|
|
+
|
|
|
+//***********************************************
|
|
|
+// ASSIGNS
|
|
|
+//***********************************************
|
|
|
assign SmcBe_i = (tb_cnt >0 && tb_cnt <=44) ? 2'b00 : 2'b11;
|
|
|
assign SmcAmsN_i = (tb_cnt > 0 && tb_cnt <= 44) ? 1'b0 : 1'b1;
|
|
|
assign smcData = SmcData_i;
|
|
|
+assign mosi1_io = (!Mode0) ? mosi0_o : 1'bz;
|
|
|
|
|
|
-always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
|
|
|
+//***********************************************
|
|
|
+// CLOCK GENERATION
|
|
|
+//***********************************************
|
|
|
|
|
|
+always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
|
|
|
|
|
|
S5443_3Top uut (
|
|
|
.Clk123_i(Clk_i),
|
|
|
@@ -37,8 +240,8 @@ always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
|
|
|
.SmcBe_i(SmcBe_i),
|
|
|
.SmcAoe_i(SmcAoe_i),
|
|
|
.Led_o(),
|
|
|
- .Mosi0_o(),
|
|
|
- .Mosi1_io(),
|
|
|
+ .Mosi0_o(mosi0_o),
|
|
|
+ .Mosi1_io(mosi1_io),
|
|
|
.Mosi2_o(),
|
|
|
.Mosi3_o(),
|
|
|
.Ss_o(),
|
|
|
@@ -56,249 +259,113 @@ always @(posedge Clk_i) begin
|
|
|
SmcAwe_i <= 1'b1;
|
|
|
end
|
|
|
else begin
|
|
|
- case (tb_cnt)
|
|
|
- 0: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 1: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 2: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 3: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 4: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 5: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 6: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 7: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 8: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 9: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 10: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 11: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 12: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 13: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 14: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 15: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 16: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 17: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 18: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 19: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 20: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 21: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 22: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 23: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 24: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 25: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 26: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 27: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 28: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 29: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 30: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
+ if (tb_cnt > 0 && tb_cnt <= 44) begin
|
|
|
+ if (tb_cnt % 2 != 0) begin
|
|
|
+ SmcAwe_i <= 1'b1;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ SmcAwe_i <= 1'b0;
|
|
|
+ end
|
|
|
end
|
|
|
- 31: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 32: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 33: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 34: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 35: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 36: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 37: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 38: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 39: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 40: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 41: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 42: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- 43: begin
|
|
|
- SmcAwe_i <= 1'b0;
|
|
|
- end
|
|
|
- 44: begin
|
|
|
- SmcAwe_i <= 1'b1;
|
|
|
- end
|
|
|
- endcase
|
|
|
end
|
|
|
end
|
|
|
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
always @(posedge Clk_i) begin
|
|
|
if (Rst_i) begin
|
|
|
SmcAddr_i <= 0;
|
|
|
- SmcData_i <= 0;
|
|
|
end
|
|
|
else begin
|
|
|
+ if (tb_cnt < 27) begin
|
|
|
case (tb_cnt)
|
|
|
0: begin
|
|
|
- SmcAddr_i <= 12'h00f;
|
|
|
- SmcData_i <= 16'h0000;
|
|
|
+ SmcAddr_i <= BaseAddr0;
|
|
|
end
|
|
|
3: begin
|
|
|
- SmcAddr_i <= 12'h7fc;
|
|
|
- SmcData_i <= 16'h0001;
|
|
|
+ SmcAddr_i <= Spi0ClkAddr;
|
|
|
end
|
|
|
5: begin
|
|
|
- SmcAddr_i <= 12'h7fd;
|
|
|
- SmcData_i <= 16'h0000;
|
|
|
+ SmcAddr_i <= Spi0CsDelayAddr;
|
|
|
end
|
|
|
7: begin
|
|
|
- SmcAddr_i <= 12'h7fe;
|
|
|
- SmcAddr_i <= 16'h0000;
|
|
|
- end
|
|
|
- 8: begin
|
|
|
- SmcAddr_i <= 12'h0;
|
|
|
- SmcData_i <= 16'h7f;
|
|
|
- end
|
|
|
- 10: begin
|
|
|
- SmcAddr_i <= 12'h1;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
- end
|
|
|
- 12: begin
|
|
|
- SmcAddr_i <= 12'h2;
|
|
|
- SmcData_i <= 16'hd1;
|
|
|
- end
|
|
|
- 14: begin
|
|
|
- SmcAddr_i <= 12'h3;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ SmcAddr_i <= Spi0CsCtrlAddr;
|
|
|
end
|
|
|
- 16: begin
|
|
|
- SmcAddr_i <= 12'h4;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
- end
|
|
|
- 18: begin
|
|
|
- SmcAddr_i <= 12'h5;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
- end
|
|
|
- 20: begin
|
|
|
- SmcAddr_i <= 12'h6;
|
|
|
- SmcData_i <= 16'h3;
|
|
|
- end
|
|
|
- 22: begin
|
|
|
- SmcAddr_i <= 12'h7;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
- end
|
|
|
- 24: begin
|
|
|
- SmcAddr_i <= 12'h8;
|
|
|
- SmcData_i <= 16'h1;
|
|
|
- end
|
|
|
- 26: begin
|
|
|
- SmcAddr_i <= 12'h9;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
- end
|
|
|
- 28: begin
|
|
|
- SmcAddr_i <= 12'ha;
|
|
|
- SmcData_i <= 16'h1;
|
|
|
- end
|
|
|
- 30: begin
|
|
|
- SmcAddr_i <= 12'hb;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ 9: begin
|
|
|
+ SmcAddr_i <= Spi0TxFifoCtrlAddr;
|
|
|
end
|
|
|
- 32: begin
|
|
|
- SmcAddr_i <= 12'h780;
|
|
|
- SmcData_i <= 16'h1;
|
|
|
+ 11: begin
|
|
|
+ SmcAddr_i <= Spi0RxFifoCtrlAddr;
|
|
|
end
|
|
|
- 34: begin
|
|
|
- SmcAddr_i <= 12'h781;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ 19 : begin
|
|
|
+ SmcAddr_i <= Spi0TxFifoCtrlAddr;
|
|
|
end
|
|
|
- 36: begin
|
|
|
- SmcAddr_i <= 12'h7f8;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ 21 : begin
|
|
|
+ SmcAddr_i <= Spi0RxFifoCtrlAddr;
|
|
|
end
|
|
|
- 38: begin
|
|
|
- SmcAddr_i <= 12'h7f9;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ 23 : begin
|
|
|
+ SmcAddr_i <= SpiTxRxEnAddr;
|
|
|
end
|
|
|
- 40: begin
|
|
|
- SmcAddr_i <= 12'h00c;
|
|
|
- SmcData_i <= 16'h1;
|
|
|
+ endcase
|
|
|
end
|
|
|
- 42: begin
|
|
|
- SmcAddr_i <= 12'h00d;
|
|
|
- SmcData_i <= 16'h0;
|
|
|
+ else begin
|
|
|
+ if (tb_cnt % 2 != 0) begin
|
|
|
+ SmcAddr_i <= Spi0TxFifoAddrL;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ SmcAddr_i <= Spi0TxFifoAddrM;
|
|
|
+ end
|
|
|
end
|
|
|
- endcase
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
+always @(posedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ SmcData_i <= 16'h0;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ if (tb_cnt < 27 ) begin
|
|
|
+ case (tb_cnt)
|
|
|
+ 0 : begin
|
|
|
+ SmcData_i <= Spi0CtrlRegData;
|
|
|
+ end
|
|
|
+ 3 : begin
|
|
|
+ SmcData_i <= Spi0ClkRegData;
|
|
|
+ end
|
|
|
+ 5 : begin
|
|
|
+ SmcData_i <= Spi0CsDelayRegData;
|
|
|
+ end
|
|
|
+ 7 : begin
|
|
|
+ SmcData_i <= Spi0CsCtrlRegData;
|
|
|
+ end
|
|
|
+ 9 : begin
|
|
|
+ SmcData_i <= Spi0TxFifoCtrlRegDataRstOn;
|
|
|
+ end
|
|
|
+ 11 : begin
|
|
|
+ SmcData_i <= Spi0RxFifoCtrlRegDataRstOn;
|
|
|
+ end
|
|
|
+ 19 : begin
|
|
|
+ SmcData_i <= Spi0TxFifoCtrlRegDataRstOff;
|
|
|
+ end
|
|
|
+ 21 : begin
|
|
|
+ SmcData_i <= Spi0RxFifoCtrlRegDataRstOff;
|
|
|
+ end
|
|
|
+ 23 : begin
|
|
|
+ SmcData_i <= SpiTxRxEnRegData;
|
|
|
+ end
|
|
|
+ endcase
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ else begin
|
|
|
+ SmcData_i <= $urandom_range(0, 8'hFF);
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
|
|
|
always @(posedge Clk_i) begin
|
|
|
if (Rst_i) begin
|
|
|
@@ -309,34 +376,12 @@ always @(posedge Clk_i) begin
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
-// always @(*) begin
|
|
|
-// txNextState = IDLE;
|
|
|
-// case(txCurrState)
|
|
|
-// IDLE : begin
|
|
|
-// if (txWork) begin
|
|
|
-// txNextState = CMD;
|
|
|
-// end
|
|
|
-// else begin
|
|
|
-// txNextState = IDLE;
|
|
|
-// end
|
|
|
-// end
|
|
|
-// WRITE : begin
|
|
|
-// if () begin
|
|
|
-// txNextState = WRITE;
|
|
|
-// end
|
|
|
-// else begin
|
|
|
-// txNextState = IDLE;
|
|
|
-// end
|
|
|
-// end
|
|
|
-
|
|
|
-
|
|
|
initial begin
|
|
|
Clk_i = 1'b0;
|
|
|
Rst_i = 1'b1;
|
|
|
SmcAre_i = 1'b1;
|
|
|
SmcAoe_i = 1'b1;
|
|
|
- #(CLK_PERIOD*10) Rst_i = 1'b0;
|
|
|
+ #(CLK_PERIOD*300) Rst_i = 1'b0;
|
|
|
|
|
|
|
|
|
|