本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
Sgmii協議是(shì)串行協議,區(qū)别于(yú)rgmii和(hé)gmii的(de)并行接口(kǒu),使实验(yàn)電(diàn)路(lù)更(gèng)加簡單方(fāng)便。
Sgmii協議如(rú)果(guǒ)是(shì)在(zài)FPGA上(shàng)实現(xiàn),那(nà)麼(me)要(yào)求FPGA支持(chí)Serdes接口(kǒu)或(huò)者(zhě)FPGA有(yǒu)支持(chí)sgmii的(de)IP核。
Sgmii是(shì)采用(yòng)差分(fēn)对(duì)信(xìn)号(hào)線(xiàn)進(jìn)行數據(jù)傳輸的(de),不(bù)提(tí)供随路(lù)时(shí)鐘(zhōng),依靠數據(jù)信(xìn)息進(jìn)行CDR的(de)时(shí)鐘(zhōng)恢複,在(zài)數據(jù)鍊(liàn)路(lù)上(shàng)采用(yòng)8b/10b編碼,所(suǒ)以(yǐ)當傳輸的(de)是(shì)千(qiān)兆(zhào)以(yǐ)太网(wǎng)(1Gbps)的(de)时(shí)候,數據(jù)鍊(liàn)路(lù)上(shàng)的(de)傳輸的(de)速率是(shì)1.25Gbps,也(yě)就(jiù)是(shì)说(shuō)FPGA例化(huà)Serdes的(de)IP核的(de)时(shí)候的(de)數據(jù)速率是(shì)1.25Gbps。
一(yī)、 sgmii的(de)數據(jù)鍊(liàn)路(lù)层的(de)握手(shǒu)过(guò)程
Sgmii在(zài)通(tòng)信(xìn)过(guò)程中(zhōng)首先(xiān)要(yào)進(jìn)行PHY和(hé)sgmii的(de)數據(jù)鍊(liàn)路(lù)层的(de)鍊(liàn)接,即FPGA的(de)sgmii或(huò)者(zhě)Serdes和(hé)sgmii_phy芯片(piàn)的(de)握手(shǒu),在(zài)握手(shǒu)建立之後(hòu)才進(jìn)行數據(jù)傳輸。握手(shǒu)的(de)过(guò)程首先(xiān)是(shì)sgmii_phy芯片(piàn)(以(yǐ)AR8031为(wèi)例)發(fà)送準備好(hǎo)狀态(0xBC 0x42 0x01 0x98 0xBC 0xB5 0x01 0x98),然後(hòu)FPGA回(huí)複sgmii_phy的(de)信(xìn)息为(wèi)(0xbc 0xb5 0x01 0xd8 0xbc 0x42 0x01 0xd8)。在(zài)數據(jù)鍊(liàn)路(lù)握手(shǒu)之後(hòu)才是(shì)數據(jù)的(de)發(fà)送。數據(jù)鍊(liàn)路(lù)层每隔1.6ms進(jìn)行一(yī)次(cì)狀态信(xìn)息的(de)更(gèng)新,也(yě)就(jiù)是(shì)说(shuō)FPGA每隔1.6ms發(fà)送一(yī)次(cì)自(zì)身(shēn)的(de)狀态給(gěi)PHY芯片(piàn)
二(èr)、 數據(jù)的(de)發(fà)送
Sgmii協議傳輸數據(jù)包(bāo)的(de)过(guò)程中(zhōng),以(yǐ)K27.7为(wèi)起始符,以(yǐ)K29.7为(wèi)結束(shù)符。數據(jù)鍊(liàn)路(lù)空閑的(de)时(shí)候要(yào)發(fà)送空閑碼。空閑碼(IDLE碼)有(yǒu)两(liǎng)種(zhǒng)/K28.5/D5.6或(huò)者(zhě)/K28.5/D16.2。在(zài)發(fà)送數據(jù)的(de)过(guò)程中(zhōng)的(de)需要(yào)注意(yì)在(zài)發(fà)送完畢空閑碼的(de)时(shí)候才能(néng)發(fà)送數據(jù),也(yě)就(jiù)是(shì)说(shuō)發(fà)送數據(jù)的(de)时(shí)候先(xiān)發(fà)送(0xBC 0x50)完畢,接着發(fà)送起始符(K27.7),然後(hòu)發(fà)送千(qiān)兆(zhào)以(yǐ)太网(wǎng)協議(/0x55/ 0x55/ 0x55/ 0x55/ /0x55/ 0x55/ 0x55/0xD5),接着發(fà)送的(de)數據(jù)是(shì)遵循千(qiān)兆(zhào)网(wǎng)以(yǐ)太网(wǎng)的(de)協議數據(jù)(具體(tǐ)請自(zì)行查看(kàn)),發(fà)送完數據(jù)之後(hòu)再發(fà)送一(yī)个(gè)字(zì)节(jié)的(de)結束(shù)符(K29.7)。
三(sān)、 FPGA數據(jù)傳輸过(guò)程中(zhōng)的(de)K碼解(jiě)析
在(zài)上(shàng)面(miàn)的(de)數據(jù)傳輸的(de)过(guò)程中(zhōng)有(yǒu)IDLE碼(0xbc 0x50),起始符K27.7(0xFB),結束(shù)符K29.7(0xFD)等。在(zài)以(yǐ)上(shàng)的(de)特(tè)殊碼的(de)傳輸的(de)过(guò)程中(zhōng)有(yǒu)K碼要(yào)相对(duì)的(de)置1。即空閑碼的(de)(0xbc 0x50)的(de)0xbc要(yào)K碼與(yǔ)之对(duì)應(yìng),K27.7和(hé)K29.7也(yě)是(shì)K碼與(yǔ)之对(duì)應(yìng)。
總(zǒng)結:sgmii的(de)傳輸數據(jù)的(de)过(guò)程为(wèi):每隔1.6ms 时(shí)間(jiān) FPGA和(hé)PHY的(de)握手(shǒu)过(guò)程,握手(shǒu)建立之後(hòu)發(fà)送空閑碼,要(yào)發(fà)送數據(jù)的(de)时(shí)候要(yào)在(zài)空閑碼發(fà)送完畢之後(hòu)才能(néng)去(qù)發(fà)送數據(jù)(起始碼+數據(jù)+結束(shù)碼)即可(kě)。
有(yǒu)不(bù)明(míng)白的(de)朋友可(kě)以(yǐ)在(zài)留言中(zhōng)與(yǔ)我(wǒ)進(jìn)行讨論,想(xiǎng)要(yào)了(le)解(jiě)更(gèng)多(duō)的(de)朋友可(kě)以(yǐ)聯系(xì)明(míng)德揚獲取(qǔ)更(gèng)多(duō)学習資料!














