%i "inside.sfl"
%i "ram.sfl"
submod_class inside {
input in_data<8> ;
output out_data<8> ;
output address<8> ;
output acc_a<8>,pc_a<8>,sp_a<8> ;
instrin reset ;
instrin start ;
instrout read ;
instrout write ;
instr_arg reset() ;
instr_arg start(in_data) ;
}
submod_class ram {
input address<8> ;
input in_data<8> ;
output out_data<8> ;
instrin read ;
instrin write ;
instrin init ;
instr_arg read(address) ;
instr_arg write(address,in_data) ;
instr_arg init() ;
}
module system {
tmp ram_data<8> ;
tmp pld_data<8> ;
tmp address<8> ;
tmp acc_a<8>,pc_a<8>,sp_a<8> ;
instrin reset ;
instrin start ;
inside inside0 ;
ram ram0 ;
instruct reset
/* reset condition */
par {
ram0.init() ;
acc_a = inside0.reset().acc_a ;
pc_a = inside0.reset().pc_a ;
sp_a = inside0.reset().sp_a ;
}
instruct start
/* start assember program */
par {
address = inside0.start(ram_data).address ;
pld_data = inside0.start(ram_data).out_data ;
acc_a = inside0.start(ram_data).acc_a ;
pc_a = inside0.start(ram_data).pc_a ;
sp_a = inside0.start(ram_data).sp_a ;
any {
inside0.start(ram_data).read :
ram_data = ram0.read(address).out_data ;
inside0.start(ram_data).write :
ram0.write(address,pld_data) ;
}
}
}