バイリニア補間するユニットを作って、以前作成したテクスチャキャッシュと統合して2Dサンプラーユニットを作って見ました。
各バイリニアのユニットは、4サイクルかけて1ピクセル処理できるようにしており、それを8並列で結合して合成して見ました。
xc7z010-1clg400 の ISE14.7での合成で下記のとおりです。
(Vivadoだと合成段階では周波数出してくれないので)
Number of Slice Registers : 8,371 (23%)
Number of Slice LUTs : 5,343 (30%)
Number of Block RAM/FIFO : 36 (60%)
Number of DSP48E1s : 33(41%)
Maximum Frequency: 404.040MHz
キャッシュミスしなければ、4並列で1サイクル1ピクセルなわけですが、実際には8並列でも、キャッシュミス区間は埋めきれない模様です。
規模的には16並列とかでも収まりはしそうですが、そこまでしなくてもVGA程度ならリアルタイムでいけそうな感じです。とりあえずシミュレーション上では、0度,45度,90度の回転で、SDRAMアクセスは殆どのアドレスで二度読みは起こらなかったので、タグアドレスの割り振りはまあまあうまく機能しているようです。
下記は45度回転させながらのシミュレーション出力です。ニアレストネイバーのときよりもだいぶギザギザがなくなりました。
上は、テストベンチとして書いた、アフィン変換のアドレス生成によるものですが、本来は2Dサンプラーですので、ピクセルシェーダ的なものを上に載せたいわけです。
さて、なかなかシミュレータの世界から出れていないのですが、実機で動く日はいつになるやら。
固定パイプラインシェーダーでよいので、何かしら動かしたいなぁ。
コメント