基于FPGA的SOC系統(tǒng)中的串口設(shè)計(jì)
發(fā)布時(shí)間:2008/5/28 0:00:00 訪問次數(shù):483
在基于fpga的soc設(shè)計(jì)中,常使用串口作為通信接口,但直接用fpga進(jìn)行串口通信數(shù)據(jù)的處理是比較繁雜的,特別是直接使用fpga進(jìn)行串口通信的協(xié)議的解釋和數(shù)據(jù)打包等處理,將會(huì)消耗大量的fpga硬件資源。
為簡(jiǎn)化設(shè)計(jì),降低硬件資源開銷,可以在fpga中利用ip核實(shí)現(xiàn)的嵌入式微處理器來對(duì)串口數(shù)據(jù)進(jìn)行處理。
本文中的設(shè)計(jì)采用了xilinx的fpga,可選用的嵌入式微處理器ip核種類繁多,但基于對(duì)硬件資源開銷最少的考慮,最終選用了picoblaze。
嵌入式微處理器picoblaze適用于spartan-ii/e、coolrunner-ii和virtex系列fpga,運(yùn)行速度可達(dá)到40mips以上,提供49個(gè)不同的指令,16個(gè)寄存器,256個(gè)地址端口,1個(gè)可屏蔽的中斷。其性能超過了傳統(tǒng)的8bit微處理器。嵌入式微處理器picoblaze的功能、原理見參考文獻(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ā)送模塊并通過總線結(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。
使用picoblaze和串口收發(fā)ip核構(gòu)成的串口收發(fā)系統(tǒng)結(jié)構(gòu)見圖1。
在設(shè)計(jì)中,發(fā)送模塊、接收模塊和標(biāo)志寄存器分別有不同的地址,picoblaze通過地址端口對(duì)串口收發(fā)模塊進(jìn)行訪問。設(shè)計(jì)中的標(biāo)志寄存器,可用于指示發(fā)送模塊和接收模塊中fifo的狀態(tài),picoblaze通過查詢標(biāo)志寄存器來完成對(duì)串口數(shù)據(jù)的收發(fā)控制。
2.2串口收發(fā)接口軟件設(shè)計(jì)
串口發(fā)送、接收子程序
picoblaze通過對(duì)標(biāo)志寄存器的查詢,根據(jù)fifo的狀態(tài)進(jìn)行操作。串口發(fā)送和接收子程序流程見圖2。
picoblaze的編程,類似于匯編語言。
串口發(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
協(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ù)的處理流程見圖3。
以上的picoblaze程序流程所處理的數(shù)據(jù)幀結(jié)構(gòu)是較為簡(jiǎn)單的,當(dāng)需要處理復(fù)雜的通信協(xié)議時(shí)可以考慮采用多個(gè)picoblaze并行處理。
3 存儲(chǔ)器接口設(shè)計(jì)
picoblaze的優(yōu)點(diǎn)是資源占用少,使用靈活,但可尋址的地址空間最多為256字節(jié),無法滿足對(duì)大量通信數(shù)據(jù)進(jìn)行存儲(chǔ)的需要。因此本文中采用了sdram器件來對(duì)picoblaze的存儲(chǔ)能力進(jìn)行擴(kuò)展。
sdram器件的管腳分為控制信號(hào)、地址和數(shù)據(jù)三類。通常一個(gè)sdram中包含幾個(gè)bank,每個(gè)bank的存儲(chǔ)單元是按行和列尋址的。sdram的具體特性見參考文獻(xiàn)[3]。
sdram在使用時(shí)需要專用的控制器來產(chǎn)生滿足sdram所需的信號(hào)。fpga中sdram控制器也有多種ip核可以選用。出于對(duì)設(shè)計(jì)通用性的考慮,本文中采用了一款altera提供的sdram
在基于fpga的soc設(shè)計(jì)中,常使用串口作為通信接口,但直接用fpga進(jìn)行串口通信數(shù)據(jù)的處理是比較繁雜的,特別是直接使用fpga進(jìn)行串口通信的協(xié)議的解釋和數(shù)據(jù)打包等處理,將會(huì)消耗大量的fpga硬件資源。
為簡(jiǎn)化設(shè)計(jì),降低硬件資源開銷,可以在fpga中利用ip核實(shí)現(xiàn)的嵌入式微處理器來對(duì)串口數(shù)據(jù)進(jìn)行處理。
本文中的設(shè)計(jì)采用了xilinx的fpga,可選用的嵌入式微處理器ip核種類繁多,但基于對(duì)硬件資源開銷最少的考慮,最終選用了picoblaze。
嵌入式微處理器picoblaze適用于spartan-ii/e、coolrunner-ii和virtex系列fpga,運(yùn)行速度可達(dá)到40mips以上,提供49個(gè)不同的指令,16個(gè)寄存器,256個(gè)地址端口,1個(gè)可屏蔽的中斷。其性能超過了傳統(tǒng)的8bit微處理器。嵌入式微處理器picoblaze的功能、原理見參考文獻(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ā)送模塊并通過總線結(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。
使用picoblaze和串口收發(fā)ip核構(gòu)成的串口收發(fā)系統(tǒng)結(jié)構(gòu)見圖1。
在設(shè)計(jì)中,發(fā)送模塊、接收模塊和標(biāo)志寄存器分別有不同的地址,picoblaze通過地址端口對(duì)串口收發(fā)模塊進(jìn)行訪問。設(shè)計(jì)中的標(biāo)志寄存器,可用于指示發(fā)送模塊和接收模塊中fifo的狀態(tài),picoblaze通過查詢標(biāo)志寄存器來完成對(duì)串口數(shù)據(jù)的收發(fā)控制。
2.2串口收發(fā)接口軟件設(shè)計(jì)
串口發(fā)送、接收子程序
picoblaze通過對(duì)標(biāo)志寄存器的查詢,根據(jù)fifo的狀態(tài)進(jìn)行操作。串口發(fā)送和接收子程序流程見圖2。
picoblaze的編程,類似于匯編語言。
串口發(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
協(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ù)的處理流程見圖3。
以上的picoblaze程序流程所處理的數(shù)據(jù)幀結(jié)構(gòu)是較為簡(jiǎn)單的,當(dāng)需要處理復(fù)雜的通信協(xié)議時(shí)可以考慮采用多個(gè)picoblaze并行處理。
3 存儲(chǔ)器接口設(shè)計(jì)
picoblaze的優(yōu)點(diǎn)是資源占用少,使用靈活,但可尋址的地址空間最多為256字節(jié),無法滿足對(duì)大量通信數(shù)據(jù)進(jìn)行存儲(chǔ)的需要。因此本文中采用了sdram器件來對(duì)picoblaze的存儲(chǔ)能力進(jìn)行擴(kuò)展。
sdram器件的管腳分為控制信號(hào)、地址和數(shù)據(jù)三類。通常一個(gè)sdram中包含幾個(gè)bank,每個(gè)bank的存儲(chǔ)單元是按行和列尋址的。sdram的具體特性見參考文獻(xiàn)[3]。
sdram在使用時(shí)需要專用的控制器來產(chǎn)生滿足sdram所需的信號(hào)。fpga中sdram控制器也有多種ip核可以選用。出于對(duì)設(shè)計(jì)通用性的考慮,本文中采用了一款altera提供的sdram
熱門點(diǎn)擊
- Xilinx FPGA全局時(shí)鐘和第二全局時(shí)鐘
- 使用C編譯器+ICD2調(diào)試程序需要注意的問題
- 基于VHDL的彩燈控制
- FPGA與DDR3 SDRAM的接口設(shè)計(jì)
- 基于IP模塊的PCI接口設(shè)計(jì)及FPGA實(shí)現(xiàn)
- 基于GCC的嵌入式程序插裝技術(shù)
- 組態(tài)王6.53
- ELD
- EDA技術(shù)在數(shù)字系統(tǒng)設(shè)計(jì)分析中的應(yīng)用
- 天碁科技與恩智浦率先實(shí)現(xiàn)TD-SCDMA/G
推薦技術(shù)資料
- 聲道前級(jí)設(shè)計(jì)特點(diǎn)
- 與通常的Hi-Fi前級(jí)不同,EP9307-CRZ這臺(tái)分... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究