Tim Edwards | cd64af5 | 2020-08-07 11:11:58 -0400 | [diff] [blame^] | 1 | module striVe_clkrst( |
| 2 | input ext_clk_sel, |
| 3 | input ext_clk, |
| 4 | input pll_clk, |
| 5 | input reset, |
| 6 | input ext_reset, |
| 7 | output clk, |
| 8 | output resetn |
| 9 | ); |
| 10 | |
| 11 | // Clock assignment (to do: make this glitch-free) |
| 12 | assign clk = (ext_clk_sel == 1'b1) ? ext_clk : pll_clk; |
| 13 | |
| 14 | // Reset assignment. "reset" comes from POR, while "ext_reset" |
| 15 | // comes from standalone SPI (and is normally zero unless |
| 16 | // activated from the SPI). |
| 17 | |
| 18 | // Staged-delay reset |
| 19 | reg [2:0] reset_delay; |
| 20 | |
| 21 | always @(posedge clk or posedge reset) begin |
| 22 | if (reset == 1'b1) begin |
| 23 | reset_delay <= 3'b111; |
| 24 | end else begin |
| 25 | reset_delay <= {1'b0, reset_delay[2:1]}; |
| 26 | end |
| 27 | end |
| 28 | |
| 29 | assign resetn = ~(reset_delay[0] | ext_reset); |
| 30 | |
| 31 | endmodule |