フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-6-15 20:55 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
少し工夫 単純に32bitフルコンペアだと同一のアドレスクラス内に複数のアドレスがあった場合、共通するバイトを比較する論理を生成するのは無駄である。
なので少し工夫してツリー状にCASEを分岐させることにする。 CASE IP[31..24] IS WHEN H"7d" => CASE IP[23..16] IS WHEN H"f5" => CASE IP[15..8] IS WHEN H"51" => CASE IP[7..0] IS WHEN H"92" => FILTER=VCC; WHEN OTHERS => FILTER=GND; END CASE; WHEN OTHERS => FILTER=GND; END CASE; WHEN H"f7" => CASE IP[15..8] IS WHEN H"73" => こんな感じ。 コンパイルしてみると、全比較よりも所要LE数はぐっと減って3,179となった。これだと1ランク規模の小さいCycloneでも入るが、これがBGAパッケージだったりする。最近はI/Oピン数を稼ぐためにBGAが主流だね。 あとは更に論理が少なくてすむようにするには比較データを外部のROMやRAMに置くしかない。でもあまり判定に時間がかかると、判定が出た頃にはとっくにパケットが通りすぎてしまう。現状では遅延は30ns程度なので実用レベル。 |
フラット表示 | 前のトピック | 次のトピック |
投稿するにはまず登録を | |