本文為明德?lián)P原創(chuàng)文章,轉(zhuǎn)載請注明出處!作者:Vito
明德?lián)PPCIE開發(fā)板系列XILINX-K7試用體驗-第二篇
第二周的試用計劃是實現(xiàn)常見低速協(xié)議(UART,I2C,SPI)的FPGA工程,記錄自己實現(xiàn)的過程,包括協(xié)議基本理解,實現(xiàn)思路,仿真調(diào)試,上板驗證4個流程。雖然低速協(xié)議相對簡單,但是每次自己動手寫又會發(fā)現(xiàn)之前沒有注意到的問題,又能從中鞏固自己的邏輯思維;這些看似簡單的低速協(xié)議是后續(xù)所有高速接口協(xié)議的基礎(chǔ),只有基礎(chǔ)牢靠,在后續(xù)的進(jìn)階應(yīng)用中才會游刃有余。特別是對于我這樣的FPGA新人來說,基礎(chǔ)是重中之重。
下面開始介紹我的低速協(xié)議的實現(xiàn)情況。
協(xié)議理解
UART真的算是最經(jīng)典的通信協(xié)議之一了吧,特別是在產(chǎn)品設(shè)計調(diào)試階段,串口幾乎成了一個必備的功能。硬件信號簡單,2根信號線(TX,RX),當(dāng)然不同設(shè)備連接時還需要一根共地線;3根線就能實現(xiàn)數(shù)據(jù)傳輸了。協(xié)議數(shù)據(jù)格式如下圖所示
數(shù)據(jù)收發(fā)過程分為:空閑,起始位,數(shù)據(jù)位,校驗位(可選),停止位。對于異步的設(shè)備來說,怎樣知道每一位傳輸?shù)臅r間寬度呢?這是通過波特率來指定的。事先雙方先約定好傳輸?shù)牟ㄌ芈适嵌嗌倬涂梢粤耍?dāng)然除了波特率,一般數(shù)據(jù)位長度,奇偶校驗,停止位長度都是要2方確定好,不然就無法正確通信了。
實現(xiàn)思路
本次實現(xiàn)FPGA和上位機(jī)通信的串口工程,連接如下圖所示;具體功能是利用PC的串口工具向usb轉(zhuǎn)串口模塊發(fā)送隨機(jī)數(shù)據(jù),F(xiàn)PGA通過接收usb轉(zhuǎn)串口模塊的數(shù)據(jù)并進(jìn)行解析,并將解析的串口數(shù)據(jù)發(fā)回usb轉(zhuǎn)串口;通過查看PC上的接收數(shù)據(jù)和發(fā)送數(shù)據(jù)是否一致。
根據(jù)上述功能需求,進(jìn)行模塊劃分設(shè)計,如下圖所示
根據(jù)模塊劃分,下面就需要明確模塊的接口信號,這里為了舉例就只列出tx和rx的接口信息。這里總結(jié)一下接口信號的思路:時鐘復(fù)位以及tx/rx信號就不說了,這里還加了握手信號,增加每一幀數(shù)據(jù)收發(fā)的可靠性,在處理一幀數(shù)據(jù)時不會被下一幀數(shù)據(jù)到來中斷而導(dǎo)致混亂。
信號接口設(shè)計完成之后就是每個模塊代碼的編寫了,這里我就簡單總結(jié)一下tx和rx設(shè)計思路。對于發(fā)送模塊:握手邏輯如果收到應(yīng)用層一幀數(shù)據(jù)的有效信號,拉低ready信號,同時拉高發(fā)送數(shù)據(jù)的標(biāo)志位。當(dāng)發(fā)送標(biāo)志位置1,發(fā)送計數(shù)器開始計數(shù)一幀數(shù)據(jù)的個數(shù),直到一幀數(shù)據(jù)的周期數(shù)記完并清零,表示一幀數(shù)據(jù)發(fā)送完成;于此同時,tx信號根據(jù)發(fā)送計數(shù)器值依次將應(yīng)用層的并行數(shù)據(jù)移位送出。對于接收模塊:當(dāng)檢測到rx信號的下降沿之后,接收計數(shù)器開始計數(shù),計數(shù)值為一幀數(shù)據(jù)的周期長度;并根據(jù)計數(shù)值移位采樣rx數(shù)據(jù),轉(zhuǎn)化成并行數(shù)據(jù),并拉高valid有效信號,表示一幀數(shù)據(jù)的接收過程。
仿真調(diào)試
編寫完串口驅(qū)動模塊之后,需要進(jìn)行仿真調(diào)試,下面是仿真波形。
仿真激勵中,發(fā)送數(shù)據(jù)給的是1,2,3……255 數(shù)據(jù),可以看到圖中紫色部分為收發(fā)數(shù)據(jù)的波形,可以看到收發(fā)數(shù)據(jù)一致,因此仿真調(diào)試ok。
上板驗證
在實際應(yīng)用中,需要考慮更多的非理想環(huán)境。1.罪魁禍?zhǔn)拙褪钱惒綍r鐘問題,運行時間越長,所累積的時鐘誤差就會越來越大;所以很可能運行一段時間就會出現(xiàn)錯誤數(shù)據(jù),因此需要加上時鐘矯正減少時鐘累積誤差,解決辦法就是用高頻時鐘采集rx信號,當(dāng)檢測到一次數(shù)傳輸時再打開串口接收時鐘,當(dāng)發(fā)送完成之后再將串口接收時鐘關(guān)閉從而解決累積偏差。2.收發(fā)數(shù)據(jù)時有時一幀數(shù)據(jù)還沒有處理完成,可是下一幀數(shù)據(jù)已經(jīng)到來,如果不緩存就會出現(xiàn)丟幀的問題,因此在應(yīng)用層增加了一個fifo,用于緩存來不及處理的數(shù)據(jù)。
我之前看原理圖底板上是有FT232usb轉(zhuǎn)串行的芯片的,但是好像只連接了JTAG接口,電腦并沒有識別到串口號,所以我只能在擴(kuò)展口找2個IO了。翻遍了原理圖和手冊都沒有找到一個XS11的引腳對應(yīng)關(guān)系,沒辦法只能先通過原理圖猜測信號所對應(yīng)的實際引腳位置,好在我手邊有萬用表,然后通過測量知道了實際對應(yīng)位置,希望之后將一些接口的實際信號做一個圖示,自己找信號位置太麻煩了。。。這里我挑了2個IO:J23/J24作為uart的tx 和rx,連接一個usb轉(zhuǎn)串口模塊,然后連接電腦,實際連接如下圖所示。
下載bitstream之后,打開電腦串口軟件,定時一直發(fā)送數(shù)據(jù),觀察收發(fā)數(shù)據(jù)是否一致,測試結(jié)果如下圖所示。
可以看到,經(jīng)過一段時間的連續(xù)運行,收發(fā)數(shù)據(jù)量一致,且結(jié)果正確。因此該串口工程上板成功。
眾所周知,XILINX-Kin[te]x系列以性價比著稱,在高性能低功耗的前提下,價格也相對較低,目前市場上不存在缺貨的情況,所以當(dāng)使用量大的時候,價格也會更有優(yōu)勢。所以在研發(fā)工作中,
這個款核心板是非常適用于二次開發(fā)和產(chǎn)品使用的。明德?lián)P推出0元試用核心板活動正在進(jìn)行中,可以聯(lián)系客服黃老師參加:13316124179(微信同號)
審核編輯 黃宇
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603384 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121410 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97471 -
Kintex-7
+關(guān)注
關(guān)注
1文章
27瀏覽量
16029
發(fā)布評論請先 登錄
相關(guān)推薦
評論