2017年 09月 15日 ( 1 )

Normalizer のシフト判定は前段シフトの結果を使って判定していたのですが、前々段の結果に前倒しすることでちょっとだけ論理が増えますがスラックが -6ns を割るところまで高速化しました。ここまでくるとドングリの背比べになって、本当に遅いのがどこなのか分からなくなります。ただ、非正規化数出力のための仕組みを外すと、ちょっとだけ早くなりそうなので、別の方式を思いついたら試してみようと思います。

次に、何か所にもコピーされてしまっているアラインメントシフタを1本化しました。ちょっとだけ小さくなってる。
|23 | md |vscale_mul_div | 3232|

最後に、32ビット加算器を3個連結して96ビット加算器として使っている部分を、2連結までに戻します。実際問題として、3連結が必要なのは、FMADDの加数をシフトする時で、かつ、-1倍した時のキャリーが発生する時だけです。V-scaleの乗算器は遅いので、下位の32bitを前もって-1倍しておくことも可能です。で、とってもわかりにくいものになりましたが、スラックもトップ10にはFPUは出てこなくなって -5ns 付近まで減少、面積も以下のごとく。
Report Instance Areas:
+------+---------------+----------------+------+
| |Instance |Module |Cells |

+------+---------------+----------------+------+
|1 |top | | 7667|
|18 | vscale |vscale_core | 7081|
|19 | pipeline |vscale_pipeline | 7076|
|20 | csr |vscale_csr_file | 1305|
|21 | ctrl |vscale_ctrl | 2038|
|22 | fregfile |vscale_fregfile | 92|
|23 | md |vscale_mul_div | 3157|
|24 | regfile |vscale_regfile | 71|

[PR]
by tom01h | 2017-09-15 15:16 | PCとか | Trackback | Comments(0)