0

最初から、つまり命令の読み取り->命令のデコード->レジスタファイルの読み取りなどから、プロセッサがマルチサイクルデータパスで乗算を行う方法を知りたかったのです。

言い換えれば、乗算用のブースのアルゴリズムが個別に実装されている場合 (回路が与えられている場合)、最小限のリソースを使用して乗算命令をサポートするためにマルチサイクル データパスをどのように拡張するかを知りたかったのです。

分割についても教えていただけますか?

4

2 に答える 2

1

単純なCPUの場合、乗算はCPUパイプラインのフェーズEXで行われます。したがって、命令をフェッチし、デコードし、RegisterFileに入力オペランドを要求し、ALUで実際の乗算を実行します。

ALUバリアントによっては、乗算に1 CPUサイクル以上かかる場合があります(各cpuサイクルに部分和を格納すると、CPUパイプラインのEX0、EX1、EX2などのステージになります)。低速のALUはパイプライン化できるため、最初の操作の結果がNティックで表示され、Mごとに異なる操作が開始されます。

http://www.aoki.ecei.tohoku.ac.jp/arith/mg/algorithm.htmlページで入手できる乗数のさまざまなハードウェアバリアント

于 2010-11-10T03:59:16.777 に答える
1

もう 1 つの適切なリンクは、オープンソースの OpenFire マイクロプロセッサ コア、MicroBlaze のバリアント/アナログ (DLX ベース) です。

http://opencores.org/websvn,listing?repname=openfire_core&path=%2Fopenfire_core%2Ftrunk%2Fopenfire_top_syn%2Fhdl%2Fverilog%2F#path_openfire_core_trunk_openfire_top_syn_hdl_verilog_

ALU と Multiplier ユニットのデータパスの一部はopenfire_primitives.vファイルにあります。

パイプラインのストールバブルの説明が充実した DLX データパスのマニュアルは、

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/hazards.html

そして、マルチサイクル オペレーション (DLX) に関する情報があります。

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/multicycle.html

したがって、パイプラインにとどまることができる操作 (より多くのティックが必要) は、ストール (またはバブル) をパイプラインに挿入します。これは、いくつかのティッシュに対して長い操作を行う EX 以外のパイプラインのすべてのステージを停止することと考えることができます。

オープンソース Verilog の別の Mul/Div ユニットはこちら: http://opencores.org/websvn,filedetails?repname=openrisc&path=%2Fopenrisc%2Ftrunk%2For1200%2Frtl%2Fverilog%2For1200_mult_mac.v

于 2010-11-17T15:32:48.353 に答える