60 lines
1004 B
Verilog
60 lines
1004 B
Verilog
// See LICENSE for license details.
|
|
`timescale 1ns/1ps
|
|
`default_nettype none
|
|
|
|
module sdio_spi_bridge (
|
|
input wire clk,
|
|
input wire reset,
|
|
// SDIO
|
|
inout wire sd_cmd,
|
|
inout wire [3:0] sd_dat,
|
|
output wire sd_sck,
|
|
// QUAD SPI
|
|
input wire spi_sck,
|
|
input wire [3:0] spi_dq_o,
|
|
output wire [3:0] spi_dq_i,
|
|
output wire spi_cs
|
|
);
|
|
|
|
wire mosi, miso;
|
|
reg miso_sync [1:0];
|
|
|
|
assign mosi = spi_dq_o[0];
|
|
assign spi_dq_i = {2'b00, miso_sync[1], 1'b0};
|
|
|
|
assign sd_sck = spi_sck;
|
|
|
|
IOBUF buf_cmd (
|
|
.IO(sd_cmd),
|
|
.I(mosi),
|
|
.O(),
|
|
.T(1'b0)
|
|
);
|
|
|
|
IOBUF buf_dat0 (
|
|
.IO(sd_dat[0]),
|
|
.I(),
|
|
.O(miso),
|
|
.T(1'b1)
|
|
);
|
|
|
|
IOBUF buf_dat3 (
|
|
.IO(sd_dat[3]),
|
|
.I(spi_cs),
|
|
.O(),
|
|
.T(1'b0)
|
|
);
|
|
|
|
always @(posedge clk) begin
|
|
if (reset) begin
|
|
miso_sync[0] <= 1'b0;
|
|
miso_sync[1] <= 1'b0;
|
|
end else begin
|
|
miso_sync[0] <= miso;
|
|
miso_sync[1] <= miso_sync[0];
|
|
end
|
|
end
|
|
endmodule
|
|
|
|
`default_nettype wire
|