| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- `timescale 1ns/1ps
- module tb_SPIm;
- // Parameters
- parameter CLK_PERIOD = 8.13; // Clock period in ns
- // Inputs
- reg Clk_i;
- reg Rst_i;
- reg Start_i;
- reg CPHA_i;
- reg [31:0] SPIdata;
- reg SpiDataVal_i;
- reg SELST_i;
- reg [1:0] WidthSel_i;
- reg LAG_i;
- reg LEAD_i;
- reg EndianSel_i;
- reg [5:0] Stop_i;
- reg PulsePol_i;
- // Outputs
- wire Mosi0_o;
- wire Mosi1_o;
- wire Mosi2_o;
- wire Mosi3_o;
- wire Sck_o;
- wire Ss_o;
- wire Val_o;
- // SPIm SPIm_inst (
- // .Clk_i(Clk_i),
- // .Rst_i(Rst_i),
- // .Start_i(Start_i),
- // .CPHA_i(CPHA_i),
- // .SPIdata(SPIdata),
- // .SpiDataVal_i(SpiDataVal_i),
- // .SELST_i(SELST_i),
- // .WidthSel_i(WidthSel_i),
- // .LAG_i(LAG_i),
- // .LEAD_i(LEAD_i),
- // .EndianSel_i(EndianSel_i),
- // .Stop_i(Stop_i),
- // .PulsePol_i(PulsePol_i),
- // .Mosi0_o(Mosi0_o),
- // .Sck_o(Sck_o),
- // .Ss_o(Ss_o),
- // .Val_o(Val_o)
- // );
- // SPIs SPIs_inst (
- // .Clk_i(Clk_i),
- // .Rst_i(Rst_i),
- // .Sck_i(Sck_o),
- // .Ss_i(Ss_o),
- // .Mosi0_i(Mosi0_o),
- // .WidthSel_i(WidthSel_i),
- // .EndianSel_i(EndianSel_i),
- // .SELST_i(SELST_i),
- // .Data_o(),
- // .Addr_o(),
- // .DataToRxFifo_o(),
- // .Val_o()
- // );
- QuadSPIm QuadSPIm_inst (
- .Clk_i(Clk_i),
- .Rst_i(Rst_i),
- .Start_i(Start_i),
- .CPHA_i(CPHA_i),
- .SPIdata(SPIdata),
- .SpiDataVal_i(SpiDataVal_i),
- .SELST_i(SELST_i),
- .WidthSel_i(WidthSel_i),
- .LAG_i(LAG_i),
- .LEAD_i(LEAD_i),
- .EndianSel_i(EndianSel_i),
- .Stop_i(Stop_i),
- .PulsePol_i(PulsePol_i),
- .Mosi0_i(Mosi0_o),
- .Mosi1_i(Mosi1_o),
- .Mosi2_i(Mosi2_o),
- .Mosi3_i(Mosi3_o),
- .Sck_o(Sck_o),
- .Ss_o(Ss_o),
- .Val_o(Val_o)
- );
- QuadSPIs QuadSPIs_inst (
- .Clk_i(Clk_i),
- .Rst_i(Rst_i),
- .Sck_i(Sck_o),
- .Ss_i(Ss_o),
- .Mosi0_i(Mosi0_o),
- .Mosi1_i(Mosi1_o),
- .Mosi2_i(Mosi2_o),
- .Mosi3_i(Mosi3_o),
- .WidthSel_i(WidthSel_i),
- .SELST_i(SELST_i),
- .Data_o(),
- .Addr_o(),
- .DataToRxFifo_o(),
- .Val_o()
- );
- // Clock generation
- always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
- // Initial setup and test sequence
- initial begin
- // Initialize Inputs
- Clk_i = 0;
- Rst_i = 1;
- Start_i = 0;
- CPHA_i = 0;
- SpiDataVal_i = 0;
- SPIdata = 32'h00000000;
- SELST_i = 1;//0:High, 1:Low
- WidthSel_i = 3; // Full 32-bit width
- LAG_i = 0;
- LEAD_i = 0;
- EndianSel_i = 1; // 0:MSB first, 1:lsb first
- Stop_i = 6'd0;
- PulsePol_i = 0;
- // Reset the system
- #(CLK_PERIOD*10) Rst_i = 0;
- #(CLK_PERIOD*2) Start_i = 1; // Start SPI transaction
- #(CLK_PERIOD*10)SPIdata = {1'h0, 7'h2a, 8'haa,8'h00,8'haa};
- // #(CLK_PERIOD*10)SPIdata = 32'haa;
-
- #(CLK_PERIOD*100);
- // EndianSel_i = 1; // LSB first
- // SPIdata = {1'h0, 7'h2a, 8'haa,8'h00,8'haa};
- // #(CLK_PERIOD*2) Start_i = 0;
- // #(CLK_PERIOD) Start_i = 1;
-
- end
- endmodule
|