用FPGA技术实现某新型通信设备中PCM码流处理
发布时间:2008/5/28 0:00:00 访问次数:985
关键词:fpga;ram
引言
由于fpga器件可实现所有数字电路功能 ,具有结构灵活、设计周期短、硬件密度高和性能好等优点,在高速信号处理领域显示出愈来愈重要的作用。本文研究了基于fpga技术对pcm码流进行处理的实现方法。变换后的数据写入ram,与dsp配合可完成复杂的信号处理功能。
设计方案
某新型通信设备中,在完成调度功能的板子上,需要进行pcm码流处理,实现串/并转换、m律编解码以及产生地址等功能。
功能模块的组成
模块结构如图1所示。pcm码流被送入fpga,进行并/串转换、串/并转换、地址码产生和时序控制信号产生,由线性/m律、m律/线性转换完成pcm码流到ram中线性数据及ram中线性数据到pcm码流的转换工作。标准jtag接口供与pc机并行口相连 ,用于下载设计数据至fpga中。
由于本设计的电路规模并不十分大,所以采用了原理图和硬件描述语言相结合的混合方法来设计。
设计实现
设定fpga接收到的pcm码流为32路调度用户数据。
1. 首先要完成串/并转换使串行码流变成8位并行输出数据,根据话音分布特性再将这8位线性数据以m律转换成16位数据。同时产生地址并将变换后的数据写入ram送给dsp处理。fpga的功能框图如图2所示。
计数器cb8cle的时钟及锁存器x74-273的时钟cs1等都通过fpga实现。数据的线性与m律的相互转换是运用able语言描述实现的。程序如下:
declarations
inn7..inn0 pin;
inn = [inn7..inn0];
ouu15..ouu0 pin istype 'com';
ouu = [ouu15..ouu0];
a = [inn6,inn5,inn4];
b = [inn7..inn4];
equations
when((a==0)&(b<8)) then ouu=[0,0,0,0,0,0,0,0,0,0,0,inn3,inn2,inn1,inn0,0];
when((a==0)&(b>=8)) then ouu=[1,1,1,1,1,1,1,1,1,1,1,!inn3,!inn2,!inn1,!inn0,1];
……
test_vectors
([inn7..inn0]-> [ouu15..ouu0])
^b00001000->^b0000000000010000;
^b00010100->^b0000000001010000;
^b00101010->^b0000000011010000;
……
end we00
2. dsp处理完16位数据后,以m律解码成8位线性数据,最后完成并/串转换送回处理过的pcm码流。同时送出地址。功能框图如图3所示。
3. 数据准备好后,写入ram及从ram中读取数据所需要的读/写信号、片选信号也由fpga产生。
4. 模块提供了2mhz的时钟晶振和fram帧同步信号。设计将2mhz作为fpga的工作时钟 ,经分频器x74-163进行2分频、4分频和8分频后产生作为并联输出的8位取数触发时钟cs1。同理可产生经dsp处理后的、将并行8位数据转换回8位串行数据的取数触发时钟cs2。逻辑图及触发时钟波形图如图4、图5所示。
5. 在fpga内部,fram帧同步到来后 ,打开计数器开始计数 ,并将计数结果作为地址送入外接ram等待dsp读取。这样,数据就可与相应的地址一同被送入ram中,而不会出现错位的现象。此处应注意:fram到来后,来第一个用户数据,计数器要先置数产生地址,装入相应的数据。而这个数据并不是第一个用户的数据,而是此刻以前的数据,即第32个用户数据。所以地址置为31(共有32个地址,设为0~31)。cpu处理完16位数据后将其送回。地址置成1,因为fram同步信号到来时经过第一个用户数据,只好从第2用户处开始读取完整数据。所以置对应地址为1。
6. 设计编译和设计验证
进行设计错误检查,综合逻辑,将设计与fpga器件匹配以及测试逻辑。实现线性与m律相互转换设计的able语言程序经调试成功后,与编译后的原理图一起被载入基于 xc95108芯片设计的真实硬件系统中。经实际检测和验证表明同理论设计结果完全吻合。
遇到的问题与解决
在运用fpga技术的过程中,遇到一些应用上的问题,并且在实践摸索中找到了化解的方法。
毛刺问题
输入某一器件的信号同时变化时,产生功能冒险 ,即会出现毛刺。毛刺对数字通信是十分有害的。通常采用取样的方法加以消除。但是简单的与或取样电路在加了取样脉冲后的输出将不是电平信号而是脉冲信号。在取样期间,有输出脉冲表示组合电路的输出为“1”,无脉冲则表示输出为“0”。可以通过加数据锁存器的方法消除毛刺。某信码稳定后读至锁存器 ,锁存器在下一个时钟周期将信号输出。输出虽延迟一个时钟周期 ,但是信码序列与时钟的相位关系没有发生变化 ,并且毛刺完全消除 ,信码质量得到提高。如图6所示,从图中可以看出,波形2比波形1滞后一个时钟周期,毛刺已消失。
资源利用问题
1. 使用一个反相器将信号反相后驱动多个负载往往会多占资源,而且延迟也增加了。所以输入信号需要反相 ,但应尽可能地调用输入带反相功能的符号 ,而不是用分离的反相器对输入信号进行
关键词:fpga;ram
引言
由于fpga器件可实现所有数字电路功能 ,具有结构灵活、设计周期短、硬件密度高和性能好等优点,在高速信号处理领域显示出愈来愈重要的作用。本文研究了基于fpga技术对pcm码流进行处理的实现方法。变换后的数据写入ram,与dsp配合可完成复杂的信号处理功能。
设计方案
某新型通信设备中,在完成调度功能的板子上,需要进行pcm码流处理,实现串/并转换、m律编解码以及产生地址等功能。
功能模块的组成
模块结构如图1所示。pcm码流被送入fpga,进行并/串转换、串/并转换、地址码产生和时序控制信号产生,由线性/m律、m律/线性转换完成pcm码流到ram中线性数据及ram中线性数据到pcm码流的转换工作。标准jtag接口供与pc机并行口相连 ,用于下载设计数据至fpga中。
由于本设计的电路规模并不十分大,所以采用了原理图和硬件描述语言相结合的混合方法来设计。
设计实现
设定fpga接收到的pcm码流为32路调度用户数据。
1. 首先要完成串/并转换使串行码流变成8位并行输出数据,根据话音分布特性再将这8位线性数据以m律转换成16位数据。同时产生地址并将变换后的数据写入ram送给dsp处理。fpga的功能框图如图2所示。
计数器cb8cle的时钟及锁存器x74-273的时钟cs1等都通过fpga实现。数据的线性与m律的相互转换是运用able语言描述实现的。程序如下:
declarations
inn7..inn0 pin;
inn = [inn7..inn0];
ouu15..ouu0 pin istype 'com';
ouu = [ouu15..ouu0];
a = [inn6,inn5,inn4];
b = [inn7..inn4];
equations
when((a==0)&(b<8)) then ouu=[0,0,0,0,0,0,0,0,0,0,0,inn3,inn2,inn1,inn0,0];
when((a==0)&(b>=8)) then ouu=[1,1,1,1,1,1,1,1,1,1,1,!inn3,!inn2,!inn1,!inn0,1];
……
test_vectors
([inn7..inn0]-> [ouu15..ouu0])
^b00001000->^b0000000000010000;
^b00010100->^b0000000001010000;
^b00101010->^b0000000011010000;
……
end we00
2. dsp处理完16位数据后,以m律解码成8位线性数据,最后完成并/串转换送回处理过的pcm码流。同时送出地址。功能框图如图3所示。
3. 数据准备好后,写入ram及从ram中读取数据所需要的读/写信号、片选信号也由fpga产生。
4. 模块提供了2mhz的时钟晶振和fram帧同步信号。设计将2mhz作为fpga的工作时钟 ,经分频器x74-163进行2分频、4分频和8分频后产生作为并联输出的8位取数触发时钟cs1。同理可产生经dsp处理后的、将并行8位数据转换回8位串行数据的取数触发时钟cs2。逻辑图及触发时钟波形图如图4、图5所示。
5. 在fpga内部,fram帧同步到来后 ,打开计数器开始计数 ,并将计数结果作为地址送入外接ram等待dsp读取。这样,数据就可与相应的地址一同被送入ram中,而不会出现错位的现象。此处应注意:fram到来后,来第一个用户数据,计数器要先置数产生地址,装入相应的数据。而这个数据并不是第一个用户的数据,而是此刻以前的数据,即第32个用户数据。所以地址置为31(共有32个地址,设为0~31)。cpu处理完16位数据后将其送回。地址置成1,因为fram同步信号到来时经过第一个用户数据,只好从第2用户处开始读取完整数据。所以置对应地址为1。
6. 设计编译和设计验证
进行设计错误检查,综合逻辑,将设计与fpga器件匹配以及测试逻辑。实现线性与m律相互转换设计的able语言程序经调试成功后,与编译后的原理图一起被载入基于 xc95108芯片设计的真实硬件系统中。经实际检测和验证表明同理论设计结果完全吻合。
遇到的问题与解决
在运用fpga技术的过程中,遇到一些应用上的问题,并且在实践摸索中找到了化解的方法。
毛刺问题
输入某一器件的信号同时变化时,产生功能冒险 ,即会出现毛刺。毛刺对数字通信是十分有害的。通常采用取样的方法加以消除。但是简单的与或取样电路在加了取样脉冲后的输出将不是电平信号而是脉冲信号。在取样期间,有输出脉冲表示组合电路的输出为“1”,无脉冲则表示输出为“0”。可以通过加数据锁存器的方法消除毛刺。某信码稳定后读至锁存器 ,锁存器在下一个时钟周期将信号输出。输出虽延迟一个时钟周期 ,但是信码序列与时钟的相位关系没有发生变化 ,并且毛刺完全消除 ,信码质量得到提高。如图6所示,从图中可以看出,波形2比波形1滞后一个时钟周期,毛刺已消失。
资源利用问题
1. 使用一个反相器将信号反相后驱动多个负载往往会多占资源,而且延迟也增加了。所以输入信号需要反相 ,但应尽可能地调用输入带反相功能的符号 ,而不是用分离的反相器对输入信号进行