diff options
| author | 2022-10-23 14:03:19 -0400 | |
|---|---|---|
| committer | 2022-10-23 14:03:19 -0400 | |
| commit | 9bbe1407bae7b4aeca46dbba30814a9962cce670 (patch) | |
| tree | cecd07b7289e84afa02f9b7e146ca0a6103148d9 /spi_slave.v | |
| parent | test master with SS (diff) | |
add metastability workaround
Diffstat (limited to 'spi_slave.v')
| -rw-r--r-- | spi_slave.v | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/spi_slave.v b/spi_slave.v index 83ab335..c4f7a7c 100644 --- a/spi_slave.v +++ b/spi_slave.v @@ -24,7 +24,7 @@ spi_slave input ss_L, `ifndef SPI_SLAVE_NO_READ output reg [WID-1:0] from_master, - input reg mosi, + input mosi, `endif `ifndef SPI_SLAVE_NO_WRITE input [WID-1:0] to_master, @@ -35,6 +35,17 @@ spi_slave output reg err ); +`ifndef SPI_SLAVE_NO_READ +/* MOSI is almost always an external wire, so buffer it. */ +reg mosi_hot = 0; +reg read_mosi = 0; + +always @ (posedge clk) begin + read_mosi <= mosi_hot; + mosi_hot <= mosi; +end +`endif + wire ss = !ss_L; reg sck_delay = 0; reg [WID_LEN-1:0] bit_counter = 0; @@ -48,7 +59,7 @@ reg [WID-1:0] send_buf = 0; task read_data(); `ifndef SPI_SLAVE_NO_READ from_master <= from_master << 1; - from_master[0] <= mosi; + from_master[0] <= read_mosi; `endif endtask |
