%i "add8.sfl" %i "dec4.sfl" submod_class add8 { input a<8>,b<8>,ci ; output s<8>,co ; instrin do ; instr_arg do(a,b,ci) ; } submod_class dec4 { input in<4> ; output out<4> ; instrin do ; instr_arg do(in) ; } module m8 { input a<8> ; input b<8> ; output x<16> ; instrin start ; instrself oput,kill ; reg A<8> ; reg B<8> ; reg Q<8> ; reg E ; reg shift ; reg C<4> ; reg t ; add8 add8 ; dec4 dec4 ; stage_name multi_stg { task multi_tsk() ; } /* instruct oput x = A || Q ; */ x = A || Q ; instruct start generate multi_stg.multi_tsk() ; stage multi_stg { state_name T0 ; state_name T1 ; state_name T2 ; state_name T3_1 ; state_name T3_2 ; first_state T0 ; any { kill : finish ; } state T0 goto T1 ; state T1 par { A := 0b00000000 ; B := a ; Q := b ; E := 0b0 ; C := 0b1000 ; goto T2 ; } state T2 par { C := dec4.do( C ).out ; any { Q<0> : par { A := add8.do( A,B,0b0 ).s ; E := add8.do( A,B,0b0 ).co ; } } goto T3_1 ; } state T3_1 par { shift := A<0> ; t := /|C<3:0> ; goto T3_2 ; } state T3_2 par { A := E || A<7:1> ; Q := shift || Q<7:1> ; E := 0b0 ; alt { t == 0b1 : goto T2 ; t == 0b0 : kill() ; } } } }