b200: import original Kintex-7 clone port
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
// pps_switch.v
|
||||
module pps_switch (
|
||||
input wire clk, // 系统时钟(≥10 MHz 推荐)
|
||||
input wire rst_n, // 低电平有效异步复位
|
||||
input wire gps_pps, // GPS_PPS 输入
|
||||
input wire ext_pps, // EXT_PPS 输入
|
||||
output reg pps_out // 最终输出的PPS脉冲
|
||||
);
|
||||
|
||||
// 跟踪当前激活的PPS源
|
||||
reg active_pps_source; // 0=GPS, 1=EXT
|
||||
|
||||
// 边沿检测:上升沿产生一个时钟周期的高脉冲
|
||||
wire gps_posedge;
|
||||
wire ext_posedge;
|
||||
|
||||
edge_detect u_gps_edge (
|
||||
.clk(clk),
|
||||
.rst_n(rst_n),
|
||||
.din(gps_pps),
|
||||
.dout(gps_posedge)
|
||||
);
|
||||
|
||||
edge_detect u_ext_edge (
|
||||
.clk(clk),
|
||||
.rst_n(rst_n),
|
||||
.din(ext_pps),
|
||||
.dout(ext_posedge)
|
||||
);
|
||||
|
||||
// 状态机:0=等待GPS,1=等待EXT
|
||||
reg [1:0] state;
|
||||
localparam S_GPS = 2'b00;
|
||||
localparam S_EXT = 2'b01;
|
||||
|
||||
always @(posedge clk or negedge rst_n) begin
|
||||
if (!rst_n) begin
|
||||
state <= S_GPS;
|
||||
active_pps_source <= 1'b0; // 默认GPS
|
||||
end
|
||||
else begin
|
||||
case (state)
|
||||
S_GPS: begin
|
||||
if (gps_posedge) begin
|
||||
state <= S_GPS; // 保持GPS优先
|
||||
active_pps_source <= 1'b0; // 激活GPS
|
||||
end else if (ext_posedge) begin
|
||||
state <= S_GPS; // 仍保持GPS优先,但允许EXT临时补位
|
||||
active_pps_source <= 1'b1; // 激活EXT
|
||||
end
|
||||
end
|
||||
default: begin // 简化处理,实际应用中可扩展状态机
|
||||
if (ext_posedge) begin
|
||||
state <= S_GPS; // 回到GPS等待
|
||||
active_pps_source <= 1'b1; // 激活EXT
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
// 输出逻辑
|
||||
always @(posedge clk or negedge rst_n) begin
|
||||
if (!rst_n)
|
||||
pps_out <= 1'b0;
|
||||
else
|
||||
pps_out <= active_pps_source ? ext_pps : gps_pps;
|
||||
end
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user