仕様から説明するか.入力は符号無し整数の被除数と除数,ビット幅は双方同一とするが特に大きさは制限しない.出力は商と剰余,それから零除算インジケータ.スループットは1 division/CLK,入出力レイテンシは制限しない.本来はもっと考えるトコロがあるケド,メンドイので他には制限無し.ただし,合成出来て,あんまりデカくなくて,なおかつそれなりに早く動く事.
で,実装.冗長2進数だの高基数だのはメンドイのでやらない.算術シフトとコンパレータと減算をパイプラインで行う.ソースはバケツに突っ込んだ.イメージ的にはタダの筆算.
で,シミュレーション.ビット数をデカくするとたるいので,3bitでやったのが,これ.
で,合成.アルテラ謹製のくぉーたすつーでプロジェクトの設定はデフォルトのまま突っ込んだら,こうなった.ちなみにビット幅は32bitね.
Fitter Status : Successful - Sat Nov 28 02:29:38 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Device : EP3SL70F780I4L
Timing Models : Final
Logic utilization : 10 %
Combinational ALUTs : 2,018 / 54,000 ( 4 % )
Memory ALUTs : 0 / 27,000 ( 0 % )
Dedicated logic registers : 3,235 / 54,000 ( 6 % )
Total registers : 3235
Total pins : 133 / 488 ( 27 % )
Total virtual pins : 0
Total block memory bits : 0 / 2,267,136 ( 0 % )
DSP block 18-bit elements : 0 / 288 ( 0 % )
Total PLLs : 0 / 4 ( 0 % )
Total DLLs : 0 / 4 ( 0 % )
Analysis and Synthesis Status : Successful - Sat Nov 28 02:28:35 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Logic utilization : N/A
Combinational ALUTs : 2,006
Memory ALUTs : 0
Dedicated logic registers : 3,235
Total registers : 3235
Total pins : 133
Total virtual pins : 0
Total block memory bits : 0
DSP block 18-bit elements : 0
Total PLLs : 0
Total DLLs : 0
------------------------------------------------------------
TimeQuest Timing Analyzer Summary
------------------------------------------------------------
Type : Slow 900mV 100C Model Setup 'iCLK'
Slack : -5.132
TNS : -7413.304
Type : Slow 900mV 100C Model Hold 'iCLK'
Slack : 0.541
TNS : 0.000
Type : Slow 900mV -40C Model Setup 'iCLK'
Slack : -5.259
TNS : -7461.099
Type : Slow 900mV -40C Model Hold 'iCLK'
Slack : 0.507
TNS : 0.000
Type : Fast 900mV -40C Model Setup 'iCLK'
Slack : -1.902
TNS : -1922.378
Type : Fast 900mV -40C Model Hold 'iCLK'
Slack : 0.229
TNS : 0.000
------------------------------------------------------------
これだけやってもiCLKは159.77MHzでしか動かない.ディジタル回路なめんなよ.スパコンはもっともっと大変なブツだぞ!!1 :P
更新:200MHz行かないのが納得出来んので,カッとなってパイプラインを三倍にした.今は反省はしていない. :DDD
再合成してみたら198.89MHzで動く様になったらしい.やっぱこの除算アルゴリズムで200MHzは無理か. :P
Fitter Status : Successful - Sat Nov 28 12:54:15 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Device : EP3SL70F780I4L
Timing Models : Final
Logic utilization : 18 %
Combinational ALUTs : 2,039 / 54,000 ( 4 % )
Memory ALUTs : 0 / 27,000 ( 0 % )
Dedicated logic registers : 9,288 / 54,000 ( 17 % )
Total registers : 9288
Total pins : 133 / 488 ( 27 % )
Total virtual pins : 0
Total block memory bits : 0 / 2,267,136 ( 0 % )
DSP block 18-bit elements : 0 / 288 ( 0 % )
Total PLLs : 0 / 4 ( 0 % )
Total DLLs : 0 / 4 ( 0 % )
Analysis and Synthesis Status : Successful - Sat Nov 28 12:52:15 2009
Quartus II Version : 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition
Revision Name : DIV_UU
Top-level Entity Name : DIV_UU
Family : Stratix III
Logic utilization : N/A
Combinational ALUTs : 2,039
Memory ALUTs : 0
Dedicated logic registers : 9,288
Total registers : 9288
Total pins : 133
Total virtual pins : 0
Total block memory bits : 0
DSP block 18-bit elements : 0
Total PLLs : 0
Total DLLs : 0
------------------------------------------------------------
TimeQuest Timing Analyzer Summary
------------------------------------------------------------
Type : Slow 900mV 100C Model Setup 'iCLK'
Slack : -3.580
TNS : -14902.996
Type : Slow 900mV 100C Model Hold 'iCLK'
Slack : 0.466
TNS : 0.000
Type : Slow 900mV -40C Model Setup 'iCLK'
Slack : -4.028
TNS : -14569.313
Type : Slow 900mV -40C Model Hold 'iCLK'
Slack : 0.447
TNS : 0.000
Type : Fast 900mV -40C Model Setup 'iCLK'
Slack : -1.117
TNS : -2389.571
Type : Fast 900mV -40C Model Hold 'iCLK'
Slack : 0.202
TNS : 0.000
------------------------------------------------------------