数字中频的基本原理和fpga的实现_第1页
数字中频的基本原理和fpga的实现_第2页
数字中频的基本原理和fpga的实现_第3页
数字中频的基本原理和fpga的实现_第4页
数字中频的基本原理和fpga的实现_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字中频的基本原理和 FPGA 的实现 1基本原理 数字中频主要分两部分,数字上变频(DUC)和数字下变频(DDC)。它们的主要功能是相 反,但原理和实现的方法是十分相似。在 R8905 项目中由于采用了零中频技术,数字上变 频和下变频有一些差别,数字上变频没有了 NCO 模块。另外为了降低输出信号的峰均比 又加入了削峰模块 CFR,而 CGC 模块的引入则是补偿削峰所引起的功率损失。 CPRI接口 处 理 RCF 2倍 内 插 HB2倍 内 插CFR CGC CIC54倍 内 插 3.84M 7.68M 15.36M 61.44M 图 1 数字上变频模块框图 在数字下变频中 RSSI 模块是信号的功率检测模块,它配合 AGC 电路将信号的输出功率稳 定在一定范围内。 N C O C I C 5 4 倍抽取 H B 2 倍抽取 R R C A G C R S S I 6 1 . 4 4 M 1 5 . 3 6 M 7 . 6 8 M c p r i 图 2 数字下变频模块框图 在 DDC 和 DUC 中主要使用 3 种滤波器分别是 RRC,HB 和 CIC,它们个自有个自的特点。 RRC 滤波器一般来讲阶数比较多,多用于低频处。由于它的阶数比较多,所以可以得到比 较锐利的带通特性,但它所用的乘法器比较多。CIC 滤波器不需要乘法器,但它的带内不 是很平坦,适合用在高频处。而 HB 滤波器的特性正好在它们之间,它有约一半的系数是 0 可以讲乘法器的个数减少一半。 削峰模块 CFR 实际上也是一组滤波器,它的功能是将 CDMA 信号中的峰值信号减小 一些,以减小输出信号的峰均比,使射频功率放大器的效率更高。削峰的模块框图如图 3 图 3 单级削峰示意图 削峰的原理是这样的一个复信号(I,Q)如果它的模大于某个门限,就将其减去这个门限得到 一个复信号(dI,dQ),否则(dI,dQ)(0,0) 。将(dI,dQ)送到 fir 滤波器中,fir 滤波器是一个低通 滤波器将峰值限定在一定的带宽内,防止影响临道。将原信号(I,Q)减去滤波后的信号 (fir_i,fir_q)就得到了削峰的值。如果有必要这这样的削峰可以连续做几次,在 R8905 设计 中削峰用了两次。 2 滤波器的设计 由于在滤波的同时还有内插和抽取,所以充分利用这一特性可以减少 FPGA 使用的资 源。另外滤波器的系数一般都是对称的,可以将头和尾的数相加再乘滤波器的系数, 这样可以大大减少乘法器的使用。以 R8905 中的上变频 RRC 为例来说明: 设 a(n)为 RRC 滤波器的系数而 x(n)为 3.84M 输入数据则考虑了内插后的滤波器的数学 表达式为 y=a(0)*x(n)+a(1)*0+a(2)*x(n-1)+.+a(n-1)*0+a(0)*x(0) =a(0)*(x(n)+x(0) +a(2)*( x(n-1)+x(1) 其 FPGA 实现的逻辑框图如下 图 4 DUC RRC 滤波器实现逻辑图 其中使用了 4 个乘法器和四个 RAM 以及一个 ROM 来存数据。RRC_CTR_6144 模块控 制这些乘法器和 ROM。参考代码如下: / / / Date : Sat Jul 21 10:51:51 2007 / / Author : duan chenghong / / Company : zte / / Description : / RRC 滤波器用了 4 个 RAM 和 4 个乘法器完成 IQ 两路的滤波功能, / I,Q 的处理方法完全相同。数据同时写入 4 个 RAM 中,但读的地址不 / 同,由于 RRC 滤波器的系数是对称的所以读 RAM 的地址也是对称的, 将地址 / 对称的 RAM 读出数相加再和 RRC 滤波器系数相成再累加就可以 得到最后的结果 / / module rrc_ctr_6144 (waddr, raddr0, raddr1, raddr2, raddr3, clk, reset, data_en, dat0_out, dat1_out, dat2_out, dat3_out, coef, raddr_coef, ih, il, qh, ql, coef_h, coef_l, mih, mil, mqh, mql, idat, qdat, rrc_en); output 5:0 waddr ; reg 5:0 waddr ; output 5:0 raddr0 ; wire 5:0 raddr0 ; output 5:0 raddr1 ; wire 5:0 raddr1 ; output 5:0 raddr2 ; wire 5:0 raddr2 ; output 5:0 raddr3 ; wire 5:0 raddr3 ; input clk ; wire clk ; input reset ; wire reset ; input data_en ; wire data_en ; input 31:0 dat0_out ; wire 31:0 dat0_out ; input 31:0 dat1_out ; wire 31:0 dat1_out ; input 31:0 dat2_out ; wire 31:0 dat2_out ; input 31:0 dat3_out ; wire 31:0 dat3_out ; input 31:0 coef ; wire 31:0 coef ; output 3:0 raddr_coef ; wire 3:0 raddr_coef ; output 16:0 ih ; reg 16:0 ih ; output 16:0 il ; reg 16:0 il ; output 16:0 qh ; reg 16:0 qh ; output 16:0 ql ; reg 16:0 ql ; output 15:0 coef_h ; wire 15:0 coef_h ; output 15:0 coef_l ; wire 15:0 coef_l ; input 32:0 mih ; wire 32:0 mih ; input 32:0 mil ; wire 32:0 mil ; input 32:0 mqh ; wire 32:0 mqh ; input 32:0 mql ; wire 32:0 mql ; output 15:0 idat ; reg 15:0 idat ; output 15:0 qdat ; reg 15:0 qdat ; output rrc_en ; reg rrc_en ; assign coef_h=coef31:16; assign coef_l=coef15:0; reg 3:0 cnt; always(posedge clk or negedge reset) if(reset) waddr13)+1b1)1; always(posedge clk or negedge reset) if(reset) qdat13)+1b1)1; /产生 I,Q 两路数据并对末位进行四舍五入 endmodule 如果是半带滤波器,考虑到内插 在奇数拍时有 y=a(0)*x(n)+0*0+a(2)*x(n-1)+.+0*0+a(0)*x(0) =a(0)*(x(n)+x(0) +a(2)*( x(n-1)+x(1) 而在偶数拍有 y=a(0)*0+0*x(n-1)+a(2)*0+a(m)x(m)+0.+0; 及只有中间项有数,其他各项不是系数为 0,就是数据为 0,且中间项的系数一般是 0.5,利 用这一点可以减少 FPGA 的资源。 HB 滤波器的设计和 RRC 十分相似,如下图 图 5 HB 滤波器设计框图 而 CIC 滤波器相对简单些,它实际上就是一些加法和一些减法,其设计框图如图 6 所示 图 6 CIC 滤波器设计框图 在 CIC 滤波器中需要注意的是 d1clk 模块,它只是为了调整时序。 3.设计对时序要求的满足: 完成代码设计后除了要保证仿真正确同时也要保证电路的时序能够满足设计的要求。从图 1 可以看到信号的频率随着每一次内插而变高,那各个滤波器的工作时钟是不是也要逐步 提高呢?实际上比较好的方法是时钟始终工作在最高频率 61.44M 上而用使能信号来标识 数据。当数据的速率是 3.84M 时就每 16 个 61.44M 时钟产生一个使能,而当速率是 7.68M 时就每 8 个 61.44M 时钟产生一个使能。这样整个 DUC 电路只有一个时钟,便于时钟的时 序分析。如果我们使用 Xilinx 的 ISE 进行编译,建议综合工具使用 synplify Pro 而不要使用 ISE 本身的 XST。选用 synplify Pro 的方法如图 7 图 7 在 ISE 中选用 synplify Pro 在 ISE 的集成环境中有两个地方可以对时钟进行约束,分别是 synplify Pro 的 sdc 约束文件 和 ISE 的 UCF 约束文件。sdc 文件主要通过改变代码生成的电路来提高速度,而 UCF 通过 布局布线来提高速度,另外用面积约束的方法把相关模块放在一起减少布线延时也可以提 高速度。点击 synplify 界面中红线圈定的图标可以编辑时钟约束文件。 图 8 synplify 中加约束文件 同样在 ISE 中也要加约束文件 图 9 在 ISE 中加约束文件 在 ISE 中可以添加时序约束和面积约束来提高时序。添加约束的时候可以加入一些过 约束,如果你希望时钟可以跑到 10ns,可以将约束设为 89ns。但无论如何良好的代码设计 是电路时序的根本保证。 如果时序不能满足,ISE 的时序分析工具可以帮助你指出最长延时的路径,点击如图 10 所示分析关键可以看到关键路径。 图 10 ISE 时序分析工具 ISE 的时序分析工具清楚的告诉你那条路径时序有问

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论