ラベル Digilent の投稿を表示しています。 すべての投稿を表示
ラベル Digilent の投稿を表示しています。 すべての投稿を表示

2019/04/06

Arty に Pmod VGA を繋げてみた


本当は HDMI か、DVI でディスプレイ直結してみたかったのだけど(一応そういう製品は存在するっぽい)、秋月で物色してたら Pmod VGA が売ってたので買ってきてみました。しかし、うちには VGA 入力のあるモニターがないので、VGA - HDMI コンバータを追加で買う羽目に。

この時点で Digilent に PmodVGA のチュートリアルがあるのでどうにかなるだろうと思っていたら、うまく行かないんですね。xdc のコンストレイントがうまくいっていないようなんだけど、ピンアサインの設定がいまいちわからないんだよなぁ。しかもコードは VHDL だし。

そこでググっていたら FPGAプログラミング大全 Xilinx編 のサンプルコードを見つけた。コードは Verilog なんで、さっと読めるし、とりあえず適当なプロジェクト作ってコードと xdc を読み込んだらあっという間にカラーパターン吐き出せました。


回路はシンプルで、Hsync, Vsync を生成して、タイミングに合わせてパターンを吐き出している感じ。色々調べながら作るのは大変なので楽させてもらいました。フレームバッファ用意して、それを表示させるのもアリですね。

本の方は古い Vivado 向けのようですが役に立ちそうなので注文しました。サンプルコードにお世話になったし、Pmod VGA の方はもう少し応用が載ってるっぽいんで。

とりあえず Pmod VGA が使えてよかった〜。




2019/03/31

Arty に Microblaze を導入して、カスタムペリフェラルを組み込んでみる

FPGA などで RTL で作ったハードワイヤードの回路というのは全くもって融通が利かないし、かといってシビアなタイミングや本当の並列動作はプロセッサと組み込みのソフトでは厳しいですよね?

「だったら両方入ってればいいじゃん!」

はい、どっちも入れましょう。プロセッサ+カスタムペリフェラルという形で。仕事じゃないので好き放題できます(笑)

手元には二年半ほど前に買って、埃をかぶっている Arty が転がっているのでこれを使います。今回はプロセッサには流行りの RISC-V は今回は敬遠して、Arty に簡単に導入できる Microblaze を採用してみます。ちなみに Microblaze も RISC プロセッサです。RISC プロセッサに関してはこちらの有名な本をどうぞ。

Arty

ところで Arty は Digilent の FPGA 評価ボード。いくつか種類があるんですが、入手性はどうなんだろう?特にこの安い無印 Arty。これは確か DigiKey で購入したような。。秋月でも取り扱いがあります(2019.3)。他には Avnet から直接購入することも出来るようです。

Microblaze は Arty 以外でも導入することが出来るので、Arty にこだわる必要はありません。ただ、Arty 安いし、小型なので Cafe でデバッグ出来ますよ(笑)

さて前置きはこれぐらいにして、Arty に Microblaze を導入して、AXI バスに適合するペリフェラルを作って、Microblaze にくっつけましょう。最後に Microblaze に豊四季タイニーBASICを移植して、カスタムペリフェラルを BASIC から動かせるようにしてみます。
それでは、

  • Microblaze を組み込む
  • カスタムペリフェラルを作って Microblaze にくっつける
  • 豊四季タイニーBASICを移植する

を順に追っていきたいと思います。

  1. Microblaze を組み込む
    Arty に関しては沢山のドキュメントが揃っています。これを参考にします。豊四季タイニーBASICを動かすことを目標にしているので、Getting Started with Microblaze がぴったりです。Microblaze と UART (シリアル) が入っているだけですが、豊四季タイニーBASIC はシリアル端末で動作させる仕様なので十分です。とりあえずこのチュートリアルに従って Microblaze を入れてみましょう。
    ここで注意点が1つ。Xilinx の FPGA のツール Vivado の最新版 2018.3 (2019.3 時点)がこのチュートリアルに沿って Microblaze を導入しようとすると途中でコケます。あまり深く追求したく無いので、とりあえず 2016.4 を導入してみたらこのチュートリアル通りにはできましたのでこのバージョンで試した結果を書いておきます。そのうち新しいバージョンでも再度挑戦してみようとは思いますが、めんどくさいのでいつになるやら。あと高位合成などしないので、フリーのライセンスで OK。あと、Microblaze のプログラムをコンパイルするために Vivado のインストール時に XSDK もインストールすることをお忘れなく。
    とりあえず適当なターミナルソフト(チュートリアルでは Tera Term 使ってる)で Hello World が出ればよしです。ここで作るプロジェクト名はチュートリアルと同じ Arty_GSMB にしておきます。
  2. カスタムペリフェラルと作って Microblaze にくっつける
    AXI バスに適合したインターフェースを持つ回路を用意できればいいのですが、Vivado では AXI スレーブ・マスターのひな型を作ることができて、ライブラリに登録されるので、他のプロジェクトから簡単に導入できるんですね。AXI バスとひな型の作り方はこちらのブログで紹介されているので、こちらを参考にしました。

    とりあえず、電子工作をまったく行わずに独自のペリフェラルを作ってみます。
    題して
    「2倍演算機!」
    です。

    32bit のデータを与えるとそのデータを二倍にして返すというとてもシンプルな回路です。ペリフェラルにデータを与えて結果を受け取るという基本中の基本ができればあとは応用ですから。

    Microblaze において AXI バスのペリフェラルはメモリマップドI/Oと言って、そのインターフェースはメモリー上に位置しています。プログラムから見れば特定のアドレスにデータを読み書きすることでペリフェラルにアクセスすることができます。

    こんな感じ。

    ではさっそくカスタムペリフェラルを作ってみます。ここからは先ほどのブログと被るところが多々ありますが、一応書いておきます。
    最初に上記のチュートリアルで作成したプロジェクト Arty_GSMB を開いているならば、Vivado のメニューの Tools から、Create and Package New IP をクリックします。



    Create a new AIX4 peripheral を選択して Next。



    IP の Name を適当につけてあげます。alu_double にしました。



    AXI バスのインターフェースを決めます。割り込みの信号もここで用意できるみたいですが、今回はいらないので有効にしません(今度試してみよう)。Lite, Slave でバス幅を 32、レジスターの数も最小の 4 にしておきます。



    ひな型ができたらすぐ編集するので、Edit IP を選択して Finish。



    続いて Project Manager の Hierarchy の Design Sources の下にある alu_double_v1_0_S00_AXI をダブルクリックするとひな型のコードが右側に現れます。



    このコードには以下の4つのレジスタ slv_reg0,1,2,3 を AXI バスから読み書きするという簡単なコードが書かれています。ここに値を二倍する回路を組んでいきます。



    二倍演算といっても、C などのプログラミング言語で左に1ビットシフトすればよいだけですよね。RTL でも一緒です。そこで、slv_reg0 に書かれた値を二倍して、本来 slv_reg3 を読み出す代わりに、二倍された値を読み出せるようにします。ちなみに slv_reg0 を読み出す代わりに演算した結果でもいいんですけど、ここではあえてそうしてみました。以下の always 文は、指定されたアドレスの値を読み出し用のデータバスに出力するマルチプレクサのコードです。マークしたところが書き換えた部分。簡単ですね。実際合成される回路ではビットシフトは LSB には GND が接続され、他は単なる配線の付け替えという論理回路の消費ゼロなお手軽な演算回路が出来上がります。これでも立派な演算回路ですよね(笑)



    ではここで、最初に作ったプロジェクト Arty_GSMB に戻ります。Project Manager の Design Sources から system_wrapper の下の system_i をダブルクリックするとブロックダイアグラムが開きます。





    ダイアグラムエディタの左にある Add IP アイコンをクリックして、Search で alu とタイプしてみると、先ほど作成した alu_double がみつかります。ENTER して追加すると、ブロックエディタにこの IP がインスタンスされます。



    Run Connection Automation をクリックすると



    以下のようなウィンドウが現れるので、そのまま OK すると AXI バスに自作 IP を自動的に接続してくれます。アドレスのアサインも適宜おこなってくれています。回路作成はこれでおしまい。簡単ですね。素晴らしい!



    新しく作成した回路の Bitstream を生成して、XSDK にエクスポートしておきます。これは最初に Microblaze を組み込んだ時と一緒です。エクスポートする際には Include bitstream にチェックすることを忘れないように。




    以上で HW の作成はおしまいです。豊四季タイニーBASICの移植は分けてアップします。

    それにしても、AXI スレーブのひな形がかんたんに作れて、接続できてしまうのはいいなぁ。仕事ではこういったのは全て手で書き起こしていたのでとても便利に感じます。












2016/11/08

SDK から Project を作る

とりあえず SDK (xsdk) が起動したのはいいのですが、新しいプロジェクトを作ろうとすると SDK Log に

[Hsi 55-1545] Problem running tcl command

のようなエラーが出る。
ググるとどうやら症状は以下であるというところまでたどり着いた。
https://forums.xilinx.com/t5/Installation-and-Licensing/SDK-2014-4-path-problems/td-p/548958

それまでにパッケージのアップグレードやら、Xilinx のサイトにある .tcl コマンドの差し替えやらなんやらも試してみたりしたのだけど、最後に新規プロジェクトがうまく作れない理由は上記にあるように 32bit ライブラリ(i686) がないからだったようです。

困ったことに 64bit 版 Ubuntu に 32bit ライブラリを入れる方法はあちこちに散見されるのだけど、これといったのが見つからない。と、Xilinx のサイトを漁ったらまさにこれ、というのがありました。
https://japan.xilinx.com/support/answers/66184.html

** DocNav には 32ビットライブラリが必要です。
というくだり。Ubuntu へ導入するライブラリのリストと方法が書かれてます!
この手順に従ってライブラリをインストールすると。。

ようやく新規プロジェクトを作成するところまで漕ぎ着けました!!!

しかーし、Bitstream を Arty に流し込めたのはいいものの、Microblaze にソースをロード出来ない。。で最後の最後でまたハマってます。

やろうとしてるチュートリアルは以下。
https://reference.digilentinc.com/learn/programmable-logic/tutorials/arty-getting-started-with-microblaze/start

あ、なんか走ったっぽいけど、確認出来ない。
続きはまた後〜。

もう一つだけ。
シリアルポートは通常ユーザーではアクセスできないので、シリアルポートにアクセスできるグループに自分が所属しておくと便利。
http://qiita.com/chromabox/items/b3ceaab6efa6edde2bda






2016/11/05

Vivado インストール


Digilent の ARTY (Xilinx Artix-7) 買ってみました。DigiKey で(秋月でも買えますが、こっちの方が若干安かったので)。ということで、早速 Vivado をインストールしてみました。

我が家の PC は MacBook Pro (mid 2015) のみ。残念ながら Vivado は Mac に対応してないので、仮想マシン上の Windows か Linux にインストールするしかありません。また Mac (10.12.1 Sierra) に入れてる VirtualBox (5.0.23) の Windows は Win10 32bit 版。残念ながら Windows 版 Vivado は 32bit には対応してません。このために Win10 64bit 版を買うのも勿体無いので、Ubuntu に入れてみることにしました。

実は ISE を入れるために Ubuntu 14.x を導入してはいたのだけど、Vivado は Ubuntu 16.x 対応と書かれているので、ディスクスペースの都合もあって新たに Ubuntu 16.04 を入れました。

Vivado は Xilinx のhttps://japan.xilinx.com/support/download.html から Linux 用自己解凍型ウェブインストーラーを選びました。.bin ファイルがダウンロードできるのですが、これの実行方法が分からない!と思ったら単なるシェルスクリプトなんですね。

% sudo sh Xilinx_Vivado_SDK_2016.3_1011_1_Lin64.bin

でいいんじゃん。。悩みましたよ。Linux 用のインストーラーかと思ってましたが、全然違いました。

ARTY には Design Edition のライセンスが一年間ついてくるので、Design Edition を選んでインストール。ダウンロードには 2.5h ほどと出てたので、夜通しほっといたら朝には終わってました。

Vivado をインストールする過程で、License Manager から Web browser を開くタイミングがあるのですが、デフォルトでインストールされている Firefox ではうまくひらけなかったです。そこで、あらかじめ Google Chrome を導入しておけば問題なくライセンスの取得ができます。Chrome をインストールするとデフォルトのブラウザにするか?と聞かれるので、忘れずにデフォルトにしておくといいかも。

ところで、Chrome のインストールはハマる。以下を参考にすると良い。
http://robotics4society.com/2016/06/16/ubuntu-chrome/

ライセンスは Certificate Based License で、Virtual マシーンに付けたホスト名と ifconfig で調べた MAC アドレスを指定して Generate しました。

次に Digilent のドライバのインストールですが、インストールされていなかったので、手動で行いました。詳細は以下。

また root でインストールしちゃうと、~/.Xilinx が root で作られてしまって vivado 起動時に怒られてしまうので、~/.Xilinx は、

% sudo chown -R your_account ~/.Xilinx

とでもして自分のアカウントにオーナーを変えておきましょう。

あとは ARTY のボードの登録ですが、Digilent から board files をダウンロードしてきて、所定の場所に展開しておけば OK です。

ただ、Vivado_HLS に ARTY の設定をするには手動で行うしかないようです。
VivadoHls_boards.xml を落としてきて、ARTY の行だけ加えてあげれば良さそうです。
オリジナルのファイルは、

% find /opt/Xilinx/Vivado_HLS -name 'VivadoHls_boards.xml' -print

などで探してみて下さい。このファイルに ARTY のコンフィグを一行だけ挿入します。フォーラムにアップされてるファイルに置き換えてもいいのかもしれませんが、内容が古いと嫌なので、必要な部分のみの導入です。

ARTY を USB に挿して Vivado から Hardware Manager を起動すると認識したのでオッケーです。


とりあえずインストールはこんなところかなー。