DSP48E1×4 積和器

だいぶ前に考えていた、FPGADSPユニットを複数個使ってビット数を拡張するというものを出張中に考えていた。
入力データをそれぞれ上位・下位に分けて、上位×上位・上位×下位・下位×上位・下位×下位として計算し、最後に位を合わせて足し合わせればいい。


以前はSpartanのDSP48A1をベースに考えていたが、7シリーズのDSP48E1が使えるようになったので、ユニット当たり25bit×18bitになり、49bit×35bit計算にできる。


はじめは、乗算器にDSP48E1を4個、アキュムレータに2個という分けた実装を考えていたけど、毎サイクル積和結果を出さなくても各桁ごとにアキュムレートし、最後に足し合わせるってすればアキュムレータを乗算器のDSP48E1のユニットと兼用できるということを思いついた。
積和処理はスループット1サイクル/演算だが、最終処理は4サイクル/演算なので、タイミングを調整するなり、パイプラインを上手く作るなりしないと同じレジスタに書き込む必要があるハザードが発生するのでどうするかなあ…


最終処理の後ろにNOPを3命令発行するようにするとか、最終処理に合わせてパイプラインを設計するとかすればいいような気がする。
ちょっと書いてみよう。