琉球大学工学部情報工学科 和田 知久
今回は携帯電話の通信方式として用いられている、Code Division Multiple Access (CDMA)方式を用いたデジタル通信の受信機の設計を行います。とは言え、学生レベル対象のデザイン・コンテストですので、小さめの規模のデジタル設計を念頭に置き、各個人ごとに色々な工夫ができるように、実現方法には自由度をある程度与えています。
要求されている設計内容はHDL(VHDLもしくはVerilogHDL)による設計と論理合成です。特にシノプシス社の合成ツールを使用する必要はなく、FPGA等の合成ツールでも参加できます。HDL設計に興味のある学生はどしどし参加してください。また、余裕のある方はFPGA等で実装すれば、努力を認めて高い評価が得られると思います。FPGA等での実装もぜひトライしてみてください。
それでは、CDMA方式の説明は後ほど行うとして、今回設計するCDMA方式受信機の概要を説明します。
図1 CDMA通信システム
図1に今回の設計のデジタル通信システムを示します。システムは大きく分けて、送信機(Transmitter)と受信機(Receiver)に分かれます。今回の設計対象は受信機(Receiver)です。送信機は、ch1/ch2/ch3の3つのデジタルの入力を同時に受け、それら3つの入力をCDMAの方式にてを混合し、出力します。受信機ではその混合信号を受信し、その受信信号から所望のチャネルの信号を取り出します。
現実の通信システムでは、送信機(Transmitter)出力をミキサーを用いて所望の周波数帯に変調して送信したり、実際の送信信号はアナログ信号であったりしますが、今回の設計課題では簡単のため、そのような周波数変調や、アナログ信号は使用しません。したがって、図1に示すシステムをすべてデジタルで設計します。
また、通常は送信側と受信側には同一クロック信号は用いることはできず、受信側でクロック再生(Clock Recovery)をする必要がありますが、今回は同期の取れたクロックが与えられたこととします。
CDMAはスペクトル拡散というような技術を用いるわけですが、今回の課題ではそのようなスペクトル拡散の知識がなくても設計できるように、以下の仕様書で工夫をしています。設計すべきことは比較的単純ですので、デジタル設計の知識のある学生は自信を持って、課題に取り組んでください。
CDMAを和訳すれば符号分割多重ということになります。多重というのは、複数のデータが1つの通信回線に載せられていることであり、図1の太い矢印付の線で示された通信路に対応します。今回は、多重化されたデータを受信機にて分解し、所望のデータを受け取る必要があります。
すなわち、混ざったものから所望のものを取り出す作業が必要です。CDMAではこの分離のためにある符号を用います。現実のCDMAでの符号はPN(Pseudo Noise、擬ノイズ)符号が用いられ、これは0と1がランダムにほぼ同数回現れる系列です。
以下に、7つの0もしくは1からなるPN系列を例としてPN符号の特徴を説明します。
1 | 1 | 1 | 0 | 1 | 0 | 0 |
で示される長さ7のシーケンスを考える。これを時間方向の波としてプロットすると、図2のようになります。
図2 あるPNコードの時間波形
このPN系列とこのPN系列を時間方向にずらした(シフトした)波形の似ている程度を比較します。図3は元PNコードとこれを時間方向に2単位シフトした波形をです。
図3 2波形の比較
この2つの波形の似ている程度を評価するのが相関(correlation)です。相関は以下の式で定義されます。
相関値(correlation) = 一致した符合の数 − 不一致の符号の数
そうすれば、図3の2波形の相関値は−1となり、0に近い小さな値となります。これはこの2波形が似ていない(相関が小さい)ことを意味します。以下の表にこの相関特性をまとめます。元のPN符号とまったく同じ波形である 時間シフト0もしくは7の符号だけが大きな相関値7となり、他はすべて−1という小さな値になっています。
時間シフト量 | PN符号 | 元のコードと一致する数 | 不一致の数 | 相関(一致数 − 不一致数) | ||||||
0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 7 | 0 | 7 |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 3 | 4 | −1 |
2 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 3 | 4 | −1 |
3 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 3 | 4 | −1 |
4 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 3 | 4 | −1 |
5 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 3 | 4 | −1 |
6 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 3 | 4 | −1 |
7 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 7 | 0 | 7 |
次に元PN系列とそのPN系列の0と1を反転させた系列との相関を考えます。図4に元PN系列と反転したPN系列を示します。
図4 反転波形との比較
この2つの波形の相関はすべての符号が一致しないので、相関値は−7という負の大きな値となります。
以上の性質より、1ビットの情報すなわち、1もしくは0を送信する時場合、’0’の意味で元PNコード(PN1)を送信し、’1’の意味で反転させたPNコードを送る。
同時に同じ伝送路に元のPNコードをシフトした別のPNコード(PN2)を用いて、’0’の意味でそのPNコード(PN2)を送信し、’1’の意味で反転したPNコードを送る。
送信路では上記複数の波形が加算され混じってしまうが、受信波形(PN1とPN2の加算)とたとえばPN1との相関をとれば、PN1とPN2の相関は小さいので、PN1とPN1の相関が出てくる。この相関値が正の大きな値であれば、’0’の情報であり、負の大きな値であれば’1’の情報であることがわかります。
次のセクションでは具体的な例を示します。
以下に具体的な例をあげて説明します。例としては系列長7のPN符号3種類を用いて、データを伝送をします。
図5 CDMA通信の簡単な例
図5に示すように、PN code1={0111001}、PN code2={1011100}、PN code3={0101110}なる3種類のコードを用いて、それぞれのコードに対してData"1"、Data"0"、Data"1"を送信します。各PN codeはDataとEXOR(排他的論理和)され、Dataが’1’の時には各PNコードは反転します。
これらのコードを加算し、結果的に送信路には{3021211}なる信号が送信されます。
受信側では{3021211}なる系列が受信され、それとPN code2との相関を取ります。具体的にはPN codeのなかの’0’を’−1’と読み直して系列をベクトルと考えて内積を取ることになります。この結果が正の大きめの値であれば、PN code2で送られた送信データは’0’であり、負の大きめの値であれば、送信データは’1’と判断されます。
上記の例ではPNコード長が7と短いので、内積の結果にはっきりとした相関が出にくいことが確認できています。
したがって、実際のデザインコンテストの課題ではPNコード長127という長めのコードを用います。
今回上記計算をベクトルの内積ということで説明しましたが、信号処理の計算としては畳み込み(コンボルーション)であり、またマッチド・フィルターというフィルターの処理に対応します。
今回設計するシステム構成を以下に示します。大きく分けて、送信機(Transmitter)と受信機(Receiver)の2つのユニットに分かれるますが、設計してもらうのは受信機であり、送信機のHDLコードは後ほど示します。
図6 システム構成
(送信機の簡単な動作説明)
送信機にはコード長127の3種類(CH1/CH2/CH3)のPN符号発生器と、3種類の送信データ生成器が内臓されており、”[2]具体的なCDMA通信の例”で説明したように、各PN符号発生器出力と各送信データのEXORを取った後、この3つの信号を加算してTXOUTに2ビット幅の送信データとして出力します。3つの信号の加算であり、最大2ビット幅となります。
送信データTXOUT出力はCLOCK信号に同期して出力され、PN符号長が127であるので、127サイクルで各PNコードに対して1ビットのデータが送信されることになります。
127サイクルのPN符号の先頭位置を示すために、同期信号SYNCOUTが出力されます。
送信機のVHDL記述とそれを検証するためのテストベンチのVHDL記述を以下に与えます。
本記述ではCH1{01010101}、CH2{00110011}、CH3{00001111}の繰り返し信号が送信されます。
送信機のVHDL記述: transmitter.vhd
送信機をテストするVHDL記述: test_tx.vhd
(受信機の簡単な動作説明)
受信機では送信機からの2ビット信号がRVINに入力されます。この受信信号はCH1/CH2/CH3の3つの信号がCDMAの方式で混合されているので、2ビットのCHANNEL入力の値にしたがって、CH1/CH2/CH3のうちの1つのチャネルのデータを取り出し、DOUTピンへそのデータを出力します。CHANNEL=00は不使用、01はCH1、10はCH2、11はCH3とします。
また、受信機は同期信号入力SYNCINにより、127長の符号の先頭位置を知ることができ、この先頭位置より127の送信データを受信し、それに対してチャネル入力対応するPNコードを発生し、内積の計算を行います。そその結果が正の大きな値になれば、送信データは’0’であり、負の大きな値になれば送信データは’1’であることが判り、その結果をデータ出力ピンDOUTに出力します。
今回の課題ではこの内積の大きさの判断値を40とします。40を超えた場合、送信データは’0’、−40より小さい場合は送信データは’1’と判断します。
送信機および受信機のピンアサインをTable1に示します。
Transmitter | Receiver | |||||||
信号名 | 入出力 | ビット幅 | 説明 | 信号名 | 入出力 | ビット幅 | 説明 | |
CLK | IN | 1 | クロック信号 | CLK | IN | 1 | クロック信号 | |
RESET | IN | 1 | ’1’でリセット | RESET | IN | 1 | ’1’でリセット | |
TXOUT | OUT | 2 | 送信信号 | RVIN | IN | 2 | 受信信号 | |
SYNCOUT | OUT | 1 | 同期信号 | SYNCIN | IN | 1 | 同期信号 | |
CHANNEL | IN | 2 | チャネル選択、00:不使用、 01:CH1、10:CH2、11:CH3 |
|||||
DOUT | OUT | 1 | 選択チャネルデータ出力 | |||||
VALID | OUT | 1 | データ出力が確定時に’1’ |
Table1 ピンアサイン
図7 動作波形図
図7に動作波形を示します。RESETが解除された後に、TRANSMITTERよりTXOUTにデータの出力が開始されます。課題では127の長さのPN符号を用いますので、127サイクルで1つのデータ送信期間となります。このデータ送信期間を示すために、同期信号SYNCOUTも同時に図のように出力されます。
RECEIVERではこの127個のデータと、受信しようとするチャネルに対応するPN系列とのベクトルの内積計算をやります。たとえば、
RVINで受信されたデータの系列が以下のようであったとする
{3,0,1,2,0,3,1,1,2,3,2,1,0,1,2, … }
受信しようとするチャネルのPN系列が以下のようであったとする
{1,1,1,1,1,1,1,0,1,1,1,0,1,1,0, … }
そうすると、PN系列の’0’は’−1’と読み替えて内積を計算すると、
3+0+1+2+0+3+1-1+2+3+2-1+0+1-2+ …
となる。
この結果が>40ならば、受信データは’0’であり、<−40ならば受信データは’1’と判断し、DOUTにデータを出力するとともに、VALIDを’1’とする。−40<=結果<=40ならば、VALIDを’0’とする。
この結果、127サイクルごとにRECEIVERはDOUTに受信データを出力し、VALIDに’1’を出力します。
VALIDが’1’でない時は、DOUTはHiZもしくは’0’を出力します。
この時、図7ではRVINの入力後の直後(レイテンシ=1)にDOUTが出力されますが、これは数段のパイプライン計算でもよく、レイテンシを1に固定する必要はありません。
127の符号長をもつ各チャネルに対するPN符号を以下のファイルに与えます。
また、これらのPN符号はリニア・フィードバック・シフトレジスタにより生成することができ、それらの回路図を以下に示します。ここですべてのDフリップフロップの初期値は’1’です。したがって、3種類のPN符号のどれをみても最初の7つの出力はすべて’1’となっています。
図8 3種類にPN符号生成回路
(初心者用)
上記課題でそんなに設計困難度は高くありませんが、初心者向きに受信できるチャネルをCH1だけに特化したものを初心者用課題とします。ピン配置は以下のようになります。チャネル選択が不必要ですので、CHANNEL入力がなくなっています。
Receiver | |||
信号名 | 入出力 | ビット幅 | 説明 |
CLK | IN | 1 | クロック信号 |
RESET | IN | 1 | ’1’でリセット |
RVIN | IN | 2 | 受信信号 |
SYNCIN | IN | 1 | 同期信号 |
DOUT | OUT | 1 | 選択チャネルデータ出力 |
VALID | OUT | 1 | データ出力が確定時に’1’ |
Table2 初心者用課題の ピンアサイン
(上級者用)
上記課題では同期信号SYNCINが与えられているので、設計は非常に簡単ですが、上級者用として同期信号のないものを課題とします。したがって、PN符号の時間的な開始位置が不明なので、
「内積の大きさの判断値を40とします。40を超えた場合、送信データは’0’、−40より小さい場合は送信データは’1’と判断します。」
という内積値の判断値を満たすような同期タイミングを自分で見つけ出す必要があります。
Receiver | |||
信号名 | 入出力 | ビット幅 | 説明 |
CLK | IN | 1 | クロック信号 |
RESET | IN | 1 | ’1’でリセット |
RVIN | IN | 2 | 受信信号 |
CHANNEL | IN | 2 | チャネル選択、00:不使用、 01:CH1、10:CH2、11:CH3 |
DOUT | OUT | 1 | 選択チャネルデータ出力 |
VALID | OUT | 1 | データ出力が確定時に’1’ |
Table3 上級者用課題のピンアサイン
(その他のバリエーション)
その他のバリエーションとして、3チャンネルの内の1つだけを出力するのではなく、3つのチャネルを同時にデコードし出力するようなスペック変更を行ってもOKです。但し、変更することで回路的/アーキテクチャー的に面白みがないと、高い評価は得られないかも知れません。。。
図7では127のデータ入力後の直後にDOUTが出力されますが(レイテンシ=1)、レイテンシは1に固定する必要はありません。何段かのパイプラインを用いてもOKです。
(参考資料)
下記のような資料を参考に、色々とバリエーションを考えてオリジナリティを出してみて下さい。(九州工大 尾知先生の推薦!)
東京電気大出版、山内著、スペクトル拡散通信
CQ出版社、Interface、2000年2月号 「スペクトル拡散技術とCDMA通信技術の基礎」
琉球大学以外からの参加の場合、同一のシノプシスデザインコンパイラの論理合成用ライブラリを使用することが困難であるので、以下のような多段EXOR回路を例に従って合成し最適化して頂き、その1段あたりの遅延時間を単位時間としてスピードの単位とする。
多段EXOR回路のVHDLソース例:50入力のEXOR回路
この例では6段のEXOR段が合成され、クリティカルパス遅延はreport_timingコマンドにより7.17であったので、7.17/6=1.195を単位(UNIT)とする。
例えば、ある遅延が20ならば、20/1.195=17.74UNIT遅延とする。
琉大情報のライブラリ使用者は上記値で換算で換算すればよい。
ちなみに面積はreport_areaコマンドのtotal cell areaにある。
レポートには以下の内容を含めること。また、ページ数を少なめにコンパクトにまとめること。
表紙 | 1 | 代表者の氏名、チーム名、大学院修士/大学学部生/高専生の区別 |
2 | 共同設計者全員の名前(最高3名まで)、学籍番号、学年、学校名、住所、電話、email等連絡先 | |
3 | 全員のTシャツの希望サイズ | |
4 | 取り組んだ課題(初心者用/標準レベル/上級者用) | |
内容 | 1 | 設計した回路ブロックの構成説明(ブロック図と説明) |
2 | 設計した回路ブロックの動作説明(動作波形図やパイプライン動作等の説明) | |
3 | 工夫した点、オリジナリティを出した点(アピールが重要!) | |
4 | クリティカルパスのスピード、論理合成後の回路規模 | |
5 | VHDLもしくはVerilogのコード | |
6 | 正常動作しているVHDL/Verilogシミュレーション波形 | |
7 | その他自由意見など |
レポートはPDFファイルにて下記にEMAILにて提出すること!
他の形式での提出希望あれば、相談してください。
締め切りは2001年2月16日(金)必着です。
ENJOY HDL! 沖縄で会おう!