黃龍
摘要:簡(jiǎn)述采用HDL語(yǔ)言在FPGA內(nèi)實(shí)現(xiàn)UART核心功能的一種算法,分析ARM與FPGA之間進(jìn)行異步串行通信實(shí)驗(yàn)時(shí)FPGA接收的數(shù)據(jù)的錯(cuò)誤和實(shí)現(xiàn)UART核心功能的算法,得出波特率和FPGA系統(tǒng)時(shí)鐘存在誤差導(dǎo)致該算法存在時(shí)序缺陷,找到了存在時(shí)序缺陷存在的原因并提出了解決的方法,通過(guò)實(shí)驗(yàn)驗(yàn)證了方法的正確性。
關(guān)鍵詞:算法;波特率;時(shí)序缺陷
中圖分類號(hào):TN79 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2013) 01-0179-02
1 FPGA內(nèi)實(shí)現(xiàn)UART核心功能的算法
FPGA內(nèi)實(shí)現(xiàn)UART核心功能主要包括三個(gè)部分:采樣時(shí)鐘發(fā)生器、接收器和發(fā)送器。實(shí)現(xiàn)這三個(gè)部分的算法如下:
1.1 采樣時(shí)鐘發(fā)生器:采樣時(shí)鐘發(fā)生器實(shí)際上是根據(jù)設(shè)置的波特率時(shí)鐘頻率Baud,對(duì)FPGA的系統(tǒng)時(shí)鐘進(jìn)行分頻以得到16倍于Baud的采樣時(shí)鐘 ,為了能夠適用于多種波特率下的UART通信,采樣時(shí)鐘發(fā)生器內(nèi)通過(guò)一個(gè)可靈活設(shè)置的分頻系數(shù)clk_prescaler,來(lái)調(diào)整 。本實(shí)驗(yàn)中FPGA開發(fā)板的系統(tǒng)時(shí)鐘為50MHz,波特率為115200時(shí),clk_prescaler=50000000/(115200×16)/2= 13.56,取整數(shù)值clk_prescaler=13;當(dāng)波特率為9600時(shí),clk_prescaler=162,如此可根據(jù)Baud,靈活設(shè)置 。
1.2 接收器:接收器由狀態(tài)機(jī)控制,輸入RXD信號(hào)在空閑狀態(tài)下為邏輯1,當(dāng)輸入RXD信號(hào)有邏輯1到邏輯0的跳變時(shí),觸發(fā)FPGA對(duì)RXD采樣。在理想狀態(tài)下,RXD上的數(shù)據(jù)時(shí)鐘寬度
計(jì)算機(jī)光盤軟件與應(yīng)用2013年1期