Tim Edwards | 04ba17f | 2020-10-02 22:27:50 -0400 | [diff] [blame] | 1 | module caravel_clkrst( |
shalan | fd13eb5 | 2020-08-21 16:48:07 +0200 | [diff] [blame] | 2 | `ifdef LVS |
| 3 | input vdd1v8, |
| 4 | input vss, |
| 5 | `endif |
| 6 | input ext_clk_sel, |
| 7 | input ext_clk, |
| 8 | input pll_clk, |
Tim Edwards | 04ba17f | 2020-10-02 22:27:50 -0400 | [diff] [blame] | 9 | input resetb, |
| 10 | input ext_reset, // NOTE: positive sense reset |
| 11 | output core_clk, |
| 12 | output resetb_sync |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 13 | ); |
| 14 | |
shalan | fd13eb5 | 2020-08-21 16:48:07 +0200 | [diff] [blame] | 15 | // Clock assignment (to do: make this glitch-free) |
Tim Edwards | 04ba17f | 2020-10-02 22:27:50 -0400 | [diff] [blame] | 16 | assign core_clk = (ext_clk_sel == 1'b1) ? ext_clk : pll_clk; |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 17 | |
shalan | fd13eb5 | 2020-08-21 16:48:07 +0200 | [diff] [blame] | 18 | // Reset assignment. "reset" comes from POR, while "ext_reset" |
| 19 | // comes from standalone SPI (and is normally zero unless |
| 20 | // activated from the SPI). |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 21 | |
shalan | fd13eb5 | 2020-08-21 16:48:07 +0200 | [diff] [blame] | 22 | // Staged-delay reset |
| 23 | reg [2:0] reset_delay; |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 24 | |
Tim Edwards | 04ba17f | 2020-10-02 22:27:50 -0400 | [diff] [blame] | 25 | always @(posedge core_clk or negedge resetb) begin |
| 26 | if (resetb == 1'b0) begin |
shalan | fd13eb5 | 2020-08-21 16:48:07 +0200 | [diff] [blame] | 27 | reset_delay <= 3'b111; |
| 28 | end else begin |
| 29 | reset_delay <= {1'b0, reset_delay[2:1]}; |
| 30 | end |
| 31 | end |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 32 | |
Tim Edwards | 04ba17f | 2020-10-02 22:27:50 -0400 | [diff] [blame] | 33 | assign resetb_sync = ~(reset_delay[0] | ext_reset); |
Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame] | 34 | |
| 35 | endmodule |