国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于自動(dòng)de-skew算法的高速SPI接口設(shè)計(jì)與實(shí)現(xiàn)

2022-12-12 09:38姜冬梅何衛(wèi)國楊瑞瑞
通信電源技術(shù) 2022年15期
關(guān)鍵詞:狀態(tài)機(jī)接收端時(shí)鐘

姜冬梅,何衛(wèi)國,楊瑞瑞

(成都三零嘉微電子有限公司,四川 成都 610041)

0 引 言

傳統(tǒng)的串仔外設(shè)接口(Serial peripheral Interface,SPI)接口傳輸速率較低,本設(shè)計(jì)通過采用多比特傳輸和雙沿采樣的方法來提高SPI傳輸帶寬[1,2]。通常印刷電路板(Printed Circuit Board,PCB)布線時(shí)不同的數(shù)據(jù)線、時(shí)鐘線無法做到等距離傳輸,接收端不同數(shù)據(jù)線、時(shí)鐘線的延遲不同,該延遲差別為skew[3]。skew的引入導(dǎo)致接收端的數(shù)據(jù)有效采樣窗口變小,時(shí)鐘頻率越高,skew對(duì)正確采樣數(shù)據(jù)的影響越大。為了實(shí)現(xiàn)高速傳輸,采用自動(dòng)de-skew 算法解決PCB布線引入的skew問題。此外,傳統(tǒng)SPI通信中從接口不能暫停傳輸,而本文提出一種基于先進(jìn)先出儲(chǔ)存器(First Input First Output,F(xiàn)IFO)空、滿狀態(tài)的流量控制機(jī)制,通信的任意一方都可以隨時(shí)暫停傳輸,待準(zhǔn)備好之后繼續(xù)通信[4]。

1 SPI控制器設(shè)計(jì)

1.1 SPI主控制器設(shè)計(jì)

SPI主接口模塊框架如圖1所示。

圖1 SPI主接口模塊框架

SPI主機(jī)根據(jù)軟件配置的工作模式和數(shù)據(jù)長度發(fā)起對(duì)SPI從機(jī)的讀寫操作。當(dāng)SPI主機(jī)發(fā)起寫操作時(shí),軟件先配置模式寄存器為寫模式,再配置數(shù)據(jù)長度,然后將命令和數(shù)據(jù)寫到發(fā)送異步FIFO中。有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM)檢測(cè)到發(fā)送異步FIFO非空時(shí),啟動(dòng)SCLK生成電路,產(chǎn)生SCLK_out時(shí)鐘,同時(shí)啟動(dòng)并串轉(zhuǎn)化電路,從發(fā)送FIFO讀出TX data,通過并串轉(zhuǎn)化電路轉(zhuǎn)換成TXD輸出。狀態(tài)機(jī)根據(jù)從機(jī)接收FIFO是否快滿和主機(jī)發(fā)送FIFO是否為空來控制SCLK_out輸出,當(dāng)從機(jī)接收FIFO快滿或主機(jī)發(fā)送FIFO為空時(shí),停止SCLK_out時(shí)鐘輸出,從而暫停當(dāng)前傳輸;當(dāng)從機(jī)接收FIFO非滿且主機(jī)發(fā)送FIFO非空狀態(tài)時(shí),繼續(xù)傳輸。當(dāng)SPI主機(jī)發(fā)起讀操作時(shí),軟件先配置模式寄存器為讀模式,再配置讀數(shù)據(jù)長度,然后將命令和數(shù)據(jù)長度寫到發(fā)送異步FIFO中。FSM狀態(tài)機(jī)檢測(cè)到發(fā)送異步FIFO非空時(shí),啟動(dòng)SCLK生成電路,產(chǎn)生SCLK_out時(shí)鐘,同時(shí)啟動(dòng)并串轉(zhuǎn)化電路,從發(fā)送異步FIFO讀出TX data,通過并串轉(zhuǎn)化電路將命令和數(shù)據(jù)長度發(fā)送給從機(jī)。從機(jī)在接收到讀命令后,由接收狀態(tài)切換到發(fā)送狀態(tài)。主機(jī)在完成命令發(fā)送后進(jìn)入等待狀態(tài),等到從機(jī)完成狀態(tài)切換后再由發(fā)送狀態(tài)切換到接收狀態(tài)。RXD和RXD valid經(jīng)過de-skew模塊后,進(jìn)入串并轉(zhuǎn)化模塊,將RX data寫入接收FIFO中。

AHB從接口模塊完成AHB總線讀寫信號(hào)到內(nèi)部信號(hào)的轉(zhuǎn)換,可以通過該接口訪問內(nèi)部寄存器[5]。發(fā)送FIFO是一個(gè)異步FIFO,寫端口工作在AHB時(shí)鐘域,讀端口工作在SSI clock時(shí)鐘域。通過寫發(fā)送數(shù)據(jù)寄存器可以將數(shù)據(jù)寫入發(fā)送異步FIFO,并串轉(zhuǎn)換模塊從讀端口將發(fā)送數(shù)據(jù)讀出[6,7]。SCLK生成器產(chǎn)生SCLK_out時(shí)鐘,本設(shè)計(jì)采用雙數(shù)據(jù)速率(Double Date Rate,DDR)模式傳輸,因此SCLK_out時(shí)鐘頻率是數(shù)據(jù)傳輸頻率的一半。當(dāng)SCLK_in有效時(shí),SCLK_out是SSI clock的2分頻時(shí)鐘;當(dāng)SCLK_in無效時(shí),SCLK_out保持低電平輸出。

并串轉(zhuǎn)換模塊將32 bit的TX data 轉(zhuǎn)換成8 bit的TXD。為了使從機(jī)接收數(shù)據(jù)建立和保持時(shí)間有SCLK_out時(shí)鐘周期的余量,TXD采用SSI clock下降沿輸出,如圖2所示[8]。

圖2 SPI主機(jī)TXD與SCLK_out相位關(guān)系

時(shí)鐘de-skew電路由粗精度可調(diào)延遲電路和高精度可調(diào)延遲電路組成,粗精度可調(diào)延遲電路可以增大延遲范圍,高精度可調(diào)延遲電路可以提高延遲精度。de-skew模塊中,每條接收數(shù)據(jù)線(RXD[n])和RXD valid分別經(jīng)過1條高精度可調(diào)延遲線后送入串并轉(zhuǎn)化模塊。RX en gate信號(hào)經(jīng)過粗精度可調(diào)延遲電路后去門控SSI clock,得到門控時(shí)鐘gate SSI clock,該門控時(shí)鐘再通過高精度可調(diào)延遲線。串并轉(zhuǎn)化電路完成接收信號(hào)的串并轉(zhuǎn)化,并將其寫入接收FIFO。

狀態(tài)機(jī)模塊負(fù)責(zé)數(shù)據(jù)收、發(fā)過程的流程控制。復(fù)位后狀態(tài)機(jī)進(jìn)入空閑狀態(tài),當(dāng)檢測(cè)到發(fā)送FIFO非空并且從機(jī)接收FIFO非滿時(shí),狀態(tài)機(jī)進(jìn)入Assert SS狀態(tài),在該狀態(tài)ss_out_n信號(hào)生效,隨后進(jìn)入發(fā)送命令狀態(tài)。若是寫模式,在發(fā)送完命令后進(jìn)入發(fā)送數(shù)據(jù)狀態(tài),在發(fā)送數(shù)據(jù)過程中若主機(jī)發(fā)送FIFO空或從機(jī)接收FIFO將滿,則進(jìn)入停止發(fā)送狀態(tài)。在該狀態(tài)下,SCLK_out時(shí)鐘為低,直到發(fā)送條件恢復(fù),回到數(shù)據(jù)發(fā)送狀態(tài)完成數(shù)據(jù)發(fā)送。若是讀模式,在發(fā)送完命令后進(jìn)入等待狀態(tài),完成等待狀態(tài)后進(jìn)入接收狀態(tài),當(dāng)主機(jī)接收FIFO將滿時(shí)進(jìn)入停止接收狀態(tài)。在該狀態(tài)下,SCLK_out時(shí)鐘為低,直到接收條件恢復(fù),回到數(shù)據(jù)接收狀態(tài)。主機(jī)狀態(tài)轉(zhuǎn)移流程如圖3所示。

圖3 主機(jī)狀態(tài)轉(zhuǎn)移流程

1.2 SPI從控制器設(shè)計(jì)

SPI從機(jī)默認(rèn)工作在接收模式,接收到命令字段后根據(jù)讀寫命令切換工作模式。當(dāng)收到寫命令,SPI從機(jī)繼續(xù)工作在接收模式;當(dāng)收到讀命令,SPI從機(jī)切換到發(fā)送模式。SPI從機(jī)結(jié)構(gòu)與主機(jī)類似,如圖4所示。

圖4 SPI從接口模塊框架

狀態(tài)機(jī)模塊負(fù)責(zé)數(shù)據(jù)接收和發(fā)送的流程控制,為其他模塊提供控制信號(hào)。狀態(tài)機(jī)默認(rèn)為detect狀態(tài),當(dāng)收到寫命令時(shí)進(jìn)入接收數(shù)據(jù)狀態(tài),在該狀態(tài)中完成數(shù)據(jù)接收。當(dāng)數(shù)據(jù)傳輸完成后,狀態(tài)機(jī)回到初始狀態(tài)。從機(jī)收到讀請(qǐng)求命令后進(jìn)入等待狀態(tài),在該狀態(tài)中完成接收模式到發(fā)送模式的切換,完成收發(fā)模式切換后進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)。當(dāng)發(fā)送FIFO為空時(shí),進(jìn)入發(fā)送停止?fàn)顟B(tài),在停止?fàn)顟B(tài)TX valid信號(hào)無效;當(dāng)發(fā)送FIFO非空時(shí),回到發(fā)送狀態(tài),直到發(fā)送數(shù)據(jù)完成,回到初始狀態(tài)。SPI從機(jī)狀態(tài)轉(zhuǎn)移流程如圖5所示。

圖5 SPI從機(jī)狀態(tài)轉(zhuǎn)移流程

2 自動(dòng)de-skew算法設(shè)計(jì)

自動(dòng)de-skew算法包含從機(jī)接收端de-skew和主機(jī)接收端de-skew。

2.1 從機(jī)接收端de-skew算法

從機(jī)接收端de-skew算法包含數(shù)據(jù)de-skew和時(shí)鐘de-skew。數(shù)據(jù)de-skew完成RXD各比特位對(duì)齊,時(shí)鐘de-skew使時(shí)鐘的跳變沿對(duì)齊數(shù)據(jù)的中點(diǎn)位置。分別從主機(jī)算法和從機(jī)算法2個(gè)方面進(jìn)行闡述。

2.1.1 主機(jī)算法

步驟一:調(diào)整SSI clock,使其處于低頻模式。本設(shè)計(jì)中,SSI clock為50 MHz,數(shù)據(jù)傳輸周期為20 ns,從機(jī)接收端的建立保持時(shí)間均有10 ns的余量。在該頻率下,對(duì)于skew不敏感,從機(jī)能正確接收數(shù)據(jù)。

步驟二:主機(jī)向從機(jī)發(fā)送訓(xùn)練序列0x00FF00FF00FF00FF,使得傳輸數(shù)據(jù)的每一比特都在不斷進(jìn)行0和1的跳變。

步驟三:等待10 μs,以便從機(jī)完成數(shù)據(jù)接收和延遲線的調(diào)整,再返回步驟二。重復(fù)步驟二、步驟三,直到完成從機(jī)接收端de-skew。

步驟四:將SSI clock調(diào)到正常工作頻率。

2.1.2 從機(jī)算法

步驟一:通過逐步增大接收數(shù)據(jù)線RXD[n]的延遲線長度,尋找RXD[n]的下降沿,得到時(shí)鐘上升沿與RXD[n]下降沿的間距,記為dn(n=0,1,2,…,7),如圖6所示。

圖6 RXD[n]下降沿與時(shí)鐘上升沿間距

找出d0到d7的最小值并記為dmin,將dn與dmin的差值作為RXD[n]的延遲值。如果延遲線調(diào)到最大延遲值都無法找到數(shù)據(jù)的下降沿,則進(jìn)入步驟二,否則進(jìn)入步驟三。

步驟二:通過不斷增大時(shí)鐘的延遲長度尋找數(shù)據(jù)RXD[n]的上升沿,將SCLK_in上升沿和數(shù)據(jù)RXD[n]上升沿的間距記為Rn(n=0,1,2,…,7),如圖7所示。

圖7 RXD[n]上升沿和時(shí)鐘上升沿的間距

找出R0到R7的最大值并記為dmax,將dmax與Rn的差值作為RXD[n]的延遲值。

步驟三:通過步驟一、步驟二完成數(shù)據(jù)之間的de-skew后,進(jìn)行時(shí)鐘de-skew。

若通過第一步完成數(shù)據(jù)de-skew,則逐步增大時(shí)鐘延遲尋找數(shù)據(jù)的上升沿,將SCLK_in上升沿與數(shù)據(jù)RXD上升沿的間距記為L,如圖8所示。

圖8 RXD上升沿與時(shí)鐘上升沿的間距

若通過第二步完成數(shù)據(jù)de-skew,則通過不斷調(diào)整數(shù)據(jù)RXD延遲長度尋找數(shù)據(jù)的下升沿,將SCLK_in的上升沿與數(shù)據(jù)RXD的下降沿的間距記為P,如圖9所示。

圖9 RXD下降沿與時(shí)鐘上升沿的間距

2.2 主機(jī)接收端de-skew算法

主機(jī)接收端de-skew算法包含數(shù)據(jù)de-skew和時(shí)鐘de-skew過程,數(shù)據(jù)de-skew在低頻傳輸模式下完成,時(shí)鐘de-skew在高頻傳輸模式下完成。

2.2.1 從機(jī)算法

當(dāng)從機(jī)發(fā)送FIFO處于非滿狀態(tài)時(shí),從機(jī)不斷向發(fā)送FIFO寫入訓(xùn)練序列0x00FF00FF00FF00FF,以便主機(jī)讀回,完成de-skew訓(xùn)練。

2.2.2 主機(jī)算法

步驟一:調(diào)整SSI Clock,使其處于低頻模式。本設(shè)計(jì)中SSI clock為50 MHz,數(shù)據(jù)傳輸周期為20 ns。

步驟二:通過逐步增大接收數(shù)據(jù)RXD[n]的延遲尋找RXD[n]的下降沿,得到時(shí)鐘上升沿與RXD[n]下降沿的間距記為dn′(n=0,1,2,…,7)。通過逐步增大RX_valid的延遲尋找RX_valid的上升沿,得到時(shí)鐘上升沿與RX_valid上升沿的間距記為d8′。找出d0′到d8′的最小值記為dmin′,將dn′與dmin′的差值作為RXD[n]的延遲值。如果步驟二中延遲線調(diào)到最大延遲值都無法找到數(shù)據(jù)的下降沿,則進(jìn)入步驟三,否則進(jìn)入步驟四。

步驟三:通過逐步增大時(shí)鐘的延遲尋找數(shù)據(jù)RXD[n]的上升沿,將SCLK_in上升沿和數(shù)據(jù)RXD[n]上升沿的間距記為Rn′(n=0,1,2,…,7)。通過逐步增大時(shí)鐘的延遲尋找RX_valid的下降沿,將SCLK_in上升沿和RX_valid下升沿的間距記為d8′。找出R0′到d8′的最大值記為dmax′,將dmax′與Rn′ 的差值作為RXD[n]的延遲值,將dmax′與d8′的差值作為RX_valid的延遲值

步驟四:調(diào)整SSI clock,使其處于正常工作頻率。本設(shè)計(jì)中SSI clock為200 MHz,數(shù)據(jù)傳輸周期為5 ns。

步驟五:完成時(shí)鐘de-skew,使得SSI clock上升沿對(duì)齊數(shù)據(jù)的中點(diǎn)位置。

de-skew后RXD與SSI clock的相位關(guān)系如圖10、圖11所示。

圖10 主機(jī)接收數(shù)據(jù)延遲小于SSI clock周期

圖11 主機(jī)接收數(shù)據(jù)延遲大于SSI clock周期

主機(jī)若不能正確讀到訓(xùn)練序列,則說明接收數(shù)據(jù)的延遲大于時(shí)鐘周期,即為圖11情況。在該情況下,通過逐步增加時(shí)鐘延遲,直到第1次能正確讀到訓(xùn)練序列,將此時(shí)的時(shí)鐘延遲記為Tstart。繼續(xù)逐步增加時(shí)鐘延遲,直到再一次讀到錯(cuò)誤的訓(xùn)練序列,將最后一次正確讀到訓(xùn)練序列時(shí)的時(shí)鐘延遲記為Tend。Tstart和Tend的均值即為時(shí)鐘的延遲值。

2.3 自動(dòng)de-skew算法性能分析

采用Synopsys的VCS仿真軟件搭建仿真環(huán)境,分析de-skew算法的性能[9,10]。SSI clock的低頻時(shí)鐘頻率為50 MHz,高頻時(shí)鐘頻率為200 MHz,延遲線的最大延遲為15 ns。從機(jī)接收端de-skew仿真波形如圖12所示,從機(jī)接收端de-skew前后對(duì)比如圖13所示。

圖12 從機(jī)接收端de-skew仿真波形

從圖13中可以看出,接收數(shù)據(jù)由于傳輸延遲差別,有效數(shù)據(jù)窗口較小,無法正確采樣數(shù)據(jù)。經(jīng)過deskew算法處理后,接收數(shù)據(jù)有效窗口較大,且SCLK時(shí)鐘的上升沿和下降沿對(duì)齊數(shù)據(jù)窗口的中間位置。

圖13 從機(jī)接收端de-skew前后波形對(duì)比

主機(jī)接收端de-skew仿真波形如圖14所示,主機(jī)接收端de-skew前后對(duì)比如圖15所示。

圖14 主機(jī)接收端de-skew仿真波形

圖15 主機(jī)接收端de-skew前后波形對(duì)比

從圖15中可以看出,接收數(shù)據(jù)由于傳輸延遲差別,有效數(shù)據(jù)窗口較小,無法正確采樣數(shù)據(jù)。經(jīng)過de-skew算法處理后,接收數(shù)據(jù)有效窗口較大,且SSI clock時(shí)鐘的上升沿對(duì)齊數(shù)據(jù)窗口的中間位置。

3 結(jié) 論

本設(shè)計(jì)采用雙沿采樣來提高SPI的傳輸帶寬,通過自動(dòng)de-skew算法消除后端布局布線和PCB走線引入數(shù)據(jù)間的skew以及數(shù)據(jù)與時(shí)鐘間的skew,降低后端設(shè)計(jì)和PCB設(shè)計(jì)的難度。此外,增加流量控制機(jī)制,根據(jù)FIFO的空、滿狀態(tài),通信中的任意一方可以暫停數(shù)據(jù)傳輸。

猜你喜歡
狀態(tài)機(jī)接收端時(shí)鐘
基于擾動(dòng)觀察法的光通信接收端優(yōu)化策略
FPGA狀態(tài)機(jī)綜合可靠性探究 ①
古代的時(shí)鐘
純多播BC 信道并存單播MAC 信道的天線效率研究
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
手機(jī)無線充電收發(fā)設(shè)計(jì)
基于Spring StateMachine的有限狀態(tài)機(jī)應(yīng)用研究
這個(gè)時(shí)鐘一根針
有趣的時(shí)鐘
時(shí)鐘會(huì)開“花”