会社案内 (近況 2008/02)
翌月先駆者内 藤さんの日記を参考に、CRC 生成回路を作った。いきなりやらずに、C で エミュレータ書いてから VHDL を書いた。しかも今後のことを考えて、 divisor や入力データ幅、CRC の幅は generic parameter で指定できる設計 にした。オレ超大人。
内藤さんに「レーン幅を増やすと多分タイミング的に一番キツくなるのは CRC 生成回路だろう」と助言を頂いていたので、まずここから作り始めたというわ けだ。が、16-bit 入力 (16bit@125MHz PIPE interface つまり x1) なら楽勝 だった。レーン幅を増やすとキツくなるのかも知れないが、それはあとで考え よう。
そういえば VHDL の variable 宣言というものを初めて使った。なるほど variable はこーいう目的のためにあるのか。CRC 回路を variable 使わずに 書くのはかなり厳しかろう。
今さらながら、Quartus II の Signal Tap II という機能を使ってみた。こい つの機能をいい加減に説明すると、JTAG 経由で FPGA 内部の任意の信号を観 測できるロジアナのようなもの。追加機材なしに、USB Blaster 経由の接続だ けで使える。複数の信号線をグループ化して、その値に対してニーモニックを 割り振るということもできる。.stp ファイル内に
<mnemonics> <table name="Kcode" width="9"> <symbol name="COM" value="110111100"/> <symbol name="STP" value="111111011"/> <symbol name="SDP" value="101011100"/> <symbol name="END" value="111111101"/> <symbol name="EDB" value="111111110"/> <symbol name="PAD" value="111110111"/> <symbol name="SKP" value="100011100"/> <symbol name="FTS" value="100111100"/> <symbol name="IDL" value="101111100"/> </table> <table name="LTSSM" width="5"> <symbol name="dtct.quiet" value="00000"/> <symbol name="dtct.active" value="00001"/> <symbol name="poll.active" value="00010"/> <symbol name="poll.compliance" value="00011"/> <symbol name="poll.confwait" value="00100"/> <symbol name="poll.confacc" value="00101"/> <symbol name="poll.speed" value="00110"/> <symbol name="conf.lkstart" value="00111"/> <symbol name="conf.lkacc" value="01000"/> <symbol name="conf.lnwait" value="01001"/> <symbol name="conf.lnacc" value="01010"/> <symbol name="conf.complete" value="01011"/> <symbol name="conf.idle" value="01100"/> <symbol name="conf.done" value="01101"/> <symbol name="L0" value="01110"/> <symbol name="rcvr" value="01111"/> <symbol name="invalid" value="10000"/> </table>とか記述しておけば、気分はほとんど PCIe アナライザ。Altera の回し者と いうわけではないが、衝撃的に便利である。LED の明滅だけで回路の内部状態 をみてた今までの日々を返せっ!
つづくかなぁ。たぶん僕ばっかり書くんだろうなぁ。
なぜ今日から書きはじめるかというと、「PCI Express IP コアの自作」とい う無謀な計画の検討を本日開始したから、、、という文章を書いているのは実 はすでに自作コアが実用レベルに達した夏の陽射しがまぶしい 8 月のとある 日なので、振り返ってみると、この日は記念すべき日だったのだ。