当前位置:首页 > 工业控制 > 工业控制
[导读]工业分布式IO、运动控制、采集记录要对到亚微秒,不能靠软件读系统时间。FPGA做PTP的核心是把时间戳打在MAC/PHY边界:本地维护纳秒TSU,RX在帧起始锁t2、TX在帧起始锁t1/t3,协议栈只算offset和路径延迟,本地时钟用频率字驯服,级联设备再上透明时钟补驻留时间。


工业分布式IO、运动控制、采集记录要对到亚微秒,不能靠软件读系统时间。FPGA做PTP的核心是把时间戳打在MAC/PHY边界:本地维护纳秒TSU,RX在帧起始锁t2、TX在帧起始锁t1/t3,协议栈只算offset和路径延迟,本地时钟用频率字驯服,级联设备再上透明时钟补驻留时间。

一、TSU纳秒计数器

用一个独立时基,125MHz对应8ns步进,可再插值细化。PTP事件报文(Sync、Delay_Req等)在SOP打戳,普通报文不打。

module ptp_tsu #(parameter NS_W=64)(

 input clk, rst_n, input [31:0] sec_in, input [31:0] ns_in,

 input rx_sop, tx_sop, input [15:0] eth_type,

 output reg [63:0] rx_ts, tx_ts, output reg rx_vld, tx_vld);

 reg [31:0] sec; reg [31:0] ns;

 always @(posedge clk or negedge rst_n) begin

   if(!rst_n) {sec,ns}<=0;

   else begin

     ns<=ns+8;                         // 125MHz=8ns,实际按TSU时钟改

     if(ns>=1_000_000_000) begin ns<=0; sec<=sec+1; end

     if(sec_in&&ns_in) {sec,ns}<={sec_in,ns_in}; // 初始对时

   end

 end

 always @(posedge clk) begin

   rx_vld<=0; tx_vld<=0;

   if(rx_sop && eth_type==16'h88F7) begin

     rx_ts<={sec,ns}; rx_vld<=1; end   // 收Sync/Follow_Up等打t2/t4

   if(tx_sop && eth_type==16'h88F7) begin

     tx_ts<={sec,ns}; tx_vld<=1; end   // 发Sync/Delay_Req打t1/t3

 end

endmodule

打点位置越靠近MII/GMII/RGMII,越能避开DMA、协议栈、FIFO调度抖动;Xilinx千兆方案中PL在RGMII做识别与打戳,单跳可到约±100ns。

二、主从offset与路径延迟

Two-step最常用:主发Sync,硬件记t1;Follow_Up把t1回传。从收Sync记t2,从发Delay_Req记t3,主回Delay_Resp带t4。软件按四时间戳估链路延迟与偏差:路径延迟取“(t2−t1)+(t4−t3)”的一半,offset取“(t2−t1)−路径延迟”;若上下行不对称,再引入人工不对称补偿。工业级别要求打戳点、PHY延时、线缆长度都固定,普通交换机不感知PTP会引入随机排队,精度会掉到微秒级。

三、本地时钟频率驯服

别直接改秒值硬跳,先调频率再调相位。用32位频率字,默认0表示标称,PI控制器按offset更新:

module ptp_servo(

 input clk, rst_n, input signed [31:0] offset_ns,

 output reg signed [31:0] freq_ppb);

 reg signed [31:0] i_term;

 parameter Kp=8, Ki=1;

 always @(posedge clk or negedge rst_n) begin

   if(!rst_n) begin freq_ppb<=0; i_term<=0; end

   else begin

     i_term<=i_term + Ki*offset_ns/1024;

     freq_ppb<=Kp*offset_ns/1024 + i_term;   // ppb级微调晶振/PLL

     if(freq_ppb> 200000) freq_ppb<= 200000;  // 限幅,防失控

     if(freq_ppb<-200000) freq_ppb<=-200000;

   end

 end

endmodule

freq_ppb送TSU或外部DPLL/OCXO;TCXO温漂ppm级、OCXO可到ppb级,工业现场断主钟还能Holdover。大offset可一次性设相移,小offset只用频率跟踪,避免时间倒跳。

四、透明时钟与工业落地

多跳车间交换机若不支持PTP,每跳排队都会污染t2/t4。FPGA做透明时钟:入端口打tin、出端口打tout,驻留时间累加到报文correctionField,下游按“主到从总修正”抵掉交换延迟。 边界时钟按端口终结PTP再向下发,适合跨网段;纯线形采集用透明时钟更省。

工程要点:

打戳点统一在MAC入口/出口或RGMII,PHY内部延时、SFP、电缆时延单独标定,电缆约5ns/m;

PTP走独立VLAN/优先级队列,Sync、Delay_Req优先于数据;工业交换用BC/TC,不用家用交换机;

1G RGMII TSU时钟125MHz,10G/25G用MAC IP硬件TSU,TDC辅助可把周期量化误差压到1ns内;

上电先收Announce做BMCA选主,再Sync+Follow_Up+Delay求offset,稳定后1~4s一包即可;

ILA抓t1~t4、freq_ppb、sec/ns,和linuxptp主钟对比offset;若长期漂移大查晶振温漂,若跳动大查交换机



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭