13. FortRockの処理の流れ
ソースコード
Fortran
フロントエンド
LLVM IRに変換する
変換前LLVM IR Pass
LLVM Core
解析?最適化
入力を
(任意のPassを選択可能)
実装
Pass
B Verilog HDL
A 変換後 LLVM IR
コード生成
FortRock Core
PassManager
再利用可能
14/10/24 Fortranを用いた高位合成技術 FortRockの開発13
14. FortRockの出力規則 - SUBROUTINE -
SUBROUTINE CALC(A, B, C, RET)
INTEGER A, B, C, RET
RET = A * B + C
RETURN
END
CALC
A
B RET
C
res fin
clk
32
32
32
32
入力 SUBROUTINE 出力モジュール
0123456
14/10/24 Fortranを用いた高位合成技術 FortRockの開発14
15. FortRockの出力規則 - サブモジュール -
SUBROUTINE TOP(A, B)
INTEGER A, B, S_OUT
B = A + SUB(A, S_OUT)
RETURN
END
SUBROUTINE SUB(C, D)
D = C * 2
RETURN
END
サブモジュールを利用した
SUBROUTINE
Top
SUB
C D
res fin
32
32
A B
res fin
clk
出力モジュール
0123456
012345
32
32
14/10/24 Fortranを用いた高位合成技術 FortRockの開発15
16. FortRockの動作 - 入力 -
SUBROUTINE LCM(I, J,
ret_lcm)
INTEGER I, J, IR1, IR2,
IR, ret_lcm
IF(I < J) THEN
IR1 = J
IR2 = I
ELSE
IR1 = I
IR2 = J
ENDIF
IR = IR1 - (IR1/IR2) * IR2
DO WHILE(IR>0)
IR1 = IR2
IR2 = IR
IR = IR1 - (IR1/IR2) * IR2
ENDDO
ret_lcm = I*J/IR2
RETURN
END
14/10/24 Fortranを用いた高位合成技術 FortRockの開発16