本發(fā)明涉及一種基于uartip核的sci通訊方法。
背景技術(shù):
在許多工程系統(tǒng)應(yīng)用中,uart(通用異步接收發(fā)送裝置)以低成本、高可靠性等優(yōu)點(diǎn)被人們青睞。目前廣泛使用的rs232異步串行接口,如8250、ns16450等專用集成芯片,雖然使用簡單,卻有占用電路體積、引腳連接復(fù)雜等缺點(diǎn)。
文獻(xiàn)“《基于tl16c752b的dsp通用異步串行接口設(shè)計(jì)》電子測量技術(shù)論文2009.7”介紹了一種基于dsp和異步串行接口協(xié)議芯片tl16c752b之間的接口電路設(shè)計(jì)方法,雖應(yīng)用簡單但其硬件電路復(fù)雜。
而當(dāng)前通訊的發(fā)展趨勢,對設(shè)計(jì)提出了系統(tǒng)集成,高可靠性的要求。為滿足這些要求,不僅要求采用數(shù)字化,而且要求采用集成化更高,模塊化,可靠性更強(qiáng)的產(chǎn)品。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的是:
為了克服傳統(tǒng)的sci通訊芯片體積大占用管腳多等不足,本發(fā)明提供一種基于uartip核的sci通訊技術(shù)。使用ip復(fù)用技術(shù),將uartip軟核集成到fpga芯片上,可增加系統(tǒng)的可靠性,縮小pcb板體積;其次由ip核的特點(diǎn),可使整個(gè)系統(tǒng)更加靈活,還可以根據(jù)需要進(jìn)行功能的升級(jí)、擴(kuò)充和裁減,實(shí)現(xiàn)了sci通訊的集成化和模塊化,可作為一個(gè)獨(dú)立的模塊集成到控制器中。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:
在本設(shè)計(jì)中使用自頂向下的設(shè)計(jì)方法對uart進(jìn)行分析設(shè)計(jì)。首先把該設(shè)計(jì)劃分成幾個(gè)可操作的子模塊,編制出相應(yīng)的模型(rtl級(jí))。然后再將每個(gè)子模塊看成一個(gè)獨(dú)立的單元,組合在一起完成整個(gè)設(shè)計(jì)。uartip核主要是包含接收器模塊、發(fā)送器模塊、波特率產(chǎn)生模塊、中斷控制模塊和fifo模塊組成五部分,見附圖1。
uartip核包含一個(gè)可編程的波特率發(fā)生器:它是給發(fā)送器和接收器提供發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的比特時(shí)鐘;包括提供標(biāo)準(zhǔn)波特率和各種非標(biāo)準(zhǔn)波特率的比特時(shí)鐘:標(biāo)準(zhǔn)波特率作為通信雙方進(jìn)行異步串行通信。而非標(biāo)準(zhǔn)波特率作高速同步通信;它可以對系統(tǒng)時(shí)鐘進(jìn)行2n分頻(n最大為16),輸出的頻率baudrate_clk=系統(tǒng)時(shí)鐘/(波特率×16×除數(shù));這樣通過設(shè)置除數(shù)的值。就可以得到期望的內(nèi)部波特率;
發(fā)送fifo和接收fifo在uart中的作用是實(shí)現(xiàn)對收發(fā)數(shù)據(jù)的緩沖,減少串口和cpu的交互時(shí)間,提高cpu和uart的傳輸效率。由于數(shù)據(jù)總線的讀寫時(shí)鐘與uart的工作時(shí)鐘不一樣,所以所設(shè)計(jì)的uart采用的是異步flf0的方式。異步fifo主要由4部分組成:寫時(shí)鐘域模塊、讀時(shí)鐘域模塊、異步比較模塊以及雙端口ram模塊。其中讀/寫時(shí)鐘域模塊中包含了讀/寫指針和空/滿標(biāo)志產(chǎn)生邏輯。異步比較模塊是用來產(chǎn)生空/滿判斷信號(hào)。當(dāng)讀寫指針在同一時(shí)刻指向同一個(gè)內(nèi)存位置時(shí),fifo處于空或滿的狀態(tài)。判斷此時(shí)狀態(tài)是空還是滿,就要通過對讀寫指針進(jìn)行判斷。
中斷處理模塊:發(fā)送數(shù)據(jù)時(shí),防止數(shù)據(jù)丟失,以及和cpu交聯(lián)數(shù)據(jù)過多,將多個(gè)sci的中斷信號(hào)相與,減少了中斷信號(hào)和控制芯片間的信號(hào)交聯(lián),當(dāng)控制器接收到中斷信號(hào)后,去查對應(yīng)fifo中的滿標(biāo)志位,再去fifo取數(shù);從而防止數(shù)據(jù)丟失;
發(fā)送模塊的邏輯是從發(fā)送fif0中讀取數(shù)據(jù),將讀到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),并送往外設(shè)。接受采用狀態(tài)機(jī)來設(shè)計(jì),一共有5個(gè)狀態(tài)機(jī),分別為:check等待、check開始、接收開始、數(shù)據(jù)讀取、中斷check;
check等待:復(fù)位的時(shí)候狀態(tài)機(jī)進(jìn)入的狀態(tài);uart在沒有數(shù)據(jù)的時(shí)候,其數(shù)據(jù)線一直保持高位;當(dāng)檢測到數(shù)據(jù)線出現(xiàn)下降沿的時(shí)候,即check開始狀態(tài);
check開始:在check等待狀態(tài)時(shí)檢測到數(shù)據(jù)線出現(xiàn)下降沿時(shí)進(jìn)入check開始狀態(tài),通過check開始狀態(tài)確定這個(gè)下降沿是否由于毛刺引起;在該狀態(tài)中對第一位數(shù)據(jù)進(jìn)行采樣并且判斷,如果得到的數(shù)據(jù)是起始位0的話,狀態(tài)機(jī)會(huì)跳轉(zhuǎn)到接收開始狀態(tài);如果發(fā)現(xiàn)是誤判,即判斷出現(xiàn)毛刺,狀態(tài)機(jī)會(huì)重新進(jìn)入check等待狀態(tài);
發(fā)送開始:完成起始位的發(fā)送后,就要發(fā)送由cpu傳過來的有效數(shù)據(jù);首先把數(shù)據(jù)存入一個(gè)移位寄存器中,利用移位寄存器實(shí)現(xiàn)并行輸入到串行輸出的轉(zhuǎn)換;當(dāng)計(jì)數(shù)器顯示數(shù)據(jù)傳輸完畢后,狀態(tài)機(jī)跳入數(shù)據(jù)讀取狀態(tài);
數(shù)據(jù)讀?。焊鶕?jù)已傳輸?shù)挠行?shù)據(jù),獲得數(shù)據(jù)并且在本狀態(tài)傳輸出去;
中斷check:對停止位進(jìn)行采樣,并且判斷停止位是否為1;若停止位不正確,那么數(shù)據(jù)也不傳入cpu;
接收邏輯在檢測到起始位后開始接收數(shù)據(jù),并將接收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),然后將數(shù)據(jù)寫入接收fifo。發(fā)送器模塊相對來說和接收器差不多,而且相對簡單一些;一共有5個(gè)狀態(tài)機(jī),分別為:等待、開始、接收開始、數(shù)據(jù)讀取、中斷check;
等待:在沒有得到cpu的發(fā)送信號(hào)的時(shí)候發(fā)送器一直處于等待狀態(tài),此刻一直保持發(fā)送器的數(shù)據(jù)為高,當(dāng)?shù)玫絚pu發(fā)出的數(shù)據(jù)來臨信號(hào),跳轉(zhuǎn)入check開始狀態(tài);
開始:進(jìn)入該狀態(tài),發(fā)送器會(huì)首先發(fā)送一個(gè)0,作為起始位;起始位傳送完畢后進(jìn)入下一個(gè)狀態(tài);
接收開始:當(dāng)狀態(tài)機(jī)跳轉(zhuǎn)到接收時(shí)的時(shí)候,每采樣得到一位數(shù)據(jù),就把接收到數(shù)據(jù)放到事先準(zhǔn)備好的移位寄存器中;當(dāng)計(jì)數(shù)器提示數(shù)據(jù)已接收完,狀態(tài)機(jī)會(huì)跳轉(zhuǎn)入數(shù)據(jù)讀取狀態(tài);
數(shù)據(jù)讀取:根據(jù)已傳輸?shù)挠行?shù)據(jù),獲得參數(shù)并且在本狀態(tài)傳輸出去;
中斷check:輸出停止位1標(biāo)示這一幀數(shù)據(jù)傳輸結(jié)束。本發(fā)明的有益效果是:
本發(fā)明把uart硬件電路轉(zhuǎn)換為用硬件描述語言的軟件編程的方法,減少了電路的數(shù)量,提高了電路的可靠性,降低成本,提高的ip可復(fù)用性。實(shí)現(xiàn)了sci通訊的集成化和模塊化,可作為一個(gè)獨(dú)立的模塊集成到控制器中。使用ip復(fù)用技術(shù),將uart集成到fpga芯片上,可增加系統(tǒng)的可靠性,縮小pcb板體積;其次由ip核的特點(diǎn),可使整個(gè)系統(tǒng)更加靈活,還可以根據(jù)需要進(jìn)行功能的升級(jí)、擴(kuò)充和裁減。
支持多通道傳輸。本ip核在使用時(shí),可根據(jù)系統(tǒng)配置需要同時(shí)調(diào)用多個(gè)ip核(最多可擴(kuò)展10個(gè)),目前沒有芯片可達(dá)到,為使用多通道sci傳輸提供了有效支撐,符合機(jī)載及星載通信終端的小型化設(shè)計(jì)趨勢。
ip核的通用性??杉稍趂pga和cpld等邏輯芯片中,節(jié)約了pcb的面積,提高了系統(tǒng)可靠性。更高性能:同步性能更好,接口可定制,通信模式可定制,傳輸更穩(wěn)定。
附圖說明
圖1是本發(fā)明基于uartip核的sci通訊方法功能模塊的劃分框圖。
圖2是本發(fā)明基于uartip核的sci通訊技術(shù)fifo狀態(tài)機(jī)。
圖3是本發(fā)明基于uartip核的sci通訊技術(shù)接收狀態(tài)機(jī)。
圖4是本發(fā)明基于uartip核的sci通訊技術(shù)發(fā)送狀態(tài)機(jī)。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作詳細(xì)說明。
本發(fā)明基于uartip核的sci通訊技術(shù)選擇以一個(gè)4個(gè)核的sciip為例說明。uart核主要是包含接收器模塊、發(fā)送器模塊、波特率產(chǎn)生模塊、中斷控制邏輯模塊和fifo模塊組成五部分。參照附圖1。
1波特率產(chǎn)生模塊
根據(jù)uart通信協(xié)議,只有數(shù)據(jù)發(fā)送和接收,而沒有時(shí)鐘,所以需要通過波特率來統(tǒng)一發(fā)送和接收的數(shù)據(jù)速率,包括提供標(biāo)準(zhǔn)波特率和各種非標(biāo)準(zhǔn)波特率的比特時(shí)鐘:標(biāo)準(zhǔn)波特率一般是作為通信雙方進(jìn)行異步串行通信.而非標(biāo)準(zhǔn)波特率一般是用作高速同步通信,
波特率發(fā)生器實(shí)際就是一個(gè)分頻器,在本設(shè)計(jì)中采用了16分頻的電路。給發(fā)送器和接收器提供發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的比特時(shí)鐘。波特率計(jì)算公式如下:
baudrate_clk=系統(tǒng)時(shí)鐘/(波特率×16×除數(shù))。這樣通過設(shè)置除數(shù)的值.就可以得到期望的內(nèi)部波特率。
本實(shí)施案例中:系統(tǒng)時(shí)鐘為50mhz,希望波特率為115200,則波特率時(shí)鐘分頻數(shù)為50m/115200/16。
2中斷模塊
中斷模塊使能信號(hào)將多個(gè)sci的中斷信號(hào)相與,減少了中斷信號(hào)和控制芯片間的信號(hào)交聯(lián),當(dāng)控制器接收到中斷信號(hào)后,去查對應(yīng)fifo中的滿標(biāo)志位,再去fifo取數(shù)。從而防止數(shù)據(jù)丟失。
3異步fifo
發(fā)送fifo和接收fifo在uart中的作用是實(shí)現(xiàn)對收發(fā)數(shù)據(jù)的緩沖,減少串口和cpu的交互時(shí)間,提高cpu和uart的傳輸效率.由于數(shù)據(jù)總線的讀寫時(shí)鐘與uart的工作時(shí)鐘不一樣,所以所設(shè)計(jì)的uart采用的是異步flf0的方式。
如附圖2所示,異步fifo主要由4部分組成:寫時(shí)鐘域模塊、讀時(shí)鐘域模塊、異步比較模塊以及雙端口ram模塊.其中讀/寫時(shí)鐘域模塊中包含了讀/寫指針和空/滿標(biāo)志產(chǎn)生邏輯。
異步比較模塊是用來產(chǎn)生空/滿判斷信號(hào).當(dāng)讀寫指針在同一時(shí)刻指向同一個(gè)內(nèi)存位置時(shí),fifo處于空或滿的狀態(tài).判斷此時(shí)狀態(tài)是空還是滿,就要通過對讀寫指針進(jìn)行判斷.
4發(fā)送模塊
發(fā)送邏輯的主要功能是從發(fā)送fif0中讀取數(shù)據(jù),將讀到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),并送往外設(shè).接受采用狀態(tài)機(jī)來設(shè)計(jì),一共有5個(gè)狀態(tài)機(jī),分別為:check等待、check開始、接收開始、數(shù)據(jù)讀取、中斷check,狀態(tài)機(jī)工作機(jī)制見附圖3。
check等待:復(fù)位的時(shí)候狀態(tài)機(jī)進(jìn)入的狀態(tài)。在uart中,有效數(shù)據(jù)的傳輸是異步于接收時(shí)鐘的,因此uart在沒有數(shù)據(jù)的時(shí)候,其數(shù)據(jù)線一直保持高位。當(dāng)檢測到數(shù)據(jù)線出現(xiàn)下降沿的時(shí)候,說明有數(shù)據(jù)開始傳輸,此刻進(jìn)入下一狀態(tài),即check開始狀態(tài)。
check開始:在check等待狀態(tài)時(shí)檢測到數(shù)據(jù)線出現(xiàn)下降沿所以進(jìn)入check開始狀態(tài),我們需要通過check開始狀態(tài)確定這個(gè)下降沿是否由于毛刺引起。在本狀態(tài)中我們會(huì)對第一位數(shù)據(jù)進(jìn)行采樣并且判斷,如果得到的數(shù)據(jù)是起始位0的話,狀態(tài)機(jī)會(huì)跳轉(zhuǎn)到接收開始狀態(tài)。如果發(fā)現(xiàn)是誤判,狀態(tài)機(jī)會(huì)重新進(jìn)入check等待狀態(tài)。
發(fā)送開始:完成起始位的發(fā)送后,就要發(fā)送由cpu傳過來的有效數(shù)據(jù);首先把數(shù)據(jù)存入一個(gè)移位寄存器中,利用移位寄存器實(shí)現(xiàn)并行輸入到串行輸出的轉(zhuǎn)換;當(dāng)計(jì)數(shù)器顯示數(shù)據(jù)傳輸完畢后,狀態(tài)機(jī)跳入數(shù)據(jù)讀取狀態(tài);
數(shù)據(jù)讀?。焊鶕?jù)已傳輸?shù)?位有效數(shù)據(jù),獲得數(shù)據(jù)并且在本狀態(tài)傳輸出去。
中斷check:對停止位進(jìn)行采樣,并且判斷停止位是否為1。若停止位不正確,那么數(shù)據(jù)也不傳入cpu。在本實(shí)施案例中停止位是1位,也可以是2位、1.5位。
5接收模塊
接收邏輯在檢測到起始位后開始接收數(shù)據(jù),并將接收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),然后將數(shù)據(jù)寫入接收fifo.發(fā)送器模塊相對來說和接收器差不多,而且相對簡單一些。一共有5個(gè)狀態(tài)機(jī),分別為:等待、開始、接收開始、數(shù)據(jù)讀取、中斷check,狀態(tài)機(jī)工作機(jī)制見附圖4。
等待:在沒有得到cpu的發(fā)送信號(hào)的時(shí)候發(fā)送器一直處于等待狀態(tài),此刻一直保持發(fā)送器的數(shù)據(jù)為高,當(dāng)?shù)玫絚pu發(fā)出的數(shù)據(jù)來臨信號(hào),跳轉(zhuǎn)入check開始狀態(tài)。
開始:進(jìn)入該狀態(tài),發(fā)送器會(huì)首先發(fā)送一個(gè)0,作為起始位。起始位傳送完畢后進(jìn)入下一個(gè)狀態(tài)。
接收開始:完成起始位的發(fā)送后,就要發(fā)送由cpu傳過來的有效數(shù)據(jù)。首先把數(shù)據(jù)存入一個(gè)移位寄存器中,利用移位寄存器實(shí)現(xiàn)并行輸入到串行輸出的轉(zhuǎn)換。8位數(shù)據(jù)傳輸時(shí)有一個(gè)計(jì)數(shù)器,當(dāng)計(jì)數(shù)器顯示8位據(jù)傳輸完畢后,fsm跳入數(shù)據(jù)讀取狀態(tài)。
數(shù)據(jù)讀?。焊鶕?jù)已傳輸?shù)?位有效數(shù)據(jù),獲得parity參數(shù)并且在本狀態(tài)傳輸出去。
中斷check:輸出停止位1標(biāo)示這一幀數(shù)據(jù)傳輸結(jié)束。
本發(fā)明提供一種先進(jìn)的基于uartip核的sci通訊技術(shù),uartip核是能夠支持fpga等邏輯芯片的定制化ip,可以實(shí)現(xiàn)多個(gè)uart在fpga中實(shí)現(xiàn),并進(jìn)行了時(shí)序優(yōu)化,可以支持靈活的波特率配置和通信協(xié)議配置,內(nèi)置有fifo緩存,確保通信數(shù)據(jù)不被丟,可支持單個(gè)字節(jié)傳輸和數(shù)據(jù)模塊傳輸兩種傳輸方式,可支持sci接口,與dsp直接進(jìn)行通信而無需任何協(xié)議轉(zhuǎn)換,留有足夠的通信帶寬,可支持多個(gè)ip核并行工作,并確保數(shù)據(jù)不丟失,確保整個(gè)通信的穩(wěn)定和可靠。