FPGA常用資源之IO概述

目錄

一、前言

二、I/O資源

2.1 I/O端口資源

2.1.1 IOB

2.1.2 ILOGIC/OLOGIC

2.2 ZHOLD

2.3 IDDR/ODDR

2.4 IDELAY

2.5 ISERDES/OSERDES

2.6?IO Logic Resource連接

2.7 Device示意圖

三、工程示例

3.1 工程代碼

3.2 Device結果


一、前言

????????FPGA芯片從內部結構看主要由CLM,可編程IO,可編程的互連線資源,數字信號處理單元DSP,存儲單元BRAM,軟核與硬核組成,本文對其中的可編程I/O結合開發工具Vivado進行基礎的介紹。

二、I/O資源

2.1 I/O端口資源

??????????Xilinx 7系列器件的I/O資源由I/O塊(IOB)和邏輯資源(ILOGIC和OLOGIC)兩部分組成,每個IOB都有一個直接連接的ILOGIC或OLOGIC。以器件xc7k420tffv1156-2為例,IOB和ILOGIC/OLOGIC如下圖

2.1.1 IOB

??????????7系列的IOB分為HP IOB和HR IOB兩類,HP IOB/HR IOB內又可分為單端IOB和雙端IOB,HP IOB的引腳結構圖如下

??????????單端的HR IOB結構圖,相比HP IOB,少了一個DCITERMDISABLE輸入,因為DCI是HP bank所具有的功能。

??????????對于雙端的HP IOB,會多一個差分輸入DIFFI_IN,也即會使用到兩個IOB,雙端的HR IOB類似。

2.1.2 ILOGIC/OLOGIC

??????????以ILOGIC為例,在HP?I/O bank中的為ILOGICE2,在HR I/O bank中的為ILOGICE3,區別是ILOGICE3多了一個零保持延時單元ZHOLD, ILOGICE2的結構圖如下

ILOGICE3的結構圖如下

??????????lLOGIC支持邊沿觸發的D觸發器,IDDR模式,電平觸發的鎖存器以及異步/組合操作

2.2 ZHOLD

?????????ZHOLD延遲會自動與內部延遲相匹配時鐘分布延遲,當使用時,確保pad到pad的保持時間為零。ILOGIC在輸入端支持可選的靜態無補償零保持(ZHOLD)延遲線,以補償時鐘插入延遲。ZHOLD功能經過優化,可補償時鐘路徑直接來自來自同一bank或相鄰bank的BUFG/BUFGCE。ZHOLD是默認情況下啟用,除非時鐘源是MMCM或PLL,或者IOBDELAY屬性在Xilinx設計約束(XDC)中設置。

2.3 IDDR/ODDR

??????????IDDR(Input Double Data Rate)和ODDR(Output Double Data Rate),IDDR(輸入雙數據速率)主要用于接收數據,它能夠在每個時鐘邊沿捕獲數據,從而實現雙倍數據速率的數據傳輸。當外部數據源的速率高于內部處理速度時,IDDR可以有效地提高數據吞吐率。IDDR的原語如下圖,一路輸入D,兩路輸出Q1,Q2分別在時鐘的上升沿和下降沿。

IDDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE" // ? ?or "SAME_EDGE_PIPELINED" .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1.INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) IDDR_inst (.Q1(Q1), // 1-bit output for positive edge of clock.Q2(Q2), // 1-bit output for negative edge of clock.C(C), ? // 1-bit clock input.CE(CE), // 1-bit clock enable input.D(D), ? // 1-bit DDR data input.R(R), ? // 1-bit reset.S(S) ? ?// 1-bit set);

??????????ODDR(輸出雙數據速率)則用于產生雙倍數據速率的輸出信號。與IDDR類似,ODDR在每個時鐘邊沿都可以驅動數據,提高了輸出數據的速率。ODDR在設計時需要特別關注數據的輸出時序和時鐘的相位關系,以確保在正確的時間點上提供有效的數據。

ODDR原語如下圖所示,與IDDR類似,包括時鐘輸入、數據輸入、使能信號、復位信號和輸出信號等。不同之處在于,ODDR有兩個數據輸入端口D1和D2,分別對應于時鐘的正邊沿和負邊沿。

 ? ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1'b0), ? ?// Initial value of Q: 1'b0 or 1'b1.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) ODDR_inst (.Q(Q), ? // 1-bit DDR output.C(C), ? // 1-bit clock input.CE(CE), // 1-bit clock enable input.D1(D1), // 1-bit data input (positive edge).D2(D2), // 1-bit data input (negative edge).R(R), ? // 1-bit reset.S(S) ? ?// 1-bit set);

??????????ODDR原語同樣有多種工作模式,其中最常見的是“OPPOSITE_EDGE”模式。在此模式下,兩個數據輸入端口D1和D2的數據會被合成到一個時鐘周期內,分別在時鐘的正邊沿和負邊沿輸出。

2.4 IDELAY

??????????以IDELAY為例,每個I/O塊都包含一個名為IDELAYE2的可編程延遲單元。IDELAY可以連接到ILOGICE2/ISERDES2或ILOGICE3/ISERDESE2塊。IDELAYE2是一個31抽頭、環繞式具有校準的抽頭分辨率的延遲單元。它可以應用于組合輸入路徑、寄存輸入路徑或兩者同時使用。它也可以直接從FPGA邏輯中獲取。IDELAY可以在單個輸入引腳的基礎上延遲輸入信號,抽頭延遲精度通過使用IDELAYCTRL參考時鐘進行控制,IDELAYE2的端口如下圖

2.5 ISERDES/OSERDES

??????????FPGA中的ISERESE2是一個專用的串行到并行轉換器,具有特定的時鐘和邏輯功能,用于實現高速源同步。在接收到來自外部的高速串行數據(如ADC輸入、高速串行通信接口),將其解串為FPGA內部可處理的并行數據,ISERDES的端口圖如下

??????????OSERDES作用相反,實現并行轉串行輸出,用于驅動高速接口(如LVDS、HDMI、DDR存儲器接口等),將FPGA內部的并行數據轉換為串行數據流輸出。OSERDES的端口圖如下

2.6?IO Logic Resource連接

??????????當同時存在IDELAY和ILOGICE3,ISERDES,OSERDES等單元,位于HR Bank時,連接關系如下圖

當位于HP Bank時,連接關系如下圖

2.7 Device示意圖

??????????在Device圖中,每一對IOB對應的LOGIC由三個部分組成,ILOGICE3,IDELAYE2,

OLOGICE3。ILOGICE3如下圖,可以放置ZHOLD_DELAY以及IDDR以及觸發器。

IDELAYE2單元如下圖所示,放置DELAY模塊

OLOGICE3模塊如下圖,可以放置ODDR、OSERDES模塊

三、工程示例

3.1 工程代碼

以ODDR/IDDR/OSERDES為例

module IOB_resource(D1,D2,CE,C,R,S,RST,T,D3,D4,D5,D6,D7,D8,CLK,CLKDIV,O,IO1,IO2,out1,out2 );
input D1,D2,CE,C,R,S,RST,T;
input D3,D4,D5,D6,D7,D8,CLK,CLKDIV;
output O;
inout IO1,IO2;
output out1,out2;wire n_oddr,n_iobuf;ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1'b0), ? ?// Initial value of Q: 1'b0 or 1'b1.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) ODDR_inst (.Q(n_oddr), ? // 1-bit DDR output.C(C), ? // 1-bit clock input.CE(CE), // 1-bit clock enable input.D1(D1), // 1-bit data input (positive edge).D2(D2), // 1-bit data input (negative edge).R(), ? // 1-bit reset.S(S) ? ?// 1-bit set);IOBUF #(.DRIVE(12), // Specify the output drive strength.IBUF_LOW_PWR("TRUE"), ?// Low Power - "TRUE", High Performance = "FALSE" .IOSTANDARD("DEFAULT"), // Specify the I/O standard.SLEW("SLOW") // Specify the output slew rate) IOBUF_inst (.O(n_iobuf), ? ? // Buffer output.IO(IO1), ? // Buffer inout port (connect directly to top-level port).I(n_oddr), ? ? // Buffer input.T(T) ? ? ?// 3-state enable input, high=input, low=output);IDDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE" // ? ?or "SAME_EDGE_PIPELINED" .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1.INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) IDDR_inst (.Q1(out1), // 1-bit output for positive edge of clock.Q2(out2), // 1-bit output for negative edge of clock.C(C), ? // 1-bit clock input.CE(CE), // 1-bit clock enable input.D(n_iobuf), ? // 1-bit DDR data input.R(R), ? // 1-bit reset.S(S) ? ?// 1-bit set);OSERDESE2 #(.DATA_RATE_OQ("DDR"), ? // DDR, SDR.DATA_RATE_TQ("DDR"), ? // DDR, BUF, SDR.DATA_WIDTH(4), ? ? ? ? // Parallel data width (2-8,10,14).INIT_OQ(1'b0), ? ? ? ? // Initial value of OQ output (1'b0,1'b1).INIT_TQ(1'b0), ? ? ? ? // Initial value of TQ output (1'b0,1'b1).SERDES_MODE("MASTER"), // MASTER, SLAVE.SRVAL_OQ(1'b0), ? ? ? ?// OQ output value when SR is used (1'b0,1'b1).SRVAL_TQ(1'b0), ? ? ? ?// TQ output value when SR is used (1'b0,1'b1).TBYTE_CTL("FALSE"), ? ?// Enable tristate byte operation (FALSE, TRUE).TBYTE_SRC("FALSE"), ? ?// Tristate byte source (FALSE, TRUE).TRISTATE_WIDTH(4) ? ? ?// 3-state converter width (1,4))OSERDESE2_inst (.TQ(n_tq), ? ? ? ? ? ? ? // 1-bi.OQ(n_oserdes), ? ? ? ? ? ? ? // 1-bit output: Data path output.CLK(CLK), ? ? ? ? ? ? // 1-bit input: High speed clock.CLKDIV(CLKDIV), ? ? ? // 1-bit input: Divided clock// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each).D1(D1),.D2(D2),.D3(D3),.D4(D4),.D5(D5),.D6(D6),.D7(D7),.D8(D8),.OCE(CE), ? ? ? ? ? ? // 1-bit input: Output data clock enable.RST(RST), ? ? ? ? ? ? // 1-bit input: Reset.TCE(CE) ? ? ? ? ? ? ?// 1-bit input: 3-state clock enable);IOBUF #(.DRIVE(12), // Specify the output drive strength.IBUF_LOW_PWR("TRUE"), ?// Low Power - "TRUE", High Performance = "FALSE" .IOSTANDARD("DEFAULT"), // Specify the I/O standard.SLEW("SLOW") // Specify the output slew rate) IOBUF_inst2 (.O(O), ? ? // Buffer output.IO(IO2), ? // Buffer inout port (connect directly to top-level port).I(n_oserdes), ? ? // Buffer input.T(n_tq) ? ? ?// 3-state enable input, high=input, low=output);
endmodule

3.2 Device結果

IDDR_inst布局在ILOGICE2上

ODDR_inst單元布局在OLOGICE2上

OSERDESE2_inst布局位置如下,和ODDR占用相同的Device資源

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

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

相關文章

密集遮擋場景識別率↑31%!陌訊輕量化部署方案在智慧零售的實戰解析

一、零售業痛點:當技術遇上客流洪流據《2024智慧零售技術白皮書》統計,高峰期超市顧客密度超3人/㎡時,??目標漏檢率高達48%??。核心挑戰包括:??動態遮擋??:購物車/貨架造成的持續性目標截斷??計算瓶頸??&a…

力扣(O(1) 時間插入、刪除和獲取隨機元素)

一、題目分析(一)功能需求 我們需要實現 RandomizedSet 類,包含以下功能: RandomizedSet():初始化數據結構。bool insert(int val):當元素 val 不存在時,插入該元素并返回 true;若已…

前端開發的面試自我介紹與準備

前端面試自我介紹不知道怎么說的,直接參考下面的模板,然后換成你的經歷 自我介紹控制在1分鐘左右,千萬不要說的太久,面試官會煩的,但是又不好意思打斷你 切記面試是人和人面對面的交流,要有,面試…

10、系統規劃與分析

一、系統規劃步驟系統規劃步驟對現有系統進行初步調查分析和確定系統目標分析子系統的組成和基本功能擬定系統的實施方案擬定系統的可行性研究指定系統建設方案系統規劃階段的產出物:可行性研究報告、系統設計任務書。習題1、擬定系統的實施方案是在系統規劃階段完成…

Nginx學習筆記(六)—— Nginx反向代理

📚Nginx學習筆記(六)—— Nginx反向代理 📌 一、反向代理核心概念 本質原理: #mermaid-svg-UkFRDp2Ut7MK5T2N {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

三伍微電子GSR2406 IoT FEM 2.4G PA 射頻前端模組芯片

三伍微電子GSR2406 IoT FEM 2.4G PA 射頻前端模組芯片規格書Product Description The GSR2406 is a high-performance, fully integrated RF front-end module (FEM) designed for Zigbee technology, Thread, and Bluetooth (including low energy) applications. The GSR2406…

開發避坑指南(24):RocketMQ磁盤空間告急異常處理,CODE 14 “service not available“解決方案

異常信息 Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.94 CQ: 0.94 INDEX: 0.94, maybe your broker machine memory too small.異常背景 一個項目里面用到了rocketmq&#x…

開源WAF新標桿:雷池SafeLine用語義分析重構網站安全邊界

文章目錄前言【視頻教程】1.安裝Docker2.本地部署SafeLine3.使用SafeLine4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定Uptime Kuma公網地址前言 當個人或企業站點上線后面臨的首要威脅往往來自網絡攻擊——據統計,超過60%的Web應用漏洞利用嘗試在流量到達…

Mac M1探索AnythingLLM+SearXNG

SearXNG 能聚合來自多達 200 多個搜索服務,可私有化部署,并提供了靈活自定義選項。 AnythingLLMSearXNG,剛好能解決AnythingLLM因為網絡限制導致web search不可用的問題。 1 安裝docker 下載mac m1版本的docker并安裝。 https://docs.dock…

模式設計:策略模式及其應用場景

簡介 策略模式(Strategy Pattern)是一種行為型設計模式,它允許在運行時動態選擇算法或行為。核心思想是將算法封裝成獨立的類(策略),使它們可以相互替換,讓算法的變化獨立于使用它的客戶端。 核心思想 解耦:將算法的定義與使用分離。每個算法封裝起來,使它們可以互…

Squash Merge(壓縮合并)和Rebase Merge(變基合并)介紹

文章目錄**1. Squash Merge(壓縮合并)****定義****操作步驟****特點****優點****缺點****2. Rebase Merge(變基合并)****定義****操作步驟****特點****優點****缺點****3. 對比總結****4. 選擇建議****5. 示例場景****Squash Merg…

Linux編程 —— framebuffer

一、framebuffer概念framebuffer:幀緩沖,幀緩存技術Linux內核專門為圖形化顯示提供的一套應用程序接口。二、基本操作步驟1. 打開顯示設備(/dev/fb0) 2. 獲取顯示設備相關參數(分辨率,像素格式)---》ioctl 3. 建立顯存…

文件編輯html

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件行內容編輯器</title><script src&…

具有熔斷能力和活性探測的服務負載均衡解決方案

一、整體架構設計 1.核心組件 負載均衡器&#xff1a;負責選擇可用的服務節點健康檢查器&#xff1a;定期檢測服務節點的可用性服務節點管理&#xff1a;維護所有可用節點的狀態信息 2.負載均衡策略 輪詢(Round Robin)隨機(Random)加權輪詢(Weighted Round Robin)最少連接(Leas…

技術演進中的開發沉思-62 DELPHI VCL系列:VCL下的設計模式

今天聊聊設計模式&#xff0c;當然這個章節目前僅限于DELPHI VCL,因為接下來梳理的Factory/Factory Method、Bootstrap 和 ForEach 這三種設計樣例&#xff0c;看似獨立&#xff0c;卻在實際開發中相互配合&#xff0c;共同構建起高效、靈活的程序架構。在 DELPHI VCL 開發的技…

Docker 101:面向初學者的綜合教程

掌握 Docker 已成為軟件開發中的一項關鍵技能。本教程探討了容器化的世界&#xff0c;包括其核心概念、優缺點&#xff0c;以及開始使用容器化的分步指南。 無論是 Docker 的新手&#xff0c;還是希望復習基礎知識的更有經驗的開發人員&#xff0c;本指南都能滿足需求。 什么…

RTOS YAFFS

在 YAFFS (Yet Another Flash File System) 的語境中&#xff0c;“Check Point” 并不是一個標準的、核心的官方術語。它更可能是對 YAFFS 關鍵機制 Summary 或 Checkpointing 功能的非正式表述或理解偏差。其核心含義是指 YAFFS 在特定時刻保存文件系統關鍵元數據的狀態&…

【SpringBoot系列-02】自動配置機制源碼剖析

【SpringBoot系列-02】自動配置機制源碼剖析 咱們天天用Spring Boot&#xff0c;一個SpringBootApplication注解扔進去&#xff0c;啥配置都不用寫&#xff0c;項目就跑起來了。你有沒有過這種疑惑&#xff1a;那些DispatcherServlet、DataSource是從哪冒出來的&#xff1f;今天…

51單片機-51單片機最小系統

本章概述思維導圖&#xff1a;51單片機最小系統51單片機最小系統是51系列單片機&#xff08;如AT89C51、STC89C52等&#xff09;能夠獨立工作的最簡電路配置&#xff0c;它為單片機提供了運行所需的基本條件。51單片機最小系統板是嵌入式系統開發的基礎平臺&#xff0c;集成了單…

git學習1

目錄引入版本控制集中式和分布式版本控制git工作機制代碼托管中心Git常用命令設置用戶簽名初始化本地庫查看庫狀態add和提交版本穿梭git分支操作分支定義分支好處分支操作查看分支創建分支切換分支分支合并&#x1f495;?&#x1fa77;合并沖突git團隊協作團隊內協作跨團隊協作…