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

?

基于FPGA的USB PD控制器的設(shè)計(jì)與實(shí)現(xiàn)?

2020-07-13 12:48:38牛雨萌焦繼業(yè)
關(guān)鍵詞:波特率狀態(tài)機(jī)解碼

牛雨萌 焦繼業(yè) 李 晨

(西安郵電大學(xué)電子工程學(xué)院 西安 710121)

1 引言

目前市場(chǎng)上新發(fā)布的主流手機(jī)機(jī)型,已全面開(kāi)始使用 USB Type-C[1]接口,且飛利浦、樂(lè)視等廠商已經(jīng)推出USB Type-C接口的數(shù)字耳機(jī),USB Type-C在消費(fèi)類電子市場(chǎng)中得到了廣泛應(yīng)用[2]。相比于傳統(tǒng)USB接口[3],最大的不同在于USB Type-C接口中新定義了一條CC線,USB PD[4]協(xié)議就是基于USB Type-C接口中的CC線實(shí)現(xiàn)的,它是一種主從單線通訊協(xié)議,不僅是用于實(shí)現(xiàn)快速充電的協(xié)議,實(shí)際上,USB PD是USB Type-C的靈魂所在。它與USB Type-C接口的結(jié)合可支持高達(dá)20V/5A的標(biāo)準(zhǔn)電能傳輸,利用協(xié)議中的VDM[5]消息建立 Type-C 替代模式的連接,可實(shí)現(xiàn) DisplayPort[6~7]、HDMI[8]等高速數(shù)據(jù)傳輸,具有良好的應(yīng)用前景[9]。

本文設(shè)計(jì)并實(shí)現(xiàn)了一種USB PD控制器,完成了PD數(shù)據(jù)包的正確發(fā)送、接收及校驗(yàn),并利用FP?GA進(jìn)行驗(yàn)證[10]。FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,具有豐富的可編程邏輯單元、嵌入式塊RAM、可編程輸入輸出單元等硬件資源,可以在其內(nèi)部靈活實(shí)現(xiàn)各種數(shù)字電路設(shè)計(jì)。因此,采用FPGA技術(shù)進(jìn)行驗(yàn)證,可以快速修改代碼中的錯(cuò)誤,為后續(xù)的IC設(shè)計(jì)提供正確保障。

2 PD控制器總體方案

USB PD協(xié)議采用BMC編碼,標(biāo)準(zhǔn)數(shù)據(jù)包格式如圖1。每個(gè)包的起始和結(jié)束分別以固定的64bit0/1交替的序列和01101作為標(biāo)志;SOP*定義了通信類型;Message Header定義了數(shù)據(jù)對(duì)象的個(gè)數(shù)、Mes?sage ID、電力角色、數(shù)據(jù)角色、版本信息、消息類型等信息;Data Object是0~7個(gè)32bit數(shù)據(jù)對(duì)象,若該部分不存在則此條消息為控制消息,CRC為校驗(yàn)碼,用于檢測(cè)包內(nèi)容在傳輸過(guò)程中是否出錯(cuò)。

圖1 PD控制器總體框圖

本文采用自頂向下的設(shè)計(jì)方法,先根據(jù)功能要求設(shè)計(jì)總體方案,再針對(duì)核心模塊逐步細(xì)化[11]。如圖2為PD控制器的總體框圖。系統(tǒng)時(shí)鐘clkin為20Mhz,rst為系統(tǒng)復(fù)位信號(hào),高有效。PD控制器主要由PD_TX、PD_RX、CRC32校驗(yàn)、波特率控制四個(gè)模塊組成,其中PD_TX和PD_RX是設(shè)計(jì)的核心模塊,負(fù)責(zé)PD數(shù)據(jù)包的發(fā)送和接收。CRC32[12]校驗(yàn)?zāi)K負(fù)責(zé)數(shù)據(jù)在傳輸過(guò)程中的檢錯(cuò)。波特率控制模塊用于控制數(shù)據(jù)傳輸?shù)乃俣取?/p>

圖2 PD控制器總體框圖

3 PD控制器模塊設(shè)計(jì)

3.1 波特率控制模塊設(shè)計(jì)

本文將標(biāo)準(zhǔn)時(shí)間設(shè)為300kHz,系統(tǒng)時(shí)鐘為20MHz,因此設(shè)定波特率控制寄存器mcpr0的值為20MHz/300kHz-1=66;采樣波特率控制寄存器mcsamp的值應(yīng)設(shè)為20MHz/300kHz/4=16。

3.2 PD_TX模塊設(shè)計(jì)

PD_TX模塊[13]主要完成以下功能:接收從協(xié)議層發(fā)送來(lái)的PD消息數(shù)據(jù)包、將CRC32值添加至數(shù)據(jù)包尾、完成數(shù)據(jù)包的4b5b編碼、BMC編碼并將編碼后的數(shù)據(jù)包發(fā)送至CC線。如圖3為PD_TX的模塊內(nèi)部結(jié)構(gòu)圖,可細(xì)化為四個(gè)部分:4b5b編碼模塊、移位控制模塊、發(fā)送控制模塊和BMC編碼模塊。TX_STATE與外部信號(hào)交互,控制著整個(gè)發(fā)送過(guò)程。bmctl[4:0]、bmcth[4:0]及bmct4t5[7:0]用于存放待發(fā)送的數(shù)據(jù),CRC32校驗(yàn)值需要調(diào)用CRC32校驗(yàn)?zāi)K進(jìn)行計(jì)算。存入bmct4t5[7:0]的值分為高四位bmct4t5[7:4]和低四位bmct4t5[3:0]兩部分,經(jīng)過(guò)4b5b編碼模塊輸出至由Loaden0控制的數(shù)據(jù)選擇器。數(shù)據(jù)選擇器的輸出經(jīng)過(guò)移位寄存器的右移操作每次將最低位tx_buf[0]輸出至CO_STATE狀態(tài)機(jī)進(jìn)行BMC編碼。loaden0、load?en1、pdtxbf、dly_ok、tx_ok為內(nèi)部控制信號(hào),pdtx_da?ta為最終發(fā)送的數(shù)據(jù)。

圖3 PD_TX內(nèi)部結(jié)構(gòu)圖

發(fā)送控制模塊是該模塊的核心,采用狀態(tài)機(jī)設(shè)計(jì)實(shí)現(xiàn),該狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖如圖4所示。其中,pdtxen是發(fā)送使能信號(hào);mcpr0是波特率控制器寄存器;mct0是一個(gè)七位計(jì)數(shù)器,其值與mcpr0的值相等時(shí)則發(fā)送一位數(shù)據(jù)并清零;bmcr_cnt是一個(gè)兩位計(jì)數(shù)器,當(dāng)計(jì)數(shù)器mct0計(jì)數(shù)到mcsamp的值時(shí)自加1,當(dāng)mct0計(jì)數(shù)到mcpr0時(shí)清零,最大計(jì)數(shù)到2'b11。當(dāng)系統(tǒng)復(fù)位或發(fā)送使能信號(hào)無(wú)效時(shí)保持在TX_IDLE狀態(tài),發(fā)送使能信號(hào)有效則轉(zhuǎn)移到TX_WAIT狀態(tài),該狀態(tài)在等待待發(fā)送數(shù)據(jù)寫(xiě)入相應(yīng)寄存器,loaden1和loaden0作為寫(xiě)入標(biāo)志位,當(dāng)其中任何一個(gè)為0時(shí),則轉(zhuǎn)移到TX_SYNC狀態(tài)。pdtxdly[3:0]表示在發(fā)送第一個(gè)前導(dǎo)碼之前延時(shí)的0的個(gè)數(shù),用于控制TX_SYNC至TX_DLY或TX_OK的轉(zhuǎn)移。dly_ok是延遲結(jié)束標(biāo)志位,由初值為 pdtxdly的自減 1計(jì)數(shù)器 dly_cnt[3:0]控制,當(dāng)dly_cnt=1時(shí),dly_ok標(biāo)志位置1,此時(shí)從TX_DLY轉(zhuǎn)移到TX_OK。TX_BUF為發(fā)送狀態(tài),tx_buf[9:0]的值被{1'b0,tx_buf[9:1]}的值更新。tx_ok為數(shù)據(jù)發(fā)送完成標(biāo)志,由一個(gè)初值為4、5或10的自減1計(jì)數(shù)器tx_cnt控制。pdtxbf為1時(shí)表示發(fā)送正在進(jìn)行,應(yīng)由TX_OK跳轉(zhuǎn)到TX_BUF。

圖4 發(fā)送狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖

PD協(xié)議中規(guī)定數(shù)據(jù)以BMC碼的形式傳輸,圖3中的CO_STATE用來(lái)實(shí)現(xiàn)BMC編碼,具體的狀態(tài)轉(zhuǎn)移圖如圖5所示。當(dāng)TX_STATE=TX_BUF時(shí)狀態(tài)機(jī)開(kāi)始工作,根據(jù) bmcr_cnt,mct0,mcpr0及 txbuf[0]的值來(lái)控制狀態(tài)轉(zhuǎn)移。若發(fā)送的數(shù)據(jù)為0則在一個(gè)發(fā)送波特率時(shí)間段內(nèi)保持不變,若發(fā)送的數(shù)據(jù)為1則有翻轉(zhuǎn)。

圖5 BMC編碼狀態(tài)轉(zhuǎn)移圖

3.3 PD_RX模塊設(shè)計(jì)

PD_RX模塊主要完成以下功能:接收CC線上發(fā)來(lái)的數(shù)據(jù)、進(jìn)行BMC解碼、探測(cè)SOP和EOP、進(jìn)行5b4b解碼、驗(yàn)證CRC32的值,若正確則將PD數(shù)據(jù)包發(fā)送至協(xié)議層解析,若不正確則丟棄。如圖6為PD_RX的內(nèi)部結(jié)構(gòu)圖,可細(xì)化為BMC解碼模塊、移位控制模塊、接收雙緩存、5b4b解碼模塊、控制信號(hào)產(chǎn)生模塊和RX_STATE控制模塊??刂菩盘?hào)產(chǎn)生模塊和RX_STATE與外部信號(hào)交互,控制著整個(gè)接收過(guò)程。接收到的數(shù)據(jù)由bmcr_ccdat進(jìn)入BMC解碼模塊。移位控制模塊將經(jīng)過(guò)BMC解碼的數(shù)據(jù)^bmcr_sdat依次右移進(jìn)bmcr5b[4:0]作為接收雙緩存模塊的輸入,該模塊受bmcrcnt[2:0]控制,當(dāng)該計(jì)數(shù)器計(jì)數(shù)到5即接收完一個(gè)5b數(shù)據(jù)時(shí)將bmcr5b的值賦給bmc_rlbf[4:0],同時(shí)bmc_rlbf[4:0]的值將賦值給bmc_rhbf[4:0],這兩個(gè)寄存器的值經(jīng)過(guò)5b4b解碼模塊輸出最終結(jié)果bmcr5t4[7:0]。rcover為接收溢出標(biāo)志,pd_rcif為接收中斷標(biāo)志,err_flag為錯(cuò)誤標(biāo)志。

圖6 PD_RX內(nèi)部結(jié)構(gòu)圖

從CC線接收數(shù)據(jù)之后應(yīng)先進(jìn)行BMC解碼,如圖7為BMC解碼采樣原理圖,在一個(gè)發(fā)送波特率時(shí)間段內(nèi)采樣兩次,如采樣點(diǎn)①和采樣點(diǎn)②的采樣值分別為1和0,取它們的異或值則為BMC解碼后的值。采樣點(diǎn)③和采樣點(diǎn)④同理。

圖7 BMC解碼采樣原理圖

RX_STATE和控制信號(hào)產(chǎn)生模塊為接收模塊的核心,其中接收狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖如圖8所示。當(dāng)系統(tǒng)復(fù)位或接收使能信號(hào)pdrcen無(wú)效時(shí)保持在IDLE狀態(tài),當(dāng)pdrcen有效時(shí)轉(zhuǎn)移到WAIT狀態(tài),等待接收數(shù)據(jù)。SYN64、SYN1、DATA和EOP分別對(duì)應(yīng)接收一個(gè)標(biāo)準(zhǔn)的PD數(shù)據(jù)包中的64位前導(dǎo)碼、SOP中的 sync-1、Data Object及 EOP狀態(tài)。sync_flag64是PD數(shù)據(jù)包中前導(dǎo)碼接收完畢標(biāo)志位。由于前導(dǎo)碼的0/1交替性,且每次計(jì)數(shù)到奇數(shù)所對(duì)應(yīng)的值為0,每次計(jì)數(shù)到偶數(shù)所對(duì)應(yīng)的值為1,利用此規(guī)則作為計(jì)數(shù)器preamble_cnt[5:0]自加1的條件,如不滿足則清零。當(dāng)前導(dǎo)碼被判斷正確時(shí),從SYNC64跳轉(zhuǎn)到SYNC1狀態(tài)。sync1_flag、sync2_flag、sync3_flag、eop_flag分 別 為 接 收 到sync1、sync2、sync3及EOP標(biāo)志位,均用5b數(shù)據(jù)寄存器bmcr5b的值來(lái)判定。當(dāng)bmcr5b的值不等于sync-1、sync-2、sync-3、rst_1、rst_2及EOP中的任何一個(gè)并且5b4b譯碼失敗時(shí),表明接收到的數(shù)據(jù)有誤,此時(shí)接收錯(cuò)誤標(biāo)志err_flag置1,并不再繼續(xù)接收數(shù)據(jù),直接跳轉(zhuǎn)到IDLE狀態(tài)。當(dāng)位于EOP狀態(tài)時(shí),整個(gè)PD數(shù)據(jù)包已被正確接受完畢,此時(shí)無(wú)條件跳轉(zhuǎn)到IDLE狀態(tài)。

圖8 接收狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖

3.4 CRC32校驗(yàn)?zāi)K設(shè)計(jì)

為防止PD消息在傳輸?shù)倪^(guò)程中出錯(cuò)或者丟失,PD_TX和PD_RX都要調(diào)用CRC32校驗(yàn)?zāi)K[14]。循環(huán)冗余檢驗(yàn)(Cyclic Redundancy Check,CRC)作為數(shù)據(jù)傳輸中差錯(cuò)控制的基本方法之一,廣泛應(yīng)用于測(cè)控及通信領(lǐng)域中。PD_TX調(diào)用該模塊對(duì)PD消息的Message Header和Data Object部分進(jìn)行CRC32計(jì)算,PD_RX調(diào)用該模塊對(duì)接收到的數(shù)據(jù)的相應(yīng)部分再次進(jìn)行CRC32計(jì)算,并與原來(lái)的CRC32的值進(jìn)行比較,若一致表明數(shù)據(jù)接收正確,若不一致該數(shù)據(jù)包會(huì)被丟棄。CRC32校驗(yàn)的生成多項(xiàng)式為 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,初始值為FFFF FFFFh。

4 設(shè)計(jì)驗(yàn)證

4.1 仿真

本設(shè)計(jì)在VCS+Verdi環(huán)境下進(jìn)行功能仿真,仿真結(jié)果完全正確,由于仿真波形圖較大,在此不再貼出。

4.2 驗(yàn)證

選用型號(hào)為EP4CE6E22C8N的FPGA作為驗(yàn)證平臺(tái),用mplab編寫(xiě)C文件配置相應(yīng)寄存器,將編譯生成的hex文件下載進(jìn)FPGA,并與POWER-Z PD誘騙器連接,用邏輯分析儀抓取Type-C接口中的CC線上的PD通信波形,驗(yàn)證環(huán)境如圖9所示。

圖9 驗(yàn)證平臺(tái)實(shí)物圖

如圖10為邏輯分析儀抓出來(lái)的PD通信波形:FPGA先給PD誘騙器發(fā)送一個(gè)標(biāo)準(zhǔn)PD數(shù)據(jù)包,PD誘騙器接收到之后應(yīng)回復(fù)一個(gè)GOODCRC包;PD誘騙器給FPGA發(fā)送一個(gè)標(biāo)準(zhǔn)數(shù)據(jù)包,F(xiàn)PGA接收到之后也回復(fù)一個(gè)GOODCRC包。

圖10 PD通信波形圖

此外,由于PD數(shù)據(jù)包格式復(fù)雜且數(shù)據(jù)量很大,手動(dòng)分析耗時(shí)耗力且不準(zhǔn)確。為了更好地說(shuō)明驗(yàn)證結(jié)果及方便未來(lái)進(jìn)一步的研究與調(diào)試,用Python將邏輯分析儀導(dǎo)出的txt文件按格式讀入,深入分析PD協(xié)議并編寫(xiě)PD數(shù)據(jù)包解析程序,程序運(yùn)行結(jié)果可顯示PD通信的細(xì)節(jié),方便設(shè)計(jì)的調(diào)試與檢錯(cuò)。

5 結(jié)語(yǔ)

本文深入研究了USB PD協(xié)議中的消息類型、消息格式、消息發(fā)送、接收和校驗(yàn)的機(jī)制,在此基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了一種基于FPGA的USB PD控制器,完成了接收模塊、發(fā)送模塊、CRC32校驗(yàn)?zāi)K、波特率控制模塊的設(shè)計(jì),并對(duì)每個(gè)模塊的設(shè)計(jì)思路進(jìn)行了說(shuō)明[15],在VCS+Verdi仿真環(huán)境下通過(guò)了功能仿真,并且經(jīng)過(guò)FPGA驗(yàn)證,驗(yàn)證結(jié)果表明該控制器可實(shí)現(xiàn)PD數(shù)據(jù)包的正確發(fā)送、接收及校驗(yàn)。后續(xù)將在此基礎(chǔ)上做進(jìn)一步研究,實(shí)現(xiàn)PD協(xié)議中VDM消息的通訊,使USB Type-C接口進(jìn)入替代模式,完成視頻的傳輸。

猜你喜歡
波特率狀態(tài)機(jī)解碼
《解碼萬(wàn)噸站》
CAN 總線波特率自適應(yīng)程序設(shè)計(jì)
智能制造(2020年5期)2020-07-03 06:24:00
解碼eUCP2.0
基于有限狀態(tài)機(jī)的交會(huì)對(duì)接飛行任務(wù)規(guī)劃方法
NAD C368解碼/放大器一體機(jī)
Quad(國(guó)都)Vena解碼/放大器一體機(jī)
基于FPGA的異步串行通信波特率容錯(cuò)設(shè)計(jì)
C*Core芯片SCI串口波特率容限優(yōu)化
FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計(jì)
安吉县| 夏河县| 嘉善县| 翁牛特旗| 玉环县| 吐鲁番市| 靖西县| 清苑县| 龙陵县| 潜江市| 保定市| 德化县| 岳池县| 博野县| 赞皇县| 高邑县| 诸暨市| 楚雄市| 南岸区| 浏阳市| 汨罗市| 信阳市| 灵璧县| 图片| 平山县| 新源县| 宁明县| 饶河县| 保亭| 平邑县| 西吉县| 闽侯县| 定边县| 南昌市| 阿克苏市| 贺州市| 疏附县| 通州区| 合阳县| 自治县| 青川县|