/******************************************************** * SRIP用32ビット乗算器 * * 以下のファイルを参考に作成 * * $PARTHENON/sfl_lib.dir/ext_h/multi32.h * * $PARTHENON/exapmle.dir/sfl.dir/multi16.sfl * ********************************************************/ %i "csa64.sfl" %i "cpa64.sfl" module multi32 { submod_type csa64 { input in1<64> ; input in2<64> ; input in3<64> ; output out1<64> ; output out2<64> ; instrin do ; instr_arg do(in1,in2,in3) ; } submod_type cpa64 { input cin ; input in1<64> ; input in2<64> ; output out<64> ; output gout ; output pout ; instrin do ; instr_arg do(cin,in1,in2) ; } input in1<32> ; input in2<32> ; output out<64> ; tmp tmp00<64>, tmp01<64>, tmp02<64>, tmp03<64>; tmp tmp04<64>, tmp05<64>, tmp06<64>, tmp07<64>; tmp tmp08<64>, tmp09<64>, tmp10<64>, tmp11<64>; tmp tmp12<64>, tmp13<64>, tmp14<64>, tmp15<64>; tmp tmp16<64>, tmp17<64>, tmp18<64>, tmp19<64>; tmp tmp20<64>, tmp21<64>, tmp22<64>, tmp23<64>; tmp tmp24<64>, tmp25<64>, tmp26<64>, tmp27<64>; tmp tmp28<64>, tmp29<64>, tmp30<64>, tmp31<64>; tmp t00<64>, t01<64>, t02<64>, t03<64>, t04<64>, t05<64>, t06<64> ; tmp t07<64>, t08<64>, t09<64>, t10<64>, t11<64>, t12<64>, t13<64> ; tmp t14<64>, t15<64>, t16<64>, t17<64>, t18<64>, t19<64>, t20<64> ; tmp t21<64> ; tmp u00<64>, u01<64>, u02<64>, u03<64>, u04<64>, u05<64>, u06<64> ; tmp u07<64>, u08<64>, u09<64>, u10<64>, u11<64>, u12<64>, u13<64> ; tmp u14<64> ; tmp v00<64>, v01<64>, v02<64>, v03<64>, v04<64>, v05<64>, v06<64> ; tmp v07<64>, v08<64>, v09<64> ; tmp w00<64>, w01<64>, w02<64>, w03<64>, w04<64>, w05<64>, w06<64> ; tmp x00<64>, x01<64>, x02<64>, x03<64>, x04<64> ; tmp y00<64>, y01<64>, y02<64>, y03<64> ; tmp z00<64>, z01<64>, z02<64> ; csa64 csa00, csa01, csa02, csa03, csa04, csa05, csa06, csa07 ; csa64 csa08, csa09, csa10, csa11, csa12, csa13, csa14, csa15 ; csa64 csa16, csa17, csa18, csa19, csa20, csa21, csa22, csa23 ; csa64 csa24, csa25, csa26, csa27, csa28, csa29 ; cpa64 cpa ; instrin do ; instruct do par { tmp00 = (0b00000000000000000000000000000000||(in1 & 32 # in2<00>) ) ; tmp01 = (0b0000000000000000000000000000000||(in1 & 32 # in2<01>)||0b0) ; tmp02 = (0b000000000000000000000000000000||(in1 & 32 # in2<02>)||0b00) ; tmp03 = (0b00000000000000000000000000000||(in1 & 32 # in2<03>)||0b000) ; tmp04 = (0b0000000000000000000000000000||(in1 & 32 # in2<04>)||0b0000) ; tmp05 = (0b000000000000000000000000000||(in1 & 32 # in2<05>)||0b00000) ; tmp06 = (0b00000000000000000000000000||(in1 & 32 # in2<06>)||0b000000) ; tmp07 = (0b0000000000000000000000000||(in1 & 32 # in2<07>)||0b0000000) ; tmp08 = (0b000000000000000000000000||(in1 & 32 # in2<08>)||0b00000000) ; tmp09 = (0b00000000000000000000000||(in1 & 32 # in2<09>)||0b000000000) ; tmp10 = (0b0000000000000000000000||(in1 & 32 # in2<10>)||0b0000000000) ; tmp11 = (0b000000000000000000000||(in1 & 32 # in2<11>)||0b00000000000) ; tmp12 = (0b00000000000000000000||(in1 & 32 # in2<12>)||0b000000000000) ; tmp13 = (0b0000000000000000000||(in1 & 32 # in2<13>)||0b0000000000000) ; tmp14 = (0b000000000000000000||(in1 & 32 # in2<14>)||0b00000000000000) ; tmp15 = (0b00000000000000000||(in1 & 32 # in2<15>)||0b000000000000000) ; tmp16 = (0b0000000000000000||(in1 & 32 # in2<16>)||0b0000000000000000) ; tmp17 = (0b000000000000000||(in1 & 32 # in2<17>)||0b00000000000000000) ; tmp18 = (0b00000000000000||(in1 & 32 # in2<18>)||0b000000000000000000) ; tmp19 = (0b0000000000000||(in1 & 32 # in2<19>)||0b0000000000000000000) ; tmp20 = (0b000000000000||(in1 & 32 # in2<20>)||0b00000000000000000000) ; tmp21 = (0b00000000000||(in1 & 32 # in2<21>)||0b000000000000000000000) ; tmp22 = (0b0000000000||(in1 & 32 # in2<22>)||0b0000000000000000000000) ; tmp23 = (0b000000000||(in1 & 32 # in2<23>)||0b00000000000000000000000) ; tmp24 = (0b00000000||(in1 & 32 # in2<24>)||0b000000000000000000000000) ; tmp25 = (0b0000000||(in1 & 32 # in2<25>)||0b0000000000000000000000000) ; tmp26 = (0b000000||(in1 & 32 # in2<26>)||0b00000000000000000000000000) ; tmp27 = (0b00000||(in1 & 32 # in2<27>)||0b000000000000000000000000000) ; tmp28 = (0b0000||(in1 & 32 # in2<28>)||0b0000000000000000000000000000) ; tmp29 = (0b000||(in1 & 32 # in2<29>)||0b00000000000000000000000000000) ; tmp30 = (0b00||(in1 & 32 # in2<30>)||0b000000000000000000000000000000) ; tmp31 = (0b0||(in1 & 32 # in2<31>)||0b0000000000000000000000000000000) ; /*--- 1 -------------------------------------------------------------*/ t00 = csa00.do(tmp00,tmp01,tmp02).out1 ; t01 = csa00.out2 ; t02 = csa01.do(tmp03,tmp04,tmp05).out1 ; t03 = csa01.out2 ; t04 = csa02.do(tmp06,tmp07,tmp08).out1 ; t05 = csa02.out2 ; t06 = csa03.do(tmp09,tmp10,tmp11).out1 ; t07 = csa03.out2 ; t08 = csa04.do(tmp12,tmp13,tmp14).out1 ; t09 = csa04.out2 ; t10 = csa05.do(tmp15,tmp16,tmp17).out1 ; t11 = csa05.out2 ; t12 = csa06.do(tmp18,tmp19,tmp20).out1 ; t13 = csa06.out2 ; t14 = csa07.do(tmp21,tmp22,tmp23).out1 ; t15 = csa07.out2 ; t16 = csa08.do(tmp24,tmp25,tmp26).out1 ; t17 = csa08.out2 ; t18 = csa09.do(tmp27,tmp28,tmp29).out1 ; t19 = csa09.out2 ; t20 = tmp30 ; t21 = tmp31 ; /*--- 2 -------------------------------------------------------------*/ u00 = csa10.do(t00,t01,t02).out1 ; u01 = csa10.out2 ; u02 = csa11.do(t03,t04,t05).out1 ; u03 = csa11.out2 ; u04 = csa12.do(t06,t07,t08).out1 ; u05 = csa12.out2 ; u06 = csa13.do(t09,t10,t11).out1 ; u07 = csa13.out2 ; u08 = csa14.do(t12,t13,t14).out1 ; u09 = csa14.out2 ; u10 = csa15.do(t15,t16,t17).out1 ; u11 = csa15.out2 ; u12 = csa16.do(t18,t19,t20).out1 ; u13 = csa16.out2 ; u14 = t21 ; /*--- 3 -------------------------------------------------------------*/ v00 = csa17.do(u00,u01,u02).out1 ; v01 = csa17.out2 ; v02 = csa18.do(u03,u04,u05).out1 ; v03 = csa18.out2 ; v04 = csa19.do(u06,u07,u08).out1 ; v05 = csa19.out2 ; v06 = csa20.do(u09,u10,u11).out1 ; v07 = csa20.out2 ; v08 = csa21.do(u12,u13,u14).out1 ; v09 = csa21.out2 ; /*--- 4 -------------------------------------------------------------*/ w00 = csa22.do(v00,v01,v02).out1 ; w01 = csa22.out2 ; w02 = csa23.do(v03,v04,v05).out1 ; w03 = csa23.out2 ; w04 = csa24.do(v06,v07,v08).out1 ; w05 = csa24.out2 ; w06 = v09 ; /*--- 5 -------------------------------------------------------------*/ x00 = csa25.do(w00,w01,w02).out1 ; x01 = csa25.out2 ; x02 = csa26.do(w03,w04,w05).out1 ; x03 = csa26.out2 ; x04 = w06 ; /*--- 6 -------------------------------------------------------------*/ y00 = csa27.do(x00,x01,x02).out1 ; y01 = csa27.out2 ; y02 = x03 ; y03 = x04 ; /*--- 7 -------------------------------------------------------------*/ z00 = csa28.do(y00,y01,y02).out1 ; z01 = csa28.out2 ; z02 = y03 ; /*--- 8 -------------------------------------------------------------*/ csa29.do(z00,z01,z02) ; /*--- cpa -----------------------------------------------------------*/ out = cpa.do(0b0,csa29.out1,csa29.out2).out ; } }