今回は前々から考えていたFPGAでの倍速ALUの考察です。
倍速ALUというとIntelのCPUを思い浮かべてしまうわけですが、16bitALUで32bit演算をしようとうのではなく、リソースとしての見かけ上のDSPの数を倍にできないかという話です。
なんでこんなこと今更というと、
ザイリンクスデバイスでのINT8に最適化した深層学習の実装
https://japan.xilinx.com/support/documentation/white_papers/j_wp486-deep-learning-int8.pdf
というものを見ていると、DSP48E2 (27×18乗算器)にINT8が2つ詰め込めるという話が出ています。
なるほど、確かに収まるのだと思いますが、まあ手元にある Zybo は DSP48E1(25×18乗算器)なので、そのままは当てはまらないわけです。
(符号なしで24×16あれば2つ入りそうな気もしますが….)
で、ふと倍速ALUネタを思い出してデータシートを調べました。
Artix-7 -1グレードでも DSPは 464.25MHz で動くではないですか。
普通Artix7ぐらいだと 200MHz ぐらいでしか回路書かないから、DSPだけ倍速で動かすってありなんじゃないかと思い始めた次第です。
DSPやBRAMって結構早いんですが、データシートの性能限界に近いところまで使ってる人ってどのぐらいいるのでしょうね?
むしろこの速度で動くCPUって構成可能なのか別の方向に興味が出てくる今日この頃です。
[余談]
上を書いた後、ちょっと興味がわいてきて、RAM64X1Dで 1write 2read の32bit×64個のレジスタファイルを作ってISEで合成してみました。
—————————————-
No asynchronous control signals found in this design
Timing Summary:
—————
Speed Grade: -1
Minimum period: 1.238ns (Maximum Frequency: 807.754MHz)
Minimum input arrival time before clock: 1.872ns
Maximum output required time after clock: 0.681ns
Maximum combinational path delay: No path found
=========================================================================
まあ仮に合成でスコア出ても配置配線で出るかはまた別の話なのですが、CLBも単独の性能は高いですね。
パーツとしてはDSP/BRAM/CLB どれもそれぞれ十分高性能なんですよね。
なるべくハードマクロ主体でPicoBlazeサイズぐらいで 400MHzとかで動くコアとか書けないかなぁ (^^;;
自作GPU用にプログラマブルシェーダー作りたいんですよね…
コメント