首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
32方语音会议电路的设计
来源:本站整理  作者:佚名  2011-11-14 06:51:10



  一、可编程逻辑器件与单片机的接口电路

  在很多电路里,可编程逻辑器件需要在外部处理器如单片机的控制下工作。这时可以把PLD或FPGA器件当作普通的单片机外围电路,利用单片机的数据、地址、控制3组总线来访问它,接口电路可用PLD或FPGA内构建出的双端口RAM来充当。双端口RAM是一种数据存储电路,具有输入和输出两个端口,每个端口都有独立的数据和地址总线,对两个端口可分别进行数据读、写操作。现以Cyclone型FPGA芯片为例来设计它和外部单片机的接口。

  设外部单片机的数据总线cpu_data[7..0]为8位,地址总线cpUL.address[6..0]为7位,FPGA内的数据总线dpradata[31..0]选用32位,相应的地址总线dpraaddress[4.,0]就是5位。CPU选中FPGA芯片时还要有个片选信号os_n(“_n”表示低电平有效),通常由CPU的高位地址担任。因为在接下来的例子中只需要从单片机向FPGA写入控制数据,所以数据总线可简化为单向的,只用到外部CPU的写信号cpu_wr_n。

  进入QUARTnsⅡ软件的功能插件管理器,选中“RA2-PORT(双端口RAM)”,按照提示一步步做下去,得到所需要的双踹口RAM,如下图中的dpraml所示。加上输出入引脚等,就设计出了下图所示的单片机接口电路。

  上图中,来自CPU的数据从左端输入,当CPU的写信号和片选信号都为低电平时向dprarnl写人数据。FPGA通过内部地址dpram--address[4..0]可从dpram1的右端读出数据(必要时可加上读信号)。图1中dpraⅢ-clk是Cyclone型芯片要求的双端口RAM时钟(有些类型的芯片不需要用这个时钟),由FPGA内部提供。对上图所示电路做波形仿真,结果如下图所示。

  从上图可见,对外部单片机来讲,通过数据、地址、片选和写信号把数据写入FPGA与写入其他外围器件相比没有什么不同。上图中当片选和写信号都为低电平时,CPU向dpraml起始的4个外部地址处各写入1个8位数据82、83、84、85,此后从dpraml输出数据的起始地址处就可得到1个32位的数据85848382(均为16进制数),其余可类推。因为许多单片机是8位的,所以外部数据总线用8位。FPGA内部使用32位是为了提高数据处理效率。从上图所示的输出波形还可以看到,数据是按照地址大小从左到右排列的。

  写入控制数据后,FPGA就能在单片机的控制下工作。

  二、多片可绵程逻辑器件同步工作

  此前我们所做的数字语音电路实验都只有4路语音,由PLD或FPGA为每路语音分配收/发时隙,并通过调整各路收/发时隙的相对位置来交换语音(参见本文第1节)。

  现在我们要把这一技术推广到更多路的语音。当语音信号很多时,通常按一定规律(如16路语音为一组)把语音信号的输入、输出及编解码处理电路做在一块电路板上,再把多块这样的电路板通过母线电路板连接到具有数字语音处理功能的控制电路板。这时如仍然由1块可编程逻辑器件向所有的语音编解码芯片提供收/发时隙信号的话,就需要大量的板间互连线。更合理的办法是由每块语音电路板通过本板上的可编程逻辑器件产生固定的本板各路收/发时隙,控制电路板则把来自各语音板的PCM信号按照信号的去向在时间次序上重新排列后输出供每路接收。如0号用户的收/发时隙都固定为0号时隙、1号用户的收/发时隙都固定为1号时隙,那么只要把0号时隙来的信号安排到1号时隙发回去,1号用户就收到了0号的语音。在下图所示的电路系统中,使用了2块语音电路板,每板16路语音,收/发时隙均由本板的可编程逻辑器件产生,可选用规模较小的PLD器件。控制板则集中处理和分配各路PCM语音信号,可选用资源较丰富的Cyclone器件。

  由于PCM信号有严格的时序要求,语音板上编解码器的时钟必须和控制板上的时钟同步,语音板自行产生的各路时隙信号也必须在时序上和控制板保持一致。因此,控制板上的可编程逻辑器件工作于“主”模式,输出frame信号作为语音板上每帧的起始标志,输出同步的4096kHz信号作为语音板的时钟。

  语音板则工作于“从”模式,受控于来自控制板的时钟,产生和控制板同步的时隙信号。下图所示是用PLD在“从”模式下产生16路时隙的电路。

  上图中当frame来到时,计数器被清零,开始新的一帧。

  16-sx_t根据选择信号s和计数器信号q[8..4]来产生16个时隙,程序如下:

SUB DESIGN 16_sx_t

    (q[8..4],S = INPUT;

    fS [ 15 . . 0 ] = OUTPUT ; )

    BEGIN

    IF s= = 0 THEN

    FOR  i  IN  0  t0  15  GENERATE

    fS li I = (q 18 . . 41 = = i ) ;

    END GENERATE ;

    ELSE  FOR  i  IN  0  to  15  GENERATE

    fs lil = (q[8 . .4] = = i+ 16) ;

    BND GENERATE ;

    END IF;

    END;

程序中使用了GENERATE语句来定义16个时隙信号。
  当s设置为0时,根据计数器的计数值输出前16个时隙;s设置为1时则输出后16个时隙。
  语音板产生本板所需的时隙后,控制板和语音板之间只需要frame、4096kHz、pC皿和pCout4条信号线互连。即使再增加32路语音,也只要把pCm-,m.和peout信号线各增加1条就够了。语音板上的PLD器件除了产生时隙外,还能对PCM语音做一些初步处理,如对每路语音做静噪控制、调节和显示音量等,这里不再重复。
  三、数字译音会议的功能和原理
  语音会议是通过语音通信的方式使各个用户参与会议的技术。按照参与会议的用户是否具有自主发言的功能,可分为全双工语音会议和半双工语音会议。半双工会议的信号处理电路相对简单,只要少数几路公用的语音发送电路。用户发言时要先申请,获准后才能占用发送电路,然后以广播形式向其他用户发言。全双工会议则是每个用户可随时自由发言(除非被会议限制了发言权),因此每个用户都始终要占用1路语音发送电路。以32方语音会议为例,就要有32路语音发送电路,每路都要把语音发送给其余31方(自己不收自己的语音)。如果还要控制各路语音的收发权限的话,对所有各路语音都要加上控制开关,就要加992(32x31)个开关。不仅如此,因为每方都随时要接收其余方的语音,从理论上讲存在31方同时向1方讲话的可能,所以每方的接收电路里还要有1个能把所有发送来的语音合成为1路的语音加法器电路,,j共就是32个语音加法器。
  因此,全双工语音会议的电路要比半双工复杂得多,而且复杂度和用户数量的平方成正比。
  用模拟电子技术来设计语音会议电路时,需要使用大量的模拟电子开关和运算放大器,是一件很烦琐的事。把语音数字化后,处理的是PCM数字信号,32路信号可以在1条信号线上分时传输,用“0”、“1”来控制各路信号的收发权限,用数字累加器来实现多路语音的相加。所有这些功能都能用可编程逻辑器件做到。
  多路语音相加是语音会议的关键技术。32方语音会议要用到32个并行工作的加法器,每个加法器可对32路语音作选择、求和。数字语音加法器的单元电路可以在Quartusα软件功能插件管理器里提供的“ALTACCUMULATE(ALT累加器)”的基础上设计,如下图所示。
  上图中的累加器accl在每帧语音起始时被CTR信号清零,随后如赋能信号clken为高电平,则在时钟clk的上升沿对输入的语音线性码1[11..0]做加法或减法,加减运算由符号位112决定。1[12..0]是32路PCM语音复用的,在1帧的时间里(l25Hs)变化32次,累加器也相应地做最多32次的运算。每次数据来到时由clken选择是否作运算,这样通过clken可以控制每一方语音向其他方发言的权限。当一帧信号结束时,stllILjatch信号及时出现,把累加结果锁存到D触发器DFF,随即累加器被cb再次清零,开始新一帧语音数据的运算。在累加器做当前运算时,如果输出就绪信号outJeady来到,上次运算的结果就从D触发器通过与门AND2输出,得到求和后的语音信号stHn[17..0]。sum[17..0]的最高位是符号位,其余是数值位。把数值位从12位扩展到17位是为了保存运算过程中可能出现的溢出值,供后续处理。
  语音会议时,要求32个用户收听的内容分别由CPU来控制,所以必须有32个独立控制的加法器单元。要把图5中的单元电路扩展到32个,并不需把它重复画32次。设图5中电路的文件名是1_adder.bdf,可先在QuartusIf的工具条上依次点“File(文件)”一“CreateAHDLIncludeFilesforCurrentFile(为当前文件创建AHDL包含文件)”,得到文件1-adder.inc,再在下面的AHDL程序里把它包含进去就行了:
工NCLUDE  " 1一adder";
    SUB DESIGN 3 2-adder-t
    ( 1 [ 12 . . 0 ] . clk, clken [ 3 1 . . 0 ] ,
    clr,sum_latch,out一ready[31.. 0]:工NPUT;
    sum [ 17 . . 0 I = OUTPUT 1 )
    VARIABLE
    adder [ 3 1 . . 0 ]= 1-adder i

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:31,210.94000 毫秒