b200: import original Kintex-7 clone port

This commit is contained in:
2026-08-23 11:42:22 +02:00
parent 2f5b331f30
commit 3dc3446559
10 changed files with 114777 additions and 568 deletions
+72
View File
@@ -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