会社案内 (近況 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 月のとある 日なので、振り返ってみると、この日は記念すべき日だったのだ。