/* 16bits ALU */ %i "cadd16.sfl" submod_class alu16 { input mode<2>; input a<16>, b<16>; input c_in; output out<16>; output c_ou, v_ou, n_ou, z_ou; instrin do; instr_arg do(mode, a, b, c_in); } module alu16 { input mode<2>; input a<16>, b<16>; input c_in; output out<16>; output c_ou, v_ou, n_ou, z_ou; instrin do; cadd16 add; instruct do par { any { mode == 0b00 : par { out = add.do(a, b, 0b0, 0b0).out; } mode == 0b01 : par { out = add.do(a, b, 0b1, 0b1).out; } mode == 0b10 : par { out = add.do(a, b, 0b0, 0b0).g; } mode == 0b11 : par { out = add.do(a, b, 0b0, 0b0).p; } } any { (mode<1> == 0b1) : v_ou = 0b0; else : v_ou = add.v_ou; } n_ou = out<15>; z_ou = ^(/| out); } }