本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!作者(zhě):Vito
明(míng)德揚核心(xīn)板試用(yòng)體(tǐ)验(yàn)——第(dì)二(èr)篇(piān)
第(dì)二(èr)周的(de)試用(yòng)計(jì)劃(huà)是(shì)实現(xiàn)常見(jiàn)低速協議(UART,I2C,SPI)的(de)FPGA工程,記(jì)录(lù)自(zì)己实現(xiàn)的(de)过(guò)程,包(bāo)括協議基本(běn)理解(jiě),实現(xiàn)思(sī)路(lù),仿真(zhēn)調試,上(shàng)板验(yàn)證4个(gè)流程。虽然低速協議相对(duì)簡單,但是(shì)每次(cì)自(zì)己動(dòng)手(shǒu)写又会(huì)發(fà)現(xiàn)之前(qián)沒(méi)有(yǒu)注意(yì)到(dào)的(de)問(wèn)題(tí),又能(néng)從中(zhōng)鞏固自(zì)己的(de)邏輯思(sī)維;这(zhè)些看(kàn)似簡單的(de)低速協議是(shì)後(hòu)續所(suǒ)有(yǒu)高(gāo)速接口(kǒu)協議的(de)基礎,只(zhī)有(yǒu)基礎牢靠,在(zài)後(hòu)續的(de)進(jìn)階(jiē)應(yìng)用(yòng)中(zhōng)才会(huì)遊刃有(yǒu)餘。特(tè)别是(shì)对(duì)于(yú)我(wǒ)这(zhè)樣(yàng)的(de)FPGA新人(rén)来(lái)说(shuō),基礎是(shì)重(zhòng)中(zhōng)之重(zhòng)。
下(xià)面(miàn)開(kāi)始介紹我(wǒ)的(de)低速協議的(de)实現(xiàn)情(qíng)況。
協議理解(jiě)
UART真(zhēn)的(de)算是(shì)最(zuì)經(jīng)典的(de)通(tòng)信(xìn)協議之一(yī)了(le)吧,特(tè)别是(shì)在(zài)産品設計(jì)調試階(jiē)段(duàn),串口(kǒu)幾(jǐ)乎成(chéng)了(le)一(yī)个(gè)必備的(de)功能(néng)。硬(yìng)件(jiàn)信(xìn)号(hào)簡單,2根(gēn)信(xìn)号(hào)線(xiàn)(TX,RX),當然不(bù)同(tóng)設備連(lián)接时(shí)還(huán)需要(yào)一(yī)根(gēn)共(gòng)地(dì)線(xiàn);3根(gēn)線(xiàn)就(jiù)能(néng)实現(xiàn)數據(jù)傳輸了(le)。協議數據(jù)格式如(rú)下(xià)图(tú)所(suǒ)示
數據(jù)收(shōu)發(fà)过(guò)程分(fēn)为(wèi):空閑,起始位,數據(jù)位,校(xiào)验(yàn)位(可(kě)選),停止位。对(duì)于(yú)异(yì)步的(de)設備来(lái)说(shuō),怎樣(yàng)知道(dào)每一(yī)位傳輸的(de)时(shí)間(jiān)宽(kuān)度(dù)呢?这(zhè)是(shì)通(tòng)过(guò)波(bō)特(tè)率来(lái)指定(dìng)的(de)。事(shì)先(xiān)双(shuāng)方(fāng)先(xiān)約定(dìng)好(hǎo)傳輸的(de)波(bō)特(tè)率是(shì)多(duō)少(shǎo)就(jiù)可(kě)以(yǐ)了(le),當然除了(le)波(bō)特(tè)率,一(yī)般數據(jù)位长度(dù),奇偶校(xiào)验(yàn),停止位长度(dù)都是(shì)要(yào)2方(fāng)确定(dìng)好(hǎo),不(bù)然就(jiù)无法正(zhèng)确通(tòng)信(xìn)了(le)。
实現(xiàn)思(sī)路(lù)
本(běn)次(cì)实現(xiàn)FPGA和(hé)上(shàng)位機(jī)通(tòng)信(xìn)的(de)串口(kǒu)工程,連(lián)接如(rú)下(xià)图(tú)所(suǒ)示;具體(tǐ)功能(néng)是(shì)利用(yòng)PC的(de)串口(kǒu)工具向(xiàng)usb轉(zhuǎn)串口(kǒu)模块(kuài)發(fà)送随機(jī)數據(jù),FPGA通(tòng)过(guò)接收(shōu)usb轉(zhuǎn)串口(kǒu)模块(kuài)的(de)數據(jù)并進(jìn)行解(jiě)析,并将解(jiě)析的(de)串口(kǒu)數據(jù)發(fà)回(huí)usb轉(zhuǎn)串口(kǒu);通(tòng)过(guò)查看(kàn)PC上(shàng)的(de)接收(shōu)數據(jù)和(hé)發(fà)送數據(jù)是(shì)否一(yī)致(zhì)。
根(gēn)據(jù)上(shàng)述功能(néng)需求,進(jìn)行模块(kuài)劃(huà)分(fēn)設計(jì),如(rú)下(xià)图(tú)所(suǒ)示
根(gēn)據(jù)模块(kuài)劃(huà)分(fēn),下(xià)面(miàn)就(jiù)需要(yào)明(míng)确模块(kuài)的(de)接口(kǒu)信(xìn)号(hào),这(zhè)里(lǐ)为(wèi)了(le)舉例就(jiù)只(zhī)列出(chū)tx和(hé)rx的(de)接口(kǒu)信(xìn)息。这(zhè)里(lǐ)總(zǒng)結一(yī)下(xià)接口(kǒu)信(xìn)号(hào)的(de)思(sī)路(lù):时(shí)鐘(zhōng)複位以(yǐ)及(jí)tx/rx信(xìn)号(hào)就(jiù)不(bù)说(shuō)了(le),这(zhè)里(lǐ)還(huán)加了(le)握手(shǒu)信(xìn)号(hào),增加每一(yī)幀數據(jù)收(shōu)發(fà)的(de)可(kě)靠性(xìng),在(zài)处理一(yī)幀數據(jù)时(shí)不(bù)会(huì)被(bèi)下(xià)一(yī)幀數據(jù)到(dào)来(lái)中(zhōng)斷而(ér)導致(zhì)混亂。
信(xìn)号(hào)接口(kǒu)設計(jì)完成(chéng)之後(hòu)就(jiù)是(shì)每个(gè)模块(kuài)代(dài)碼的(de)編写了(le),这(zhè)里(lǐ)我(wǒ)就(jiù)簡單總(zǒng)結一(yī)下(xià)tx和(hé)rx設計(jì)思(sī)路(lù)。对(duì)于(yú)發(fà)送模块(kuài):握手(shǒu)邏輯如(rú)果(guǒ)收(shōu)到(dào)應(yìng)用(yòng)层一(yī)幀數據(jù)的(de)有(yǒu)效信(xìn)号(hào),拉低ready信(xìn)号(hào),同(tóng)时(shí)拉高(gāo)發(fà)送數據(jù)的(de)标(biāo)志位。當發(fà)送标(biāo)志位置1,發(fà)送計(jì)數器開(kāi)始計(jì)數一(yī)幀數據(jù)的(de)个(gè)數,直(zhí)到(dào)一(yī)幀數據(jù)的(de)周期(qī)數記(jì)完并清(qīng)零(líng),表(biǎo)示一(yī)幀數據(jù)發(fà)送完成(chéng);于(yú)此(cǐ)同(tóng)时(shí),tx信(xìn)号(hào)根(gēn)據(jù)發(fà)送計(jì)數器值依次(cì)将應(yìng)用(yòng)层的(de)并行數據(jù)移位送出(chū)。对(duì)于(yú)接收(shōu)模块(kuài):當檢测到(dào)rx信(xìn)号(hào)的(de)下(xià)降沿之後(hòu),接收(shōu)計(jì)數器開(kāi)始計(jì)數,計(jì)數值为(wèi)一(yī)幀數據(jù)的(de)周期(qī)长度(dù);并根(gēn)據(jù)計(jì)數值移位采樣(yàng)rx數據(jù),轉(zhuǎn)化(huà)成(chéng)并行數據(jù),并拉高(gāo)valid有(yǒu)效信(xìn)号(hào),表(biǎo)示一(yī)幀數據(jù)的(de)接收(shōu)过(guò)程。
仿真(zhēn)調試
編写完串口(kǒu)驅動(dòng)模块(kuài)之後(hòu),需要(yào)進(jìn)行仿真(zhēn)調試,下(xià)面(miàn)是(shì)仿真(zhēn)波(bō)形。
仿真(zhēn)激勵中(zhōng),發(fà)送數據(jù)給(gěi)的(de)是(shì)1,2,3……255 數據(jù),可(kě)以(yǐ)看(kàn)到(dào)图(tú)中(zhōng)紫色(sè)部(bù)分(fēn)为(wèi)收(shōu)發(fà)數據(jù)的(de)波(bō)形,可(kě)以(yǐ)看(kàn)到(dào)收(shōu)發(fà)數據(jù)一(yī)致(zhì),因(yīn)此(cǐ)仿真(zhēn)調試ok。
上(shàng)板验(yàn)證
在(zài)实際應(yìng)用(yòng)中(zhōng),需要(yào)考慮更(gèng)多(duō)的(de)非(fēi)理想(xiǎng)环(huán)境。1.罪魁禍首就(jiù)是(shì)异(yì)步时(shí)鐘(zhōng)問(wèn)題(tí),運行时(shí)間(jiān)越长,所(suǒ)累積的(de)时(shí)鐘(zhōng)誤差就(jiù)会(huì)越来(lái)越大;所(suǒ)以(yǐ)很可(kě)能(néng)運行一(yī)段(duàn)时(shí)間(jiān)就(jiù)会(huì)出(chū)現(xiàn)錯誤數據(jù),因(yīn)此(cǐ)需要(yào)加上(shàng)时(shí)鐘(zhōng)矯正(zhèng)減少(shǎo)时(shí)鐘(zhōng)累積誤差,解(jiě)決辦(bàn)法就(jiù)是(shì)用(yòng)高(gāo)頻时(shí)鐘(zhōng)采集rx信(xìn)号(hào),當檢测到(dào)一(yī)次(cì)數傳輸时(shí)再打(dǎ)開(kāi)串口(kǒu)接收(shōu)时(shí)鐘(zhōng),當發(fà)送完成(chéng)之後(hòu)再将串口(kǒu)接收(shōu)时(shí)鐘(zhōng)關(guān)閉從而(ér)解(jiě)決累積偏差。2.收(shōu)發(fà)數據(jù)时(shí)有(yǒu)时(shí)一(yī)幀數據(jù)還(huán)沒(méi)有(yǒu)处理完成(chéng),可(kě)是(shì)下(xià)一(yī)幀數據(jù)已經(jīng)到(dào)来(lái),如(rú)果(guǒ)不(bù)緩存就(jiù)会(huì)出(chū)現(xiàn)丢幀的(de)問(wèn)題(tí),因(yīn)此(cǐ)在(zài)應(yìng)用(yòng)层增加了(le)一(yī)个(gè)fifo,用(yòng)于(yú)緩存来(lái)不(bù)及(jí)处理的(de)數據(jù)。
我(wǒ)之前(qián)看(kàn)原理图(tú)底板上(shàng)是(shì)有(yǒu)FT232usb轉(zhuǎn)串行的(de)芯片(piàn)的(de),但是(shì)好(hǎo)像只(zhī)連(lián)接了(le)JTAG接口(kǒu),電(diàn)腦并沒(méi)有(yǒu)識别到(dào)串口(kǒu)号(hào),所(suǒ)以(yǐ)我(wǒ)只(zhī)能(néng)在(zài)擴展(zhǎn)口(kǒu)找(zhǎo)2个(gè)IO了(le)。翻遍(biàn)了(le)原理图(tú)和(hé)手(shǒu)册都沒(méi)有(yǒu)找(zhǎo)到(dào)一(yī)个(gè)XS11的(de)引脚对(duì)應(yìng)關(guān)系(xì),沒(méi)辦(bàn)法只(zhī)能(néng)先(xiān)通(tòng)过(guò)原理图(tú)猜测信(xìn)号(hào)所(suǒ)对(duì)應(yìng)的(de)实際引脚位置,好(hǎo)在(zài)我(wǒ)手(shǒu)邊(biān)有(yǒu)万(wàn)用(yòng)表(biǎo),然後(hòu)通(tòng)过(guò)测量(liàng)知道(dào)了(le)实際对(duì)應(yìng)位置,希望之後(hòu)将一(yī)些接口(kǒu)的(de)实際信(xìn)号(hào)做一(yī)个(gè)图(tú)示,自(zì)己找(zhǎo)信(xìn)号(hào)位置太麻(má)煩了(le)。。。这(zhè)里(lǐ)我(wǒ)挑了(le)2个(gè)IO:J23/J24作为(wèi)uart的(de)tx 和(hé) rx,連(lián)接一(yī)个(gè)usb轉(zhuǎn)串口(kǒu)模块(kuài),然後(hòu)連(lián)接電(diàn)腦,实際連(lián)接如(rú)下(xià)图(tú)所(suǒ)示。

下(xià)载bitstream之後(hòu),打(dǎ)開(kāi)電(diàn)腦串口(kǒu)软(ruǎn)件(jiàn),定(dìng)时(shí)一(yī)直(zhí)發(fà)送數據(jù),观察收(shōu)發(fà)數據(jù)是(shì)否一(yī)致(zhì),测試結果(guǒ)如(rú)下(xià)图(tú)所(suǒ)示。
可(kě)以(yǐ)看(kàn)到(dào),經(jīng)过(guò)一(yī)段(duàn)时(shí)間(jiān)的(de)連(lián)續運行,收(shōu)發(fà)數據(jù)量(liàng)一(yī)致(zhì),且結果(guǒ)正(zhèng)确。因(yīn)此(cǐ)該串口(kǒu)工程上(shàng)板成(chéng)功。
衆所(suǒ)周知,XILINX-Kintex系(xì)列以(yǐ)性(xìng)價比著稱,在(zài)高(gāo)性(xìng)能(néng)低功耗的(de)前(qián)提(tí)下(xià),價格也(yě)相对(duì)較低,目前(qián)市(shì)场上(shàng)不(bù)存在(zài)缺貨的(de)情(qíng)況,所(suǒ)以(yǐ)當使用(yòng)量(liàng)大的(de)时(shí)候,價格也(yě)会(huì)更(gèng)有(yǒu)优勢。所(suǒ)以(yǐ)在(zài)研發(fà)工作中(zhōng),这(zhè)个(gè)款核心(xīn)板是(shì)非(fēi)常适用(yòng)于(yú)二(èr)次(cì)開(kāi)發(fà)和(hé)産品使用(yòng)的(de)。
明(míng)德揚推出(chū)0元(yuán)試用(yòng)核心(xīn)板活動(dòng)正(zhèng)在(zài)進(jìn)行中(zhōng),可(kě)以(yǐ)聯系(xì)客服(fú)黃老(lǎo)师(shī)參加:13316124179(微信(xìn)同(tóng)号(hào))
如(rú)需直(zhí)接購買(mǎi)可(kě)點(diǎn)擊淘寶(bǎo)鍊(liàn)接:請點(diǎn)擊
