Zynq搭載ボードの決定版“Eclypse Z7”で始める
高速信号処理システム開発
~100Msps ADC/DACで作る測定器/データ・ロガー/LinuxベースSDR~
[Vol.3. PLによるディジタル・フィルタのサンプル・プロジェクトによる実験]
- 著者・講師:別府 伸耕/Nobuyasu Beppu (リニア・テック)
- 企画編集・主催: ZEPエンジニアリング株式会社
- 関連製品:[VOD/KIT]ARM Cortex-A9&FPGA内蔵SoC Zynqで初体験!オリジナル・プロセッサ開発入門
- 関連製品:[VOD/KIT] 実習キットで一緒に作る!オープンソースCPU RISC-V入門
- 関連製品:[VOD/KIT]Xilinx製FPGAで始めるHDL回路設計入門
- 関連製品:[VOD]Pythonで学ぶ やりなおし数学塾1【微分・積分】
- 関連製品:[VOD]Pythonで学ぶ やりなおし数学塾2【フーリエ解析】
- 関連製品:[VOD]Pythonで学ぶ マクスウェル方程式 【電場編】+【磁場編】
- 関連製品:[VOD/KIT]初めてのソフトウェア無線&信号処理プログラミング 基礎編/応用編
- 関連記事:超長距離無線LoRaからローカル5Gまで!GNU Radio×USRPで作るソフトウェア無線機
- 関連記事:高精度基準搭載&1GSPS広帯域! プロ用USBマルチ測定器 ADP5250誕生
- 関連記事:Pythonではじめる 数値解析入門 [Vol.1 Pythonの開発環境をインストールする]
- 関連記事:Pythonではじめる 数値解析入門 [Vol.2 グラフ描画ライブラリ“Matplotlib”で2次元のグラフを描く]
【Index】
Vol.1 開発環境“Vivado”をインストールしてFPGA(PL)でLチカ
Vol.2 C言語プログラムでZynqの“PS”を動かす実験
Vol.3 PLによるディジタル・フィルタのサンプル・プロジェクトによる実験
Eclypse Z7ボードを使ったディジタル・フィルタの実験をする
Eclypse Z7ボードと高速ADC/DACの組み合わせ
本連載では,Digiletn社製のZynq搭載ボードである“Eclypse Z7”(エクリプス・ゼット・セブン)を利用してディジタル信号処理システムの構築方法を解説します(写真1).Eclypse Z7ボードの詳しい情報はこちらのWebページから入手できます.
Eclypse Z7ボードには,“Zmod ADC 1410”という高速ADCモジュール(写真2)と“Zmod DAC 1411”という高速DACモジュール(写真3)を取り付けることができます.
Eclypse Z7ボードに“Zmod ADC 1410”と“Zmod DAC 1411”を取り付けると写真4のようになります.この状態でEclypse Z7ボードに搭載されているZynqの内部回路(PSおよびPL)を開発すれば,アナログ信号の入出力に対応した独自の高速信号処理システムを作ることができます.
Digilent社から提供されているサンプル・プロジェクトの概要
今回は,Digilent社から提供されている“Eclypse Z7 + Zmod ADC + Zmod DAC”のサンプル・プロジェクトを利用して実験をしてみます.
これから実験する回路の概要を図1に示します.“Zmod ADC 1410”のCH1から入力されたアナログ信号は,Zynq内部のPL部分に作りこまれたディジタル・フィルタの回路(FIR型のローパス・フィルタ)によって処理されます.演算結果は“Zmod DAC 1411”のCH1からアナログ波形として出力されます.また,比較のためにADCから取り込んだ信号をそのままDACのCH2から出力します(ループバック出力).
なお,この実験のリファレンスはこちらのWebページにあります.
Digilent社のリポジトリからプロジェクトをダウンロードする
Digilent社のサンプル・プログラムは“GitHub”で管理されている
Eclypse Z7ボードの開発元であるDigilent社は,多くのサンプル・プログラムを公開しています.これらのサンプル・プログラムは,オンラインのリポジトリ(ファイルの保管場所)を管理するためのWebサービスである“GitHub”(ギット・ハブ)からダウンロードできます.
OSとしてLinuxを使っているパソコンであれば“git”(ギット)コマンドを使って簡単にプロジェクトのダウンロードや更新を行えますが,Windows上でgitコマンドを使うためにはちょっとした準備が必要となります.今回は“Git for Windows”というパッケージをインストールして,そこに含まれる“Git Bash”(ギット・バッシュ)を利用してDigilent社のリポジトリにアクセスすることにします.
“Git for Windows”をインストールする
まずは“Git for Windows”のダウンロード・ページにアクセスして,インストーラをダウンロードします(図2).インストーラ(約47 Mバイト)をダウンロードしたら,ダブル・クリックして起動します(図3).
図4の画面が表示されたら[Next]ボタンをクリックします.続いて表示される図5の画面ではインストール先のディレクトリを指定します.今回はデフォルトのままで[Next]をクリックします.
図6の画面ではインストール内容を適宜選択します.今回はデフォルトのまま[Next]をクリックします.図7の画面ではWindowsスタート・メニューに登録する名称を設定します.これもデフォルトのまま[Next]をクリックします.
図8の画面ではエディタの設定を行います.今回はデフォルトの“Vim”を使う設定にしておきます. 図9の画面では新しいブランチを作成した時の挙動について設定します.ここでもデフォルトの“Let Git decide”を選択して[Next]をクリックします.
図10の画面では,環境変数の設定に関するオプションを選択します.“Git from command line and also from 3rd-party software”を選択して[Next]をクリックします.
図11の画面ではHTTPS(Hypertext Transfer Protocol Secure)による接続の方式について設定します.今回は“Use the OpenSSL libarary”を選択して[Next]をクリックします.
図10 “Git from the command line and also from 3rd-party software”を選択して[Next]をクリックする | 図11 “Use the OpenSSL library”を選択して[Next]をクリックする |
図12の画面では改行コードの設定を行います.今回は“Checkout Windows-style, commit Unix-style line endings”を選択して[Next]をクリックします.
図13の画面ではターミナル・エミュレータの設定を行います.今回はデフォルトの“Use MinTTY”を選択して[Next]をクリックします.
図12 “Checkout Windows-style, commit Unix-style ilne endings”を選択して[Next]をクリックする | 図13 “Use MinTTY”を選択して[Next]をクリックする |
図14の画面では“git pull”コマンドの挙動について設定します.“Default”を選択して[Next]をクリックします.
図15の画面では“credential helper”に関する設定を行います.推奨されている“Git Credential Manager Core”を選択して[Next]をクリックします.
図16の画面では“Enable file system caching”にチェックを入れて[Next]をクリックします.図17の画面で[Install]をクリックすると,インストールが開始されます.
インストールが完了するまでしばらく待ちます(図18).インストールが完了すると図19の画面が表示されるので,“Launch Git Bash”にチェックを入れて[Finish]をクリックします.
図20のように“Git Bash”の起動画面が表示されれば成功です.“Git Bash”を使ってDigilent社のサンプル・プロジェクトをダウンロードする
“Git Bash”は,Windows上でLinuxのコンソールと同様にgitコマンドを使うための環境です.今回はDigilent社がEclypse Z7ボード向けのデモとして用意している“Eclypse Z7 Low Level Zmod ADC DAC Demo”のプロジェクトをGitHubからダウンロードします.なお,今回はサンプル・プロジェクトを「デスクトップ」にダウンロードするものとします.
まずは,Git Bash上で作業ディレクトリをデスクトップに移動するためにリスト1のコマンドを入力します.“~/”はホーム・ディレクトリのパスを表す記号です(“C:/Users/[ユーザ名]/”に相当).
|
---|
リスト1 “Git Bash”上でコマンドを打って作業ディレクトリを「デスクトップ」に移動する |
続いて,リスト2のコマンドを1行ずつ入力します.この一連のコマンドを実行すると,Digilent社が用意しているサンプル・プロジェクトをダウンロードできます.なお,“git branch -a”はブランチを確認するコマンドなので入力しなくても構いません.最終的にデスクトップに“Eclypse-Z7-HW”(約140Mバイト)というディレクトリができれば成功です.
|
---|
リスト2 “Git Bash”上でコマンドを打ってサンプル・プロジェクトをダウンロードする |
“CAfile”に関するエラーが出た場合
“git clone”コマンドを打ったときに“fatal: unable to access [何らかのパス]: error setting certificate verify locations: CAfile: [何らかのパス]”というエラーが出ることがあります.このエラーは,Git Bashの設定ファイルを修正すれば解決できます.
“C:/Users/[ユーザ名]/”のディレクトリの中に“.gitconfig”というファイルがあるので,右クリックして[プログラムから開く] - [メモ帳]をクリックして開きます.“sslcainfo”という変数が定義されている行があるので,そこをリスト3のように変更します.なお,“Git Bash”のインストール先をデフォルト以外の場所に指定した場合は,自分の設定に応じてリスト3のパスを書き換えてください.
|
---|
リスト3 “CAfile”に関するエラーが出た場合は“.gitconfig”ファイルの内容を確認する |
Zynqの内部回路をコンフィグして実験する
Vivadoにサンプル・プロジェクトを取り込む
GitHubからサンプル・プロジェクトをダウンロードできたら,Vivadoに取り込んでみましょう.今回は実験用のディレクトリとして“C:/FPGA_Projects/Xilinx_FPGA/20210309test2”というディレクトリを作り,その中にさきほどダウンロードした“Eclypse-Z7-HW”というディレクトリを保存するものとします.ここから先の内容は,ご自身のディレクトリ構成に合わせて適宜パスを読み替えてください.
まずはVivadoを起動します.起動画面の下部に“Tcl Console”(ティクル・コンソール)という部分があるので(図21),“Type a Tcl command here”と表示されている入力欄にリスト4のTclコマンドを1行ずつ入力します.
|
---|
リスト4 Vivadoの“Tcl Console”に入力するコマンド |
“Tcl”(ティクル)はスクリプト言語の一種で,Tclを使うとVivadoの動作をコントロールすることができます.リスト4の2行目ではTclで記述されたスクリプトである“digilent_vivado_checkout.tcl”を実行しており,このスクリプトによってVivado上にブロック・デザインが作成されます(図22).
問題なくブロック・デザインが生成されたら,ZynqのPLの内部回路を定義するためのビットストリームを作成します.図23に示す“Generate Bitstream”をクリックして,完了するまでしばらく待ちます.
Eclypse Z7ボード上のZynqをコンフィグする
Eclypse Z7ボードに“Zmod ADC 1410”と“Zmod DAC 1411”を取り付けます.写真5のように“ZMOD A”側にADCを取り付け,“ZMOD B”側にDACを取り付けるようにします.
Eclypse Z7ボードとPCをUSBケーブルで接続します.ボード上の“JP5”は写真6のように“JTAG”側にします.以上の準備が完了してからボードの電源を入れてください.
Eclypse Z7ボードをパソコンと接続した状態で,図24に示す“Open Hardware Manager”をクリックします.すると画面上部に図25のような表示が出るので,“Open target”をクリックして“Auto Connect”をクリックします.
問題なくEclypse Z7ボードとの接続が完了すると図26のような表示が出るので,“Program device”をクリックします.続いて表示される図27の画面で[Program]ボタンをクリックすると書き込みが始まるので,完了するまで待ちます.Zynqのコンフィグが完了すると,Zmodボードから「カチッ」というリレーが切り替わる音が聞こえます.
ディジタル・フィルタの動作を確認する
今回は写真7のような測定系で実験を行います.ファンクション・ジェネレータの出力は“Zmod ADC”のCH1に接続します.出力波形はsin波,オフセットは0 V,振幅は500 mVppとしました.
“Zmod DAC”のCH1はオシロスコープのCH1に,“Zmod DAC”のCH2はオシロスコープのCH2にそれぞれ接続します.今回はDACの出力をオシロスコープに直結するので,プローブの電圧減衰率の設定は“x1”(1倍)にしておきます.また,トリガのソースをCH2側に設定しておくことをお勧めします.
今回使用しているファンクション・ジェネレータおよびオシロスコープの端子はBNCコネクタです.一方で,“Zmod ADC”および“Zmod DAC”の端子はSMAコネクタです.これらを接続するために,「SMAケーブル」と「BNC - SMA変換コネクタ」を利用しました.
実験結果を写真8から写真11に示します.入力信号の周波数が10 kHzのときは,ローパス・フィルタの出力(CH1)とループバック出力(CH2)の振幅はほとんど同じです(写真8).
周波数を20 kHzにすると少しだけローパス・フィルタの出力(CH1)の振幅が小さくなります(写真9).
50 kHzだとさらに振幅が小さくなり(写真10),100 kHzにすると振幅はほとんどゼロになります(写真11).このことから,問題なくローパス・フィルタとして機能していることが確認できます.
今回のサンプル・プロジェクトで定義されているローパス・フィルタのカットオフ周波数は20 kHz程度なので,低周波アナログ信号向けのシステムであると考えられます.“Zmod ADC”および“Zmod DAC”のサンプリング・レートは100 Mspsなので,これよりも桁違いに周波数が大きい信号であっても問題なく扱えます.また,入力にダウン・コンバート用のミキサを取り付ければRF帯の信号にも対応できます.
なお,ADC/DACのサンプリング・レートとアナログ回路としての性能(アナログ帯域幅)は独立して定まるパラメータなので,高周波信号を扱うときはデータシートをよく確認しておくことをお勧めします.