採用FPGA實現UART轉SPI

2022-07-14 11:03:34 字數 2719 閱讀 9612

應用筆記

v1.1 2015/2/10

採用

fpga

實現uart

轉spi

概述

本文提供了實現uart轉spi的verilog**的功能描述。這份筆記將介紹uart和spi的基本知識,**設計的基本思路,以及**的具體實現及其描述。本程式的具體功能在於配合ad9512_serial_gui完成ad9512暫存器的配置,包括讀及寫過程。

修訂歷史

以下**展示了本文件的修訂過程

日期

版本號

修訂內容

2015/02/08

v1.0

初始版本,通過實際驗證

2015/02/10

v1.1

實現uart

到spi

和spi

到uart

的轉換功能

[1][1]. **修訂包括更改了實現方式,採用了狀態機描述方法是下了uart2spi的過程,同時增加了spi2uart的功能

簡介

本程式基於ise14.7編寫,pc機程式採用matlab編寫,具體參考《程式說明-matlab串列埠操作和gui程式設計》。閱讀本文件內容前建議先閱讀《程式說明-matlab串列埠操作和gui程式設計》。

序列通訊的幀格式如下所示

圖 1 序列資料幀格式

對於ad9512而言,spi的時序要求如下所示

圖 2 ad9512寫控制

uart轉spi的過程是通過上位機配置ad9512的過程,我們的目的在於將圖 1中的幀格式轉換為圖 2所示的資料流。對應圖二我們需要考慮三路訊號

sdio的資料不止8位元,可控制,簡單起見我們每次寫入1位元組的資料。那麼此時sdio的資料流一次有24位元。對應可取序列通訊的幀長為8位元,24位元相當於3幀。一旦確定了sdio,通過fpga可以很容易確定csb和sclk。

因此我們需要採用乙個24位的暫存器來儲存接收到的資料。那麼問題是,我們該如何接收資料呢?

我們可以通過判斷第乙個下降沿來確定幀的起始,兩個暫存器就可以滿足這一要求。由於通訊過程時鐘不同源,我們希望取樣點盡可能在中間,採用以高倍於波特率的時鐘很容易就可以滿足這一點。這裡我們選擇16倍波特率取樣。我們需要乙個計數器來判斷接收了幾個位元,同時還需要計數這是接收的第幾幀。一旦我們接收到24位元的有效資料,就可以開始配置ad9512的暫存器了。

在設計之前我們需要考慮一下讀暫存器的需求,v1.0版本的程式沒有考慮這一點,所以v1.1的程式重寫了。因此,做事之前考慮全面是很有必要的。

圖 3 ad9512讀控制

我們注意到實際上傳送兩幀資料就可以開始讀數了,但為了和寫控制一致,我們選擇了在傳送端傳送一幀無意義的資料。一旦位址寫入,在sclk下降沿sdo開始序列輸出暫存器的取值。

針對這些控制,我們覺得採用狀態機來實現,狀態包括:

狀態設定不是特別合理,但基本完成功能,獨熱碼設計。

訊號說明

圖 4 uart轉spi模組

** 1 uart轉spi模組的訊號說明

訊號型別

功能clk16x

input

16倍串列埠通訊波特率的取樣時鐘

rstinput

復位訊號,高有效

rxdinput

串列埠輸入訊號

rxtoutput

串列埠輸出訊號

sdio

output

spi資料輸出埠(相對fpga)

sdoinput

spi資料輸入埠(相對fpga)

sclk

output

spi的同步時鐘

csboutput

spi的片選訊號

rxd1,rxd2

reg判斷起始位(rxd)

csb_count

reg判斷這是接收的第幾幀資料

no_bits_rcvd

reg判斷(串列埠)接收到的是第幾位元的資料

clk1x_enable

reg串列埠接收資料時鐘使能

clk1x

wire

串列埠資料的取樣時鐘

sdio_buf1(2)

reg暫存串列埠接收到的資料

sdio_count

regspi傳送資料時的計數器

參考

ad9512資料手冊

matlab幫助

**

**詳見

ad9512_serial_gui(verilog20150210)

UART串列埠通訊協議的FPGA實現

引言 uart串列埠通訊協議,全稱叫做通用非同步收發器 universal asynchronous receiver transmitter 通常稱作uart。uart是非同步通訊,它只需要一根線就可以進行資料的通訊。1 基本概念 具體的時序圖如下圖所示 2 verilog實現 module ua...

基於FPGA的uart協議時序分析和實現

背景 在fpga應用中常常會有一種情況,我們需要將pc端的一些資料送給fpga,這些資料可以是作為debug的引數,或者一些控制fpga的指令,或者作為運算的資料 1 波特率 要想通過uart協議進行資料傳輸,首先要確定的就是波特率,波特率即是單位時間傳輸的位元數,常見的波特率有9600 19200...

採用FPGA實現音訊模數轉換器

1 一 adc原理 一 adc的核心是 一 調製器和數字濾波器。一 調製原理在半個多世紀前已經提出,但在20世紀90年代才廣泛應用到adc設計中。一 adc的模型如圖1所示。從圖中可以看到,乏一 架構的adc主要由左邊方框內模擬 一 調製器和右邊的數字濾波器組成。調製器包含1個積分器 1個adc和1...