Maxim设计了一个容易实现的CDMA基带调制发生器用于对其蜂窝手机发射通道中的各种产品进行电路评估。此设计包含一个高密度的可编程逻辑器件、一个晶体振荡器和一对匹配的低通滤波器提供所需的正交输出波形。由复杂可编程逻辑器件(CPLD)实现的数字电路是基于IS95标准的。使用4.9152MHz晶振驱动CY37256 CPLD产生1.2288MHz的数字信号输出,可以为输出低通滤波器提供精确的I/Q (同相和正交)比特流。测量MAX2361发射机IC的ACPR,将结果与使用Agilent E4433B任意波形发生器作为参考信号源时观察到的ACPR进行比较就可以证实波形发生系统的性能。使用上述两种方案的ACPR试验室测量结果的一致程度保持在0.5dB以内。
概述
Maxim设计了一个容易实现的CDMA基带调制发生器用于对其蜂窝手机发射通道中的各种产品进行电路评估。此设计包含一个高密度的可编程逻辑器件、一个晶体振荡器和一对匹配的低通滤波器提供所需的正交输出波形。由复杂可编程逻辑器件(CPLD)实现的数字电路是基于IS95标准的。使用4.9152MHz晶振驱动CY37256 CPLD产生1.2288MHz的数字信号输出,可以给输出低通滤波器提供精确的I/Q (同相和正交)比特流。测量MAX2361发射机IC的ACPR,将结果与使用Agilent E4433B任意波形发生器作为参考信号源时观察到的ACPR进行比较就可以证实波形发生系统的性能。使用上述两种方案的ACPR试验室测量结果的一致程度保持在0.5dB以内。
本文提供了CDMA反向链路波形发生器的数字部分,描述了设计中的一些问题及解决方法。
数字系统描述
标准的CDMA信号发生器
图1所示为CDMA反向信道发生器的框图。
CDMA发生器由以下几个部分组成:
数字数据源。在蜂窝电话中为话音编码数据。
编码和交织(interleaving)功能部分。
Walsh码发生器。
最大长度的42位长PN (伪噪声)发生器,所谓“长码”的标准即参照此处。
3个模2的混频器或者异或门。
两个“短码”,15位PN最大长度移位寄存器。
一个1/2码片延时,等于(813.8ns / 2)即406.9ns。
一对匹配的有限冲击响应(FIR)低通滤波器。
图1. 标准的CDMA反向链路发生器
对设计进行简化
为了进行实际测量,对编码进行一些简化。由于对频谱的影响很小,删除与前向纠错(FEC)和交织部分有关的模块。为了模拟CELP编解码数据源,使用7位最大PN发生器。
使用42位最大长度移位寄存器长码实现31位的长PN码。这样作是为了保留CPLD中的寄存器并使设计的验证更加迅速。42位PN发生器,以1.2288MHz的速度移位一周需要约三百六十万秒。 (简单的计算一下就可发现测试装置必须连续41天无干扰地工作!)。提高验证42位PN发生器速度的一个方法是加快时钟的速度。即使时钟为20MHz,完成一周的验证仍然要花费2.5天。使用31位的PN码,在20MHz时钟下运行时间将小于两分钟,这个时间对测试来说比较合理。
用简单的基于电感、电容的无源滤波器取代输出端的数字(FIR)低通滤波器。本文不讨论这些滤波器的复杂性和重要性,但是可以告诉那些对此感兴趣的读者,设计中使用的是带有相位均衡的600kHz 7阶椭圆低通滤波器。其性能关键点是,740kHz衰减为-45dBc,881kHz及更高频率的衰减为-65dBc。发射频谱的带宽、滚降速率以及受此影响的观察到的ACPR与这些滤波器的品质有直接的联系。
图2所示为本项目中使用的简化的框图。
图2. 最后实现的CDMA反向链路发生器
设计中的细节问题
本文不试图把设计和实现中的每一个细节都呈现出来。用几个关键的部分来说明设计技术和解决方案。我们并不想把读者都变成Verilog专家。
Walsh码发生器
Walsh码发生器在文献中通常用矩阵符号表示:
等式1.
建立Walsh向量时假设初始矩阵为W1 = 0。等式中Walsh矩阵右下角区域带有一个横杠的Wn表示矩阵中的每一位都逻辑取反。Walsh矩阵中的每一行都能用一些异或门和一个6位的计数器产生。在观察到这一点之前,使用Verilog代码并在CPLD中产生Walsh矩阵似乎是一件令人生畏的事情。将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具有逻辑门 -> 寄存器的规则结构,Verilog代码如果遵循同样的结构将有利于高效地对应到CPLD中。这样,工程师就能支配整个综合处理的过程。如果忽略了这一点,在Verilog代码中使用了多级异步逻辑,CPLD装配器将使逻辑迅速膨胀并很快超过目标CPLD的容量,在实现异或功能时尤其如此。这里用Verilog代码描述的Walsh码发生器通过中间寄存器使用流水线技术实现异或功能,执行过程非常紧凑。
Walsh码发生器Verilog代码还体现了可靠性设计的多个要点。在每一个"always ?"部分的开始都进行一次复位条件的测试,所有相关的寄存器根据需要调整或清零。这种总是以一个已知的状态开始工作的方法是一种已被证实的用来实现可靠工作的技术。代码中还使用了单独的部分实现6位计数器,另一部分用来创造异或逻辑以选择正确的Walsh向量作为输出。最后,注意如何使用注释,在Verilog中以//符号标识。
PN发生器
CDMA发生器使用4个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代码为:
module i_code_s( clock, resetn, i_code_out); | ||
// Generate the 15-bit PN code using the polynomial | ||
// x15 + x13 + x9 + x8 + x7 + x5 + 1 |
input clock, resetn; | ||
output i_code_out; | ||
reg [15:1]pi; | ||
always ?(posedge clock or negedge resetn) | ||
if(!resetn) | ||
begin | ||
pi <= 15';b111111111111111; // init the shift register with ones | ||
end | ||
else | ||
begin // here starts the modular shift register | ||
pi[1] <= pi[15]; | ||
pi[5:2] <= pi[4:1] ; | ||
pi[6] <= pi[5] ^ pi[15]; | ||
pi[7] <= pi[6]; | ||
pi[8] <= pi[7] ^ pi[15]; | ||
pi[9] <= pi[8] ^ pi[15]; | ||
pi[10] <= pi[9] ^ pi[15]; | ||
pi[13:11] <= pi[12:10]; | ||
pi[14] <= pi[13] ^ pi[15]; | ||
pi[15] <= pi[14]; | ||
end | ||
assign i_code_out = pi[15]; | ||
endmodule |
这一实现只用了5个EXOR结构,而一个完全的模块化实现需要14个EXOR结构。这展示了如何用Verilog仅对所需的逻辑进行合成。
在此需要指出另外两点,最大长度PN发生器不允许在移位寄存器中出现表示只有恒定的低状态输出的全零。一个健全的设计应该包括全零探测逻辑并在需要的时候插入一个“1”。
需要注意的另一点是,最大长度PN发生器在整个序列0的个数和1的个数之间实现了几乎完美的平衡。1的个数比0的个数多1个。这将产生一个小的DC偏移,它有可能扰乱无线装置中混频器或调制器的工作。标准的CDMA在序列中插入一个额外的0状态强制实现DC平衡以保持调制器的正常工作。
图4. CDMA发生器原理图
图4中没有给出支持编程的电路内部细节。这个额外的小电路安装在10引脚的连接头上,使用特殊的电缆连接到PC机的并行的打印端口。在基于Windows®的PC机上运行Cypress Semiconductor的特殊软件,将比特配置文件下载到CY37256中。这是实现数字系统的有力手段。它可以快速地发现代码中的错误,对CPLD进行在线重新编程也很简单,可以很快恢复测试。
结果
使用包括输出低通滤波器在内的整个CDMA反向链路发生器测试MAX2361在CDMA应用中的ACPR,用Agilent E4433B作为CDMA基带I/Q信号源进行同样的测试。由两种不同的信号源得到的ACPR结果非常接近;差别在±0.5dB以内。在此,不能对输出滤波器对ACPR测试结果的重要性进行详细阐述,这将是另一篇应用笔记的主题。
参考文献与资料来源
R.C. Dixon, Spread Spectrum Systems. New York: John Wiley & Sons, 1976 David P. Whipple, "North American Cellular CDMA", Hewlett-Packard Journal, December 1993, pp. 90-97 Ken Coffman, Real World FPGA Design with Verilog. Upper Saddle River: Prentice Hall PTR, 1999, ISBN 0-13-099851-6 Samir Palnitkar, Verilog HDL, A Guide to Digital Design and Synthesis Sunsoft Press/Prentice Hall, 1996, ISBN 0-13-451675-3 Special thanks to Lane Hauck at Cypress Semiconductor for his advice and guidance in learning Verilog and the nuances of CPLD design. Special thanks for Dave Devries of Maxim Integrated for his collaboration and certain key insights during this project.