LVDS系列8:Xilinx 7系可編程輸入延遲(一)

在解析LVDS信號時,十分重要的一環就是LVDS輸入信號線在經過PCB輸入到FPGA中后,本來該嚴格對齊的信號線會出現時延,所以需要在FPGA內部對其進行延時對齊后再進行解析。
Xilinx 7系器件中用于輸入信號延時的組件為IDELAYE2可編程原語,通過可以編程的32抽頭延遲線、環繞式延遲實現信號延遲。
原語可用于組合輸入路徑、寄存器輸入路徑、FPGA邏輯直接訪問;可以對單個輸入引腳進行信號延遲。原語的抽頭延遲分辨率也就是延時精度由IDELAYCTRL原語控制。

? IDELAYE2框圖:
在這里插入圖片描述
? IDELAYE2例化:
(* IODELAY_GROUP = <iodelay_group_name> *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL

IDELAYE2 #(
.CINVCTRL_SEL(“FALSE”), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC(“IDATAIN”), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE(“FALSE”), // Reduced jitter (“TRUE”), Reduced power (“FALSE”)
.IDELAY_TYPE(“FIXED”), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL(“FALSE”), // Select pipelined mode, FALSE, TRUE
.REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
.SIGNAL_PATTERN(“DATA”) // DATA, CLOCK input signal
)
IDELAYE2_inst (
.CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output
.DATAOUT(DATAOUT), // 1-bit output: Delayed data output
.C?, // 1-bit input: Clock input
.CE(CE), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input
.DATAIN(DATAIN), // 1-bit input: Internal delay data input
.IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O
.INC(INC), // 1-bit input: Increment / Decrement tap delay input
.LD(LD), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input
);

? IDELAYE2例化端口:
在這里插入圖片描述
端口列表如上圖:
C:時鐘輸入,原語的所有控制輸入(如REGRST、LD、CE、INC)都與該時鐘輸入同步。當該原語配置為VARIABLE, VAR_LOAD和VAR_LOAD_PIPE模式時,該端口必須連接有效時鐘。且該時鐘必須由全局或區域時鐘緩沖器提供。
REGRST:寄存器同步復位信號,當復位置1時,將原語內部流水線寄存器置0,僅在
VAR_LOAD_PIPE模式下使用。
LD:加載抽頭值,LD端口置1有效,且與輸入時鐘C同步;
在VARIABLE模式下,IDELAY置高LD端口會加載IDELAY_VALUE參數端口設置的抽頭值作為新的延時值,此時LD端口可當作IDELAY的復位信號,拉高LD后延時抽頭值將設置為IDELAY_VALUE參數的值。
在VAR_LOAD模式下,IDELAY會加載由CNTVALUEIN端口設置的抽頭值作為新的延時值。
在VAR_LOAD_PIPE模式下,IDELAY會加載當前在流水線寄存器中的抽頭值作為新的延時值。
CE:控制INC端口作為抽頭值增量或減量的使能,就是CE有效,INC端口的值才能生效。且該端口只在VARIABLE, VAR_LOAD, VAR_LOAD_PIPE這三個模式下使用。
INC:抽頭延遲的增量減量,搭配CE使用,只有當CE為高時,INC才有效,當CE為低時INC值不起作用,其中INC=1時抽頭值遞增,INC=0時抽頭值遞減,且INC和CE都與時鐘C同步,且當CE保持高,每個C的時鐘周期,根據INC的值設置,抽頭值會在下一個時鐘C的上升沿開始進行抽頭值的遞增遞減操作;
IDELAYE2原語的可編程延遲抽頭會執行環繞操作,原語的延遲抽頭值為0~31共32個數,環繞是指當抽頭值當前到達邊界,如0或31,在0時如果遞減,抽頭值將變為31,在31時如果遞增,抽頭值將變為0;
且信號的延時也只有32個選項,例如對一個信號從延時抽頭值0開始一直做INC遞增的延時操作,當抽頭值到達31,遞增1后,抽頭值到0,此時這個抽頭值0的信號延時與最開始抽頭值初始為0的延時是相同的,而不是指從31遞增到0后,信號延時在延時抽頭值31的延時基礎上又往后延遲了一個抽頭的延時,這就是該原語的環繞操作。
CINVCTRL:動態控制輸入時鐘C的極性,且在切換極性時,兩個時鐘周期內不要控制IDLEAY原語的控制端口。
CNTVALUEIN:用于動態切換加載的抽頭值。
IDATAIN:IDATAIN端口輸入來自IOB,該輸入數據由IOB中的IBUF驅動,也就是FPGA的管腳輸入的信號,對FPGA的外部輸入信號作延時。
DATAIN:DATAIN端口輸入來自FPGA邏輯,該端口為內部邏輯提供了可訪問的延遲線。
LDPIPEEN:流水線寄存器加載,當該端口為1時,會把當前CNTVALUEIN引腳上的抽頭值加載到管道寄存器中。
DATAOUT:來自兩個數據輸入端口的延遲數據,延時后的輸出數據線可以連接到ILOGIC、ISERDES組件或是FPGA邏輯。
CNTVALUEOUT:該端口用于報告此時輸出的延遲數據加載的延遲抽頭值。

? IDELAYE2例化參數:
在這里插入圖片描述
在這里插入圖片描述
上圖為原語的例化參數:
IDELAY_TYPE:設置IDELAY原語的延遲的工作模式,有FIXED, VARIABLE, VAR_LOAD,
VAR_LOAD_PIPE四種可選模式;
設置為FIXED模式時,抽頭延遲值由參數IDELAY_VALUE的值確定,且該值是預設的,配置后無法更改;
設置為VARIABLE模式時,抽頭延遲可選,設置CE=1和INC=1增加抽頭延遲,設置CE=1和INC=0減少抽頭延遲,遞增遞減操作與C時鐘同步;
設置為VAR_LOAD模式時,置高LD端口,原語將立即加載CNTVALUEIN端口的值作為新的抽頭延遲值,同時支持CE和INC協同的遞增遞減操作;
設置為VAR_LOAD_PIPE模式時,置高LDPIPEEN端口,原語將立即將CNTVALUEIN端口的值加載到原語內部的流水線寄存器中暫存,當置高LD端口,原語將立即加載流水線寄存器中的抽頭值作為新的抽頭延遲值(該模式一般用于多通道同步修改延遲的情況,同步性強,優化時序),同時支持CE和INC協同的遞增遞減操作。
DELAY_SRC:選擇原語的輸入數據源端口,可選值為IDATAIN和DATAIN,設置為IDATAIN時原語使用IDATAIN端口作為輸入數據,數據來自IO引腳,設置為DATAIN時原語使用DATAIN端口作為輸入數據,數據來自FPGA內部邏輯。
IDELAY_VALUE:指定了初始的抽頭延遲數量,默認為0,可設置為0~31之間任意整數;
FIXED模式下,IDELAY_VALUE參數指定原語的抽頭延時值;
VARIABLE模式下,IDELAY_VALUE值將作為延遲線的初始延時值,LD置高將會將原語的延遲重置為IDELAY_VALUE的值;
VAR_LOAD和VAR_LOAD_PIPE模式下,IDELAY_VALUE參數不被使用。
HIGH_PERFORMANCE_MODE:高性能模式選擇參數,可選值為TRUE和FALSE,
TRUE模式降低抖動,降低抖動將會略微增加功耗,適用于高速場景,
FALSE降低功耗但抖動增加,適用于低速場景。
SIGNAL_PATTERN:數據輸入的信號類型,可選值為DATA和CLOCK,由于時鐘信號和數據信號有不同的電器特性,時鐘信號具有周期性,而數據信號是隨機的,兩者在延遲鏈中積累的抖動量也不同,所以選擇DATA(輸入數據為數據信號)和CLOCK(輸入數據為時鐘信號),原語將會根據時鐘和數據的電氣特性的不同執行不同的抖動優化策略。
REFCLK_FREQUENCY:參考時鐘頻率,與IDELAYCTRL原語參考時鐘需嚴格匹配,否則將會校準失敗,范圍為(190.0-210.0, 290.0-310.0),默認使用200.0,設置為200MHZ即可。
CINVCTRL_SEL:時鐘動態反相的使能,輸入時鐘端口C是否可以反相,改參數搭配CINVCTRL端口使用,當參數設置為TRUE的同時將CINVCTRL端口置1可以將時鐘C反相,當參數設置為FALSE時,時鐘不會反相,CINVCTRL端口也將無法使用。
PIPE_SEL:僅在VAR_LOAD_PIPE模式下工作,控制流水線寄存器是否使用,設置為TRUE時啟用流水線寄存器,FALSE時不啟用流水線寄存器。

? 例化約束:
Vivado的例化模板中IDELAYE2原語還有一行約束:
(* IODELAY_GROUP = <iodelay_group_name> *)
該約束可以定義IDELAYE2原語的組,可以將多個IDELAYE2和ODELAYE2原語與一個IDELAYCTRL原語綁定,確保它們共享同一個參考時鐘并物理相鄰,減少時鐘偏差;
使用時同一組的IDELAYE2和ODELAYE2和IDELAYCTRL原語都約束指定為一個相同的組名即可。

? IDELAY工作模式:
IDELAY_TYPE參數設置工作模式,有FIXED, VARIABLE, VAR_LOAD,VAR_LOAD_PIPE:
FIXED固定延遲模式:
IDELAY_VALUE參數值將配置為延時值,配置后無法更改;
VARIABLE可變延遲模式:
在這里插入圖片描述
由上表,該模式下,LD置1將加載IDELAY_VALUE參數值作為延時值;
CE和INC搭配執行當前延時值的遞增遞減操作,CE=1,INC=1遞增,CE=1,INC=0遞減;
其他輸入延時值保持不變;
在這里插入圖片描述
上圖為VARIABLE模式下,IDELAY_VALUE參數值為0的時序:
時刻1,LD置1,原語加載為IDELAY_VALUE參數值,延時值DATAOUT變為tap0,
時刻2,CE=1,INC=1,延時值從0遞增到1,從tap0變為tap1;

VAR_LOAD可加載變量延遲模式:
在這里插入圖片描述
由上表,該模式下,
CE和INC搭配執行當前延時值的遞增遞減操作,同上條;
此時LD置1將加載CNTVALUEIN端口值作為延時值;
其他輸入延時值保持不變;
在這里插入圖片描述
上圖為VAR_LOAD模式下的時序,
時刻1,LD置1,加載CNTVALUEIN端口的值2,延時值DATAOUT變為tap2,
時刻2,CE=1,INC=1,延時值從2遞增到3,從tap2變為tap3,
時刻3,LD置1,加載CNTVALUEIN端口的值10,延時值DATAOUT變為tap10,

VAR_LOAD_PIPE可加載變量流水線寄存延遲模式:
該模式與VAR_LOAD模式類似,
CE和INC執行遞增遞減;
不同的是LD的操作,該模式下LD置1將加載內部流水線寄存器值作為延時值,
流水線寄存器則是在LDPIPEEN端口置1時,將CNTVALUEIN端口的值加載到寄存器中;

下節講解IDELAYCTRL原語和IDELAYE2的搭配使用;
本文章由威三學社出品
對課程感興趣可以私信聯系

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79861.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI驅動研發效率在中后臺的實踐

本文探討了AI驅動的中后臺前端研發實踐&#xff0c; 涵蓋設計出碼、接口定義轉換、代碼擬合、自動化測試等多個環節&#xff0c;通過具體案例展示了AI技術如何優化研發流程并提升效率。特別是在UI代碼編寫和接口聯調階段&#xff0c;并提出了設計出碼&#xff08;Design to Cod…

【Rust 精進之路之第6篇-流程之舞】控制流:`if/else`, `loop`, `while`, `for` 與模式匹配初窺

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025-04-20 引言:讓代碼“活”起來——指令的流動 在前面的文章中,我們已經掌握了 Rust 的基礎數據類型(標量和復合類型)以及如何通過變量綁定來存儲和命名它們。這相當于我們準備好了程序…

C++ 表達式求值的基礎(四十九)

1. 運算符的分類 1.1 按操作數個數 一元運算符&#xff08;Unary&#xff09; 作用于單個操作數&#xff1a; 取地址 &obj解引用 *ptr邏輯非 !b一元加減 x, -x遞增遞減 i, i-- 二元運算符&#xff08;Binary&#xff09; 作用于兩個操作數&#xff1a; 算術運算 a b, a …

Three.js + React 實戰系列 : 從零搭建 3D 個人主頁

可能你對tailiwindcss毫不了解&#xff0c;別緊張&#xff0c;記住我們只是在學習&#xff0c;學習的是作者的思想和技巧&#xff0c;并不是某一行代碼。 在之前的幾篇文章中&#xff0c;我們已經熟悉了 Three.js 的基本用法&#xff0c;并通過 react-three-fiber 快速構建了一…

Kotlin實現Android應用保活方案

Kotlin實現Android應用保活優化方案 以下的Android應用保活實現方案&#xff0c;更加符合現代Android開發規范&#xff0c;同時平衡系統限制和用戶體驗。 1. 前臺服務方案 class OptimizedForegroundService : Service() {private val notificationId 1private val channel…

windows拷貝文件腳本

1、新建腳本文件xxx.bat&#xff0c;名字任意&#xff0c;后綴未.bat即可&#xff0c;將以下內容拷貝進去&#xff0c;修改src和des為自己文件的目錄即可。 echo off :: 設置字符集為UTF-8&#xff0c;命令窗口能正確顯示中文字符。 chcp 65001 rem 讀取當前目錄并進入當前目…

Qt 核心庫總結

Qt 核心庫&#xff08;QtCore&#xff09; QtCore 是 Qt 框架的基礎模塊&#xff0c;提供非圖形界面的核心功能&#xff0c;是所有 Qt 應用程序的基石。它包含事件循環、信號與槽、線程管理、文件操作、字符串處理等功能&#xff0c;適用于 GUI 和非 GUI 應用程序。本文將從入…

大模型相關面試問題原理及舉例

大模型相關面試問題原理及舉例 目錄 大模型相關面試問題原理及舉例Transformer相關面試問題原理及舉例大模型模型結構相關面試問題原理及舉例注意力機制相關面試問題原理及舉例大模型與傳統模型區別 原理:大模型靠海量參數和復雜結構,能學習更復雜模式。傳統模型參數少、結構…

【AI+HR實戰應用】用DeepSeek提升HR工作效能

用DeepSeek提升HR工作效能 一、AI 與 AIGC 簡介二、DeepSeek 介紹三、使用 DeepSeek 的渠道及硬件要求四、使用 DeepSeek 的核心技巧五、AI 在人力資源的應用場景六、AI 繪畫與多模態應用七、個人使用 AI 的能力層級八、企業擁抱 AI 的策略九、提示詞管理的重要性 一、AI 與 AI…

Postgresql幾個常用的json操作

將行記錄轉為jsonb row_to_json(表名或別名)將行記錄集轉為json數組 &#xff08;jsonb) select json_agg(row_to_json(t) order by t.task_name) into v_next_taskfrom dyna_flow_task t where t.zidv_template_id and t.levelv_next_level ;訪問json字段&#xff0c;用->…

ESP32學習與快速總結——5.系統存儲

1.ESP32分區表 為什么ESP32要分區 00&#xff1a;34-- 簡述&#xff1a;其他單片機生成文件少&#xff0c;功能少&#xff0c;而ESP32功能多&#xff0c;文件多 分區表各個文件簡介 --7&#xff1a;31vscode查看分區表 --9&#xff1a;33ota通過idf.py menuconfi…

Linux 進程控制(自用)

非阻塞調用waitpid 這樣父進程就不會阻塞&#xff0c;此時循環使用我們可以讓父進程執行其他任務而不是阻塞等待 進程程序替換 進程PCB加載到內存中的代碼和數據 替換就是完全替換當前進程的代碼段、數據段、堆和棧&#xff0c;保存當前的PCB 代碼指的是二進制代碼不是源碼&a…

Spring 微服務解決了單體架構的哪些痛點?

1. 部署困難 (Deployment Difficulty & Risk) 單體痛點: 整體部署: 對單體應用的任何微小修改&#xff08;哪怕只是一行代碼&#xff09;&#xff0c;都需要重新構建、測試和部署整個龐大的應用程序。部署頻率低: 由于部署過程復雜且風險高&#xff0c;發布周期通常很長&a…

面試題之高頻面試題

最近開始面試了&#xff0c;410面試了一家公司 針對自己薄弱的面試題庫&#xff0c;深入了解下&#xff0c;也應付下面試。在這里先祝愿大家在現有公司好好沉淀&#xff0c;定位好自己的目標&#xff0c;在自己的領域上發光發熱&#xff0c;在自己想要的領域上&#xff08;技術…

【MySQL】Read view存儲的機制,記錄可見分析

read view核心組成 1.1 事務id相關 creator_trx_id: 創建該read view的事務id 每開啟一個事務都會生成一個 ReadView&#xff0c;而 creator_trx_id 就是這個開啟的事務的 id。 m_ids: 創建read view時系統的活躍事務&#xff08;未提交的事務&#xff09;id集合 當前有哪些事…

【刷題Day20】TCP和UDP(淺)

TCP 和 UDP 有什么區別&#xff1f; TCP提供了可靠、面向連接的傳輸&#xff0c;適用于需要數據完整性和順序的場景。 UDP提供了更輕量、面向報文的傳輸&#xff0c;適用于實時性要求高的場景。 特性TCPUDP連接方式面向連接無連接可靠性提供可靠性&#xff0c;保證數據按順序…

Flink 內部通信底層原理

Flink 集群內部節點之間的通信是用 Akka 實現,比如 JobManager 和 TaskManager 之間的通信。而 operator 之間的數據傳輸是用 Netty 實現。 RPC 框架是 Flink 任務運行的基礎,Flink 整個 RPC 框架基于 Akka 實現。 一、相關概念 RPC(Remote Procedure Call) 概念 定義:…

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置)

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置) 摘要:本文手把手教學在無外網環境下部署生產級Kubernetes 1.28高可用集群,涵蓋ETCD集群、HAProxy+Keepalived負載均衡、Containerd運行時、Calico網絡插件及Kuboard可視化管理全流程。提供100年有效證書配置…

【中間件】redis使用

一、redis介紹 redis是一種NoSQL類型的數據庫&#xff0c;其數據存儲在內存中&#xff0c;因此其數據查詢效率很高&#xff0c;很快。常被用作數據緩存&#xff0c;分布式鎖 等。SpringBoot集成了Redis&#xff0c;可查看開發文檔Redis開發文檔。Redis有自己的可視化工具Redis …

C語言——函數遞歸與迭代

各位CSDN的uu們大家好呀&#xff0c;今天將會給大家帶來關于C語言的函數遞歸的知識&#xff0c;這一塊知識理解起來稍微會比較難&#xff0c;需要多花點時間。 話不多說&#xff0c;讓我們開始今天的內容吧&#xff01; 目錄 1.函數遞歸 1.1 什么是遞歸&#xff1f; 1.2 遞歸…