/************************************************ * 32ビット乗算器用64ビット桁上げ保存加算器 * * 以下のファイルを参考に作成 * * $PARTHENON/sfl_lib.src/sfl/csa64.sfl * * $PARTHENON/sfl_lib.src/sfl/csa_64.sfl * * $PARTHENON/sfl_lib.src/sfl/csa_8.sfl * * $PARTHENON/sfl_lib.src/int_h/csa_64.h * * $PARTHENON/sfl_lib.src/int_h/csa_8.h * ************************************************/ module csa64 { submod_type csa_64 { input in1<64> ; input in2<64> ; input in3<64> ; output out1<64> ; output out2<64> ; instrin do ; instr_arg do(in1,in2,in3) ; } input in1<64> ; input in2<64> ; input in3<64> ; output out1<64> ; output out2<64> ; csa_64 csa ; instrin do ; instruct do par { out1 = csa.do(in1,in2,in3).out1 ; out2 = csa.out2<62:0> || 0b0 ; } } module csa_64 { submod_type csa_8 { input in1<8> ; input in2<8> ; input in3<8> ; output out1<8> ; output out2<8> ; instrin do ; instr_arg do(in1,in2,in3) ; } input in1<64> ; input in2<64> ; input in3<64> ; output out1<64> ; output out2<64> ; csa_8 csa7, csa6, csa5, csa4, csa3 ,csa2 ,csa1 ,csa0 ; instrin do ; instruct do par { out1 = csa7.do(in1<63:56>,in2<63:56>,in3<63:56>).out1 || csa6.do(in1<55:48>,in2<55:48>,in3<55:48>).out1 || csa5.do(in1<47:40>,in2<47:40>,in3<47:40>).out1 || csa4.do(in1<39:32>,in2<39:32>,in3<39:32>).out1 || csa3.do(in1<31:24>,in2<31:24>,in3<31:24>).out1 || csa2.do(in1<23:16>,in2<23:16>,in3<23:16>).out1 || csa1.do(in1<15:08>,in2<15:08>,in3<15:08>).out1 || csa0.do(in1<07:00>,in2<07:00>,in3<07:00>).out1 ; out2 = csa7.out2 || csa6.out2 || csa5.out2 || csa4.out2 || csa3.out2 || csa2.out2 || csa1.out2 || csa0.out2 ; } } module csa_8 { input in1<8> ; input in2<8> ; input in3<8> ; output out1<8> ; output out2<8> ; instrin do ; instruct do par { out1 = in1 @ in2 @ in3 ; out2 = (in1 & in2) | (in2 & in3) | (in3 & in1) ; } }