2026.02.01 00:29

FPGAは一応の完成かな


・気がつけば2月か。
・ぼちぼちとソースコードの整理。大した長さではないのだけどタイミングが絡む部分だけにどうもややこしいのと、テスト環境がブレッドボードでにデュポンワイヤーで接続ということによる不安定さもあるようでなかなか。
・とりあえずはできたかな。あとドキュメントを書いたり余計な部分を削ったりという感じだろうけど。
・明日はRaspberryPi側をちょっと小細工だな。

2026.01.31 16:42

SPI経由でGPIOが読めた・・・な


・ある程度動いたのでGPIOのデータをSPI経由で読めるように細工することに。
・SPIでの1バイト目がレジスタ番号とすると、2バイト目を読むときにはレジスタ値を用意しないといけない。SPIのクロックに同期させて動かしていると間に合わないしでどうしようかなというところで、とりあえず2バイト目をバイパスして3バイト目で8ビット分だけ読むように書いてみたら動いたようだ。
・さて、次はどうしたものかな。書き方は思いつくけどちょっと格好悪い。もう少し格好良く綺麗にいかないものかと考え中・・・考え中。


2026.01.30 07:20

とりあえず合体


・いままでダミーデータをセットしていたロジックを分離して信号を外に引き出さないといけないな。ここはサブモジュールとの間なのでイメージ的にはケーブルのつながったモジュールがズルズル・・・引きずり出す感じ。
・なんとなくうまくいったので今度はSPI
・こちらもサブモジュール化した上でトップモジュールに取り込み。手慣れた感じだな。
・さて、こちらを試しているとなんだか結構な率でリードしたデータがおかしい。FPGAが受け取ったデータはエラーが無いし、シミュレーション上でも特にタイミング的に変なところもない。SPIなんてCS下げてから1クロックずつデータを送るだけなので、それほど悩むことではないだろう。
・とりあえず少しタイミングを調整したほうが良いかなということと、なんとなくいくつかSPIバス対応のセンサICなどを見ていると今使っているmode0ではなく、mode2やmode3を使っているものが多そうな雰囲気だったのでmode3を使うことに。これでだいぶ良くなったかな。
・そんなことをしていてふと、・少なくとも自分が使う範囲では結構自由に使えるようになったなぁと改めて思う。「書きなぐり」ができるようになったしな。目的がはっきりしていて毎日リトライを繰り返していけば学習していくというのはAIと同じか。
・合成は通るけどQuestaのシミュレーションではエラーを出すというのはなんだろうな。信号の宣言が使用される場所より後ろにあると駄目というのが典型的な場面だけど。

2026.01.28 13:15

とりあえず部品は揃ったかな


・とりあえずうまくいったように見えるので次はSPIバス側かなということで改めてチェック。
・以前どうやってたかなという感じ。RaspberryPi Zeroで毎回日付時刻が初期化されてしまうので、ls -lrtではどれが最新なのかわからないけど、中身を見て確認。
・これだなということでソースコードを見て、FPGA側のソースコードを見てという感じ。一瞬何をやっているのかと思ったけど、あぁという感じで思い出した。
・そうそう、SPIでCSされた時の先頭バイトの初期化を省略したから先頭バイトは前回最後に用意したダミーデータだな。
・さて、部品は揃った。あとは一気にやるだけ。

2026.01.27 09:38

とりあえず解決したかな


・昨日の続き。
・FPGAのドキュメントやらIPのドキュメントを眺めて色々やるのだけど、うまく行かなかったり改悪になったりして、そのたびにgit reset --hard HEAD@{0}の繰り返し。
・タイミング図やらシミュレーション波形をにらみながらやっていった結果、FIFOへの書き込み信号生成のステートマシンは自体はクロックの立ち上がりエッジで動かして、これで生成した書き込み要求(fifowrとでもしておく)を反転したクロックで取り込んで1/2クロックおくれたものを作る(fifowr_delayとでもしておく)
・で、FIFOのFULL信号(FIFO_FULLとでもしておく)がアサートされるまで書き込み要求信号をアサートするので
 assign fifowr_req = ~FIFO_FULL & fifowr & fifowr_delay;
てな具合で、立ち上がりをクロックの立ち下がりエッジに同期させておくという形。
・これで昨晩まで悩まされた10000回ループも問題なく動き出した感じ。
 今回はFULLになるまで連続書き込みなので、fifowrの立ち上がりより前にFIFO_FULLがアサートされるのが早いので幸いしているのだろうな。
・ということで、「アサートしはじめるのはクロックの立ち下がりエッジに同期させないとだめよ」という結論だな。

2026.01.26 09:14

FIFOの珍妙挙動

・ある程度動き出した感じだったのでテストプログラムを変更して連続リードライトをやってみると、また変な現象がでてきた。
・ダミーデータのライト部分で同じデータを2度書きしたような挙動になったりする。
・まぁ、私の分担範囲は読み出し側であり、そちらはちゃんと動いているようなので良いのだけど、なんだこれは。
・ということで、書き込み側のロジックを見直して、タイミングを少しいじってみたらなんとなく良い感じになったかな。
・100回程度なら良さそうなので10000回繰り返してみたらやっぱりおかしい。更に変なのは途中でFIFOがハングアップすることがあるようなこと。
・信号を外に引き出してLEDで確認すると(DE10LiteはLEDがたくさんあるのが助かる)FIFOがFULLではない状態でライト信号はアサートされたまま、リード信号はネゲートされたまま。つまり、読み出さずにひたすら書いているのにFIFOがFULLにならないという奇っ怪現象。もちろんクリア信号もアサートなんてされていない。なんだこれは。

2026.01.25 23:04

なんとか動きだしたかな


・書き直してシミュレーションして修正というのを繰り返して、実機で確認するとちょっとおかしい。手を入れているうちにまたわからなくなってきたので、さっきの変更までgit reset --hardして復旧。
・改めて書き直してチェックしたら予定通り動き出して一安心。
・実機ではまだチェックできない挙動についてテストベンチをいじってチェックするとちょっとおかしい。
・こちらは、単純にムーア型のステートマシンで組んでいくとどうしても1クロック遅れる。すると、1クロック分余計に動いてしまうというのが原因だった。
・仕方ないので組み合わせロジックも組み入れてなんとか対処。まぁ、組み合わせる相手も一応クロックに同期しているはずなのでこれでも一応問題はないはず。
・しかし、git様様だな

2026.01.24 16:07

ブランチ戻してリスタート


・git branchで元に戻して動作確認、新規ブランチを切って・・・まずはFIFOを埋め込んで、そちらの動作を再確認。
・このFIFO、データシートの文章ではクロックの立ち上がりエッジに同期して使えば良いような書き方だけど、図ではリード、ライト信号などはクロックの立ち下がりエッジに同期させている感じで描かれている
・たとえば、FIFOのFULL信号は確かに立ち上がりエッジに同期して出力されるけど、これを次のクロックで検出してリード信号を落とすのではだめ。まぁ、そりゃそうなんだけど。
ということで、このあたりの信号はちょっと小細工しないといけないのだけど、ここがだめだったのかなぁ。一応シミュレーションではうまくいってたのだけど。
・まぁ悩んでいても仕方ないので、別の方法を考える。リードライト信号をクロックの立ち下がりで生成するブロックを本体のステートマシンから独立させて・・・と。
・これでFIFOのリードライトをするテストブロックを作って接続。シミュレーションは通った。さらに実機の7セグメントLEDに動作状態表示して動かしてみたら良い感じで動作した。ここまでは問題なし。

2026.01.23 15:16

うまくいかないな


・なんとかなだめすかしてみようと思っているのだけど、うまく動かない。
・シミュレーションではそれなりなのに、実機にダウンロードして動かすとFIFOにデータが残ったままになったり、転送データ数がバラバラでどう解釈して良いのかさっぱりわからない。
・こういう隘路に迷い込んでしまった時の定跡は・・・元に戻ってやり直す。これが遠回りなようで一番の近道。
・ということで、git branchで元のブランチに戻して一応動作確認をしてから新規のブランチを作成してそこで作業することに。
・さっきまでのやり方だとハマることはわかったので別の方法を考えよう。

2026.01.22 07:06

VerilogアシストはCopilotなのかな


・家の前の道が工事で車の出入りが面倒なので、なんとか車で出た後、工事が一段落するであろう時間までイオンに避難することに。
・平日はガラガラのフードコートでノートPCを広げる。ここなら空調効いてるし、当然のように飲食自由だし(水で良ければ紙コップもある)。あとは電源があれば言うこと無いのだけどと思っていたけど、今日2時間ちょっと使っていてもバッテリ表示は99%から10%ほど落ちただけ。なんか前より持つようになっている感じだな。Linux(Ubuntu)のバージョンにもよるのか、動かしているアプリにもよるのか。
・しかし、平日は勉強している学生、なにかの資格試験の勉強をしているらしき方、外回りの仕事の合間にPCを広げているらしき方などいろいろだな。駅に近いからというのもあるのだろうかな。
・VSCodiumで、AIアシストとしてGeminiやらWindsurfとかを切り替えながらやってみているけど、今ひとつな感じ。そういえばとVSCodeに戻ってCopilotを使ってみたら明らかに自動生成の出来が良い。
・Geminiもそこまで頭悪いはずはないと思うのだけど、こういうのにはまだ不向きなのかな。

2026.01.21 07:37

FIFO追加でシミュレーションも動いたかな


・とりあえずデザインしていたものにPLLに加えてFIFOを追加
・今までダミーデータを直接書き込んでいたのだけど、これをFIFOからのデータに差し替えてFIFOの制御も追加。
・Questaでシミュレーションしたらシミュレータ上では無事に動いている感じになってきた。明日実機でチェックしてみるか。