FPGA实现延时链

news/2026/1/19 22:00:21/文章来源:https://www.cnblogs.com/WenGalois123/p/19005625

FPGA实现延时链

  之前有做一个输出100ps左右的延时链,当时找到一篇国外的论文,2015年的文章了。链接:《High-Resolution_Synthesizable_Digitally-Controlled_Delay_Lines》,根据论文的内容,要使输出的延时能够更加的准确,这里输出端保持不变,输入端走的是时钟的走线,这样做到了尽可能保证走线的时间一致,只跟原语CARRY4的单元延时有关。

  话不多说,直接上代码,由于没有更精确的设备进行测量延时,所以代码仅供参考。

  1 module delay_chain
  2 #(
  3     parameter                BUF_TYPE        = "BUFG"          ,
  4     parameter                RESOLUTION      = "COARSE"        ,
  5     parameter                CARRY4_STAGE    = 16            
  6 )
  7 (
  8     input                    i_signal                          ,
  9     input    [9:0]           i_carry_num                       ,
 10     output                   o_signal                        
 11 );
 12 
 13     wire                            w_signal_buf               ;
 14     wire    [4*CARRY4_STAGE-1:0]    w_stage_buf                ;
 15 
 16 
 17     generate
 18         if(BUF_TYPE == "BUFR")
 19         begin:BUF1
 20             BUFR
 21             #(
 22                 .BUFR_DIVIDE           ( "BYPASS"                     ),
 23                 .SIM_DEVICE            ( "7SERIES"                    )
 24             )
 25             BUFR_inst
 26             (
 27                 .O                     ( w_signal_buf                 ),
 28                 .CE                    ( 1'b1                         ),
 29                 .CLR                   ( 1'b0                         ),
 30                 .I                     ( i_signal                     )
 31             );
 32         end
 33         else if(BUF_TYPE == "BUFH")
 34         begin:BUF2
 35             BUFH BUFH_inst
 36             (
 37                 .O                     ( w_signal_buf                  ),
 38                 .I                     ( i_signal                      )
 39             );
 40         end
 41         else
 42         begin:BUF3
 43             BUFG BUFG_inst
 44             (
 45                 .O                     ( w_signal_buf                  ),
 46                 .I                     ( i_signal                      )
 47             );
 48         end
 49     endgenerate
 50 
 51 
 52     integer           i;
 53     genvar            n;
 54     
 55     generate
 56         if(RESOLUTION == "COARSE")
 57         begin
 58             reg        [CARRY4_STAGE-1:0]        r_carry_sel;
 59             wire       [CARRY4_STAGE-1:0]        w_carry_sel;
 60             
 61             always@(*)
 62             begin
 63                 r_carry_sel = 'd0;
 64                 for(i = 0; i <= CARRY4_STAGE - 1; i = i + 1)
 65                     if(i_carry_num == i)
 66                         r_carry_sel[CARRY4_STAGE-1-i] = 1'b1;
 67             end
 68             assign w_carry_sel = ~r_carry_sel;
 69             
 70             for(n = 0; n <= CARRY4_STAGE - 1; n = n + 1)
 71             begin
 72                 if(n == 0)
 73                 begin:carry4_first
 74                     CARRY4 CARRY4_inst
 75                     (
 76                         .CO            ( w_stage_buf[3:0]            ),
 77                         .O             (                             ),
 78                         .CI            ( 1'b0                        ),
 79                         .CYINIT        ( 1'b0                        ),
 80                         .DI            ( {3'b000,w_signal_buf}       ),
 81                         .S             ( {3'b111,w_carry_sel[0]}     )
 82                     );
 83                 end
 84                 else
 85                 begin:carry4_X
 86                     CARRY4 CARRY4_inst
 87                     (
 88                         .CO            ( w_stage_buf[4*(n+1)-1:4*n]  ),
 89                         .O             (                             ),
 90                         .CI            ( w_stage_buf[4*n-1]          ),
 91                         .CYINIT        ( 1'b0                        ),
 92                         .DI            ( {3'b000,w_signal_buf}       ),
 93                         .S             ( {3'b111,w_carry_sel[n]}     )
 94                     );
 95                 end
 96             end
 97         end
 98         else
 99         begin
100             reg        [4*CARRY4_STAGE-1:0]        r_carry_sel;
101             wire       [4*CARRY4_STAGE-1:0]        w_carry_sel;
102             
103             always@(*)
104             begin
105                 r_carry_sel = 'd0;
106                 for(i = 0; i <= 4*CARRY4_STAGE - 1; i = i + 1)
107                     if(i_carry_num == i)
108                         r_carry_sel[4*CARRY4_STAGE-1-i] = 1'b1;
109             end
110             assign w_carry_sel = ~r_carry_sel;
111             
112             for(n = 0; n <= CARRY4_STAGE - 1; n = n + 1)
113             begin
114                 if(n == 0)
115                 begin:carry4_first
116                     CARRY4 CARRY4_inst
117                     (
118                         .CO                ( w_stage_buf[3:0]            ),
119                         .O                 (                             ),
120                         .CI                ( 1'b0                        ),
121                         .CYINIT            ( 1'b0                        ),
122                         .DI                ( {4{w_signal_buf}}           ),
123                         .S                 ( w_carry_sel[3:0]            )
124                     );
125                 end
126                 else
127                 begin:carry4_X
128                     CARRY4 CARRY4_inst
129                     (
130                         .CO                ( w_stage_buf[4*(n+1)-1:4*n]  ),
131                         .O                 (                             ),
132                         .CI                ( w_stage_buf[4*n-1]          ),
133                         .CYINIT            ( 1'b0                        ),
134                         .DI                ( {4{w_signal_buf}}           ),
135                         .S                 ( w_carry_sel[4*(n+1)-1:4*n]  )
136                     );
137                 end
138             end
139         end
140     endgenerate
141     
142     assign o_signal = w_stage_buf[4*CARRY4_STAGE - 1];
143     
144 endmodule

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索基于 S7 - 200 的消防泵稳压控制系统程序

基于S7-200的消防泵稳压控制系统程序基于西门子S7-209的消防稳压控制系统程序。在消防领域&#xff0c;可靠的消防泵稳压控制系统至关重要。今天咱们就来深入聊聊基于西门子 S7 - 200 的消防稳压控制系统程序。首先得知道&#xff0c;这个系统的核心目标就是确保消防管网的压力…

图像金字塔与直方图

在计算机视觉领域&#xff0c;图像金字塔与直方图是两大基础且实用的技术。图像金字塔用于处理不同分辨率的图像&#xff0c;广泛应用于图像融合、超分辨率重建等场景&#xff1b;直方图则用于描述图像像素分布&#xff0c;是图像增强、阈值分割的核心工具。本文将结合完整代码…

2026年靠谱的电力箱变压器,干式箱变压器,地埋式箱变压器厂家专业评测推荐榜 - 品牌鉴赏师

引言在 2026 年的电力行业中,箱变压器作为电力传输与分配的关键设备,其性能与质量直接影响着电力系统的稳定运行。为了给广大用户提供专业、客观、公正的厂家推荐,我们依据国内相关行业协会公开的数据形成的指南,结…

APEX实战第9篇:手把手教你集成RAS轻松实现真正的数据安全

APEX实战第9篇:手把手教你集成RAS轻松实现真正的数据安全2026-01-19 21:46 AlfredZhao 阅读(0) 评论(0) 收藏 举报在 APEX 开发的江湖里,大家都有一个共同的痛点:权限控制代码满天飞。 为了实现“张三只能看张三…

2026年知名的门禁,门禁管理系统,智能门禁管理系统厂家选购参考榜 - 品牌鉴赏师

引言在当今数字化与智能化快速发展的时代,门禁及门禁管理系统已成为保障各类场所安全与高效运营的关键设施。无论是政府机关、商业综合体,还是住宅小区、医疗机构,都对门禁系统的安全性、稳定性和智能化程度提出了更…

django基于数据挖掘技术的台风灾害预测系统-计算机毕业设计源码+无LW文档

Django基于大数据旅游数据分析与推荐系统的设计与实现 摘要 本文阐述了一个基于Django框架&#xff0c;结合大数据技术的旅游数据分析与推荐系统的设计与实现过程。该系统旨在利用大数据分析技术深入挖掘旅游数据&#xff0c;为游客提供精准的旅游推荐和全面的旅游资讯&#xf…

Git 实战高频命令全解析(覆盖99%开发场景)

Git 实战高频命令全解析(覆盖99%开发场景) Git 作为代码版本控制的核心工具,命令看似繁杂,但日常开发中 99% 的场景仅需掌握 20+ 高频命令即可应对。本文整合实战必备命令,按功能模块分类,结合使用场景、核心用法…

2026年广州口碑好的小红书笔记优化,小红书效果运营,小红书区域代理公司优质推荐 - 品牌鉴赏师

2026 年广州口碑好的小红书效果运营及区域代理公司优质推荐在当今数字化营销的浪潮中,小红书作为一个极具影响力的社交电商平台,吸引了众多企业和品牌的关注。为了帮助大家在广州地区挑选到优质的小红书效果运营及区…

AI结对测试:人类与机器协作的新范式

第一章 范式转移&#xff1a;从自动化测试到人机共生 1.1 传统测试的瓶颈与AI的破局 数据佐证&#xff1a;2025年ISTQB行业报告显示&#xff0c;73%企业面临测试用例爆炸性增长&#xff08;年均增幅300%&#xff09; 典型案例&#xff1a;某金融系统回归测试中&#xff0c;AI…

SSRF(Server-Side Request Forgery:服务器端请求伪造) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

痞子衡嵌入式:如果你在找针对i.MX RT系列的OTA参考设计,可以持续关注Tiny OTA

Tiny OTA 是一个针对 i.MX RT 系列的 OTA 参考设计,其包含 MCU 端固件(tota_sbl 和 tota_app)和 PC 端 GUI 工具(MCU-TinyOtaUtility)两部分。tota_sbl 是示例 bootloader 程序,其由 MCU ROM 引导启动,该程序负…

聊聊A*算法与Dijkstra算法的Matlab及C实现

A*算法matlab程序&#xff0c;附送c程序 Djikstra算法matlab程序 代码特点&#xff1a; 1. matlab读入excel制作的地图&#xff0c;障碍物为1&#xff1b; 2.设置起始点和终止点&#xff0c;A*算法会输出一条近最优路径&#xff0c;因为这是启发式算法&#xff1b; 3.Dijkstra算…

大学生“特种兵出游”网站开发任务书

大学生“特种兵出游”网站开发任务书 一、任务名称 大学生“特种兵出游”网站开发 二、任务目的 针对大学生“特种兵出游”效率优先、高性价比、强计划感的核心需求&#xff0c;开发一款集攻略规划、资源预订、社交分享、智能推荐于一体的专属网站。解决传统旅游平台信息繁杂、…

测试经理的AI助手:自动分配任务与资源‌

智能革命&#xff1a;AI助手如何重构软件测试资源管理 作者&#xff1a;测试自动化架构师 | 2026年1月 一、传统测试资源管理的痛点矩阵 graph LR A[人力分配失衡] --> B[资深工程师处理低级任务] C[紧急需求冲击] --> D[测试周期被打断] E[多项目并行] --> F[设备…

探索MATLAB图像检索的多样世界

MATLAB图像检索&#xff0c;有各种方法的&#xff0c;词袋的&#xff0c;颜色特征&#xff0c;形状特征&#xff0c;hu不变矩&#xff0c;lbp纹理特征等在图像处理领域&#xff0c;图像检索一直是个热门话题。MATLAB作为强大的工具&#xff0c;为我们提供了实现多种图像检索方法…

LT6911UXC 与 LT9611UXC 视频桥接芯片固件架构与功能详解

龙讯lt6911uxc,lt9611uxc资料&#xff0c;有源码固件&#xff0c;支持4k60&#xff0c;支持对接海思3519a和3559a&#xff0c;hdmi转mipi&#xff0c;双通道4k60摘要 本文深入剖析龙讯半导体&#xff08;Lontium&#xff09;两款主流视频桥接芯片 LT6911UXC 与 LT9611UXC 的参考…

AI实时监控测试进度:预警延误与风险‌

测试进度管理的范式变革 随着DevOps与持续交付的普及&#xff0c;传统手工跟踪测试进度的模式已难以应对复杂系统迭代。本文基于2025年行业调研数据&#xff08;Gartner报告显示83%企业遭遇测试延误&#xff09;&#xff0c;深度解析AI监控系统的技术架构、预警机制及落地路径…

中华老黄历正版-分享几个正宗中华老黄历网站

中华老黄历正版,老黄历,也叫‌老黄历‌或‌皇历‌,是中国传统的历书,简单来说就是古人用来‌择吉避凶‌的“生活指南”。它融合了‌公历、农历、干支历‌等多种历法,还加入了‌节气、吉凶宜忌、冲煞、星宿‌等信息…

正宗中华老皇历-分享几个正宗中华老黄历网站

老黄历,也叫‌老黄历‌或‌皇历‌,是中国传统的历书,简单来说就是古人用来‌择吉避凶‌的“生活指南”。它融合了‌公历、农历、干支历‌等多种历法,还加入了‌节气、吉凶宜忌、冲煞、星宿‌等信息,内容非常丰富。…