IchigoJamで以下のプログラムを実行し、OUT1端子の波形をオシロスコープ FNIRSI-1013D で観察してみた。
10 OUT1,1:OUT1,0:GOTO10
今回は、以下の製品を用いた。
製品 | ファームウェア |
---|---|
IchigoJam U | 1.0.0 |
IchigoJam S | 1.3.1 |
IchigoKamuy | 1.4.1 |
IchigoJam R | 1.5b |
ビデオ出力あり
IchigoJam U
短い周期と長い周期の部分が交互になっている。
18.7ms中、長い周期の部分は13.6msであった。
18.7msで11回実行できているので、1秒あたり約588回実行できていることになる。
IchigoJam S
短い周期と長い周期の部分が交互になっている。
18.6ms中、長い周期の部分は11.4msであった。
18.6msで9回実行できているので、1秒あたり約484回実行できていることになる。
IchigoKamuy
短い周期と長い周期の部分が交互になっている。
18.2ms中、長い周期の部分は11.3msであった。
18.2msで9回実行できているので、1秒あたり約495回実行できていることになる。
IchigoJam R
他の3機種ほど目立った差ではないものの、短い周期 (比較的濃い表示) と長い周期 (比較的薄い表示) の部分が交互になっている。
16.7ms中、長い周期の部分は12.0msであった。
周期が短いとき、420μsで2回実行できているので、1秒あたり約4762回実行できていることになる。
周期が長いとき、511μsで2回実行できているので、1秒あたり約3914回実行できていることになる。
長い周期の部分の割合を考えて平均すると、1秒あたり約4153回実行できていることになる。
ビデオ出力なし
IchigoJam U
周期のムラがみられなくなった。
2.37msで4回実行できているので、1秒あたり約1688回実行できていることになる。
IchigoJam S
周期のムラがみられなくなった。
2.17msで2回実行できているので、1秒あたり約922回実行できていることになる。
また、IchigoJam U ではHIGHの時間:LOWの時間が約1:2であったが、IchigoJam S では約5:6となっている。
IchigoJam U と比べて GOTO
命令にかかる時間は約0.7倍になったものの、OUT
命令にかかる時間が約2.5倍になっているようである。
IchigoKamuy
周期のムラがみられなくなった。
1.33msで1回実行できているので、1秒あたり約752回実行できていることになる。
IchigoJam S よりさらに OUT
命令にかかる時間が伸びている。
IchigoJam R
2.13msで10回実行できているので、1秒あたり約4695回実行できていることになる。
やはり、OUT
命令にかかる時間は GOTO
命令にかかる時間に比べてかなり大きいことがわかる。
ビデオ信号の調査
ビデオ出力ありのとき、IchigoJam R 以外においては実行の周期に大きなムラがみられた。
そこで、ビデオ出力とは具体的にどのような信号なのかを観察してみた。
オシロスコープでの観察
まずは、IchigoJam R について、VDO1端子をCH1、VDO2端子をCH2として観察を行った。
まず、約16.7msごとにVDO1端子に比較的大きい谷がみられた。
拡大すると、約63.7μsごとにVDO1端子に谷があり、谷と谷の間でVDO2端子が何らかの信号を送っている様子がみられた。
さらに拡大すると、VDO2端子の信号の幅は最小で約150nsらしいことがわかった。
ロジックアナライザでの観察
ビデオ信号がどの程度の速さの信号かがわかったので、
USBロジックアナライザ - 24 MHz/8チャンネル(Type C コネクタ) — スイッチサイエンス
でキャプチャしてみることにした。
CH0をVIDEO1/VID1、CH1をVIDEO2/VID2に接続し、さらにCH2を最初に提示したプログラムを実行中のOUT1に接続した。
24MHzでのキャプチャを行った。
IchigoJam U
VIDEO1では、約61.3μsのLOWの後に約2.3μsのHIGHを出力するパターンを11回 (700.5μs) 繰り返した後、約63.7μsのLOWを出力し、
約4.7μsのLOWの後に約59.0μsのHIGHを出力するパターンをしばらく (15856.5μs) 繰り返す、というパターンがみられた。
VIDEO2では、VIDEO1がLOWからHIGHになった後一旦パルスを送り、その後VIDEO1がHIGHの間に何らかの信号を送っている様子がみられた。
また、4457.2μsの間VIDEO2がLOW固定になり、この間OUT1の信号の周期が短くなる様子を観察できた。
IchigoJam S
VIDEO1では、約61.3μsのLOWの後に約2.3μsのHIGHを出力するパターンを12回 (764.8μs) 繰り返した後、約63.7μsのLOWを出力し、
約4.7μsのLOWの後に約59.0μsのHIGHを出力するパターンをしばらく (15793.3μs) 繰り返す、というパターンがみられた。
VIDEO2では、VIDEO1がHIGHの間に何らかの信号を送り、VIDEO1がLOWになる前後ではHIGHになる様子がみられた。
また、4410.0μsの間VIDEO2がHIGH固定になり、この間OUT1の信号の周期が短くなる様子を観察できた。
IchigoKamuy
VIDEO1では、約61.3μsのLOWの後に約2.3μsのHIGHを出力するパターンを11回 (701.0μs) 繰り返した後、約63.7μsのLOWを出力し、
約4.7μsのLOWの後に約58.8μsのHIGHを出力するパターンをしばらく (15856.8μs) 繰り返す、というパターンがみられた。
VIDEO2では、VIDEO1がHIGHの間に何らかの信号を送り、VIDv1がLOWになる前後ではHIGHになる様子がみられた。
また、4408.7μsの間VIDEO2がHIGH固定になり、この間OUT1の信号の周期が短くなる様子を観察できた。
IchigoJam R
VID1では、約59.0μsのLOWの後に約4.6μsのHIGHを出力するパターンを3回 (190.7μs) 繰り返した後、
約4.8μsのLOWの後に約59.0μsのHIGHを出力するパターンをしばらく (16466.3μs) 繰り返す、というパターンがみられた。
VID2では、VID1がHIGHの間に何らかの信号を送っている様子がみられた。
他の機種とは違い、送る信号が無いときにVID2が周期的にHIGHになることはないようである。
Ichigojam R ではOUT1端子の周期の変化が小さく、関係を観察するのは難しそうである。
まとめ
今回の実験において、各製品ごとの、1秒あたりOUT1端子の信号がHIGHになった回数は、以下のようになった。
「信号周波数比」は、ビデオ出力ありのIchigoKamuyの信号周波数を1としている。
製品 | 信号周波数 (ビデオ出力あり) |
信号周波数 (ビデオ出力なし) |
信号周波数比 (ビデオ出力あり) |
信号周波数比 (ビデオ出力なし) |
---|---|---|---|---|
IchigoJam U | 588 | 1688 | 1.188 | 3.410 |
IchigoJam S | 484 | 922 | 0.978 | 1.863 |
IchigoKamuy | 495 | 752 | 1.000 | 1.519 |
IchigoJam R | 4153 | 4695 | 8.390 | 9.485 |
IchigoJam U 以外については、
IchigoJam速度比較 ~IchigoJam Rが10倍速いってマジ?~ - Qiita
での結果とだいたい同じ信号周波数比 (相対速度) となった。
一方、IchigoJam U においては、IchigoJam S や IchigoKamuy より高速という結果が得られた。
これは、最近のバージョンの OUT
命令は前のバージョンより多機能であり、その分遅いためであると考えられる。
ビデオ信号の仕様は製品によって変わらないと予想していたが、予想に反して以下のような違いが見られた。
製品 | VIDEO1の 長いLOWの回数 |
VIDEO1の 長いLOWの区間の最後 |
VIDEO1の 長いLOW前後のVIDEO2 |
VIDEO1の 短いLOW前後のVIDEO2 |
---|---|---|---|---|
IchigoJam U | 11+1 | LOW | LOW | 立ち上がり後短いHIGH |
IchigoJam S | 12+1 | LOW | HIGH | LOW前後でHIGH |
IchigoKamuy | 11+1 | LOW | HIGH | LOW前後でHIGH |
IchigoJam R | 3 | HIGH | LOW | LOW |
IchigoJam R 以外においては、VIDEO2が信号を送るとき実行が遅くなる様子が観察できた。
Rを除くIchigoJamシリーズでは48MHzで動作するマイコンが使われており、6MHzで切り替わる信号では1回の切り替えあたり8クロックしかない。
したがって、この切り替えのたびに割り込みをかけるのは難しそうである。
よって、VIDEO2が信号を送っている間は信号を送る処理に集中するためBASICのプログラムは実行されず、BASICのプログラムは信号を送る処理の合間をぬって少しずつ実行されるため、遅くなると考えられる。
一方、IchigoJam R においては、
IchigoJam R & IchigoSand 発表、HHKB他USBキーボード対応するRISC-V版、Zen言語でかんたんマシン語両対応 zen4ij
に
ビデオ信号の出力が、DMA(Direct Memory Access)によって空いちゃいました。
という記述があり、VID2が(DMAを用いて)信号を送っている間にも並行でBASICのプログラムを実行していると考えられる。
今回掲載した画像からも、VID2が信号を送っている最中にOUT1が変化している、すなわちBASICのプログラムが実行されていることがわかる。
おわりに
※IchigoJamはjig.jpの登録商標です。
※IchigoKamuyは株式会社syushuの登録商標です。