12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * Generates reset pulse for 10 cycles on falling edge of DTR.
- * Assumes incoming DTR signal is stabilized.
- */
- module DtrReset (
- input clk, dtr,
- output reg dtrRst
- );
- reg [1:0] state;
- parameter s_idle = 0;
- parameter s_pulse = 1;
- reg dtr_prev; //previous dtr value to check for falling edge
- reg [3:0] pulse_counter; //counter for keeping reset high
- //Make unstable signal stable at the base clock
- always @(posedge clk)
- begin
- case (state)
- s_idle:
- begin
- if (dtr_prev && !dtr) //falling edge
- begin
- state <= s_pulse;
- pulse_counter <= 4'b1111;
- dtrRst <= 1'b1;
- end
- end
- s_pulse:
- begin
- pulse_counter <= pulse_counter - 1'b1;
- if (pulse_counter == 4'd0)
- begin
- dtrRst <= 1'b0;
- state <= s_idle;
- end
- end
- default:
- begin
- state <= s_idle;
- end
- endcase
- dtr_prev <= dtr;
- end
-
- initial
- begin
- dtrRst <= 1'b0;
- dtr_prev <= 1'b0;
- state <= s_idle;
- pulse_counter <= 4'd0;
- end
- endmodule
|