2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

CPLD/FPGA

2013年6月11日 (火)

ModelSimの使い方 入力信号の与え方について

入力信号の与え方については、コマンドラインから一回ずつ入力するやり方と、テストベンチというソースを別に用意するやり方と、2通りある。
この記事の解説は、コマンドラインから一個ずつ指定するやり方に相当する。

<任意のクロックを入力する方法>
Objectsペインの、任意の信号名を右クリック。→Modify→Apply CLK

Photo

このメニューで周期やDutyが設定できる。 Modifyのメニューの一番上にある、Forceは、 任意の入力ピンの信号をHi、Low、HiZに設定できる。 Valueの欄に、1・0を入れたらOK。 Runを押すと、先ほど設定したクロックが1周期分だけWaveのウインドウに表示される。

Ws000046

↑波形を表示させたときの例。
RUNボタンの左横にある100psは、RUNを一回押したときに何秒分実行するかを指定するためのもの。クロック周期を100psに指定していたなら、RUNを押すと1クロック分だけが表示されることになる。

☆注意:信号を設定しても、RUNを押すまでは波形が表示されません。

☆Apply CLKで信号を設定すると、ModelSimのウインドウの下のペインにあるコマンドラインに、こんなものが表示される。ModelSimがGUIからパラメータを受け取り、波形を設定するコマンドに書き換えてくれている。
force -freeze sim:/top1/CLK 1 0, 0 {50 ps} -r 100


さらに詳しくは、「ModelSim User's Manual」
ModelSimのヘルプから、PDFリンクで閲覧できるマニュアルにて。
これの13章にファイルに記録した信号一式を読み込んで実行するやり方が書かれている。(英語)


-------------------------------------------------------------

まずは一通り動く開発環境から。
Xilinx版もあるみたいです。

キットで学ぶ!No.04 FPGAチャレンジャー入門編ALTERA CycloneIV版(セット) (キットで学ぶ!シリーズ)

        キットで学ぶ教材研究委員会 株式会社アドウィン 2011-08-03
        売り上げランキング : 413690
by ヨメレバ

2013年6月 9日 (日)

Lattice Diamond ピン配置の設定方法 評価ボードを使った事例。

Lattice評価ボード回路図

<ボードの回路図>
XO2の評価ボードマニュアル EB68.pdf の末尾についている。
ピン配のリストもこれに載っている。

ボードの写真の横に、ヘッダーの配列に合わせてCPLDのピン番号が書いてある。

<例>
LEDのD1だったら、XO2のPin97だから、 PR4BがLEDのD1につながっている。

☆この辺のLEDは、サンプルプログラムのlpfファイルに全て記述されているので、使いまわしができる。

<pin配置の設定>
マニュアルはこちら。

spread sheet view を起動する。メニューの一番左端の緑の星マーク。
Port Assignmentsのタブを選んで、Pinの列をダブルクリックしてピン番号を入れる。評価ボードのピン番号を入れれば、そのデバイスに接続される。

Ws000045

このツールで保存を実行すると、lpfファイルが作成される。 ExportFilesは、JEDEC Fileを選択する。Bitstreamはこのツールでは書き込めなかった。


Latticeのツールについていくつか記事を書いています。
Lattice評価ボードのサンプルプログラムについて


--------------------------------------------------------

CPLDの勉強には、この本を使っています。
基本的な回路や、簡単な事例がたくさん載っていて実践的。
長く使えそうです。

入門Verilog HDL記述―ハードウェア記述言語の速習&実践 (Design wave basic)

        小林 優 CQ出版 2004-05
        売り上げランキング : 161592
by ヨメレバ

2013年5月17日 (金)

Lattice Diamond ライセンスファイルの生成方法

Lattice Diamondのライセンス生成方法はここにも載ってます。 http://akizukidenshi.com/download/ds/lattice/LCMXO2-1200ZE-B-EVN-DEV.pdf

Latticeのページの
Home > Products > Design Software > Lattice Diamond
に行ってから、
Diamond Software Free Licenseの項目にある、 free license can be requested というリンクを押す。

☆英語ページでないとこれは出てこないようです。英語ページにいなければ、
ページ右上のアメリカの国旗のアイコンを押して英語ページに切り替えます。

すると、ライセンス発行の画面が出て、MACアドレス(物理アドレス)を入力するところが出てくる。物理アドレスの調べ方は、Windowsのコマンドプロンプトを開いて、 ipconfig -all とすれば出てくる。 xx-xx-xx-xx-xx-xx のようにハイフンでつながっているので、ハイフンも一緒に入力すること。アルファベットは一応大文字で打ち込む。

サイトで物理アドレスの入力を完了し、メールを送りますの画面が出たら、数分程度でLatticeから自動送信メールが来る。
添付がライセンスファイルなので、

X:\lscc\diamond\2.1_x64\license

に入れる。
☆インストールディレクトリの中にlicenseというフォルダがあるはず。

筆者の場合はそこにファイルを入れたら起動できた。メールには環境変数”LM_LICENSE_FILE”に、ライセンスファイルのパスを指定しなさいとなっているが、デフォルトが上記の\licenseになっているのだろう。

2013年5月 6日 (月)

Lattice MachXO2 内臓クロック Internal Oscillator (OSCH)の使い方 <続き>

Lattice MachXO2 内臓クロック Internal Oscillator (OSCH)の使い方の続き。

内臓クロックを設定しようとしたが、生成されたHDL Diagramを表示させると、内臓クロックとosc_clkという名前の入力ピンが接続されている。osc_clkは入力ピンなのに内蔵クロックモ ジュールの出力ピンとつながっていては具合が悪い。ではどうしたらosc_clkピンだけを消すことができるのか。

下記ソースのように、単純にinput osc_clkと、osc_clkの宣言を消去してしまうと、osc_clkの信号がtopモジュールに接続できなくなってしまう。そうすると、クロックのモジュールがどこにも接続されなくなってしまう。

Ngpattern2source

これが上に示したソース変更を加えたときのDiagramの結果。 OSCHモジュールには何もつながっていない。

Ngpattern2_hdlconnectivity_3  
一体どうすればよいのか???

色々本を見たり、データシートを見たりしたが、基本的な考え方は間違っていない。しかし、実際の使用方法となると全く役に立たなかった。

そこで、サンプルプログラムをもう一度じっくりと眺めることにした。Xilinxのツールを使ってVerilogをやる前に一度解読に失敗し、挫折してほったらかしにしておいたやつだ。

☆サンプルプログラムの読み込みについては以前に書いた記事があるのでそちらを参照願います。

サンプルを読み込んでHDLダイアグラムを表示すると、

Samplehdldesign_root
モジュールが4つもつながっていて結構複雑な作りだ。よく見るとOSCHがきちんと使われている。このソースならどうやって使えばいいかわかるかもしれない。

同様に、Connectivityを見てみた。
☆このキャプチャ画像は一部抜粋です。
Samplehdlconnectivity


するとどうだろう。右端に黄色の文字でclk_outがある。
clk_outはoutputになっているではないか。


これで全ての謎は解けた。モジュールからクロックを出しているのだから、topのモジュールでのclk_outの宣言はoutputであるべきなのだ。 そしてソースを見ても、outputであることがしっかり確認できた。

Ws000024

4行目にosc_clkとあり、このポートはoutputになっている。 もう一度自分の書いたソースに戻って、合成を実行してみると、とうとう合成が成功した。 その結果がこれ。

Okpattern_hdlconnectivity_2

内臓クロックの線がクロックを供給したいモジュールに接続されている。
これでめでたく内臓クロックを使ってCPLDを使うことができる。


ようやく基本動作をできるようになった。
次回に続く。

Lattice評価ボード XO2の内臓オシレータの周波数を設定する

内臓オシレータの周波数設定について、このサンプルプログラムを元にソースを追った。

このファイルをこのページ からダウンロードする。
MachXO2_BB_Eval_Kit_v01.0.zip

Ws000033


内臓オシレータについての内容はLatticeのHPの、
sysCLOCK PLLとオンチップ・オシレータ


内臓クロックの周波数について TN1199というのがオシレータ・PLLについての仕様書。 Internal Oscillator(OSCH)という項目が内臓クロックについての記述。

OSCHのモジュールは図13-16にあるように、STBY、OSC、SEDSTBYという三つのポートを持っている。 その下にポートの定義が書いてある。STBYを0にするとオシレータがアクティブになるようだ。 SEDSTDBYはシミュレーションをするときだけ使わないらしく、放置しても動作するであろう。

Nominal Frequency (MHz) というのが、内臓クロックに設定できる周波数で、2.08MHzから133.00MHzまである。 Verilogのソースコードで

defparam OSCH_inst.NOM_FREQ = "24.18";

とすれば、周波数が設定できるとある。
サンプルプログラムでは、pwr_cntrllrのインスタンスがPCM1で、このモジュールからstdby1という出力信号が出ている。 おおまかに想像すると、 OSCHはpwr_cntrllrから電源が立ち上がったという通知(stdby1)を受け取って、クロックの発信を始めるということらしい。

pwr_cntrllrについての内容は、 この資料 に詳細が記述されている。
ほかの分野でもわからないことがあればLatticeのこのページから探す

2013年5月 5日 (日)

Lattice MachXO2 内臓クロック Internal Oscillator (OSCH)の使い方

そこで、内臓クロックを使ってCPLDを動かすことを目標にした。

まずは、動作を確認できたVerilogファイルを公開。

「ok-ledTame2.v」をダウンロード

Lattice内臓クロックの設定方法が判明するまでの経緯:

サンプルプログラムでやっているようなLEDチカチカを自分で書いてみようと思ったが、そのようなプログラムは必ずクロックが必要だ。ところがこのボードにはオシレータが接続されていない様子。ランドが設けられているが、このタイプは個人で入手できるかどうかわか らない。この評価ボードは内蔵クロックを使うのが前提のようだ。
一番基本的な、システムクロックの設定がわからないので、地道にマニュアルを追った。

まず、外部からクロックを供給するにはどうすればいいかを追ってみた。
ピン配置に関しては、Spread Sheet Viewでの制約設定

http://www.latticesemi.com/documents/UGJ-D08_SpreadshtView_v20.pdf
という日本語マニュアルがある。 タイミング制約設定の項目が載っている。タイミング制約というのが、どうやらマイコンで言うシステムクロックのことをさすようだ。

Step3「必須」 と書かれているところで、制約を設定するクロックを選択します。と記載がある。クロック源を外付けの発振子とするのか、内臓クロックを使うのか選択できる。

ここで内臓クロックを選択したければ、Wireを使って内臓クロックのModuleと接続するという形をとるらしい。クロックのModuleをVerilogで生成して、Second Type のClock Netを選ぶとAvailable Clock Netsの窓にクロックのネットが表示される。とマニュアルの画面キャプチャにはあるが、今のプロジェクトではクロックを何も設定していないのでその窓には何も表示されない。

つまり、ModuleからネットなりWireをださなければならないことがわかった。 これだけでは肝心のクロックModuleをどこから持ってこればいいかわからない。そこでハードウェアマニュアルを読むことにした。

MachXO2 ファミリ・データシートアーキテクチャ

http://www.latticesemi.com/documents/MachXO2_DS1035v2p0_JP.pdf

このマニュアルもありがたいことに日本語で書かれている。2ページ目のsysCLOCK 位相同期ループ (PLL)のところをちょっと読むと、

MachXO2 sysCLOCK PLL の設計と使用法ガイド

を参照せよとある。TN1199.pdfをサイト内検索に掛けるとPDFが出てきた。 http://www.latticesemi.com/documents/TN1199.pdf 和訳マニュアルもある。 http://www.latticesemi.co.jp/docs/technotes/machxo2.cfm
順番に見ていくと、所望のModuleのソースの書き方が載っている。VHDLのソースの後にVerilogでの書き方も載っている。 このソースをそのまま写せばいけそうだが、ツールを使ってソースを生成することもできるようだ。ここからさらに読み進めると、
Configuring the PLL Using IPexpress

という項目があった。
このツールを使うと自動的にPLLを設定して所望のクロックModuleを生成してくれるらしい。このツールはDiamondとは別口の独立したツールになっている。パラメータを入力してGenerateすると、Verilogのソースファイルが出力される。これを目的のソースに貼り付けると内臓モジュールが使える仕組み。

今のところはPLLを使って基準クロックを倍速にしたいといったニーズはないので、今回の記事では保留する。

さて、
OSCHのモジュールをソースに貼り付けて、クロックを供給したい自前のモジュールにwireすればよいというところまではわかるのだが、必ずこんなエラーが出てしまう。

ERROR - synthesis: logical net 'osc_clk_c' has multiple drivers

OSCH_inst/OSC (L6) NON_PRIM OUT

osc_clk_pad/IOBUF/O (L78) NON_PRIM OUT

WARNING - synthesis: logical net 'sec_cnt_20_add_4_33/CO' has no load

WARNING - synthesis: logical net 'sec_cnt_20_add_4_33/S1' has no load

WARNING - synthesis: logical net 'sec_cnt_20_add_4_1/S0' has no load

ERROR - synthesis: DRC failed with 1 errors and 3 warnings

osc_clkという信号ドライバが複数いる。という。
な るほど生成されたHDL Diagramを表示させると、内臓クロックとosc_clkという名前の入力ピンが接続されている。osc_clkは入力ピンなのに内蔵クロックモ ジュールの出力ピンとつながっていては具合が悪い。ではどうやったらosc_clkピンだけを消すことができるのか。

HDLのダイアグラムを表示させることはできたので見てみると、

Ngpatternhdldesign_root
DesignViewのDesignTop。topというモジュールの下位に、OSCH_instという内臓オシレータがつながっている。ここまではOK。

Ngpatternhdlconnectivity_2

黄色の四角がオシレータOSCH。
osc_clkは入力ピンなのに内蔵クロックモ ジュールの出力ピンとつながっている。
同じネットに別々の入力信号がある状態。そらあかんわ。


次回に続く。

--------------------------------------------------------------
CPU自作入門 ~HDLによる論理設計・基板製作・プログラミング~

        水頭 一壽,米澤 遼,藤田 裕士 技術評論社 2012-10-20
        売り上げランキング : 100943
by ヨメレバ

2013年5月 4日 (土)

Lattice評価ボードのサンプルプログラム

Lattice評価ボードのサンプルプログラムの場所

MachXO2 1200ZE Breakout Board Demo Design Source

ダウンロードするにはLisenceAgreementをAgreeするだけ。書き込みをすると、サンプルがすぐに走る。

LEDが8個実装されているのだが、そのLEDが偶数・奇数と交互に点滅し続ける。
USB給電なので、USBから書き込みをした直後から動作が実行される。


実行までの手順:

1.このファイルを上のサイトからダウンロードし、適当な場所に解凍する。
  MachXO2_BB_Eval_Kit_v01.0.zip

2.LatticeDiamondから、File→Open→Project で、先ほどの解凍済みフォルダにある、
  Default_pattern_w_standby.ldf
  というファイルを指定する。

3.開いた直後ですでに論理合成などの必要なProcessは完了している
  左のペインにある、Processタブを見てみると、緑のチェック印が入っているはず。
  FileListのタブに切り替えてInputFilesのプルダウンを開くと、
  このプロジェクトで使用しているVerilogファイルが見られる。

4.下の画像にあるようにProgramのボタンを押すと、
  Programmer - impl1.xcfというタブが、中央のペインに表示される。

Ws000027

5.右のペインにCable Settingというのがあるので、そのなかのDetectCableを押す。
  するとデバイスが認識される。

6.真ん中のペインのタブのすぐ下に、ちょっと目立たないがProgramボタンがある。

Ws000028

これを押すと書き込みが実行されて、ソースが実行される。

Ws000029

こんな風にStatusが緑色になる。FileNameで指定するファイルの拡張子は.jedとなっている。xcfではないらしい。

ちなみにファイルの選択はFileNameの欄をクリックするとブラウズボタンが出てきて、それを押すとファイル選択ダイアログが起動するようになっている。

Ws000031

↑こんな画面

次回に続く。

2013年5月 3日 (金)

Lattice Diamondの使い方

Lattice Diamondを使って、MachXO2のBreak out boardを動かしてみた。
搭載CPLDはLCMXO2-1200ZE-1TG144Cという型番。
今、秋月電子通商で流れているバージョンよりも前に流通していたものだ。

LatticeのHPに行けば日本語のマニュアルが意外と充実している。
日本語ドキュメントのページ

ここのマニュアルを順番に読んでいけば、Xilinxのツールで一通りの作業をマスターしていたので嵌ることなく書き込みまで作業を進めることができた。

HDLの階層構造の表示については、

ちょっと内容が実際と異なっていた。HDL Diagramというボタンを押すように書かれているが、そのボタンがどこにもないのだ。この日本語マニュアルの内容が古いらしい。階層構造解析とリソース確認」の項目から、早速内容が違う。階層構造を表示するには、HDLと書かれたアイコンをクリックするとよい。

Ws000026


アイコンの絵柄が変更になったらしい。
それ以外は特に違和感は無かった。

次回に続く

2013年5月 2日 (木)

FPGAボードで学ぶVerilog HDL ステップ3 書き込みトラブル対処

一度書き込んで起動を確認したProjectを閉じたあと、再度起動したときの不具合のレポート。Propatiesなどは前回正常に書き込めたときから一切いじっていない。評価ボードに電源を入れた状態で、iMpactを起動させた。するとデバイスが認識されて、デバイスのグラフィックと、前回書き込み時に選択したデバイス名と、ビットファイル名が表示される。しかしこれを右クリックしてProgramを実行すると、なぜかPropatiesの画面が開く。何も設定したくないのでOKを押すと、

The idcode read from the device does not match the idcode in the bsdl File.

というエラーが出てProgramが実行できなくなる。BBSを見ていると、JTAGのTDOがつながってなかった等のハードウェア的な要因が主になっているようだ。しかし、確かに一度書き込めたケーブルを使って、ボードも壊した記憶がないので非常に困った。そこで一旦、わざと電源を切ってPCからデバイスを認識できない状態にして、iMpactを起動してみた。するとiMpactは案の定デバイスを認識できずにエラーとなった。デバイスの電源が供給されているか、正しく接続されているか確認せよとのポップアップが表示される。もう一度電源を入れてiMpactを起動しなおすと、なぜか今度はProgramがすんなり実行できた。


Xilinxはこれにて完結
次回はLattice編。

2013年5月 1日 (水)

FPGAボードで学ぶVerilog HDL ステップ2 付属基板とPCの接続

XilinxのWeb Pack 8.2i が無事にインストールでき、Verilogの論理合成(マイコンでいうところのソースのコンパイル)も首尾よく進んだ。

いざ書き込みと思ったら、パラレルケーブルがDsub25ピンオス→セントロニクス36ピンのオスで出ている。昔のプリンターは全部これだったので仕方がない。これに買い置きしていたDsub25ピンのメスを半田付けして、ボードに接続することにした。

参考

DSUB25とアンフェノール36ピン

テキストのP92に付属ボードの回路図が載っている。左上にDsub25のピン配が載っている。結線が必要なのは以下のピン。全てのピンが接続されている必要はない。


・LPT_D0からD4の5本のデータ線
・18から25ピンはGND。
・13ピン LPT_SLTC
・15ピン  ~LPT_ERROR


この辺の結線は嵌ると非常に時間がかかる。コネクタにピン番号の刻印があるので良く確認しながら作業を進めなければならない。筆者はアンフェノール36ピンからDsub25に変換するケーブルを自作していたので、何回か間違える羽目になった。

ケーブルの製作を終えて開発ツールに認識させると、遂に書き込みが成功した。


どんな高性能なマイコンでもFPGAでも、プログラムの書き込みが一番の参入障壁。これさえ超えれば、あとはトラブルなんかないだろうと思っていた。

次回に続く。

-----------------------------------------------------------

超入門!FPGAスタータ・キットDE0で始めるVerilog HDL: すぐ始められる!USB対応・書き込み器不要・大容量FPGA搭載! (トライアルシリーズ)

        芹井 滋喜 CQ出版 2011-07-22
        売り上げランキング : 243284
by ヨメレバ

より以前の記事一覧