2017年12月23日土曜日

高速DAC基板の出力スペクトラム測定、旧いスペアナの位相雑音特性がよい理由とは

以前のFMトランスミッタのポーティング作業が捗ったことに気をよくして、関心は別のプロジェクトに移っています。そこでAD9717を使った基板のデータが散逸する前に纏めておくことにします。わずか1ヶ月前のことなのに、どういう測定データだったっけ?と思い出しながらの作業になりました。

まずは、中心周波数10MHzでFMステレオのパイロット信号のみでFM変調を掛けたところです。それらしい波形ですが、キャリアの裾野がノイズっぽく見えます。


前作の波形と比較すると一目瞭然です。上の波形はRBW 30Hzまで絞り込んでいますがまったく追いつけていません。ひょっとしてノイズが乗りまくっているのでは??


それではDDSで10MHzのCW信号をつくり、位相雑音測定機能でダメっぷりを確認してみます。



DDSクロック信号77.824MHzは、セイコーエプソンのSPXO SG-210STF 12.228MHzとSi5338で生成しています。SPXOの位相雑音は良いはずなのでSi5338の性能に制約を受けているのか?それにしても期待より10dBほど悪く見えるから実装の問題、それとも測定系の限界なのか?疑心暗鬼が続きます。

そこで、位相雑音が低そうな他の信号と比較して基板が悪いのか、それとも測定系の限界なのかを切り分けることにしました。
次の波形は、ルビジウム発振器LPRO-101です。100kHzまでの範囲ではDDS出力と概ね同じです。他にも高品質そうなSPXOとも比較しましたが同じ傾向です。ということは、この波形は測定系の特性を見ているようなものだ、ということが推測できます。



ただ、前作(WCA230A)より今回(MS2691A)の測定器スペックが良いはずなのに測定結果は逆転しています。それを測定器の限界だと結論付けるのは納得がいきません。
WCA230仕様:  -105dBc/Hz @100kHzオフセット(中心周波数1.5GHz)
MS2691A仕様: -116dBc/Hz @100kHzオフセット(中心周波数2GHz)
・・・と1ヶ月を経て記事を纏めていたらその理由に気がつきました。WCA230では、20MHz以下の周波数帯ではベースバンド入力モードに切り替わり周波数変換機を迂回してA/D変換器に直結測定できていたから素晴らしい特性で測定できていたわけです。一方、MS2691Aは周波数変換器を1段通してからA/D変換することになるのでその点では不利になります。

出典:WCA230A Service Manual

出典:MS2691A個別カタログ

WCA230Aを手放してしまった今となっては実機で検証できませんが、ベースバンド測定ができるAPB-1APB-3を使えばMS2691Aを凌駕する測定ができるのでは?という気がしてきました。

2017年11月11日土曜日

高速DAC基板を動作させる

DE0-nanoでつくった1MHzのIQ信号の波形です。自作高速DAC基板が動作してくれなくて困ってましたが、DACへのクロック供給方法を間違えていてCLKINとDCLKIO同相にしたらあっさり動作。思い込みではダメですね、データシートにはちゃんと書いてありました。


この波形写真、TDS3014B内蔵Webサーバにアクセスできず、仕方なく画面をデジカメ撮影することに。Chrome/IE/EdgeともにNGでしたが、ブラウザの互換性を疑っています。

高速DAC基板について

14ビット 2chの高速DAC AD9717が乗っています。各種実験ができるようDAC出力にはフィルタをもうけず、IQ信号をSMAコネクタでそのまま出力します。
クロックは、Si5338でDACとDE0-nanoの各々に個別に変更できるようにしています。基板の一番下に付いてるのは、AVRマイコンでAD9717とSi5338の初期化に使います。
基板は4層でELECROWで製造して貰いました。







高速DAC基板の駄目なところ


  • DE0-nanoへLVDSでのクロックを供給するつもりでしたが、DE0-nano側に終端抵抗がなくて断念しました。
  • C25, FB3のシルク位置が逆。LDO出力の短絡で気が付きました。電源供給前にわかって良かった。



2017年7月3日月曜日

Raspberry Pi 回路図、拡張コネクタ、基板の外形寸法、電源の切り方

回路図

本家SCHEMATICSに掲載されています

拡張コネクタ


  • Raspberry Pi 3 Model BのGPIO拡張コネクタは40ピンヘッダで3.3V I/O
  • 拡張コネクタのGPIOピンの個別出力は16mAで各ピンの合計は50mA迄、ツール・ラボのページが詳しい
  • 拡張コネクタピンアサインはraspberrypi-spy.co.ukの図がわかりやすい。


基板の外形寸法

本家MECHANICAL DRAWINGSからRaspberry3の図です

電源の切り方

SSHして”sudo shutdown -h now"コマンドでOSをシャットダウン
GPIOにスイッチを付け、それをプログラムで監視してシャットダウン
いきなり電源を切りたい向きにはUPSを併用してシャットダウンさせる手法もあり

2017年6月30日金曜日

Quartusでデジタルフィルタ係数ROMの作成

Spartan3Eで作っていたFMトランスミッタのVerilogコードをDE0-nano(アルテラ)に移植しています。そこでIPコアのライセンスについて調べてみたら、Quartusライトエディションでは基本的な演算やハードIPは無償ですが、FIRフィルタやNCOを含むIP Base Suiteが有償オプションということになっています。これらのIPは、ライトエディションで使用できても、評価版という位置づけのようです。


係数ROMの作成

まずはデジタルフィルタのコードを移植です。係数ROMはハードIPなので、アルテラのハードIP "ROM: 1-PORT" をインスタンシエートします。基本的な機能は、ザイリンクスと同じなので同じ機能になるよう設定を進めます。ザイリンクスではフィルタの係数をCOEファイルで指定していましたが、アルテラでは、MIF(Memory Initialization File)かインテルHEXフォーマットを使います。このファイルは、QuartusでFile ⇒ New ⇒ Memory Initialization Fileとすると手入力できます。


とはいえ、係数は256行もあるのでエクセルで所定フォーマットに変換後、QuartusのMIFファイルにコピペ。Quartusのエディタを使うと係数データが2進数なのに、DATA_RADIX=UNS(Unsigned decimal)とされてエラーになるので"BIN"に修正しました。

MIFファイルのイメージ

WIDTH=18;
DEPTH=256;
ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;
CONTENT BEGIN
0    :   000000000000000001;
1    :   000000000000000001;
2    :   000000000000000000;
3    :   111111111111111111;

2017年6月29日木曜日

Raspberry Pi セットアップ備忘録

Raspberry3 model BをWiFi接続/ディスプレイ・キーボード・マウスレスで運用しながらSSHでリモートログインできるまでの設定メモです。


1.準備したもの


  • RasberryPi 3B本体
  • マイクロSDカード Class10/16GB以上を選んだ
  • HDMI-DVI D 変換ケーブル、HDMIが映るモニターがあれば要りません
  • USBキーボード
  • USBマウス
  • microUSB電源、スマホの充電器を使います


2.OSのダウンロード


  • Noobs Lite、軽量でネットワークインストール前提のもの


3.SDカードの準備


  • SDカードフォーマッター でフォーマット、要はFAT32でフォーマットしてるみたい
  • 解凍したNoobs Liteの中身をコピーしておく


4.OSのインストール


  • SDカードをRasberryPiの挿入し、起動する。赤ランプが点灯するだけで変化しないときはカードの読み込みに失敗してる。SDのフォーマット形式など確認。
  • WiFiの設定を行う
  • Raspbianを指定してインストール、ネットワークインストールは結構時間かかる
  • LanguageはEnglish(US)とする


5.OSの初期設定


  • Preferences ⇒ Raspberry Pi Configuration

Change Password : (デフォルトユーザ)pi のパスワードを変更
Auto Login : Login as user pi はチェックのまま
Boot : CLI にチェック

  • Interfaces

SSH : Enabled に変更

  • Location

Locale: en, US, UTF-8
Timezone : Asia Tokyo
Wifi Country : JP Japan 

6.WLANのIPアドレスを固定する


  • 「/etc/dhcpcd.conf」ファイルを編集

コマンドラインから sudo nano /etc/dhcpcd.conf とし、最終行に次の内容を追加
(Ctrl+O 保存、Ctrl+X終了)
 
interface wlan0
static ip_address=192.168.0.x/24 ⇒ 固定したいIPアドレス
static routers=192.168.0.x ⇒ デフォルトゲートウェイ
static domain_name_servers=192.168.1.x ⇒ DNS

  • sudo reboot として再起動
  • コンソールからifconfigとやるとIPアドレスを確認できる


7.リモートログイン


  • WindowsからTeraTermでアクセス
  • SSH接続中 TeraTermのウインドウにファイルをドラッグアンドドロップするとファイル転送ができる(!)ただし"SCP(Secure CoPy)"を選ぶこと


2017年6月19日月曜日

DE0-nano 拡張ボード: オーディオ入出力部 光コネクタのピンアサインを間違えた

オーディオの光出力が動作しません。しかも赤色の光が暗いし。よーく考えて配線ミスではと気づきデータシートを確認。ああ、OPT-TXのピン配線が逆だった!
光コネクタのGNDとVinがあべこべに接続されていました。光コネクタを取り外し、サーマルグランドのカット・パターンカット・ジャンパ線追加・コンデンサの接続替えで無事動作してくれました。



チェックしたはずなのに、なぜ間違えたんだろう。。。EVERLIGHTのPLT133/T10WのUsing Methodだけを見て設計すればよかったんですが、同じページにあるPackage DimensionとUsing Methodのピン番号が対応してないんですね。落とし穴にはまってしまいました。



2017年6月17日土曜日

ArduinoでPB6, PB7ピンを使う

Arduino NanoではATmega328のPB6, PB7ピンは外付け水晶発振器を接続するため操作できませんが、内蔵RC発振器を使う前提であればこの端子も使えるのではと考えました。これはpins_arduino.cの設定変更で対応できるようですが、私のArduino 1.8.2ではこのファイルがpins_arduino.hに変わっていました。

C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard\pins_arduino.h に追記・変更します。

#define NUM_DIGITAL_PINS            22

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PD, /* 0 */
PD,
PD,
PD,
PD,
PD,
PD,
PD,
PB, /* 8 */
PB,
PB,
PB,
PB,
PB,
PC, /* 14 */
PC,
PC,
PC,
PC,
PC,
PB, /* 20 */ PB, /* 21 */};

const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(0), /* 0, port D */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 8, port B */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(0), /* 14, port C */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6), /* 20 port B */
_BV(7), /* 21 port B */
};

const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
NOT_ON_TIMER, /* 0 - port D */
NOT_ON_TIMER,
NOT_ON_TIMER,
// on the ATmega168, digital pin 3 has hardware pwm
#if defined(__AVR_ATmega8__)
NOT_ON_TIMER,
#else
TIMER2B,
#endif
NOT_ON_TIMER,
// on the ATmega168, digital pins 5 and 6 have hardware pwm
#if defined(__AVR_ATmega8__)
NOT_ON_TIMER,
NOT_ON_TIMER,
#else
TIMER0B,
TIMER0A,
#endif
NOT_ON_TIMER,
NOT_ON_TIMER, /* 8 - port B */
TIMER1A,
TIMER1B,
#if defined(__AVR_ATmega8__)
TIMER2,
#else
TIMER2A,
#endif
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER, /* 14 - port C */
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER, /* 20 */
NOT_ON_TIMER, /* 21 */
};

2017年6月3日土曜日

サンプルレートコンバータをArduinoのI2Cで制御

DE0nano用の自作オーディオ入出力基板のサンプルレートコンバータはI2Cで初期設定しないと動作しません。普通ならFPGAから制御するところですが、私の実力不足であえてAVRマイコン ATmega328を付けています。このAVRマイコンチップは、Arduino UNOと同じなのでArduinoの開発環境を使ってみることにしました。

AVRマイコンとArduinoピン名称の対比

次の表は、ATmega328とArduino UNO ピン名称の対応を示したものです。自作基板の設計段階では、ArduinoIDEを使う想定はなかったのでアナログ入力端子にデジタル入力を割り当ててしまいましたが、調べたところ特に問題なく使えるようです。



ArduinoでのI2C制御

こんな感じに書くだけで、I2Cが使えます。
Wire.begin(); // join i2c bus (address optional for master)
Wire.write(0x08);   // Register 08: Transmitter Control Register 2
Wire.write(0x00);
Wire.endTransmission();
Cで書くのとやってることは同じですが、わかりやすく関数化されてます。これ、シンプルで簡単にみえますけどI2Cの信号のやりとりをイメージできないとまるでブラックボックスです。何はともあれ、SRC4382のレジスタ設定をべた書きするだけで呆気なく動いてくれました。

今回のArduinoスケッチ

#include <Wire.h>

#define ASRC_INT  2
#define MCU_INT  3
#define MCU_RDY  4
#define DIPSW0  5
#define DIPSW1  6
#define DIPSW2  7
#define DIPSW3  8
#define LED3  9
#define LED4  10
#define RST  A3
#define SRC4382_ADDR  0x70

2017年6月1日木曜日

サンプルレートコンバータのマスタクロックをつくる

サンプルレートコンバータに供給するクロックをDE0nanoで作ります。DE0nano基板に搭載された50MHzクロックモジュールの信号をFPGA内蔵のPLLで所要の周波数に変換します。PLLはFPGAに埋め込まれたハードマクロなので、利用するにはIPコア(IPメガファンクション)をインスタンシエートします。
まずは、練習としてサンプルレートコンバータから受け取ったそのままループバックして送信させてみます。


PLLを使うIPを生成

Quartus Primeのウインドウに表示されるIP Catalog(表示されていなければTools ⇒ IP Catalog)からALTPLLを選びます


IPの保存先を聞いてくるので適当な名前を付けて保存(ここではXPLL)

入力クロック周波数 50MHz

これはそのまま。リセットとロック検出があれば良いですね。

そんなに細かいこと聞かれても

これもそのまま

これもそのまま

出力周波数24.576MHzにします

clk c1~c4は使わないのでスルー

これもそのまま

インスタンシエーション テンプレートにチェック

プロジェクトに登録

作成済みIPの設定を変更するには

あとからPLLの周波数を変更するなど設定を変えるには、Project Navigator の IP Components タブで変更したいIPを右クリックして Edit in Parameter Editor を起動する。が、Parameter Editorが灰色で選べないときは、メモリ不足らしいのでQuartusの再起動や設定変更で対応します。


IPを使う

具体的なコードは、記事の最後に示します。今回のPLLとasrc_ifモジュールを呼び出し、FPGAの外部ピンと接続しています。
コンパイルすると、例のごとくWarningがいくつか出てきます。
Warning (292013): Feature LogicLock is only available with a valid subscription license. You can purchase a software subscription to gain full access to this feature.
えっ!このIPコア有料!?まさか!!。どきりとしました。調べてるとLogicLock(下位階層モジュールごとに最適化していくコンパイル手法)機能を使うには、有料ライセンス買ってくださいねというメッセージでした。目障りならWarningのsuppress機能で表示を消すしかないみたいです。
Warning (15064): PLL "XPLL:XPLL24M576|altpll:altpll_component|XPLL_altpll:auto_generated|pll1" output port clk[0] feeds output pin "SRC_MCLK~output" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
SRC_MCLKに割り当てたFPGAのピンは、PLL専用の配線領域を経由していないからジッタ特性が良くないかもという警告でした。是正するには、ピンアサインを変更しなくてはなりませんが今回の用途では問題視することでもないかと考えました。

module DE0nano
(
CLOCK_50,
KEY0,
LED,
SRC_RST,
SRC_MCLK,
SRC_LRCK,
SRC_BCK,
SRC_DOUT,
SRC_DIN,
SRC_LOCK
);

2017年5月30日火曜日

サンプルレートコンバータとのインターフェースをModelSimでシミュレーション

DE0nanoにSRC4382 サンプルレートコンバータを接続するため、必要なクロックの生成とPCM信号をやりとりするインターフェースをVerilogでRTL記述します。インターフェースと言ってもシリアル・パラレル変換とパラレル・シリアル変換なんですが、いろんな書き方があります。今回は、以前作成したコードを少しアレンジしただけでしたが、当時は参考書を片手にとても苦労した覚えがあります。
シミュレーションは、テストベンチを作る手間がかかりますが、バグ取りがラクなので結局は早道です。備忘録として無償のModelSim - Intel FPGA Starter Editionを使った例を紹介します。

SRC4382とVerilogモジュールの接続イメージ

サンプルレートコンバータをスレーブモードで動作させるため、各種のクロック信号はDE0-nanoが供給します。さらにデジタルオーディオのPCMデータをシリアル・パラレル変換、パラレル・シリアル変換します。これをasrc_ifというモジュールに記述します。


Quartusの事前設定


  • Assignments ⇒ Settings ⇒ EDA Tool Settings(Simulation) ⇒ Tool name に "ModelSim-Altera"と指定。※"ModelSim"ではありません
  • Tools ⇒ Options ⇒ EDA Tool Options の ModelSim-Alteraに C:\intelFPGA_lite\16.1\modelsim_ase\win32aloem と指定。
  • ModelSimを起動するには、QuartusからTools ⇒ Run Simulation Tool ⇒ RTL Simulationとします。

新規プロジェクトの作成

  • ModelSimで、File ⇒ New ⇒ Project とし、プロジェクト名を適当に指定します。Add items to the Projectウインドウが現れるが、何もせず閉じます。


  • Project ⇒ Add to Project ⇒ Existing File として、シミュレーション対象のVerilogファイルを指定します。
  • Project ⇒ Add to Project ⇒ New File として、テストベンチを新規作成・追加します。Add file as typeでVerilogを指定しておきます。保存場所はシミュレーション対象と同じフォルダが良いようです
  • Compile ⇒ Compile All してテストベンチをコンパイルします。コンパイル結果は、プロジェクト ペインのStatusで確認できます。

シミュレーションの実行

  • もしメガファンクションが含まれる場合は、メガファンクションのシミュレーションライブラリを登録します。シミュレーションライブラリ名は、MegaWizardの途中で表示されます。
  • シミュレーションライブラリを登録は、Simulate ⇒ Start Simulation ⇒ Librariesタブ ⇒ Search Libraries( -L )欄のAdd ⇒ altera_mf_verを指定。verilog用なので _verのサフィックスが付きます


  • 次にDesignタブでワーキングライブラリ(デフォルト名work)内でテストベンチを指定します。メガファンクション ALTPLLを使うときは、Resolutionを1psにしなくてはダメという場合もあるようです。

  • Simulation Configurationに保存

ところでStart Simulation の設定は保存されないので、保存したいときはSimulation Configurationを使います。Project ⇒ Add to Project ⇒ Simulation Configurationで適当な名前を付けます。すると、ProjectペインにConfiguration名の項目が現れるので、次回からはこれをクリックします。
  • シミュレーション結果を波形表示させるため、テストベンチを右クリックしてWaveウインドウに項目を追加します。



  • シミュレーション時間を指定して Run をクリックしてシミュレーションを実行します。



  • 無事波形が出ました。テストベンチでパラレル・シリアル変換とシリアル・パラレル変換をループバックさせたところミスを発見。1カ所修正して、シミュレーションでは動作できることがわかりました。


参考資料


使用したVerilogファイルとテストベンチ

module asrc_if
(
CLK,
RST,
LCH_IN,
RCH_IN,
LCH_OUT,
RCH_OUT,
SRC_MCLK,
SRC_RST,
SRC_BCK,
SRC_LRCK,
SRC_DOUT,
SRC_DIN,
SRC_LOCK
);

2017年5月28日日曜日

AES/EBUを民生用 同軸デジタル端子に接続する検討

業務用AES/EBUデジタル音声を民生用のサウンドカードに接続すれば、音ぐらいは出るんじゃないか?と考えて、同軸接続するにはどうすれば良いかを検討しました。いろいろと準備はしたんですが、結果的に業務用機器に触れる機会がなく実際に検証するには至りませんでした。せっかくですので、検討メモを残してきます。
任意の機器間で音が出るかどうかはまったく不明ですのでご注意ください!


AES/EBUインターフェース

  • 業務用デジタル音声伝送規格として策定されたAES3規格(AESが1985年に策定)、IEC60958として国際標準化
  • 16~24ビット 2チャンネルを伝送。サンプリング周波数は48kHzが基本で、22.05/24/32/44.1/48/88.2/96/176.4/192kHzが規定されている。
  • 接続ケーブルは特性インピーダンス110Ωのシールド付きツイストペアケーブル(RS-422準拠)による平衡伝送/3ピンXLRコネクタ接続と75Ω同軸ケーブルによる不平衡伝送/BNCコネクタ接続がある。
  • 伝送距離はIEC60958に書いていない(見つけられなかった)。カナレのケーブルでは360mの伝送が可能と謳うものがある。
  • コンテンツの著作権保護に対応していない

S/PDIFインターフェース

  • 民生用デジタル音声伝送規格としてEIAJ(現JEITA)が1987年にCP-340規格として策定、IEC60958として国際標準化。さらに圧縮オーディオAC-3方式やMPEGオーディオ等を含めるためIEC61937として拡張されている
  • 16~24ビット 2チャンネルを伝送。サンプリング周波数は22.05/24/32/44.1/48/88.2/96/176.4/192kHzが規定されている。
  • 接続ケーブルは75Ω同軸ケーブルによるRCAコネクタ接続とプラスチック光ファイバによる角形光コネクタ(トスリンク)または丸形光コネクタ(基本的な形状は3.5φステレオミニジャックと同じ)接続がある。
  • 伝送距離はIEC60958に書いていない(見つけられなかった)。
  • 著作権保護機能としてSCMSに対応

AES/EBUとS/PDIFのちがい

  • AES/EBUとS/PDIFは、音声伝送部分のフォーマットは基本的に同じだが、チャンネルステータスデータの使い方が異なっているので両者に互換性はないとされています。ただ、オーディオデータそのものは両者で同じなので、機器によっては音声だけでも伝送可能ではと考えました。動作するかは実験的に確認するしかありません。Xonar D2XはS/PDIF同軸接続に対応しているので、AES/EBU XLR端子に無理矢理つないで試してみます。
  • AES/EBU XLR端子出力の規格はインピーダンス 110Ω、平衡出力、2~7Vp-p(110Ω終端)。入力はインピーダンス110Ω、200mV~7Vp-p(規格策定当初 最大10Vp-p)
  • S/PDIF同軸出力の規格は、インピーダンス 75Ω、不平衡出力、0.5Vp-p(75Ω終端)。入力は、インピーダンス75Ω、0.2V~0.6Vp-p

AES/EBUをS/PDIFに電気的に接続する方法

  • XLR端子からBNC端子への110Ω-75Ω変換器が市販されているので買ってみました。
  • AES/EBU ⇒ S/PDIFの場合、変換器に5V(変換器仕様5Vmax)が入力された場合、変換出力は3.98Vとなります。S/PDIF入力範囲は0.2V~0.6Vp-pなので減衰量20dBの75Ω減衰器を併用する必要があります。
  • S/PDIF ⇒ AES/EBUの場合は、S/PDIF出力0.5Vp-pで変換器で昇圧されて出力は0.58Vp-pとなり、電気的にはそのまま接続可能です。
  • この手法は、電圧仕様のみに着目した接続方法です。実際の機器で音が出るかは、それぞれの機器の実装により決まると思われるため、実験的に確認する必要があります。つまり音が出ればラッキーということです。

参考資料

2017年5月19日金曜日

DE0nanoでQuartus Prime Lite Editionを使う: 備忘録

新規プロジェクトの作成

  • File ⇒ New ⇒ New Quartus Prime Project ⇒(New Project Wizard画面)
  • Directory, Name, Top-Level Entity⇒ プロジェクトのディレクトリ、プロジェクト名、トップレベルモジュールの名前 ⇒ Next
  • Project Type: Empty project ⇒ Next
  • Add Files: (空白のまま)⇒ Next
  • Family, Device & Board Settings ⇒ Family: Cyclone IV E, Available devices: EP4CE22F17C6を指定 ⇒ Finish

Verilogファイルの新規作成

  • File ⇒ New ⇒ verilog HDL File
  • File ⇒ Save As ⇒ (ファイル名を確認して)保存 ⇒ (プロジェクトにファイルが追加されました)


Verilogファイルのサンプルコード

DE0nano搭載の50MHzクロックを分周してLEDを光らせてみます。
module DE0nano
(
CLOCK_50,
KEY0,
LED
);
 
input CLOCK_50;
input KEY0;
output [7:0] LED;
 
reg [27:0] count; 
always @(posedge CLOCK_50 or negedge KEY0)
begin
if (~KEY0)
count <= 0;
else if (count == 28'hFFFFFFF)
count <= 0;
else
count <= count + 1'b1;
end
 
assign LED = count[27:20]; 
endmodule

FPGAのピンアサイン

  • 事前作業としてデザイン情報を作成します。Processing ⇒ Start ⇒ Start Analysis & Elaboration
  • Assignments ⇒ Pin Planner



ピンアサインするには、Node Nameをパッケージのピン番号にドラッグ&ドロップするか、Locationにピン番号を直接記入します。I/O規格も適宜変更します。


コンパイルの実行

  • Processing ⇒ Start Compilation
  • コンパイルが無事終了したらコンパイラレポートで最大周波数などが見られます

FPGAに書き込み



ROMに書き込み

  • (Quartusで)File ⇒ Convert Programming File 
  • Programming file type: JTAG Indirect Configuration File (.jic), Configuration device: EPCS64(基板のバージョンによりEPCS16の場合あり)
  • Input files to convert: Flash Loaderをクリック ⇒ Add Device ⇒ Cyclone IV E ⇒ EP4CE22 ⇒ OK
  • Input files to convert: SOF Dataをクリック ⇒ Add File ⇒ 変換元のsofファイルを指定
  • Generate をクリック ⇒ jic ファイルが生成される
  • Convert Programming File を終了
  • Programmer を起動
  • Add File ⇒ 先ほど生成した jic ファイルを指定
  • Program/Configure と Verifyにチェックを入れる 
  • Start で書き込み開始