The pps_generator module receives a new parameter (PIPELINE) which can optionally add a register on the output. The default behaviour is unchanged. Original-commit: 3538fccfc0d9d493d767dcc445593074d3edc86d
51 lines
1.2 KiB
Verilog
51 lines
1.2 KiB
Verilog
//
|
|
// Copyright 2015 Ettus Research LLC
|
|
// Copyright 2018 Ettus Research, a National Instruments Company
|
|
//
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
//
|
|
|
|
module pps_generator #(
|
|
parameter CLK_FREQ = 32'd10_000_000, //Min:10kHz, Max:4GHz
|
|
parameter DUTY_CYCLE = 25,
|
|
parameter PIPELINE = "NONE" // Optional register on output? {"NONE", "OUT"}
|
|
) (
|
|
input clk,
|
|
input reset,
|
|
output pps
|
|
);
|
|
reg [31:0] count;
|
|
|
|
always @(posedge clk) begin
|
|
if (reset) begin
|
|
count <= 32'd0;
|
|
end else if (count >= CLK_FREQ - 1) begin
|
|
count <= 32'd0;
|
|
end else begin
|
|
count <= count + 32'd1;
|
|
end
|
|
end
|
|
|
|
wire pps_int;
|
|
assign pps_int = (count < ((CLK_FREQ / 100) * DUTY_CYCLE));
|
|
|
|
generate
|
|
if (PIPELINE == "OUT") begin : gen_pipeline_out
|
|
// create output register and assign to output
|
|
reg pps_reg = 1'b0;
|
|
assign pps = pps_reg;
|
|
|
|
always @(posedge clk) begin
|
|
if (reset) begin
|
|
pps_reg <= 1'b0;
|
|
end else begin
|
|
pps_reg <= pps_int;
|
|
end
|
|
end
|
|
end else begin : gen_pipeline_none
|
|
// no output register
|
|
assign pps = pps_int;
|
|
end
|
|
endgenerate
|
|
endmodule //pps_generator
|