基于FPGA的数字交换系统的设计与实现
扫描二维码
随时随地手机看文章
关键词:数字交换系统;现场可编程门阵列;设计
专用交换机过于强大专业的功能,以及昂贵的价格,并非小型建网的理想选择;同时,传统的PBX的模拟交换方式存在着失真大、欠灵活以及随规模增大而复杂度剧增的不足。本文提出的方案,有别于常用PBX的模拟交换,是一种适用于一定规模局域网的数字交换机。FPGA的使用在保证了性能提高的同时,在复杂度和扩展性方面也有了明显的改进。
一 、系统结构
本系统实现了带有16路内线电话、同时具备4路外线接口的数字交换机,系统结构如图1。
(1)用户接口及PCM编码部分
用户接口电路选用IDT公司的821611芯片,该芯片与编码芯片IDT821034配合良好。用户线各对应一片821611,四路用户接入一片821034(可调增益的四路PCM编码芯片),最终4片821034的PCM信号(16路)一起挂接在PCM总线上,送入FPGA。要注意的是, 821034采用的类似SPI (Serial Peripheral Interface)的串行控制接口,使我们能采用带SPI的单片机(例如,Analog公司的Aduc812),很方便地实现对多片IDT821034的控制。
(2)外线接口
外线接口一部分负责外线的铃流检测和变压器(仅通过语音)接入。铃流检测采用了SGS公司的LS1240。每当铃流进入,向FPGA送出高电平,从而测知外线的呼入。另一部分为与内线中的SLIC和CODEC类似的语音编解码部分,负责将交换后的数字信号转为语音送到外线(或者将外线语音及DTMF编码后送入FPGA)。
(3) DTMF接收及提示语音产生
系统中,20路电话(含4路外线)复用4路DTMF收号芯片进行收号。FPGA将待收号话路的PCM信号送到当前空闲的收号模块。DTMF的接收由MT8870完成, FPGA与MT8870之间,有一片MT8965(单通道语音编解码芯片),将FPGA送出数字信号转为模拟信号由MT8870读取。而交换过程的提示语音则选用ISD4004(语音录放芯片,SPI控制),将其语音输出接在MT8965的语音输入端,再以PCM的编码形式送入FPGA。每路DTMF接收和语音送出均为固定时隙,交换控制在FPGA中完成。
(4) FPGA
FPGA作为核心部分,负责数字交换、信号音产生及控制、收号控制、提示音控制、外线接口控制、时钟产生等功能。为了与外围器件配合,选用兼容5V接口的FPGA(如Altera的ACEX 1K)。详细说明在后面给出。
(5)MCU
MCU(这里选用Analog公司的Aduc812,具有包括SPI在内的的灵活的用户接口)负责整个系统运行过程的调度及流程控制。软件设计的一些细节也将在后面进行说明。
二、PGA逻辑设计
系统内的PCM信号(用户语音、外线语音、提示语音3种语音的PCM编码信号)需要处理和交换;电话所需的信号音(拨号、提示、忙等)需要产生;MCU虽然负责整个系统的配置控制,但它与器件之间还需要控制逻辑;同时,系统还需要特定的时钟和定时信号。上述的这些功能,都由FPGA来完成。图3是FPGA的顶层硬件框图。
MCU对各功能块的相关操作均通过以总线读写寄存器的方式进行。
(1)总线控制(BUS-TRAN)
本功能块将MCU的总线(高8位地址线和低8位数据地址复用线)转换为分开的地址与数据总线(以BUS表示)。
(2) SPI片选生成(SPI-/CS)
图4中除/SS之外的信号均由MCU产生,只有/SS信号需要FPGA提供。通过对功能块内寄存器的写操作,生成外围器件的SPI-/SS信号。
(3) DTMF收号(DTMF-REC)
FPGA与8870有DATA0-DATA3(数据)、StD(状态线)、TOE(片选有效)等6线相连,FPGA在MCU控制下查询StD状态,有正脉冲时,通过TOE使8870输出有效,再由DATA0-DATA3读取收号结果。同时, 还要产生MT8965的控制线( CA,/F1i, CSTI)以配合收号和送提示音过程。
(4)外线检测(EXTERNAL-DET)
这里只需要对外线接口送来的状态线进行查询(读寄存器方式),以测知是否有外线呼入。
(5)时钟产生(TIMING-GEN)
将系统时钟分频,得到PCM-FS、 PCM-Clock 、MCLK(For 821034)、OSC(For 8870)、C2i(For 8965)等时钟信号。
(6)数字交换(PCM-SWITCH)
这是逻辑设计中的核心部分,其框图如图5所示。
图5中INNER指内线用户,EXTERNAL指外线用户,DTMF指收号模块,AUDIO指提示语音模块。同时,RAM-D用来存放PCM数据,RAM-ADD用来存放控制RAM-D读出的地址。
各路PCM信号在用来标识时隙的SLOT-CLOCK上升沿顺序写入对应的RAM-D内,RAM的大小均为32×2 byte(可容两帧),确保送上一帧数据时,不影响当前帧写入。RAM-ADD为32 byte的RAM,存放着对应通路的交换信息,例如,RAM-ADD(IN-IN)中的0地址处存放的是内线交换时希望0时隙内线用户收到的时隙的标号,这些信息由MCU总线写入。同时,在SLOT-CLOCK上升沿,FPGA将RAM-ADD顺序读出的输出作为地址来读取RAM-D,从而实现了交换功能。基于这样的原理,系统实现了内线、外线、DTMF收号、提示语音这几块之间的灵活交换(DTMF和提示语音为单向信号,实际在同一PCM总线上)。
(7) 信号音产生(SIGNAL-GEN)
信号音频率均为450 Hz,仅以通断时间来区分。我们在FPGA中建立了一张450 Hz、8k采样的正弦表(PCM编码后),工作时循环读出并进行并串转换。利用定时器和三态门对其进行处理,从而形成了通断时间不同的各种信号音。将各种信号音通过三态门挂接在用户的PCM总线上,需要时只要打开对应的三态门,就可以将正确的信号音送到当前的时隙上。
三、工作流程及软件设计
FPGA为MCU提供了与其他器件间的接口,使其能够以简短的指令实现原本复杂的底层操作。限于篇幅,这里只作简要的介绍。
1. 内线通话
内线摘机:如果该用户主叫,向该时隙送拨号音(到拨号为止),同时将主叫话路送到当前有闲的DTMF模块(如果没有,送忙音)的时隙上,收号完成再从DTMF时隙拿掉(或超时拆线),根据收号结果,看被叫用户状态,忙则将忙音送主叫时隙,否则向主叫时隙送回铃音,同时令被叫振铃;如果该用户被叫,则切掉该用户振铃,同时取消主叫时隙的回铃音,将这两个时隙的话路交换,建立连接。
内线挂机:如果通话在连接状态,则取消通话连接,送对端时隙忙音;如果无通话连接,则取消对方振铃(如果存在的话),并拿掉本时隙上的所有信号。
2. 外线通话
外线呼入:当测知有外线呼入时,如果没有空闲收号模块,则等待直到出现空闲为止;否则,将呼入外线的编码信号送至DTMF模块的时隙,同时将提示拨分机号的提示语音编码信号送至呼入外线的时隙,等待拨号完成(或超时拆线)。后面的过程与内线通话类似,唯一不同的是向外线送忙音只需拿掉送至呼入外线时隙的所有信号即可,而送给外线的回铃音是由提示语音来替代的。
呼叫外线:在内线摘机后的收号过程中,当用户拨号第一位为某特定数字(例如“0”),认为是呼叫外线,将该话路由收号时隙拿掉,并寻找一路空闲外线(若无则送忙音),将话路时隙与外线时隙进行交换,建立通话,后续过程与内线通话相似,但仅需处理内线端即可。
需要注意的是, 821034的串行控制接口与标准的SPI略有不同,在/SS有效前需要1个SCLK,拉高后需要2个SCLK,所以编程中在写SPI的前后,各进行了一次伪写(即在未拉低/SS的情况下,写SPI)操作,以确保操作的正确。
四、结语
系统中,除语音至PCM编码段外,其余话路部分实现了完全数字化,可以显著提高内线通话质量(特别是内部网具一定规模的情况下)。同时,将原本IC实现的功能集成在单一的FPGA中实现,减小了系统复杂度,降低了成本,增加了系统的稳定性,并且这使系统的升级相较于传统的PBX变得更为方便灵活,用户可以根据要求在不改动硬件的情况下以编程方式实现较自由的功能扩展。特别地,随着规模的增大,本方案的上述优势会愈发明显。
参考文献
[1]叶敏.程控数字交换与交换网[M].第二版.北京:北京邮电大学出版社,2003.
[2]Application Note(AN-408)[Z].IDT,2003.
[3]ACEX 1K Programmable Logic Device Family[Z].Altera,2001.
[4]Aduc812 Handbook[Z].Analog Devices,2003.