lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

Cyclone10LP基板ができたのでLチカ

基板到着

新型コロナの影響なのか国内の基板製造にみなさん移行しているようで、いつもより時間がかかりました。


f:id:Lynx-EyED:20200314105024j:plain
2層基板、L/S=5milです。Raspberry Pi Zeroにスタックできる設計。
特に実装エラーもなかったようで安心。基板製造前の指示で認識マークを基板本体にも追加しています。
こんな感じでラズパイにスタックして使います。とてもコンパクト。

f:id:Lynx-EyED:20200314113714j:plain
基板検査がてらラズパイと一緒にいじりました。
ラズパイ経由でFPGASRAMを書き換え、デバッグバウンダリスキャンができます。HDLコンパイルは自宅のWindowsで行い、遠隔地に仕掛けたラズパイからFPGAをコンフィグし、結果を取得するといった完全リモートでFPGAを扱うことができます。

f:id:Lynx-EyED:20200314111852p:plain
この基板は遠隔でソフトコアCPUを実装する必要がある時に活用できるかもしれません。
ロスコンパイラとJTAGデバッガをラズパイにインストールしておき、

  • 低消費電力要求時:動作周波数を下げたソフトコアCPU、最低限のペリフェラル
  • 処理性能要求時:高速ソフトコアCPUと差動バス

などと状況に応じた機能を遠隔でコンフィグするなどの動作ができます。その後ラズパイ上のコンパイラ(もちろん遠隔からでも)からバイナリを流し込めます。

全日本Lチカ人権宣言

基板を作ってもLチカができないと人権を剥奪されるおそれがあるらしいようなのでLチカ人権宣言を行いました。
一番簡単なのはHDLでクロックを分周して下位のビットをLEDを接続した端子に出力する方法です。



めんどくさいので今回はやりません。ぼくFPGAとかHDLとかわかんないし。



Raspberry Pi ZeroからCyclone10LPへバウンダリスキャンレジスタからLED端子に1/0を書き込みます。
ラズパイにUrJTAGを使います。GPIOを使うビルドが必要になるので、以前のブログの方法でビルドするといいと思います。
Raspberry Pi 3でUrJTAGを使う - lynxeyedの電音鍵盤
インテル(アルテラ)のFPGAではJTAGモードではTDO/TDI/TCK/TMSの4端子を使います。それぞれがラズパイのGPIOに接続されている必要があります。
UrJTAGにラズパイのどの端子が、FPGAのTDO/TDI/TCK/TMSのどこに対応するか伝えます。
なおラズパイの40pinの端子番号ではなく、マイコン(BCM283x)のどのGPIOに対応しているか、で伝えます。
今回は

TDO=20, 
TDI=21, 
TCK=26,
TMS=19

に対応して接続しています。ラズパイのピン番号とBCM283xの対応が知りたい時は、以下のようにします。

sudo apt update
sudo apt install python3-gpiozero

$pinout

UrJTAGに認識させます。

sudo jtag

cable gpio tdo=20 tdi=21 tck=26 tms=19   
detect

おそらく、以下のメッセージになると思います。

IR length: 10
Chain length: 1
Device Id: 00000010000011110011000011011101 (0x020F30DD)
  Manufacturer: Altera (0x0DD)
  Unknown Part! (001000001111001) (/usr/local/share/urjtag/altera/PARTS)

バイスが不明です。BSDLファイルが必要になります。
インテルのページから取得できます。必要なのはCyclone10LP:10CL025U256のBSDLファイルです。
Intel Cyclone 10 LP Device BSDL Files
UrJTAGへBSDLファイルを導入する方法は多くのブログで取り上げられているので扱いません。
参考になるブログ

BSDLファイルを導入できると、先程のメッセージが変わると思います。

IR length: 10
Chain length: 1
Device Id: 00000010000011110011000011011101 (0x020F30DD)
  Manufacturer: Altera (0x0DD)
  Part(0):      10CL025U256 (0x20F3)
  Stepping:     0
  Filename:     /usr/local/share/urjtag/altera/10cl025u256/10cl025u256

さてLチカです。バウンダリスキャンレジスタにピンの状態を書き込んで点滅させます。
この基板ではLEDはCyclone10LPのIO84(PIN_L15)/IO85(PIN_L16)に接続されています。
先ほどのBSDLを見ると、

--I/O Pins
......(中略), 
       "IOL16   : L16  , IOL15     : L15  , IOK16     : K16  ,
..............

とありました。IOL15,IOL16の状態をバウンダリスキャンレジスタ経由で書き換えます。
以下のスクリプトhoge.txtという名前で保存します。

cable gpio tdo=20 tdi=21 tck=26 tms=19
detect

instruction EXTEST
shift ir
set signal IOL15 out 0
set signal IOL16 out 1
shift dr
usleep 500000
shift ir
set signal IOL15 out 1
set signal IOL16 out 0
shift dr
usleep 500000

shift ir
set signal IOL15 out 0
set signal IOL16 out 1
shift dr
usleep 500000
shift ir
set signal IOL15 out 1
set signal IOL16 out 0
shift dr
usleep 500000
shift ir
set signal IOL15 out 0
set signal IOL16 out 1
shift dr
usleep 500000
shift ir
set signal IOL15 out 1
set signal IOL16 out 0
shift dr
usleep 500000
shift ir
shift ir
set signal IOL15 out 1
set signal IOL16 out 1
shift dr

以下のコマンドで実行します。

sudo jtag hoge.txt

動作風景
youtu.be

次回

RISC-V界隈で完成度がすごく高く、フリーで商用利用OKとホットなSyntacore社のRISC-VコアSCR1をCyclone10LPに移植したので、紹介いたいます。
お楽しみに。