基于FPGA的SOC系統(tǒng)中的串口設(shè)計(jì)
1 概述
在基于FPGA的SOC設(shè)計(jì)中,常使用串口作為通信接口,但直接用FPGA進(jìn)行串口通信數(shù)據(jù)的處理是比較繁雜的,特別是直接使用FPGA進(jìn)行串口通信的協(xié)議的解釋和數(shù)據(jù)打包等處理,將會(huì)消耗大量的FPGA硬件資源。
為簡(jiǎn)化設(shè)計(jì),降低硬件資源開(kāi)銷,可以在FPGA中利用IP核實(shí)現(xiàn)的嵌入式微處理器來(lái)對(duì)串口數(shù)據(jù)進(jìn)行處理。
本文中的設(shè)計(jì)采用了XILINX的FPGA,可選用的嵌入式微處理器IP核種類繁多,但基于對(duì)硬件資源開(kāi)銷最少的考慮,最終選用了Picoblaze。
嵌入式微處理器PicoBlaze適用于Spartan-II/E、CoolRunner-II和Virtex系列FPGA,運(yùn)行速度可達(dá)到40MIPS以上,提供49個(gè)不同的指令,16個(gè)寄存器,256個(gè)地址端口,1個(gè)可屏蔽的中斷。其性能超過(guò)了傳統(tǒng)的8bit微處理器。嵌入式微處理器Picoblaze的功能、原理見(jiàn)參考文獻(xiàn)[1]。
Picoblaze使用靈活,但其缺點(diǎn)是可尋址的存儲(chǔ)空間非常有限,因此為滿足實(shí)際需要本文同時(shí)也提出了使用片外SDRAM器件對(duì)其存儲(chǔ)能力進(jìn)行擴(kuò)展的設(shè)計(jì)方法。
2 串口收發(fā)接口設(shè)計(jì)
2.1串口收發(fā)接口硬件設(shè)計(jì)
嵌入式微處理器PicoBlaze本身并不具備串行接口,因此必須在FPGA中設(shè)計(jì)串口接收和發(fā)送模塊并通過(guò)總線結(jié)構(gòu)與Picoblaze連接。
串口接收和發(fā)送模塊的設(shè)計(jì)可采用成熟的IP核。實(shí)際設(shè)計(jì)中采用了XLINX的串口收發(fā)IP核,其特點(diǎn)是串口波特率,符號(hào)規(guī)則都可以靈活地定制,同時(shí)具有16字節(jié)的接收FIFO和16字節(jié)的發(fā)送FIFO。串口收發(fā)IP核的功能、原理見(jiàn)參考文獻(xiàn)[2]。
使用Picoblaze和串口收發(fā)IP核構(gòu)成的串口收發(fā)系統(tǒng)結(jié)構(gòu)見(jiàn)圖1。
在設(shè)計(jì)中,發(fā)送模塊、接收模塊和標(biāo)志寄存器分別有不同的地址,Picoblaze通過(guò)地址端口對(duì)串口收發(fā)模塊進(jìn)行訪問(wèn)。設(shè)計(jì)中的標(biāo)志寄存器,可用于指示發(fā)送模塊和接收模塊中FIFO的狀態(tài),Picoblaze通過(guò)查詢標(biāo)志寄存器來(lái)完成對(duì)串口數(shù)據(jù)的收發(fā)控制。
{{分頁(yè)}}
2.2串口收發(fā)接口軟件設(shè)計(jì)
串口發(fā)送、接收子程序
Picoblaze通過(guò)對(duì)標(biāo)志寄存器的查詢,根據(jù)FIFO的狀態(tài)進(jìn)行操作。串口發(fā)送和接收子程序流程見(jiàn)圖2。
Picoblaze的編程,類似于匯編語(yǔ)言。
串口發(fā)送子程序代碼如下:
(1)串口接收子程序
receive:
INPUT s0,uartrxflag ;查詢接收FIFO是否非空
AND s0,01
AND s0,s0
JUMP Z,receive ;若FIFO為空時(shí)繼續(xù)查詢
INPUT rxdata,uartrx ;若FIFO非空時(shí)讀取數(shù)據(jù)
RETURN
(2)串口接收子程序
translate:
INPUT s0,uarttxflag ;查詢發(fā)送FIFO是否為空
AND s0,01
AND s0,s0
JUMP NZ,translate ;若發(fā)送FIFO非空時(shí)繼續(xù)查詢
OUTPUTtxdata,uarttx ;若發(fā)送FIFO為空時(shí)寫入數(shù)據(jù)
RETURN
{{分頁(yè)}}
協(xié)議處理子程序
本文應(yīng)用中的串口通信,采用應(yīng)答機(jī)制,數(shù)據(jù)具有一定的幀結(jié)構(gòu),Picoblaze需要對(duì)命令幀進(jìn)行拆包處理,并根據(jù)幀的內(nèi)容進(jìn)行相應(yīng)的操作,然后發(fā)送響應(yīng)幀。
表1 通信數(shù)據(jù)的命令幀結(jié)構(gòu)
表2 通信數(shù)據(jù)的響應(yīng)幀結(jié)構(gòu)
根據(jù)幀格式,Picoblaze對(duì)串口數(shù)據(jù)的處理流程見(jiàn)圖3。
以上的Picoblaze程序流程所處理的數(shù)據(jù)幀結(jié)構(gòu)是較為簡(jiǎn)單的,當(dāng)需要處理復(fù)雜的通信協(xié)議時(shí)可以考慮采用多個(gè)Picoblaze并行處理。
{{分頁(yè)}}
3 存儲(chǔ)器接口設(shè)計(jì)
Picoblaze的優(yōu)點(diǎn)是資源占用少,使用靈活,但可尋址的地址空間最多為256字節(jié),無(wú)法滿足對(duì)大量通信數(shù)據(jù)進(jìn)行存儲(chǔ)的需要。因此本文中采用了SDRAM器件來(lái)對(duì)Picoblaze的存儲(chǔ)能力進(jìn)行擴(kuò)展。
SDRAM器件的管腳分為控制信號(hào)、地址和數(shù)據(jù)三類。通常一個(gè)SDRAM中包含幾個(gè)BANK,每個(gè)BANK的存儲(chǔ)單元是按行和列尋址的。SDRAM的具體特性見(jiàn)參考文獻(xiàn)[3]。
SDRAM在使用時(shí)需要專用的控制器來(lái)產(chǎn)生滿足SDRAM所需的信號(hào)。FPGA中SDRAM控制器也有多種IP核可以選用。出于對(duì)設(shè)計(jì)通用性的考慮,本文中采用了一款A(yù)ltera提供的SDRAM控制器IP核,并增加了必要的設(shè)計(jì)以滿足與Picoblaze的接口要求。SDRAM控制器IP核的功能、原理見(jiàn)參考文獻(xiàn)[4]。
對(duì)Picoblaze與SDRAM控制器的接口設(shè)計(jì)有以下幾個(gè)出發(fā)點(diǎn):
總線匹配
Picoblaze為8位處理器,數(shù)據(jù)線僅8bit,而SDRAM控制器總線寬度與SDRAM相同,可以為8、16或32bit。因此對(duì)于SDRAM控制器的數(shù)據(jù)Picoblaze必須以字節(jié)為單位進(jìn)行處理。
地址控制
Picoblaze地址線僅8位,無(wú)法直接對(duì)SDRAM進(jìn)行尋址。因此Picoblaze對(duì)SDRAM的尋址可借鑒先入先出存儲(chǔ)器FIFO的設(shè)計(jì),即設(shè)計(jì)專門的地址計(jì)數(shù)器,通過(guò)地址計(jì)數(shù)器實(shí)現(xiàn)對(duì)SDRAM的尋址。
時(shí)序匹配
Picoblaze的運(yùn)行速度不超過(guò)40MHz,而SDRAM的工作速度通常大于100MHz。因此為了滿足SDRAM的時(shí)序要求,要增加必要的緩沖機(jī)制。
3.1存儲(chǔ)器接口硬件設(shè)計(jì)
Picoblaze與SDRAM存儲(chǔ)器接口的硬件原理框圖見(jiàn)圖4。
控制狀態(tài)機(jī)控制的地址計(jì)數(shù)器為SDRAM控制器提供地址,同時(shí)控制狀態(tài)機(jī)還控制輸入數(shù)據(jù)緩沖區(qū)和輸出數(shù)據(jù)緩沖區(qū),并且根據(jù)Picoblaze的地址端口數(shù)據(jù)和讀/寫使能信號(hào)產(chǎn)生SDRAM控制器的命令字。
{{分頁(yè)}}
(1)SDRAM初始化
每次加電或復(fù)位后控制狀
態(tài)機(jī)執(zhí)行對(duì)SDRAM控制器的初始化操作,設(shè)置SDRAM的時(shí)間參數(shù)和刷新周期等。
(2)數(shù)據(jù)寫入SDRAM
輸出數(shù)據(jù)緩沖區(qū)由16
評(píng)論