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.