採用FPGA實現UART轉SPI

應用筆記 編程

V1.1 2015/2/10app

採用FPGA實現UARTSPIspa

 

概述設計

 

本文提供了實現UART轉SPI的Verilog代碼的功能描述。這份筆記將介紹UART和SPI的基本知識,代碼設計的基本思路,以及代碼的具體實現及其描述。本程序的具體功能在於配合AD9512_Serial_GUI完成AD9512寄存器的配置,包括讀及寫過程。3d

修訂歷史blog

如下表格展現了本文檔的修訂過程 文檔

日期get

版本號input

修訂內容同步

2015/02/08

V1.0

初始版本,經過實際驗證

2015/02/10

V1.1

實現UARTSPISPIUART的轉換功能[1]

[1]. 代碼修訂包括更改了實現方式,採用了狀態機描述方法是下了UART2SPI的過程,同時增長了SPI2UART的功能

簡介

 

本程序基於ISE14.7編寫,PC機程序採用MATLAB編寫,具體參考《程序說明-MATLAB串口操做和GUI編程》。閱讀本文檔內容前建議先閱讀《程序說明-MATLAB串口操做和GUI編程》。

串行通訊的幀格式以下所示

 

圖 1 串行數據幀格式

 

對於AD9512而言,SPI的時序要求以下所示

 

圖 2 AD9512寫控制

 

UART轉SPI的過程是經過上位機配置AD9512的過程,咱們的目的在於將圖 1中的幀格式轉換爲圖 2所示的數據流。對應圖二咱們須要考慮三路信號

  • CSB:片選信號
  • SCLK:時鐘
  • SDIO:數據

SDIO的數據不止8比特,可控制,簡單起見咱們每次寫入1字節的數據。那麼此時SDIO的數據流一次有24比特。對應可取串行通訊的幀長爲8比特,24比特至關於3幀。一旦肯定了SDIO,經過FPGA能夠很容易肯定CSB和SCLK。

所以咱們須要採用一個24位的寄存器來存儲接收到的數據。那麼問題是,咱們該如何接收數據呢?

咱們能夠經過判斷第一個降低沿來肯定幀的起始,兩個寄存器就能夠知足這一要求。因爲通訊過程時鐘不一樣源,咱們但願採樣點儘量在中間,採用以高倍于波特率的時鐘很容易就能夠知足這一點。這裏咱們選擇16倍波特率採樣。咱們須要一個計數器來判斷接收了幾個比特,同時還須要計數這是接收的第幾幀。一旦咱們接收到24比特的有效數據,就能夠開始配置AD9512的寄存器了。

在設計以前咱們須要考慮一下讀寄存器的需求,V1.0版本的程序沒有考慮這一點,因此V1.1的程序重寫了。所以,作事以前考慮全面是頗有必要的。

 

圖 3 AD9512讀控制

 

咱們注意到實際上發送兩幀數據就能夠開始讀數了,但爲了和寫控制一致,咱們選擇了在發送端發送一幀無心義的數據。一旦地址寫入,在SCLK降低沿SDO開始串行輸出寄存器的取值。

針對這些控制,咱們以爲採用狀態機來實現,狀態包括:

  • IDLE:空閒狀態,等待接收PC發送數據完成
  • START:數據接收完畢,判斷控制字是讀仍是寫
  • SEND_START:寫狀態,開始寫數(24bits)
  • SEND_END:寫完數據
  • RECV_SEND:接收狀態,開始寫控制字(16bits)
  • RECV_BEGIN:接收狀態,接收8比特數據
  • RECV_END :接收完畢
  • UART_START:接收完畢,開始發送數據

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

信號說明

 

圖 4 UART轉SPI模塊

 

表格 1 UART轉SPI模塊的信號說明

信號

類型

功能

clk16x

input

16倍串口通訊波特率的採樣時鐘

rst

input

復位信號,高有效

rxd

input

串口輸入信號

rxt

output

串口輸出信號

sdio

output

SPI數據輸出端口(相對FPGA)

sdo

input

SPI數據輸入端口(相對FPGA)

sclk

output

SPI的同步時鐘

csb

output

SPI的片選信號

rxd1,rxd2

reg

判斷起始位(rxd)

csb_count

reg

判斷這是接收的第幾幀數據

no_bits_rcvd

reg

判斷(串口)接收到的是第幾比特的數據

clk1x_enable

reg

串口接收數據時鐘使能

clk1x

wire

串口數據的採樣時鐘

sdio_buf1(2)

reg

暫存串口接收到的數據

sdio_count

reg

SPI發送數據時的計數器

 

參考

 

AD9512數據手冊

MATLAB幫助

Xilinx應用手冊(xapp341)

代碼

 

代碼詳見AD9512_Serial_GUI(Verilog20150210)

相關文章
相關標籤/搜索