« 今日のチラ裏 | Main | 今日の日記 »

2007.10.21

Verilogをはじめよう! その4.1

前回は、Verilogとエロゲについて関係を整理しました。

レジスタ:エロゲのフラグ
クロック:エロゲのクリック
ステートマシーン:エロゲのシナリオ分岐

もう少し、深く考察してみましょう。

まず、レジスタ=エロゲのフラグに関しては、かなり分かりやすいと好評でした。つまり、1つのレジスタは1と0の値を保持し、エロゲで言うところのフラグが立つ、立たないに対応します。

この図を見てください。

今、私が適当に設計したSDRAMコントローラのステートマシーンです。ローカルな回路からのリクエストに対して、リード、ライトを実行する機能を持ちますが、これは理解しなくても大丈夫です。メモリに対して何かエロい事をする回路だと思ってください。
これをエロゲに対応させて説明していきます。

この図では、四角い箱が一つのステート(エロゲの絵)に相当します。まずは、ハードウェアに電源が投入されたときにどうなるかですが、一般的には電源投入時にはこの状態になるという事を設計者が決めます。また、電源投入時の状態に強制的にするためにリセット信号などが使われますが、まずは最初の状態というものがあると思ってください。この図でいうと左上の、powerupが最初の状態です。電源投入は、エロゲで言うとエロゲアイコンをダブルクリックに相当します。エロゲを起動すると、毎回同じような起動画面がでますよね。エロゲ起動するやいなやネタバレバッドエンディングの画面だったりすると目もあてられません。つまり、そういうことです。
①の部分を見てください。左上から始まって、順に下の方にステート(エロゲの絵)が遷移していきます。エロゲでいうオープニングです。ここでは広がる妄想を押さえながら、ただただクリックするしかありません。

今、ちょっと大事なこと言いました。エロゲでは、次の画面へ行くタイミングはクリックです。クリックの度に画面が変わるときもありますが、一般的にはクリックしながらメッセージを進め、最後のメッセージでクリックすると次の画面に行きます。Verilogの場合、クリックに相当する物は初めに書いたとおりクロックです。クロックが立ち上がる度に、次の状態に行ってよいのかを判断し、条件が満たされていれば次のステート(エロゲの絵)に遷移します。クロック=エロゲのクリックです。1MHzのクロックで動くハードウェアは、1秒間に100万回クリックしつづけています。かなりのエロゲ好きです。今日日のCPUは、メガどころかギガのオーダーでクリックしているので、クリック猿を通り越して神の領域です。

①のオープニングを抜けて、②に入るとようやくゲーム開始です。

この図でいうオレンジの③の部分がシナリオ分岐です。このエロゲでは、リードフラグとライトフラグの2種類のフラグがあります。③のシナリオ分岐で、これらのフラグを調べます。もし、リードフラグも、ライトフラグも立たずに一定期間が過ぎた場合、SDRAMコントローラはリフレッシュという作業をしないといけません。この場合赤で書かれた④のルートに入ります。軽くリフレッシュをして、このシナリオは終了。つまりバッドエンドです。エンディングは紫でかかれていますが、エンディングの後は、②に戻ってゲームを続けることができます。オープニングを何回も見なくて良い親切設計になっています。

真ん中はさくっと飛ばして、いよいよエロシーンです。このエロゲでは、リードフラグとライトフラグでルートを管理しています。リードフラグが立っていれば右側のシナリオに進み、ライトフラグが立っていれば左側のシナリオに進みます。ピンクの部分が、実際のデータ転送(エロシーン)です。エロシーンを堪能した後は、エンディングを見て、再び②に戻ります。以下、エンドレスでエロゲをしつづけます。

もし、リードフラグとライトフラグの両方が立っていた場合、どうなるでしょう。これはバグを引き起こします。リードとライトのリクエストが同時に来ないという前提で作られたコントローラに、同時にリクエストをしてしまい、リードしているつもりが無茶苦茶な値しか読み出せないことは、可能性としてはありえます。エロゲのシナリオライターもVerilogプログラマも「ここで、このbit/フラグ立つことは想定していなかった」と日々同じような事を考えて仕事をしています。つまり、Verilogプログラマ=エロゲシナリオライター。

ステートマシーンは、有限状態機械(finite state machine)と呼ばれます。ここまで読まれた方は、ステートマシーンの状態はエロゲの絵だということは理解されていると思います。エロゲにおいて、絵は最初に書かれた枚数しかありません。だから有限という言葉がついています。難しく書いていますが「エロゲにおいて、絵の枚数は有限」とそれだけのことです。

最後に、同じステートマシーンを教科書っぽく書き直してみました。
全く同じですが、少し頭良さそうに見えます。
今後はステートマシーンと言われてもひるまずに、エロゲのシナリオ書いているくらいの気持ちでのぞみましょう。


過去記事
Verilogをはじめよう! その4
Verilogをはじめよう! その3
Verilogをはじめよう! その2
Verilogをはじめよう!


|

« 今日のチラ裏 | Main | 今日の日記 »

Comments

プログラムの知識はありませんが、楽しく読ませていただきました。

前回の話ではえろげに例える必要性を感じなかったのですが、
>実際のデータ転送(エロシーン)
これを読んで納得です。

Posted by: ご | 2007.10.22 at 12:14 AM

分かりやすいです。
少しステートマシンというかオートマトンに入門できた気がします。

自分は普段フロアプランしたり、クロックツリー張ったりと
ゲートレベルのネットリストぐらいしか扱わないため、
設計の話はすごく勉強になります。

Posted by: mayarero | 2007.10.22 at 01:51 AM

> メモリに対して何かエロい事をする回路だと思ってください。

さりげなすぎて思いっきり噴きました w ちょ,何すんねん,と.らめぇ,メモリ逃げてぇ !! ><

Posted by: あろは | 2007.10.22 at 02:12 AM

> ご さん
> >実際のデータ転送(エロシーン)
> これを読んで納得です。
そのシーンを最大限に活用するために、いろいろと準備をしたり、ストーリーを入れ替えたり、頭を抱えているわけです。

> mayarero さん
オートマトンも間違い無くエロゲと等価です。
本職の方であれば、ここはあまり参考にされない方が良いかと。

> あろはさん
全てのパソコンの中はエロだらけです。
USB、PCI-express、CPU、全てエロい事しかできません。

Posted by: なつたん | 2007.10.22 at 08:16 AM

面白いですね。SDRAMインターフェースのステートマシンをエロゲで説明したのを見たのは初めてです。
細かい突っ込みですが、このステート図で行くとリフレッシュの前に”全BANK閉じる”ステートがあった方がいいじゃないと思います。

Posted by: marsee | 2007.10.23 at 05:23 AM

marseeさん

「全BANK閉じる」必要ですね。同時に前回アクセスしたアドレスを無効にしないとけませんね。
こんな所にバグがあったとは。ご指摘ありがとうございます。

エロゲでいうと、「2週目に入ったときに、1週目のフラグの後処理が全くできていない」という酷いバグでした。

Posted by: なつたん | 2007.10.23 at 08:54 AM

ある意味、これほど丁寧なFSMの説明は他にないですね。
会社で読むのは危険ですが。

「もえたん」、「CPUの創りかた」以来の衝撃。

Posted by: アイン | 2007.10.23 at 10:07 AM

アインさん、こんにちは。

>「もえたん」、「CPUの創りかた」以来の衝撃。
残念ながら、女の子が足りませんね。

こんな時に、絵心があればと思うのですが、なかなか難しい。

Posted by: なつたん | 2007.10.24 at 05:00 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16828061

Listed below are links to weblogs that reference Verilogをはじめよう! その4.1:

» なつ の情報を最新ブログで検索してみると… [マッシュアップサーチラボ]
なつに関する情報を最新ブログやユーチューブ、通販商品から検索してマッシュアップしてみました。 [Read More]

Tracked on 2007.11.09 at 12:05 AM

« 今日のチラ裏 | Main | 今日の日記 »