Maxim设计了一种易于构建的CDMA基带调制发生器,用于对设计到蜂窝手机发射路径中的各种产品进行电路评估。该设计结合了高密度可编程逻辑器件、晶体振荡器和一对匹配的低通滤波器,以提供所需的正交输出波形。复杂可编程逻辑器件(CPLD)中的数字电路基于IS95标准。4.9152MHz晶体振荡器驱动CY37256 CPLD产生1.2288MHz数字输出,从而为输出低通滤波器提供精确的I/Q(同相和正交)比特流。通过在MAX2361发送器IC上测量ACPR,并将结果与使用安捷伦E4433B任意波形发生器作为参考信号源观察到的ACPR进行比较,证实了性能。实验室测量的ACPR被发现在0.5dB以内一致。
本应用笔记介绍了CDMA反向链路波形发生器的数字部分,并描述了一些设计问题及其处理方式。
介绍
Maxim设计了一种易于构建的CDMA基带调制发生器,用于对设计到蜂窝手机发射路径中的各种产品进行电路评估。该设计结合了高密度可编程逻辑器件、晶体振荡器和一对匹配的低通滤波器,以提供所需的正交输出波形。复杂可编程逻辑器件(CPLD)中的数字电路基于IS95标准。4.9152MHz晶体振荡器驱动CY37256 CPLD产生1.2288MHz数字输出,从而为输出低通滤波器提供精确的I/Q(同相和正交)比特流。通过在MAX2361发送器IC上测量ACPR,并将结果与使用安捷伦E4433B任意波形发生器作为参考信号源观察到的ACPR进行比较,证实了性能。实验室测量的ACPR被发现在0.5dB以内一致。
本应用笔记介绍了CDMA反向链路波形发生器的数字部分,并描述了一些设计问题及其处理方式。
数字系统说明
教科书CDMA发生器
图1显示了CDMA反向通道发生器的框图。CDMA发生器由以下项目组成:
数字数据源。在手机中,这是编码的语音数据。
编码和交错函数。
沃尔什代码生成器。
最大长度的 42 位长 PN(伪噪声)发生器,此处称为“长代码”。
3 个模二混频器或专用 OR 门。
两个“短代码”、15 位 PN 最大长度移位寄存器。
半个芯片延迟,等于(813.8ns / 2)或406.9ns。
一对匹配的有限脉冲响应 (FIR) 低通滤波器。
图1.教科书CDMA反向链接生成器。
这项工作中采取的捷径
出于实际测量目的,可以简化一些编码。消除了与前向纠错(FEC)和交错相关的模块,因为它们对频谱的贡献很小。为了模拟 CELP 编解码器数据源,使用了 7 位最大 PN 生成器。
42位长代码被实现为31位长PN,最大长度移位寄存器。采取这一步骤是为了在CPLD中保留寄存器,并使设计验证更快。以 42.1MHz 移动的 2288 位 PN 发生器重复该周期需要 ~3 万秒。(这里的简单计算将揭示您的测试台必须保持6天不受干扰!加快 41 位 PN 发生器验证速度的一种方法是更快地运行时钟。即使时钟以42MHz运行,周期重复仍然需要20.2天。以5MHz运行的31位PN代码将在不到20分钟的时间内重复,这是一个更合理的测试时间。
输出端的数字(FIR)低通滤波器被简单的电感和电容无源滤波器所取代。本应用重点介绍了这些滤波器的复杂性和重要性,但对于那些感兴趣的人,该设计被实现为7kHz的600阶椭圆低通,并带有相位均衡器部分。关键性能点设置为45kHz时的-740dBc和65kHz及以上的-881dBc。发射频谱的带宽、滚降速率以及观察到的最终ACPR与这些滤波器的质量直接相关。
图 2 显示了在此工作中实现的简短框图。
图2.实现了CDMA反向链路生成器。
设计细节
本应用笔记不会试图介绍设计和实现的每个细节。相反,将使用一些关键模块来说明设计技术和解决方案。这不是将读者转化为Verilog专家的意图。
沃尔什代码生成器
沃尔什代码生成器通常在文献中使用矩阵表示法进行描述。
(公式1) |
沃尔什向量的构造假设起始种子为 W1= 0。沃尔什矩阵的右下角区域,在公式1中由W表示n顶部有一个条形,表示矩阵中每个条目的按位逻辑反转。Walsh 矩阵中的每一行都可以使用一些独占或门和一个六位计数器生成。在进行此观察之前,Walsh矩阵似乎是一个令人生畏的模块,可以使用Verilog代码生成并适合CPLD。此处包含的 Verilog 代码列表仅作为示例提供。
module walsh( clk, resetn, select, wout); | ||
//Walsh code generator. Selects one out of N = 64. | ||
input clk, resetn; | ||
input [5:0]select; // vector to select which walsh code is generated | ||
output wout; | ||
reg [5:0] cntval; | ||
// intermediate terms to keep output exor size small. | ||
reg [5:0] p ; | ||
reg t01, t23, t45; // these registers are used to pipeline the EXOR section | ||
reg s0, s1; // more pipeline registers for EXOR | ||
always ? (negedge resetn or posedge clk) | ||
begin | ||
if(!resetn) // Is it time to reset?? | ||
begin | ||
cntval <= 0; // initialize the counter register | ||
end | ||
else | ||
begin | ||
cntval <= cntval + 1; //Warp does an efficient job implementing this. | ||
end | ||
end | ||
always ? (negedge resetn or posedge clk) | ||
begin | ||
if(!resetn) // Is it time to reset?? | ||
begin | ||
p[5:0] <= 0; // initialize all registers associated with this section. | ||
t01 <= 0; | ||
t23 <= 0; | ||
t45 <= 0; | ||
s0 <= 0; | ||
s1 <= 0; | ||
end | ||
else | ||
begin | ||
p <= cntval & select ; | ||
t01 <= p[0] ^ p[1] ; // the ^ symbol is the exclusive OR operation. | ||
t23 <= p[2] ^ p[3] ; | ||
t45 <= p[4] ^ p[5] ; | ||
s0 <= t01 ^ t23; | ||
s1 <= t45; | ||
end | ||
end | ||
assign wout = s0 ^ s1 ; // a last bit of async. Logic to generate the final output | ||
endmodule |
在上面的 Verilog 代码中,请注意为构建操作并尽可能使用同步逻辑而采取的预防措施。同步建模技术的使用在两个方面有助于设计:
亚稳态条件最小化。
逻辑有效地映射到 CPLD 架构中。
要使用现代硬件描述语言执行数字设计,必须始终牢记目标硬件。由于大多数CPLD具有由LOGIC GATES-> REGISTER组成的常规结构,因此如果Verilog代码遵循相同的结构,则可以有效地映射到CPLD。通过这种方式,工程师可以指导合成引擎。如果忽略这一点,并且 Verilog 代码中隐含了许多级别的异步逻辑,CPLD 拟合器将扩展逻辑并迅速超过目标 CPLD 的容量。对于独占 OR 函数尤其如此。此Verilog代码描述的Walsh代码生成器使用中间寄存器管道独占OR函数,从而提供了非常紧凑的实现。
Walsh生成器Verilog代码还说明了可靠设计的几个关键点。在每个“总是?”部分的开头,对复位条件进行测试,然后根据需要预设或清除所有相关寄存器。始终以已知状态启动是一种经过验证的设计技术,可实现可靠运行。还说明了实现 6 位计数器的单独部分,以及用于创建独占 OR 逻辑以选择要输出的正确 Walsh 向量的部分。最后,请注意注释的使用,在 Verilog 中由 // 符号显示。
PN 发生器
CDMA 发生器采用四个 PN 发生器。实现最大长度码移寄存器有两种基本方法:简单反馈样式和模块化样式。(见图3)
图3.简单和模块化PN发生器的示例。
简单的PN发生器可以接受在码速率(芯片)比所采用的逻辑更慢且反馈抽头数量较少的情况下使用。随着抽头数量的增加,简单的方法开始显示出局限性,因为通过多级异步逻辑的延迟继续串联增加并限制可以使用的最大时钟速度。本设计中,简单的PN发生器用于模拟随机数据,时钟频率为4.8kHz。
模块化PN发生器使用更多的逻辑门,因为EXOR操作在线性寄存器的每一级并行执行。在CPLD实现中,惩罚并不太严重,因为Verilog代码被编写为在需要时使用EXOR结构,而在其他地方使用简单的D类型触发器。
此设计中使用的 CDMA 特定多项式包括:
短代码 I:
I(X):= X15+ X13+ X9+X8+ X7+ X5+ 1
短代码 Q:
Q(X):= X15+ X12+ X11+ X10+ X6+ X5+ X4+ X3+ 1
长代码:
LC(X):= X42+ X35+ X33+ X31+ X27+ X26+ X25+ X22+ X21+ X19+ X18+ X17+ X16+ X10+ X7+ X6+ X5+ X3+ X2+ X1+ 1
用于实现短 I 代码的 Verilog 代码如下:
模块i_code_s(时钟、复位、i_code_out); | ||
使用多项式生成 15 位 PN 代码 | ||
x15+ x13+ x9+ x8+ x7+ x5+ 1 | ||
输入时钟,复位; | ||
输出i_code_out; | ||
注册 [15:1]pi; |
全部0条评论
快来发表一下你的评论吧 !