[FPGA基礎] UART篇

Xilinx FPGA UART 硬件接口使用指南

1. 引言

UART (通用異步收發器) 是一種廣泛使用的串行通信接口,因其簡單、可靠和易于實現而成為 Xilinx FPGA 設計中的常見硬件接口。UART 用于在 FPGA 與外部設備(如 PC、微控制器、傳感器等)之間進行數據通信。本文檔基于 Xilinx Vivado 工具,詳細介紹在 Xilinx FPGA 中實現和使用 UART 接口的方法,重點介紹相關 IP 核的配置與使用,涵蓋 Spartan、Artix、Kintex、Virtex 等系列。

2. UART 基礎

2.1 定義

UART 是一種異步串行通信協議,通過發送和接收數據幀實現雙向通信。數據幀通常包括起始位、數據位、奇偶校驗位(可選)和停止位。

2.2 主要特性

  • 波特率:數據傳輸速率,常見值包括 9600、115200、921600 bps。
  • 數據幀格式
    • 起始位:1 位,標記數據幀開始(低電平)。
    • 數據位:5 到 8 位,常用 8 位。
    • 奇偶校驗位:可選,用于錯誤檢測(奇校驗、偶校驗或無)。
    • 停止位:1 或 2 位,標記數據幀結束(高電平)。
  • 異步通信:無共享時鐘,接收端根據波特率同步。
  • 雙向通信:TX(發送)和 RX(接收)獨立操作。
  • 電平標準:FPGA 通常使用 3.3V/1.8V 邏輯電平,外部設備可能需要電平轉換(如 RS-232)。

2.3 應用場景

  • FPGA 與 PC 之間的調試和數據傳輸。
  • 與微控制器、傳感器或其他外設的通信。
  • 低速、簡單的數據交換(如控制命令或狀態信息)。
  • 嵌入式系統中終端接口(如串口終端)。

3. Xilinx FPGA 中的 UART 實現

Xilinx FPGA 支持通過以下方式實現 UART:

  1. 使用 Vivado IP 核:通過 AXI UART Lite 或 AXI UART 16550 IP 快速實現。
  2. 自定義 HDL 設計:用 Verilog/VHDL 編寫 UART 模塊,適合特定需求。
  3. MicroBlaze/Zynq 軟核/硬核:結合處理器系統使用 UART。

本節重點介紹使用 Vivado IP 核實現 UART 的方法。

3.1 相關 IP 核

Xilinx Vivado 提供以下 UART 相關 IP 核:

  • AXI UART Lite
    • 輕量級 UART IP,適合簡單應用。
    • 支持 AXI4-Lite 接口,易于與 MicroBlaze 或自定義邏輯集成。
    • 固定 8 位數據、無奇偶校驗、1 位停止位。
    • 資源占用低,適合小型 FPGA。
  • AXI UART 16550
    • 功能更豐富的 UART IP,兼容 16550 標準。
    • 支持 AXI4-Lite 接口,可配置數據位、奇偶校驗、停止位。
    • 包含 FIFO 緩沖區,適合高吞吐量應用。
    • 資源占用較高,適合復雜系統。
  • Zynq PS UART(僅限 Zynq 系列):
    • Zynq 芯片的處理系統 (PS) 提供內置 UART 控制器。
    • 通過 PS 配置,無需額外 IP,適合 Zynq 設計。

3.2 AXI UART Lite 配置步驟

以下以 AXI UART Lite 為例,介紹 IP 配置和使用流程。

3.2.1 配置 IP
  1. 打開 Vivado,進入 IP Catalog
  2. 搜索并選擇 AXI UART Lite
  3. 配置參數:
    • 波特率:選擇標準波特率(如 115200 bps)或自定義值。
      • 實際波特率由輸入時鐘頻率和分頻比決定,公式為:
        [
        \text{波特率} = \frac{\text{時鐘頻率}}{\text{分頻比} \times 16}
        ]
    • 接口:AXI4-Lite(默認)。
    • FIFO 大小:通常為 16 字節(固定)。
    • 中斷:可選,啟用后可通過中斷處理數據收發。
  4. 生成 IP 核,獲取 Verilog/VHDL 文件。
  5. 將 IP 添加到設計中,通常與 AXI 互連模塊和處理器(如 MicroBlaze)連接。
3.2.2 端口說明

以下是 AXI UART Lite 的主要外部端口:

端口名方向描述
s_axi_aclk輸入AXI 時鐘
s_axi_aresetn輸入AXI 復位(低有效)
tx輸出UART 發送數據(TX)
rx輸入UART 接收數據(RX)
interrupt輸出中斷信號(可選)

AXI 接口:通過 AXI4-Lite 總線與處理器或控制邏輯通信,包含地址、數據和控制信號。

3.2.3 例化示例

以下是一個簡單的 AXI UART Lite 例化(Verilog):

module uart_example (input  wire        clk,input  wire        resetn,input  wire        rx,output wire        tx,output wire        interrupt
);axi_uartlite_0 u_uart (.s_axi_aclk(clk),        // AXI 時鐘.s_axi_aresetn(resetn),  // AXI 復位.rx(rx),                 // UART RX.tx(tx),                 // UART TX.interrupt(interrupt)    // 中斷
);endmodule

說明axi_uartlite_0 為 Vivado 生成的 IP 模塊名,需根據實際配置調整。

3.3 AXI UART 16550 配置

AXI UART 16550 的配置類似 AXI UART Lite,但支持更多選項:

  • 數據位:5 到 8 位。
  • 奇偶校驗:無、奇、偶、強制 0/1。
  • 停止位:1 或 2 位。
  • FIFO 大小:可配置為 16、64 或更大。
  • 波特率:支持更高波特率,需確保時鐘頻率足夠。

配置步驟與 AXI UART Lite 類似,生成后可通過 AXI4-Lite 接口控制。

3.4 Zynq PS UART 配置

對于 Zynq 系列,UART 可通過處理系統 (PS) 配置:

  1. 打開 Vivado 的 Block Design
  2. 添加 Zynq Processing System IP。
  3. 雙擊 Zynq IP,進入配置界面。
  4. MIO Configuration 中啟用 UART0 或 UART1。
  5. 配置波特率、數據格式等參數。
  6. 將 UART 引腳分配到 MIO 引腳(無需 PL 邏輯)。
  7. 生成位流并導出到 SDK/Vitis 進行軟件開發。

4. 設計注意事項

4.1 波特率匹配

  • 確保 FPGA 和外部設備的波特率一致,避免數據錯誤。
  • 檢查輸入時鐘頻率,確保分頻比支持目標波特率。例如,50 MHz 時鐘支持 115200 bps 的分頻比約為 27。

4.2 電平轉換

  • FPGA 的 UART 引腳通常為 3.3V 或 1.8V 邏輯電平。
  • 若連接 RS-232 設備(±12V),需使用電平轉換芯片(如 MAX3232)。
  • 確保外部設備與 FPGA 的電平兼容。

4.3 時鐘域管理

  • AXI UART Lite/16550 使用 AXI 時鐘,確保與系統時鐘同步。
  • 若 UART 數據進入其他時鐘域,需使用異步 FIFO 或同步器處理跨時鐘域問題。

4.4 中斷與輪詢

  • 中斷模式:適合高吞吐量應用,減少 CPU 輪詢開銷。
  • 輪詢模式:適合簡單設計,查詢狀態寄存器以檢查數據是否準備好。
  • 配置中斷時,確保中斷控制器(如 AXI Interrupt Controller)正確連接。

4.5 仿真與驗證

  • 使用 Vivado 仿真器測試 UART IP。
  • 測試場景:
    • 發送和接收連續數據。
    • 不同波特率下的通信。
    • 錯誤幀(如奇偶校驗錯誤)。
    • 中斷觸發行為。
  • 使用邏輯分析儀或串口調試工具(如 PuTTY、Tera Term)驗證硬件行為。

5. 常見問題與解決

問題可能原因解決方法
數據亂碼波特率不匹配確保 FPGA 和外部設備波特率一致
無法接收數據RX 引腳未正確連接或電平不匹配檢查引腳分配和電平轉換電路
發送數據丟失FIFO 溢出或 AXI 總線時序錯誤檢查 AXI 時鐘和 FIFO 狀態
中斷未觸發中斷未啟用或中斷控制器配置錯誤檢查 IP 配置和中斷連接
時序違例時鐘頻率過高或未優化約束添加時序約束,降低時鐘頻率

6. 設計工具推薦

  • SZ901
    SZ901 是一款基于XVC協議的FPGA網絡下載器。
    • 最高支持53M
    • 支持4路JTAG獨立使用
    • 支持端口合并
    • 支持國產FLASH燒寫
    • 下載器無限擴展
    • 配備專屬程序固化軟件,一鍵燒寫,能大大減小程序固化時間!

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

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

相關文章

【Netty4核心原理】【全系列文章目錄】

文章目錄 一、前言二、目錄 一、前言 本系列雖說本意是作為 《Netty4 核心原理》一書的讀書筆記,但在實際閱讀記錄過程中加入了大量個人閱讀的理解和內容,因此對書中內容存在大量刪改。 本系列內容基于 Netty 4.1.73.Final 版本,如下&#xf…

用 PyTorch 和numpy分別實現簡單的 CNN 二分類器

作業用到的知識: 1.Pytorch: 1. nn.Conv2d(二維卷積層) 作用: 對輸入的多通道二位數據(如圖像)進行特征提取,通過滑動卷積核計算局部區域的加權和,生成新的特征圖。 關鍵參數&a…

使用n8n構建自動化工作流:從數據庫查詢到郵件通知的使用指南

n8n是一款強大的開源工作流自動化工具,可以幫助你將各種服務和應用程序連接起來,創建復雜的自動化流程。下面我將詳細介紹一個實用的n8n用例:從MySQL數據庫查詢數據并發送郵件通知,包括使用場景、搭建步驟和節點部署方法。 使用場…

Vscode已經打開的python項目,如何使用已經建立的虛擬環境

在 VS Code 中使用已創建的 Conda/Mamba 虛擬環境 pe100,只需以下幾步: 步驟 1:確保虛擬環境已存在 在終端運行以下命令,檢查 pe100 環境是否已正確創建: conda activate pe100 python --version # 應顯示 Python 3…

Volatility工具學習

背景 VMware虛擬機系統hang死,手動重啟無法觸發系統panic,從而不能觸發kdump產生vmcore文件進行原因分析;此種情況下需要手動生成虛擬機內存快照,進而利用Volatility工具分析系統hang死的具體原因。 配置 使用VMware創建虛擬機…

學習筆記(C++篇)--- Day 4

目錄 1.賦值運算符重載 1.1 運算符重載 1.2 賦值運算符重載 1.3 日期類實現 1.賦值運算符重載 1.1 運算符重載 ①當運算符被用于類類型的對象時,C語言允許我們通過通過運算符重載的形式指定新的含義。C規定類類型對象使用運算符時,必須轉換成調用對…

Docker 快速入門教程

1. Docker 基本概念 鏡像(Image): 只讀模板,包含創建容器的指令 容器(Container): 鏡像的運行實例 Dockerfile: 用于構建鏡像的文本文件 倉庫(Repository): 存放鏡像的地方(如Docker Hub) 2. 安裝Docker 根據你的操作系統選擇安裝方式:…

vue項目中使用tinymce富文本編輯器

vue使用tinymce 文章目錄 vue使用tinymcetinymce富文本編輯器在這里插入圖片描述 一、本文要實現二、使用步驟1.安裝tinymce2.tinymce組件新建3. 在store添加商品詳情的狀態管理4. tinymce組件的引入 tinymce富文本編輯器 提示:以下是本篇文章正文內容,下…

簡單適配torch_npu不支持的ATen算子

簡單適配torch_npu不支持的ATen算子 一、背景說明1.1 PyTorch擴展機制1.2 核心概念二、實現步驟詳解2.1 實現前向、反向傳播算子2.2 編譯生成動態庫2.3 測試驗證程序三、關鍵點解析3.1 設計注意事項3.2 性能優化方向四、驗證結果一、背景說明 1.1 PyTorch擴展機制 PrivateUse1…

同樣的html標記,不同語言的文本,顯示的字體和粗細會不一樣嗎

同樣的 HTML 標記,在不同語言的文本下,顯示出來的字體和粗細確實可能會不一樣,原因如下: 🌍 不同語言默認字體不同 瀏覽器字體回退機制 CSS 里寫的字體如果當前系統不支持,就會回退到下一個,比如…

基于 Spring Boot 瑞吉外賣系統開發(六)

基于 Spring Boot 瑞吉外賣系統開發(六) 菜品列表 在系統管理端首頁,單擊左側菜單欄中的“菜品管理”,會在右側打開菜品管理頁面。 請求URL/dish/page,請求方法GET,請求參數page,pageSize。 該菜品列表…

計算機視覺與深度學習 | TensorFlow基本概念與應用場景:MNIST 手寫數字識別(附代碼)

TensorFlow 基本概念 TensorFlow 是一個開源的機器學習框架,由 Google 開發,核心概念包括: 張量(Tensor):多維數組,是數據的基本單位。計算圖(Graph):早期版本中用于描述數據流和計算過程,2.x 默認啟用即時執行(Eager Execution),兼顧靈活性和性能。層(Layers)…

vue+django+LSTM微博輿情分析系統 | 深度學習 | 食品安全分析

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站,有好處! 編號: D031 LSTM 架構:vuedjangoLSTMMySQL 功能: 微博信息爬取、情感分析、基于負面消極內容輿情分析…

RHCE第三次作業 搭建dns的正向解析服務器

server為服務器 client為客戶端 設置主配置文件 在server下: [rootServer ~]#vim /etc/named.conf #進入到配置頁面,并修改 設置區域文件 [rootServer ~]# vim /etc/named.rfc1912.zones 設置域名解析文件 [rootServer named]# cd /var/named…

Windows 同步技術-一次性初始化

組件通常設計為在首次調用時執行初始化任務,而不是加載它們時。 一次性初始化函數可確保此初始化僅發生一次,即使多個線程可能嘗試初始化也是如此。 Windows Server 2003 和 Windows XP: 應用程序必須使用 互鎖函數 或其他同步機制提供自己的…

OpenCV 中的角點檢測方法詳解

文章目錄 引言1. Harris角點檢測原理1.1 什么是角點?1.2 Harris算法的核心思想1.3 角點、邊緣和平坦區域的區分 2. OpenCV實現Harris角點檢測3. 總結 引言 在計算機視覺和圖像處理中,特征點檢測(Feature Detection)是一個關鍵任務…

全面介紹AVFilter 的添加和使用

author: hjjdebug date: 2025年 04月 22日 星期二 13:48:19 CST description: 全面介紹AVFilter 的添加和使用 文章目錄 1.兩個重要的編碼思想1. 寫代碼不再是我們調用別人,而是別人調用我們!2. 面向對象的編程方法. 2. AVFilter 開發流程2.1 編寫AVFilter 文件2.1.…

生物計算安全攻防戰:從DNA存儲破譯到碳基芯片防御體系重構

隨著碳基生物芯片突破馮諾依曼架構限制,DNA數據存儲密度達到1EB/克量級,合成生物學與信息技術的融合正引發新一輪安全革命。本文深入解析碳基芯片逆向工程路徑,揭示酶驅動DNA數據解碼的技術突破,預警合成生物回路潛在的數據泄露風…

Spring Boot 集成 Ollama API 使用總結

Spring Boot 中集成 Ollama API 的完整指南&#xff0c;涵蓋基礎配置、API 調用、性能優化及常見問題解決。 一、環境準備 1. 依賴配置 在 pom.xml 中添加必要的依賴&#xff1a; <!-- Spring Web (用于 REST 請求) --> <dependency><groupId>org.springf…

SimVG論文精讀

1. 數據集和任務部分 SimVG用的六個數據集&#xff1a;RefCOCO//g, ReferIt, Flickr30K, and GRefCOCO 數據集名稱圖像數量參照表達式數量參照對象實例數語言特性主要任務RefCOCO19,994142,20950,000?基于 MS COCO 圖像&#xff0c;采用 ReferItGame 收集的指代表達數據集。…