2012年1月31日火曜日

w11でOSを実行する

FPGA上のPDP-11には各種デバイスは載っていない。実際にOSを実行する際には、PC上でハードディスクやシリアルによるコンソール接続をエミュレートするサーバーを動かして、FPGAと通信してデバイスの機能を提供する。その際、rlinkという専用の通信経路を使う。rlinkはPDP-11を動作させるためのインフラなので、PDP-11にとっては見えない。実際のFPGAボードではrlinkの入出力はおもにシリアル経由のUSBを利用する。

エミュレーターの場合は事情がすこし異なる。エミュレーター内の状態の変化を取り出すには、専用のインターフェースが必要である。w11aで提供されているghdlの場合、rlinkへの入出力部分はVHDLの記述をC言語で拡張したインターフェースによりnamed pipe経由で通信する。こういった拡張はエミュレーター依存であることに注意。

XilinxのISimなら実際のハードウェアに近いエミュレーションが可能なのだが、現在提供されていない。ISimはtclスクリプトによるコントロールが可能なので、これを使ってインターフェースを作ればいいはず。

ChipScope Pro Inserter をコマンドラインで使う(1)

XilinxのFPGAをJTAG経由で解析できるChipScope Proは、統合環境のISEだけでなくコマンドラインからも利用できる。詳しくはXilinxのドキュメントUG029であるChipScope Pro Software and Coresに詳しい記述がある。以下は、その際の注意書きである。

inserterを使う場合、Ubuntu 10.04では妙ちくりんなエラーが出た。

$ inserter
/opt/Xilinx/13.3/ISE_DS/ISE/bin/lin/unwrapped/cs_common.sh: 76: XIL_DIRS[0]=/opt/Xilinx/13.3/ISE_DS/ISE/: not found
/opt/Xilinx/13.3/ISE_DS/ISE/bin/lin/unwrapped/cs_common.sh: 76: count++: not found
/opt/Xilinx/13.3/ISE_DS/ISE/bin/lin/unwrapped/cs_common.sh: 152: Syntax error: Bad for loop variable
このcs_common.shというのは環境設定か何かをしているshell scriptで、先頭が#!/bin/shとなっているにもかかわらず、拡張文法を使っているのでshはエラーになる。bashなら処理できそうなので先頭を書き換えてみたが、症状は変わらない。どこかで/bin/shを決め打ちで呼んでいるようだ。したがって、/bin/shを/bin/bashに入れ替えるなどの対策が必要となる。


2012年1月4日水曜日

LinuxからAvnet Spartan-6 LX9 MicroBoardをプログラミングする

Avnet Spartan-6 LX9 MicroBoardのでかいほうのUSBの口にはAtmelのマイコンがぶらさがっていて、Digilentのfirmwareが乗っている。つまり、DigilentのUSB-jtagデバイスに見える。

これを操作するためのコマンドやライブラリーのたぐいは
/opt/Xilinx/13.4/ISE_DS/ISE/bin/lin/digilent/
に移動して(「13.4」はインストールしてあるISEのバージョン番号に置き換える)
./install_digilent.sh
を実行するとインストールできる(本来はISEのインストール時にインストールされるのかもしれないが未確認)。

Digilentから公開されている新しいファイルなどの情報は以下。
http://lighttomorrow.wordpress.com/2011/12/18/how-to-install-digilent-cable-driver-for-xilinx-design-suite-on-ubuntu-11-10/

bitstream(.bit)をMicroBoardに流し込むには、バッチファイルを作って、impactに渡す。

impact -batch foobar.impact

foobar.impactの中身はこんな感じ。

setMode -bscan
setCable -port auto
identify
assignfile -p 1 -file foobar.bit
program -p 1
quit

この時点ではfpgaのRAMに書かれているだけなので、リセットや電源を切ると忘れてしまう。

フラッシュROMイメージ.mcsの生成には以下のようなバッチファイルを使う。

setMode -pff
setPreference -pref StartupClock:Auto_Correction
setSubmode -pffspi
addDesign -version 0 -name "0"
addDeviceChain -index 0
addDevice -spi N25Q128 -p 1 -file foobar.bit
generate -format mcs -generic -spi -fillvalue FF -output foobar.mcs
quit

フラッシュROMイメージ.mcsの書き込みには以下のようなバッチファイルを使う。

setMode -bs
setCable -port auto
Identify -inferir
attachflash -position 1 -spi N25Q128
assignfiletoattachedflash -position 1 -file foobar.mcs
Program -p 1 -dataWidth 1 -spionly -e -v -loadfpga
quit
といってもimpcatを使ったROMイメージの書き込みはものすごく遅い。WindowsであればDigilentのSerial Flash Utilityを使ったほうがお手軽のようだ。そのへんのまとめが発売元の掲示板にあって参考になる。