国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的TDC延時設計方案

C29F_xilinx_inc ? 來源:賽靈思 ? 作者:賽靈思 ? 2022-02-16 16:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、參考

https://cas.tudelft.nl/fpga_tdc/TDC_basic.html

2、原理

采用FPGA的CARRY4進位單元,每個CARRY4的COUT連接到下一個CARRY4的CIN,這樣級聯起來,形成延時鏈;每個COUT做為抽頭輸出到觸發器,通過本地時鐘進行數據采樣。假定每個延時鏈的延時是固定的(最后需要標定),可通過采樣值大致估算所測信號與本地時鐘上升沿之間的間隔,當得到適當的標定后,可獲得較高的精度。

3、當前測試的芯片是XC7K325TFFG900 -2

仿真中的carry4 除第一級外,其他的carry4輸出到輸入延遲固定都是53ps,但是這是4個進位的延遲時間,只是vivado仿真工具有限制,且需要后仿真。

基于FPGA的TDC延時設計方案

4、源代碼

頂層

tdc_top.v

module tdc_top#(
parameter STAGE = 200,
parameter GAP_BITS = 8
)(
input wire sg_start,
input wire clk_sys,
input wire reset ,
output wire cs_gap,
output wire [GAP_BITS-1:0] value_gap
);

wire clk_bufg;

clk_wiz_0 clk_wiz_0_inst(
.clk_out1(clk_bufg),
.clk_in1(clk_sys)
);

wire valid_pre;

wire valid;
wire [STAGE-1:0] value_latch;

wire bin_cs;
wire [GAP_BITS-1:0] bin;

wire sg_bufr;

BUFR #(
.BUFR_DIVIDE("BYPASS"), // Values: "BYPASS, 1, 2, 3, 4, 5, 6, 7, 8"
.SIM_DEVICE("7SERIES") // Must be set to "7SERIES"
)
BUFR_INST (
.O(sg_bufr), // 1-bit output: Clock output port
.CE(1'b1), // 1-bit input: Active high, clock enable (Divided modes only)
.CLR(1'b0), // 1-bit input: Active high, asynchronous clear (Divided modes only)
.I(sg_start) // 1-bit input: Clock buffer input driven by an IBUF, MMCM or local interconnect
);

FDCE #(
.INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
)
FDCE_INST2 (
.Q(valid_pre), // 1-bit Data output
.C(clk_bufg), // 1-bit Clock input
.CE(1'b1), // 1-bit Clock enable input
.CLR(1'b0), // 1-bit Asynchronous clear input
.D(sg_bufr) // 1-bit Data input
);

FDCE #(
.INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
)
FDCE_INST3 (
.Q(valid), // 1-bit Data output
.C(clk_bufg), // 1-bit Clock input
.CE(1'b1), // 1-bit Clock enable input
.CLR(1'b0), // 1-bit Asynchronous clear input
.D(valid_pre) // 1-bit Data input
);

line_tdc#(
.STAGE (STAGE)

) line_tdc_inst(
.sg_start (sg_bufr),
.clk_bufg (clk_bufg),
.reset (reset),
.value_latch (value_latch)
);

latch2bin#(
.GAP_BITS (GAP_BITS)
) latch2bin_inst(
.clk_bufg (clk_bufg),
.reset (reset),
.valid (valid),
.value_latch (value_latch),
.bin_cs (cs_gap),
.bin (value_gap)
);

延遲線代碼

line_tdc.v

module line_tdc#(
parameter STAGE = 256
)(
input wire sg_start,
input wire clk_bufg,
input wire reset,
output wire [STAGE - 1:0] value_latch
);

wire [STAGE - 1:0] dat_reg0;
wire [STAGE - 1:0] dat_reg1;

genvar i;
generate
for (i = 0; i if(i == 0) begin :carry4_first
CARRY4 CARRY4_INST (
.CO (dat_reg0[3:0]), // 4-bit carry out
.O (), // 4-bit carry chain XOR data out
.CI (1'b0), // 1-bit carry cascade input
.CYINIT (sg_start), // 1-bit carry initialization
.DI (4'b0000), // 4-bit carry-MUX data in
.S (4'b1111) // 4-bit carry-MUX select input
);
end
if (i > 0) begin :carry4_others
CARRY4 CARRY4_OTHERS (
.CO (dat_reg0[4*(i+1)-1:4*i]), // 4-bit carry out
.O (), // 4-bit carry chain XOR data out
.CI (dat_reg0[4*i-1]), // 1-bit carry cascade input
.CYINIT (1'b0), // 1-bit carry initialization
.DI (4'b0000), // 4-bit carry-MUX data in
.S (4'b1111) // 4-bit carry-MUX select input
);
end
end
endgenerate

genvar j;
generate
for (j = 0; j FDRE #(
.INIT (1'b0) // Initial value of register (1'b0 or 1'b1)
) FDRE_INST0 (
.Q (dat_reg1[j]), // 1-bit Data output
.C (clk_bufg), // 1-bit Clock input
.CE (1'b1), // 1-bit Clock enable input
.R (reset), // 1-bit Synchronous reset input
.D (dat_reg0[j]) // 1-bit Data input
);

FDRE #(
.INIT (1'b0) // Initial value of register (1'b0 or 1'b1)
) FDRE_INST1 (
.Q (value_latch[j]), // 1-bit Data output
.C (clk_bufg), // 1-bit Clock input
.CE (1'b1), // 1-bit Clock enable input
.R (reset), // 1-bit Synchronous reset input
.D (dat_reg1[j]) // 1-bit Data input
);
end
endgenerate

endmodule

延遲線數字碼轉換二進制輸出
latch2bin.v

module latch2bin#(
parameter GAP_BITS = 8

)(
input wire clk_bufg,
input wire reset,
input wire valid,
input wire [(2**GAP_BITS)-1:0] value_latch,
output reg bin_cs,
output reg [GAP_BITS-1:0] bin
);

(* *)reg [(2**GAP_BITS)-2:0] decoding [0:GAP_BITS-4];

(* *)reg [GAP_BITS:0] binary [0:GAP_BITS-3];

(* *)reg [GAP_BITS-2:0] data_valid;

(* *)reg [15:0] decode_final;

(* *)reg [GAP_BITS-1:0] bin_final;

(* *)reg [3:0] ones;

(* *)reg [GAP_BITS:0] binary_r;

always@(*) begin
decoding[0] = value_latch[(2**GAP_BITS)-2:0];
data_valid[0] end

genvar i;
generate
for (i = 0; i always@(posedge clk_bufg) begin
if(reset) begin
decoding[i+1] binary[i+1] data_valid[i+1] end
else begin
binary[i+1][GAP_BITS:GAP_BITS-1-i] data_valid[i+1] if(decoding[i][((2**(GAP_BITS-i))-2)/2]==1'b1) begin
decoding[i+1][((2**(GAP_BITS-i))-2)/2-1:0] end
else begin
decoding[i+1][((2**(GAP_BITS-i))-2)/2-1:0] end
end
end
end
endgenerate

always@(posedge clk_bufg) begin
if(reset) begin
ones data_valid[GAP_BITS-3] binary[GAP_BITS-3] bin_final end
else begin
ones decoding[GAP_BITS-4][0] + decoding[GAP_BITS-4][1] + decoding[GAP_BITS-4][2] + decoding[GAP_BITS-4][3] +
decoding[GAP_BITS-4][4] + decoding[GAP_BITS-4][5] + decoding[GAP_BITS-4][6] + decoding[GAP_BITS-4][7] +
decoding[GAP_BITS-4][8] + decoding[GAP_BITS-4][9] + decoding[GAP_BITS-4][10] + decoding[GAP_BITS-4][11] +
decoding[GAP_BITS-4][12] + decoding[GAP_BITS-4][13] + decoding[GAP_BITS-4][14] + decoding[GAP_BITS-4][15];

data_valid[GAP_BITS-3] binary[GAP_BITS-3]

data_valid[GAP_BITS-2] bin_final end
end

always@(posedge clk_bufg) begin
if(reset) begin
bin_cs bin end
else begin
if(data_valid[GAP_BITS-2] == 1'b1) begin
bin_cs bin end
else begin
bin_cs bin end
end
end

endmodule

測試

tb_tdc_top.v

module tb_tdc_top;

reg clk_sys;
reg sg_start;
reg reset;
wire [7:0] value_gap;

tdc_top tdc_top_inst(
.sg_start (sg_start),
.clk_sys (clk_sys),
.reset (reset),
.value_gap (value_gap)
);

initial begin
clk_sys = 0;
sg_start = 0;
reset = 1;
#1000;
reset = 0;
#116;
sg_start = 1;
#3;
sg_start = 0;
end

always #(5) clk_sys = ~clk_sys;

endmodule

時鐘模塊100M輸入,400M輸出,并經過BUFG資源。

基于FPGA的TDC延時設計方案

由于每個carry4的延遲時間是53ps,每個時鐘周期是2.5ns,最多需要50個carry4級聯即可。

5、約束

手冊上有寫,對于carry4的第一級約束后,下一級的carry4會以最鄰近的擺放。tdc.xdc

set_property PACKAGE_PIN AD21 [get_ports reset]
set_property PACKAGE_PIN AE23 [get_ports sg_start]
set_property PACKAGE_PIN AD23 [get_ports clk_sys]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {value_gap[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports cs_gap]
set_property IOSTANDARD LVCMOS33 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports sg_start]
set_property IOSTANDARD LVCMOS33 [get_ports clk_sys]

set_property LOC SLICE_X0Y0 [get_cells line_tdc_inst/genblk1[0].carry4_first.CARRY4_INST]

6、后仿真測試結果

基于FPGA的TDC延時設計方案

基于FPGA的TDC延時設計方案
基于FPGA的TDC延時設計方案
基于FPGA的TDC延時設計方案
基于FPGA的TDC延時設計方案
基于FPGA的TDC延時設計方案
7、以上可以對sg_start和clk_bufg兩個信號的間隔進行大致估算,通過計算大致可計算出第一級carry4輸入的延時。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1660

    文章

    22412

    瀏覽量

    636300
  • 觸發器
    +關注

    關注

    14

    文章

    2056

    瀏覽量

    63402
  • TDC
    TDC
    +關注

    關注

    0

    文章

    42

    瀏覽量

    14909
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    TDC7200:高精度時間數字轉換器的深度剖析與應用指南

    TDC7200:高精度時間數字轉換器的深度剖析與應用指南 在電子設計領域,時間測量的精度和效率至關重要。TDC7200作為一款專為飛行時間應用設計的時間數字轉換器(TDC),在諸多領域展現出了卓越
    的頭像 發表于 02-25 11:20 ?129次閱讀

    探索TDC1000:超聲波傳感模擬前端的卓越之選

    和接近傳感等應用提供了出色的解決方案。今天,我們就來深入了解一下TDC1000的特點、應用以及設計要點。 文件下載: tdc1000.pdf 一、TDC1000的強大特性 (一)測量與
    的頭像 發表于 02-25 11:10 ?116次閱讀

    TDC1000-Q1:超聲波傳感模擬前端的卓越之選

    各種超聲波傳感應用提供了全面而可靠的解決方案。 文件下載: tdc1000-q1.pdf 1. 產品特性亮點 1.1 汽車級認證與寬溫范圍 TDC1000-Q1通過了AEC-Q100汽車應用認證,溫度
    的頭像 發表于 02-25 11:10 ?139次閱讀

    TDC1011-Q1:超聲波傳感模擬前端的技術剖析與應用指南

    TDC1011-Q1:超聲波傳感模擬前端的技術剖析與應用指南 在當今的電子測量領域,精確和高效的傳感技術是推動各行業創新發展的關鍵。TI推出的TDC1011-Q1單通道超聲波傳感模擬前端(AFE)為
    的頭像 發表于 02-25 10:30 ?159次閱讀

    TDC1011:超聲波傳感模擬前端的卓越之選

    (AFE),為這些應用提供了高性能、低功耗的解決方案。本文將深入探討TDC1011的特性、應用、工作原理以及設計要點,幫助工程師更好地了解和應用這款產品。 文件下載: tdc1011.pdf 一、
    的頭像 發表于 02-12 17:15 ?6149次閱讀

    淺談低功耗晶振的設計方案

    在電源受限的電路應用中,為延長電池壽命或降低系統整體功耗,晶振通常需要具備低功耗特性。今天,凱擎小妹來和大家聊聊低功耗晶振的設計方案
    的頭像 發表于 02-11 11:34 ?354次閱讀
    淺談低功耗晶振的<b class='flag-5'>設計方案</b>

    松下TDC系列導電聚合物鉭固體電容器:設計與應用指南

    松下TDC系列導電聚合物鉭固體電容器:設計與應用指南 作為電子工程師,我們在設計電路時,電容器的選擇至關重要。今天我要和大家分享松下POSCAP中的TDC系列導電聚合物鉭固體電容器的相關知識
    的頭像 發表于 12-22 10:15 ?519次閱讀

    電磁頻譜監測平臺系統設計方案

    電磁頻譜監測平臺系統設計方案
    的頭像 發表于 10-23 16:03 ?597次閱讀
    電磁頻譜監測平臺系統<b class='flag-5'>設計方案</b>

    電磁頻譜管理系統設計方案

    電磁頻譜管理系統設計方案
    的頭像 發表于 10-20 14:02 ?782次閱讀
    電磁頻譜管理系統<b class='flag-5'>設計方案</b>

    電磁頻譜監測系統軟件設計方案

    電磁頻譜監測系統平臺設計方案
    的頭像 發表于 09-28 16:03 ?370次閱讀
    電磁頻譜監測系統軟件<b class='flag-5'>設計方案</b>

    電磁頻譜監測系統設計方案

    電磁頻譜監測系統平臺設計方案
    的頭像 發表于 09-28 15:58 ?788次閱讀
    電磁頻譜監測系統<b class='flag-5'>設計方案</b>

    聊聊FPGA中的TDC原理

    今天我們不談高大上的物理學,只聊聊如何在 FPGA 中,用一串加法器和 D 觸發器,“數清楚時間”——這就是時間數字轉換器(TDC)的魅力。
    的頭像 發表于 09-02 15:15 ?2107次閱讀
    聊聊<b class='flag-5'>FPGA</b>中的<b class='flag-5'>TDC</b>原理

    TDC1000測液體濃度

    想用TDC1000做液體濃度檢測的產品,有沒有應用經驗的大神給指點指點,做好能接開發項目的。
    發表于 07-23 21:06

    通過什么方法能獲得關于Ethercat方面的設計方案和設計資料

    您好通過什么方法能獲得關于Ethercat方面的設計方案和設計資料,我們主要關于主站,從站IO和運動控制方面的資料,謝謝!!
    發表于 05-28 10:07

    基于FPGA的AM調制系統設計方案

    本系統由FPGA、串口屏、DAC模塊和AD831組成。FPGA通過調用宏功能模塊NCO,按照輸入時鐘50MHz,產生相應頻率正弦信號輸出,共產生兩路,一路為調制信號,另一路為載波信號。根據AM調制
    的頭像 發表于 05-23 09:45 ?1647次閱讀
    基于<b class='flag-5'>FPGA</b>的AM調制系統<b class='flag-5'>設計方案</b>