Hatena::ブログ(Diary)

kokekomeのハードウェアな日記? このページをアンテナに追加 RSSフィード

2012-03-19

[]DSP48A1ユニットAdd Star

35bitの時から興味が出てDSP48A1ユニットについて調べた覚書。

演算はP = A * (B ± D) ± Cという信号処理でよく見かける形。

(B±D)の部分が前置加減算器、A*の部分が乗算器、±Cの部分が加減算器として実装され、パイプラインレジスタをすべて有効にすると、それぞれレジスタで区切られる。

VirtexのDSP48Eだと論理演算ができてALU的に使えたり、乗算が25×18だったりするが、Spartan場合は乗算専用感が強い気がする。

前置加減算器

乗算前にデータBとデータDを加減算する。おもにFIRフィルタで係数が対称になっているものや、複素演算のような乗算の前に加減算が来るもので使えるとデータシートに記載がある。

乗算後にある加減算器と違い、キャリー伝播用の入出力が出ておらず、入出力ともに18bitなため、オーバーフローしないように入力値を取らないといけない。

データ入力に使う場合は、単純に考えて1bitガードビットにして入力の桁数を1bit下げれば十分だが、係数の場合もっと追い込むことはできなくはないと思う。

35bit×35bitの計算は、ガードビットをつけて変換すると35bit×(33bit±33bit)に変換できる(2bit減っているのは上下で1bitずつガードビットが必要なため)。

また、前置加減算器を使わない場合、前置加減算器のパイプラインレジスタレイテンシ調整に使えるよう。

乗算器

18bit×18bit=36bitの符号付乗算を行う乗算器。

以前も調べたとおり、乗算のモードを切り替えることはできないため、符号なしを含む演算を行いたい場合符号なし側は17bitまでになる。

結果はパイプラインレジスタ経由か、直接出力でFPGAファブリックに出力可能。

また、次段のMUXを経由して加減算器に入力することもできる。

加減算器

48bit±(48bit+Cin)=Cout+48bitを行う加減算器。

キャリー伝播ロジックユーザー制御可能なキャリー入力があるため、任意の桁数まで時分割でも空間分割でも拡張可能。

入力はXとZと名前がついており、Xは0、乗算器出力(符号拡張)、加減算出力のフィードバック(積和)、D:A:Bを連結した48bit入力が選べる。Zは0、PCIN(カスケード専用ポートから入力)、加減算出力のフィードバック(積和)、C入力から入力が選べる。

乗算結果36bitに対して、48bitで積和を行うので、ガードビットとして12bitもあり、ダイナミックレンジが広い処理でも安心


使い方で注意しないといけないと思ったのは、一部のカスケードポート(名前にCがついている)はカスケードとしてしか使えないということと。

DSP48A1ブロックは縦に並んでいるらしく、それをカスケードでつないでいくような使い方を想定しているらしい。

データシートにFIRを実装した場合の例などがある。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kokekome/20120319/1332167747