Category: VHDL

Vivado HLSのメモ

最近Vivado HLSで高位合成を使い始めました。やっぱり、HDLを生で書くよりも圧倒的に早くコーディング・検証できるので、計算処理の記述ではとても助かっています。もしかすると、他の人の参考になるかもしれないので、作業していて気がついた点をまとめておきます。間違った記述があったらコメント欄で指摘してください。 Co-simulationでhandshake signals are not bundled to AXI_lite slaveというエラーが出る HLSでAXI-Liteで引数を渡す設定にしているときに、Co-simulationで というエラーが出ることがあります。たとえば、 これは、トップレベル関数の戻り値のdirectiveに を記述していないことが原因。void関数の場合でも、引数をAXI-Lite Slave指定にするときは、returnポートをAXI-Lite Slave指定にする必要があるようです。 AXI Masterポート指定のディレクティブのdepthの単位はバイト データの入出力をAXI Masterポートで行うときに、以下のようなdirectiveを指定しますが、この時のdepthはバイト単位。たとえば、uint32_t* buffer[32]のときは、depthは128(バイト)にします。これをワード単位で記述すると、Co-simulationのときにsegmentation faultでシミュレーションに失敗します。 トップレベル関数とC++のメソッド名が重複しているとCo-simulationが失敗する つまるところ、トップレベル関数名とstatic publicメソッド名を違うものにするとうまくいくようです。 Vivado HLS 2016.2でこのエラーになることは確認しました。新しいバージョンでは修正されているかもしれません。…

GROWTH FPGA/高速ADCボード – 2 – 拡張コネクタ

GROWTH FPGA/高速ADCボードに関する記事の第二回です。 GRWOTH FPGA/ADCボード関連の記事一覧 GROWTH FPGA/高速ADCボードの概要 GROWTH FPGA/高速ADCボードの拡張コネクタ GROWTH FPGA/高速ADCボードのFPGA書き込み パルス計測プログラムgrowth_daqのビルドと測定実行 このボードは2×20ピンの拡張コネクタ(2.54mmのソケット)を2個備えています。CN4がドーターカード用、CN5がRaspberry Pi用のコネクタになっています。 Raspberry Piはオンボードコンピュータ(搭載計算機)として、計算機・ストレージストレージまでボードと一緒に組み込みたい場合に接続します。ドーターカードは、検出器固有のアンプ回路や高圧電源モジュールを搭載するために利用します。ドーターカード用拡張コネクタには、アンプ出力を高速ADCのアナログ入力に接続するためのピンが用意されているので、ドーターカード上で生成した信号をケーブルを介さずに高速ADCで読み込むことができます。(2.54mmのソケットを利用しているので、アナログ帯域は数十MHzが限度と思われますが、FPGA/ADCボード上のADC用のバッファアンプ周りは、シマフジ電機さんの技術力でもっと高速な信号まで処理できるようになっています。広帯域が必要な場合はLEMOコネクタから直接信号を入力してください) Raspberry PiのGPIOコネクタに出ているSPI/I2Cはそれぞれ以下のように配線されています(ドータカードのデバイス構成は和田くんのPMT用アンプ・高圧電源ボードを使った場合の例)。 バス接続先接続されているデバイス SPI FPGA/ADCボード Slow ADC (MCP3208) Slow DAC (MCP4822) I2C ドーターカード…

【PIC】XC8で使用するRAM領域を制限する

自分用メモ。ちゃんと動くようになったら、サンプルをまとめたいと思います。 高エネルギー実験用のFlashADC FPGAボードのかなり大規模なVHDLコードの開発をしているのですが、FT2232D経由のシリアルデバッグを簡単化するために、CQPIC (PIC16F84のVHDL実装)をソフトコアCPUとして用いてソフトウエア制御しようと思っています。 まずは練習として、MPLAB Xで簡単なmain関数をC言語で記述し、コンパイルして生成されるHEXファイルを用いてXilinx ISEで動作シミュレーションするところまでは動きました。 外部IOの数が限られているので、今後、RAMをdual portにして特定領域にVHDL IPコア側からデータを書き込んで、PICに処理させるということをしてみたいと思います。そのために、XC8 C Compiler User Guideの§4.8.49 –RAM: Adjust RAM Rangesに書かれているオプション指定を勉強する必要がありそう。

VHDLを整形(format)したい

VHDLを記述していると、とくにXilinxのISEではコードの整形が結構めんどうです。EclipseだとShift+Command+Fとすると、自動的に指定したルールにもとづいてフォーマットしてくれて、authorによらず統一的な見た目にできますが、残念ながらEclipseのVHDLプラグインはいいものがありません。 そこへくると、Emacsはさすが機能豊富で、整形機能付きの「VHDLモード」を持っています。 MacにインストールされているEmacsでは、.vhdや.vhdlという拡張子のファイルを開くと自動的にVHDLモードになり、 syntax coloringをしてくれます。このモード内で、 Ctrl+C をしたあと、 Ctrl+B すると、コードが整形されます。以下がその例。 Emacs VHDLモードのオフィシャルページはEmacs VHDL Modeにあります。 作者やメンテナのReto ZimmermannさんとRod Whitbyさんに感謝! Thank you Reto and Rod for very nice contribution, the Emacs VHDL…