FPGA实现基于时间内插法的TDC测量----第一章

前段时间有同学找我做这个毕业设计,一开始也不太了解TDC测量,只是听学姐说是用FPGA实现时间测量的项目,第一直觉觉得不太难,所以就答应帮忙,所以此处给所有准备使用FPGA实现TDC的朋友们第一个建议,这个项目真的不太容易,请做好心理准备!
进入正题,首先是什么是TDC和什么是时间内插法?
TDC : Time To Digital Convertor
TDC的分类 : 起始停止计数型TDC、基于时间内插法、基于时间戳技术的TDC、基于时间放大技术的TDC
关于这些TDC技术具体是什么请读者朋友们自行百度,这里由于篇幅有限个人时间有限,暂不一 一详述,我想在这里起到抛砖引玉的作用,把个人做这个项目中遇到的问题和解决的方法分享给大家,希望大家能在做相关项目时能尽快找到方向少走弯路。
时间内插法我的理解是:在FPGA中已有的时钟的周期内部插入小的计数模块(延迟链与时钟相位),实现对已有的时钟的一个时钟周期再分割,使其有更小的刻度,这样时钟周期的测量精度也就能更高
时间内插法简易原理图
红色的竖线即为插入的延迟单元,这些延迟单元将一个时钟周期平均等分,使得时钟周期带上了刻度,由于每个延迟链的延迟时间基本固定,所以可以精确的知道每个刻度代表的时间,从而实现实现更精确的测量。
如果你准备使用FPGA实现基于时间内插法的TDC测量的话,在

  • 7
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
首先,时间数字转换器(TDC)是一种基于时间测量方法,它可以将两个事件之间的时间差转换为数字输出。而时间内插法TDC中常用的一种技术,它可以提高精度和分辨率。 下面给出一个基于时间内插法TDC的Verilog实现,其中采用了两级内插来提高精度和分辨率。 ``` module TDC ( input clk, // 时钟信号 input rst, // 复位信号 input start, // 开始测量信号 output reg [15:0] result // 测量结果输出 ); reg [15:0] cnt1; // 第一级计数器 reg [15:0] cnt2; // 第二级计数器 reg [1:0] state; // 状态机状态 always @(posedge clk or posedge rst) begin if (rst) begin cnt1 <= 16'b0; cnt2 <= 16'b0; state <= 2'b00; result <= 16'b0; end else begin case (state) 2'b00: begin // 等待开始测量 if (start) begin state <= 2'b01; cnt1 <= 16'b0; cnt2 <= 16'b0; end end 2'b01: begin // 第一级计数器 cnt1 <= cnt1 + 1; if (cnt1 == 16'b1111111111111111) begin state <= 2'b10; cnt2 <= 16'b0; end end 2'b10: begin // 第二级计数器 cnt2 <= cnt2 + 1; if (cnt2 == 16'b1111111111111111) begin state <= 2'b11; result <= cnt1 + (cnt2 >> 1); end end 2'b11: begin // 输出结果 result <= cnt1 + (cnt2 >> 1); state <= 2'b00; end endcase end end endmodule ``` 该Verilog代码实现了一个基于时间内插法TDC,其中包括一个状态机、两个计数器和一个结果输出。当开始测量信号start被置高后,状态机开始工作,第一级计数器开始计数,当达到最大值时,第二级计数器开始计数,同时第一级计数器清零,当第二级计数器达到最大值时,状态机输出结果,其中第二级计数器的值右移一位(即除以2),然后与第一级计数器相加,得到最终的测量结果。 需要注意的是,该Verilog代码仅为参考,具体实现还需要根据具体的芯片和应用场景进行调整和优化。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值