circuit_type memory { input address<8> ; input in_data<8> ; output out_data<8> ; mem cell[256]<8> ; instrin read ; instrin write ; instrin init ; instr_arg read(address) ; instr_arg write(address,in_data) ; instr_arg init() ; instruct read out_data = cell[address] ; instruct write cell[address] := in_data ; instruct init par { cell[0b00000000] := 0b00000000 ; /* LOAD #00010000 */ cell[0b00000001] := 0b00010000 ; cell[0b00000010] := 0b00000001 ; /* ADD_ACC #00010001 */ cell[0b00000011] := 0b00010001 ; cell[0b00000100] := 0b10000000 ; /* PUSH */ cell[0b00000101] := 0b00000000 ; cell[0b00000110] := 0b10000001 ; /* POP */ cell[0b00000111] := 0b00000000 ; cell[0b00001000] := 0b00000010 ; /* JUMP #00000001 */ cell[0b00001001] := 0b00000010 ; cell[0b00010000] := 0b00001000 ; /* data #00010000 */ cell[0b00010001] := 0b00000001 ; /* data #00010001 */ cell[0b00010010] := 0b00000010 ; /* data #00010010 */ } } module ram { input address<8> ; input in_data<8> ; output out_data<8> ; instrin read ; instrin write ; instrin init ; memory ram1 ; instruct read out_data = ram1.read(address).out_data ; instruct write par { ram1.write(address,in_data) ; out_data = 0b11111111 ; /* pulled up data */ } instruct init ram1.init() ; }