20 lines
400 B
Verilog

module CLK_Sample # (
parameter PHASE_WIDTH = 32
) (
input clk_in,
input RST,
input [PHASE_WIDTH-1:0] sample_fre,
output clk_sample
);
reg [PHASE_WIDTH-1:0] addr_r = 0;
always @(posedge clk_in) begin
if (RST)
addr_r <= 32'd0;
else
addr_r <= addr_r + sample_fre;
end
assign clk_sample = addr_r[PHASE_WIDTH-1];
endmodule