2020まとめ

一応書いておくか

結婚した (2/20)

マジ?

twitterにしか書いてなかったけど結婚した。

鹿児島へ行った

そのあと鹿児島へ行った。
あんまり考えないで決めたけど、このあと旅行行くのも難しくなってしまったので行っておいてよかったと思う。

桜島を自転車で一周した。しんどかった…

3日いたけど噴火はしなかった。

トイレットペーパーがなくなった

これ以来家のトイレットペーパーの残弾が無くなってきたら、

「お前はあのときの悲劇を忘れたのか」

と心に刻んで買いにいくようにしている。備蓄は大事

3月の終わりに積雪した

エモくてよかった

緊急事態宣言

もう忘れてるが3/14に出ている

4月

なんもしてない。

家に閉じこもっているのが苦痛すぎて晩御飯の写真を毎日撮っていた記録が残っている。

この頃、色々考えたことを書いておくべきと思ったけど、結局書いてない。もう当時の気持ちは忘れてしまって、なんか日常になってしまったな。

家に閉じこもっているのも苦痛ではなくなってしまった。

5月

起きている時間全部仕事していた。

適度に重いタスクがあると生きている実感があっていいよな。ハゲる夢を3回くらい見た記憶がある。

6月

Green500が1位だった。まあ頑張ったと思う。

7月

8088で遊んでいた。

https://twitter.com/tanakmura/status/1289578933168435201

最終的にはPONG的なものを動かすまでやっている。

権利的なものに配慮して、これは何も見ないで記憶だけで作ったけど、実物見るともっと玉のスピードがはやい。

https://w0.hatenablog.com/entry/2020/07/10/003159

ここには書いてないが、ボードファイルの更新が反映されてないので、githubからソース取ってきても動かないです。

これはXilinxのボードファイルのディレクトリ構成がカスすぎて使いづらいのが悪い。(といってもスクリプト一回書けば終わる作業だけど)

8月

なんか色々

9月

子供が生まれました。

なんか色々あったけど、僕の個人情報ではないので、子供が大きくなったら本人に聞いてください

10月

特に記録が残ってない。

多分このあたりから引きこもり生活に慣れてきている。

というか引きこもりメンタルだった頃の本来の自分を取り戻してきている(いいのか?)

11月

親しらずを抜こうと決意したのが9月で病院混んでいたのでやっと話しに行けたのが11月。

抜くのは1/6です。がんばってね。

12月

世間は大変やな…

所感

なんか色々あったなぁ

まあよかったと思う。

FPGA で 8088 (D8088-2) を動かして自作PCをやる

これまでのあらすじ : https://twitter.com/tanakmura/status/1280152564898557952

FPGAHello World以上のものが書きたいという気持ちは前からあったので、この機会に少し実用的はHDLを書くことにした。

なにをやっているかの解説を書いておこう。

ソースは、 https://github.com/tanakamura/jisaku_pc_8088 ここにある(上のツイートでは、タイミング問題があってLED点灯しないことがあると書いてるが、これは多分改善してあるはず。)

こういう昔のCPUは、CPU側の命令実行とバスが直結していて、ポインタ0x80 を読むと、CPUの足に、そのまま0x80が出てくる。それを正しくハンドリングして、有効な命令バイト列を返せば、8088を動かすことが可能だ。

この実装では、この足から出てくる信号をデコードして、うまくなんとかやる回路をFPGAに実装して、8088を動かしている。

実装しているペリフェラルは以下

アドレスが18bitしかないのはアドレス線18本しかひっぱってきてないからです…(昔のCPUはアドレス線繋がなくても動くんだなぁ…)

信号の解釈は、ぐぐって出てきたPDF(色々クリアなものかは知らない…)を参考に実装している。


まず、いきなり実機でやるとしんどそうなので、tv80 をFPGAで実装して、シミュレーションとかFPGA単体で動かしたりして、8bit バス ←→ AXIバスの変換が正しく動いているかを確認した。

ただ、Z80 と 8088 はバスの信号が変わってるので、完全に同じではない、そのへんはしかたないので実機で確認した。

https://github.com/tanakamura/jisaku_pc_8088/blob/master/top_hdl/i8088_top.sv#L249 (ALE)

https://github.com/tanakamura/jisaku_pc_8088/blob/master/modules_hdl/i8088_cpu.sv#L214 (WR,RD,IO)


クロックは、DDR使ってみたかったので(結局使ってないが)、 https://reference.digilentinc.com/learn/programmable-logic/tutorials/arty-getting-started-with-microblaze-servers/start これを参考にして、83.333 MHz を AXI のバスクロックにして、それを1/15にして、5.555MHz を作ってそれを8088に入れている。D8088-2 なので、2MHz - 8MHz の間で動くはず。

AXI と CPU クロックが違うので、クロック変わるところはAXI側クロックで2回サンプリングして一致してたらAXIバスクロック側にコピーするようにしている。(これでいいかは知らない。真面目にやるなら非同期キューというものを作るらしい)

これで出たアドレスを https://github.com/tanakamura/jisaku_pc_8088/blob/master/modules_hdl/addr_converter.sv AXIアドレスにあうように変換している。


物理回路のほうは、全く初心者だったので、結構手探りだった。特に一番謎だったのは、現代のFPGAと昔のCPUの信号線を直結していいのか?という点だった。電圧違うとかだと、壊れる気がしたので、それなりに真面目に調べた。

中でも http://www.cepstrum.co.jp/hobby/5v33v/5v33v.html この「そんなに真面目に変換しないでいい」という説は採用していいのかかなり悩んだが、結局8088はクロックだけは確実に5Vを入れる必要があるということがわかって、これは採用しないことにした。あとADの8本は方向変わるので、これもどうしたらいいかよくわからなかったので。

結局よくわからんので全ての信号線に http://akizukidenshi.com/catalog/g/gM-08250/ これを入れることにした。あとから考えたら、今のFPGAの出力では昔の8088のバスを動かすだけの電流流せない可能性があったので、ちゃんとバッファありの電圧変換にしたのは余計な問題踏む確率が減るという点で正解だったと思う。


で Fritzing で超汚い回路図を書いて、ブレッドボードにして、それを奥さんに実装してもらった。Fritzingは、ブレッドボード図と回路図で整合性取れてるか調べられて、汚い回路図でもまあショートしてないかぐらいは確認できたので、まあよかったかな。
f:id:w_o:20200710002938p:plain
(あ、なおすの忘れてたけど、一番右上の2DIRはGNDに接続するのが正しいです。あと今はSSOはA17につなげてます)

(なお、これはICの幅をまちがって書いていて、実際はもう2列占有する)

ADの8本はZになる可能性があるので、10kのプルアップを入れてる。(プルアップが必要な理由も今回はじめて知りました)


最後に、spi flash へ 8088 のプログラムを書き込む時に、vivado なしでも書けるようにして、完成。
https://github.com/tanakamura/jisaku_pc_8088/blob/master/flash/flash.tcl

OpenOCD があれば、raspberry pi からでも8088 のプログラムが更新できるようになっている。(flashの0x0080_0000にプログラムを置くと、CPU の 0x10000 にマップされる)
これは将来本格的にプログラムを書くことになったときにTAT短縮のために必須の機能だと思ったので。


最初動いて、ILAで8088からの信号が届いたのが見れたときは感動しましたね。何十年も故障しないで生きててえらい!


まあ少し大きめのHDL書けたので満足かな。SystemVerilog は Verilog HDL(略してVHDL(大嘘)) より色々便利になってたのでよいと思った(まあASICで採用するのは難しいかもしれんが)

追記 : Digilent の Arty のボードファイルは、SPIのSSとIOAがいれかわっているので、そのままでは使えないです。(https://github.com/Digilent/vivado-boards/commit/9c664934db09612f4d1f4aff7b3d6a58251d9577) 手元で入れかえて使ってください。

Preferred Networksの深層学習用スーパーコンピュータMN-3がスーパーコンピュータ省電力性能ランキングGreen500で世界1位を獲得

https://preferred.jp/ja/news/pr20200623/

特に書いてなかったけど、10月に転職したものの、ディ〜プラ〜ニングもよくわからんのでこれをやっていた。HW詳細は公開されてないのであまり面白い話題は書けないけど、嬉しいので記録しておく。

(twitterにしか書いてなかったけど)転職前は https://www.pezy.co.jp/news/news20171213/ これをやっていて似たようなことばっかやってますね…

https://twitter.com/tanakmura/status/923517981610729473


PEZYの実装は今はどうなっているか知らないけど、大きく変わってなければ、今も僕が最後10%チューニングしたプログラムが残ってるはずで、ランク1位のプログラムとランク3位のプログラム両方僕の手が入ってる可能性がある。

https://www.top500.org/lists/green500/2020/06/

まあ書ける範囲で書くと今回はRoCEに触れる機会があったのでよかったかな…ちなみに、RoCEはソフトウェア的に見たらIBとほぼ同じだった。




今回もdgemmは人が書いたやつ使ったのでまたdgemmは書けなかった…

https://twitter.com/higucheese_/status/1275079017465442305

私もdgemmツメツメしたかった…(けど、ひぐち〜ずさんの実装は僕の目標性能より大分良かったので、僕がやらなくて正解だった)



去年の10月はマジでもう二度と仕事なんかしないぐらいの気持ちだったのだけど、まあHPLを書くことで元気が出て楽しく作業できた。

PIC

https://tanakamura.github.io/pllp/docs/pic_pie.html

PIC の説明を書いた。

うやむやにしたけど、32bit でもラベルとの相対位置をオペランドにいれてPCと加算すればGOT参照しなくてもアドレス取れる気がするんだけど、そうなってない理由はよくわからん。(メモリ参照が一回減らせる)

http://w0.hatenablog.com/entry/20060121/p1
関連記事で出てきたが(これは自動で見つけてきてえらいと思った)消してしまった黒歴史はともかく、J ver.2 を無くしてるのがかなしいな…もしかしたらHDDどれかに残ってるかもしれないが、どうやって探したらいいかもわからん。

あと http://nano.flop.jp/log2/200706.html#2007-06-28 これの日記システムの生成プログラムもなくしている(気がする)

あと忘れてたが https://tanakmura.hatenadiary.org/ これもある。(将来なんらかの理由で移行が必要になったときに忘れないようにしよう)

http://nano.flop.jp/log/index.html

見てて思ったが、2003年からのログ残してるってえらくない?17年前やぞ。

いやでも昔見てたブログとか見て回ったけど、みんな2001年ぐらいから残してるな…

http://jkondo.hatenablog.com/archive/2001 jkondoも2001年からだし、このぐらいからブログという形でフォーマットが統一されはじめたんだろうか。(もう覚えてない)


記憶をたどって探した限りで一番ログが古いのがやねうらおさんの http://bm98.yaneu.com/rsp/loglist.html これかな…日付が99/4からしかついてないけど、少なくとも99年のログはある。

しかし https://pc.watch.impress.co.jp/docs/article/backno/98index.htm pcwatch の 96/4 に勝てるのは見つからないな。

int.main.jpのコンテンツをhttp://nano.flop.jp に移動しました

http://nano.flop.jp

flopsじゃないのか…

http://nano.flop.jp/txt/index.html 勉強会用に書いた文書はリンクしなおした。

最新のバックアップがやばいSSD(https://www.amazon.co.jp/dp/B077T9XKHM) にしか入っていない状態が続いていたのでよく考えたら危なかった。

やばいSSDはアクセスできないセクタが発生して交換したので今は使ってない。