基于FPGA的數(shù)字交換系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
摘 要:本文提出了一種基于FPGA的數(shù)字交換機(jī)的實(shí)現(xiàn)方案。方案中利用FPGA對(duì)PCM信號(hào)進(jìn)行處理,在FPGA內(nèi)實(shí)現(xiàn)了話(huà)路交換、控制接口、時(shí)鐘信號(hào)與信號(hào)音產(chǎn)生等主要功能,大大簡(jiǎn)化了硬件電路,并且較之傳統(tǒng)方案具有明顯優(yōu)越的可擴(kuò)展性。
關(guān)鍵詞:數(shù)字交換系統(tǒng);現(xiàn)場(chǎng)可編程門(mén)陣列;設(shè)計(jì)
專(zhuān)用交換機(jī)過(guò)于強(qiáng)大專(zhuān)業(yè)的功能,以及昂貴的價(jià)格,并非小型建網(wǎng)的理想選擇;同時(shí),傳統(tǒng)的PBX的模擬交換方式存在著失真大、欠靈活以及隨規(guī)模增大而復(fù)雜度劇增的不足。本文提出的方案,有別于常用PBX的模擬交換,是一種適用于一定規(guī)模局域網(wǎng)的數(shù)字交換機(jī)。FPGA的使用在保證了性能提高的同時(shí),在復(fù)雜度和擴(kuò)展性方面也有了明顯的改進(jìn)。
一 、系統(tǒng)結(jié)構(gòu)
本系統(tǒng)實(shí)現(xiàn)了帶有16路內(nèi)線(xiàn)電話(huà)、同時(shí)具備4路外線(xiàn)接口的數(shù)字交換機(jī),系統(tǒng)結(jié)構(gòu)如圖1。
(1)用戶(hù)接口及PCM編碼部分
用戶(hù)接口電路選用IDT公司的821611芯片,該芯片與編碼芯片IDT821034配合良好。用戶(hù)線(xiàn)各對(duì)應(yīng)一片821611,四路用戶(hù)接入一片 821034(可調(diào)增益的四路PCM編碼芯片),最終4片821034的PCM信號(hào)(16路)一起掛接在PCM總線(xiàn)上,送入FPGA。要注意的是, 821034采用的類(lèi)似SPI (Serial Peripheral Interface)的串行控制接口,使我們能采用帶SPI的單片機(jī)(例如,Analog公司的Aduc812),很方便地實(shí)現(xiàn)對(duì)多片IDT821034 的控制。
(2)外線(xiàn)接口
外線(xiàn)接口一部分負(fù)責(zé)外線(xiàn)的鈴流檢測(cè)和變壓器(僅通過(guò)語(yǔ)音)接入。鈴流檢測(cè)采用了SGS公司的 LS1240。每當(dāng)鈴流進(jìn)入,向FPGA送出高電平,從而測(cè)知外線(xiàn)的呼入。另一部分為與內(nèi)線(xiàn)中的SLIC和CODEC類(lèi)似的語(yǔ)音編****部分,負(fù)責(zé)將交換后的數(shù)字信號(hào)轉(zhuǎn)為語(yǔ)音送到外線(xiàn)(或者將外線(xiàn)語(yǔ)音及DTMF編碼后送入FPGA)。
(3) DTMF接收及提示語(yǔ)音產(chǎn)生
系統(tǒng)中,20路電話(huà)(含4路外線(xiàn))復(fù)用4路DTMF收號(hào)芯片進(jìn)行收號(hào)。FPGA將待收號(hào)話(huà)路的PCM信號(hào)送到當(dāng)前空閑的收號(hào)模塊。DTMF的接收由 MT8870完成, FPGA與MT8870之間,有一片MT8965(單通道語(yǔ)音編****芯片),將FPGA送出數(shù)字信號(hào)轉(zhuǎn)為模擬信號(hào)由MT8870讀取。而交換過(guò)程的提示語(yǔ)音則選用ISD4004(語(yǔ)音錄放芯片,SPI控制),將其語(yǔ)音輸出接在MT8965的語(yǔ)音輸入端,再以PCM的編碼形式送入FPGA。每路DTMF 接收和語(yǔ)音送出均為固定時(shí)隙,交換控制在FPGA中完成。
(4) FPGA
FPGA作為核心部分,負(fù)責(zé)數(shù)字交換、信號(hào)音產(chǎn)生及控制、收號(hào)控制、提示音控制、外線(xiàn)接口控制、時(shí)鐘產(chǎn)生等功能。為了與外圍器件配合,選用兼容5V接口的FPGA(如Altera的ACEX 1K)。詳細(xì)說(shuō)明在后面給出。
(5)MCU
MCU(這里選用Analog公司的Aduc812,具有包括SPI在內(nèi)的的靈活的用戶(hù)接口)負(fù)責(zé)整個(gè)系統(tǒng)運(yùn)行過(guò)程的調(diào)度及流程控制。軟件設(shè)計(jì)的一些細(xì)節(jié)也將在后面進(jìn)行說(shuō)明。
二、PGA邏輯設(shè)計(jì)
系統(tǒng)內(nèi)的PCM信號(hào)(用戶(hù)語(yǔ)音、外線(xiàn)語(yǔ)音、提示語(yǔ)音3種語(yǔ)音的PCM編碼信號(hào))需要處理和交換;電話(huà)所需的信號(hào)音(撥號(hào)、提示、忙等)需要產(chǎn)生;MCU雖然負(fù)責(zé)整個(gè)系統(tǒng)的配置控制,但它與器件之間還需要控制邏輯;同時(shí),系統(tǒng)還需要特定的時(shí)鐘和定時(shí)信號(hào)。上述的這些功能,都由FPGA來(lái)完成。圖3是FPGA的頂層硬件框圖。
MCU對(duì)各功能塊的相關(guān)操作均通過(guò)以總線(xiàn)讀寫(xiě)寄存器的方式進(jìn)行。
(1)總線(xiàn)控制(BUS-TRAN)
本功能塊將MCU的總線(xiàn)(高8位地址線(xiàn)和低8位數(shù)據(jù)地址復(fù)用線(xiàn))轉(zhuǎn)換為分開(kāi)的地址與數(shù)據(jù)總線(xiàn)(以BUS表示)。
(2) SPI片選生成(SPI-/CS)
圖4中除/SS之外的信號(hào)均由MCU產(chǎn)生,只有/SS信號(hào)需要FPGA提供。通過(guò)對(duì)功能塊內(nèi)寄存器的寫(xiě)操作,生成外圍器件的SPI-/SS信號(hào)。
(3) DTMF收號(hào)(DTMF-REC)
FPGA 與8870有DATA0-DATA3(數(shù)據(jù))、StD(狀態(tài)線(xiàn))、TOE(片選有效)等6線(xiàn)相連,F(xiàn)PGA在MCU控制下查詢(xún)StD狀態(tài),有正脈沖時(shí),通過(guò)TOE使8870輸出有效,再由DATA0-DATA3讀取收號(hào)結(jié)果。同時(shí), 還要產(chǎn)生MT8965的控制線(xiàn)( CA,/F1i, CSTI)以配合收號(hào)和送提示音過(guò)程。
(4)外線(xiàn)檢測(cè)(EXTERNAL-DET)
這里只需要對(duì)外線(xiàn)接口送來(lái)的狀態(tài)線(xiàn)進(jìn)行查詢(xún)(讀寄存器方式),以測(cè)知是否有外線(xiàn)呼入。
(5)時(shí)鐘產(chǎn)生(TIMING-GEN)
將系統(tǒng)時(shí)鐘分頻,得到PCM-FS、 PCM-Clock 、MCLK(For 821034)、OSC(For 8870)、C2i(For 8965)等時(shí)鐘信號(hào)。
(6)數(shù)字交換(PCM-SWITCH)
這是邏輯設(shè)計(jì)中的核心部分,其框圖如圖5所示。
圖5中INNER指內(nèi)線(xiàn)用戶(hù),EXTERNAL指外線(xiàn)用戶(hù),DTMF指收號(hào)模塊,AUDIO指提示語(yǔ)音模塊。同時(shí),RAM-D用來(lái)存放PCM數(shù)據(jù),RAM-ADD用來(lái)存放控制RAM-D讀出的地址。
各路PCM信號(hào)在用來(lái)標(biāo)識(shí)時(shí)隙的SLOT-CLOCK上升沿順序?qū)懭雽?duì)應(yīng)的RAM-D內(nèi),RAM的大小均為32×2 byte(可容兩幀),確保送上一幀數(shù)據(jù)時(shí),不影響當(dāng)前幀寫(xiě)入。RAM-ADD為32 byte的RAM,存放著對(duì)應(yīng)通路的交換信息,例如,RAM-ADD(IN-IN)中的0地址處存放的是內(nèi)線(xiàn)交換時(shí)希望0時(shí)隙內(nèi)線(xiàn)用戶(hù)收到的時(shí)隙的標(biāo)號(hào),這些信息由MCU總線(xiàn)寫(xiě)入。同時(shí),在SLOT-CLOCK上升沿,F(xiàn)PGA將RAM-ADD順序讀出的輸出作為地址來(lái)讀取RAM-D,從而實(shí)現(xiàn)了交換功能?;谶@樣的原理,系統(tǒng)實(shí)現(xiàn)了內(nèi)線(xiàn)、外線(xiàn)、DTMF收號(hào)、提示語(yǔ)音這幾塊之間的靈活交換(DTMF和提示語(yǔ)音為單向信號(hào),實(shí)際在同一PCM總線(xiàn)上)。
(7) 信號(hào)音產(chǎn)生(SIGNAL-GEN)
信號(hào)音頻率均為450 Hz,僅以通斷時(shí)間來(lái)區(qū)分。我們?cè)贔PGA中建立了一張450 Hz、8k采樣的正弦表(PCM編碼后),工作時(shí)循環(huán)讀出并進(jìn)行并串轉(zhuǎn)換。利用定時(shí)器和三態(tài)門(mén)對(duì)其進(jìn)行處理,從而形成了通斷時(shí)間不同的各種信號(hào)音。將各種信號(hào)音通過(guò)三態(tài)門(mén)掛接在用戶(hù)的PCM總線(xiàn)上,需要時(shí)只要打開(kāi)對(duì)應(yīng)的三態(tài)門(mén),就可以將正確的信號(hào)音送到當(dāng)前的時(shí)隙上。
三、工作流程及軟件設(shè)計(jì)
FPGA為MCU提供了與其他器件間的接口,使其能夠以簡(jiǎn)短的指令實(shí)現(xiàn)原本復(fù)雜的底層操作。限于篇幅,這里只作簡(jiǎn)要的介紹。
1. 內(nèi)線(xiàn)通話(huà)
內(nèi)線(xiàn)摘機(jī):如果該用戶(hù)主叫,向該時(shí)隙送撥號(hào)音(到撥號(hào)為止),同時(shí)將主叫話(huà)路送到當(dāng)前有閑的DTMF模塊(如果沒(méi)有,送忙音)的時(shí)隙上,收號(hào)完成再?gòu)?DTMF時(shí)隙拿掉(或超時(shí)拆線(xiàn)),根據(jù)收號(hào)結(jié)果,看被叫用戶(hù)狀態(tài),忙則將忙音送主叫時(shí)隙,否則向主叫時(shí)隙送回鈴音,同時(shí)令被叫振鈴;如果該用戶(hù)被叫,則切掉該用戶(hù)振鈴,同時(shí)取消主叫時(shí)隙的回鈴音,將這兩個(gè)時(shí)隙的話(huà)路交換,建立連接。
內(nèi)線(xiàn)掛機(jī):如果通話(huà)在連接狀態(tài),則取消通話(huà)連接,送對(duì)端時(shí)隙忙音;如果無(wú)通話(huà)連接,則取消對(duì)方振鈴(如果存在的話(huà)),并拿掉本時(shí)隙上的所有信號(hào)。
2. 外線(xiàn)通話(huà)
外線(xiàn)呼入:當(dāng)測(cè)知有外線(xiàn)呼入時(shí),如果沒(méi)有空閑收號(hào)模塊,則等待直到出現(xiàn)空閑為止;否則,將呼入外線(xiàn)的編碼信號(hào)送至DTMF模塊的時(shí)隙,同時(shí)將提示撥分機(jī)號(hào)的提示語(yǔ)音編碼信號(hào)送至呼入外線(xiàn)的時(shí)隙,等待撥號(hào)完成(或超時(shí)拆線(xiàn))。后面的過(guò)程與內(nèi)線(xiàn)通話(huà)類(lèi)似,唯一不同的是向外線(xiàn)送忙音只需拿掉送至呼入外線(xiàn)時(shí)隙的所有信號(hào)即可,而送給外線(xiàn)的回鈴音是由提示語(yǔ)音來(lái)替代的。
呼叫外線(xiàn):在內(nèi)線(xiàn)摘機(jī)后的收號(hào)過(guò)程中,當(dāng)用戶(hù)撥號(hào)第一位為某特定數(shù)字(例如“0”),認(rèn)為是呼叫外線(xiàn),將該話(huà)路由收號(hào)時(shí)隙拿掉,并尋找一路空閑外線(xiàn)(若無(wú)則送忙音),將話(huà)路時(shí)隙與外線(xiàn)時(shí)隙進(jìn)行交換,建立通話(huà),后續(xù)過(guò)程與內(nèi)線(xiàn)通話(huà)相似,但僅需處理內(nèi)線(xiàn)端即可。
需要注意的是, 821034的串行控制接口與標(biāo)準(zhǔn)的SPI略有不同,在/SS有效前需要1個(gè)SCLK,拉高后需要2個(gè)SCLK,所以編程中在寫(xiě)SPI的前后,各進(jìn)行了一次偽寫(xiě)(即在未拉低/SS的情況下,寫(xiě)SPI)操作,以確保操作的正確。
四、結(jié)語(yǔ)
系統(tǒng)中,除語(yǔ)音至PCM編碼段外,其余話(huà)路部分實(shí)現(xiàn)了完全數(shù)字化,可以顯著提高內(nèi)線(xiàn)通話(huà)質(zhì)量(特別是內(nèi)部網(wǎng)具一定規(guī)模的情況下)。同時(shí),將原本IC實(shí)現(xiàn)的功能集成在單一的FPGA中實(shí)現(xiàn),減小了系統(tǒng)復(fù)雜度,降低了成本,增加了系統(tǒng)的穩(wěn)定性,并且這使系統(tǒng)的升級(jí)相較于傳統(tǒng)的PBX變得更為方便靈活,用戶(hù)可以根據(jù)要求在不改動(dòng)硬件的情況下以編程方式實(shí)現(xiàn)較自由的功能擴(kuò)展。特別地,隨著規(guī)模的增大,本方案的上述優(yōu)勢(shì)會(huì)愈發(fā)明顯。