Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
091fa1773This file is pinned to the selected release. Download the original to open it in your design tool.
// See LICENSE.SiFive for license details.
/** This black-boxes a Clock Divider by 3.
* The output clock is phase-aligned to the input clock.
* Do NOT use this in synthesis; the duty cycle is 2:1.
*
* Because Chisel does not support
* blocking assignments, it is impossible
* to create a deterministic divided clock.
*
* @param clk_out Divided Clock
* @param clk_in Clock Input
*
*/
module ClockDivider3 (output reg clk_out, input clk_in);
reg delay;
initial begin
clk_out = 1'b0;
delay = 1'b0;
end
always @(posedge clk_in) begin
if (clk_out == 1'b0) begin
clk_out = 1'b1;
delay <= 1'b0;
end else if (delay == 1'b1) begin
clk_out = 1'b0;
delay <= 1'b0;
end else begin
delay <= 1'b1;
end
end
endmodule // ClockDivider3