source code for the use that 4x4 keyboard can be typed in the same way as piano
File list:
piano_EDA
........\keyboard
........\........\db
........\........\..\add_sub_lkc.tdf
........\........\..\add_sub_mkc.tdf
........\........\..\altsyncram_3l81.tdf
........\........\..\altsyncram_4l81.tdf
........\........\..\altsyncram_5l81.tdf
........\........\..\altsyncram_8lv.tdf
........\........\..\alt_u_div_i2f.tdf
........\........\..\alt_u_div_m2f.tdf
........\........\..\alt_u_div_o2f.tdf
........\........\..\alt_u_div_s2f.tdf
........\........\..\keyboard.(0).cnf.cdb
........\........\..\keyboard.(0).cnf.hdb
........\........\..\keyboard.(1).cnf.cdb
........\........\..\keyboard.(1).cnf.hdb
........\........\..\keyboard.(2).cnf.cdb
........\........\..\keyboard.(2).cnf.hdb
........\........\..\keyboard.(3).cnf.cdb
........\........\..\keyboard.(3).cnf.hdb
........\........\..\keyboard.(4).cnf.cdb
........\........\..\keyboard.(4).cnf.hdb
........\........\..\keyboard.(5).cnf.cdb
........\........\..\keyboard.(5).cnf.hdb
........\........\..\keyboard.archive.qmsg
........\........\..\keyboard.cbx.xml
........\........\..\keyboard.cmp.rdb
........\........\..\keyboard.cmp_merge.kpt
........\........\..\keyboard.db_info
........\........\..\keyboard.eco.cdb
........\........\..\keyboard.hier_info
........\........\..\keyboard.hif
........\........\..\keyboard.lpc.html
........\........\..\keyboard.lpc.rdb
........\........\..\keyboard.lpc.txt
........\........\..\keyboard.map.bpm
........\........\..\keyboard.map.cdb
........\........\..\keyboard.map.ecobp
........\........\..\keyboard.map.hdb
........\........\..\keyboard.map.kpt
........\........\..\keyboard.map.logdb
........\........\..\keyboard.map.qmsg
........\........\..\keyboard.map_bb.cdb
........\........\..\keyboard.map_bb.hdb
........\........\..\keyboard.map_bb.logdb
........\........\..\keyboard.pre_map.cdb
........\........\..\keyboard.pre_map.hdb
........\........\..\keyboard.rtlv.hdb
........\........\..\keyboard.rtlv_sg.cdb
........\........\..\keyboard.rtlv_sg_swap.cdb
........\........\..\keyboard.sgdiff.cdb
........\........\..\keyboard.sgdiff.hdb
........\........\..\keyboard.sld_design_entry.sci
........\........\..\keyboard.sld_design_entry_dsc.sci
........\........\..\keyboard.smp_dump.txt
........\........\..\keyboard.syn_hier_info
........\........\..\keyboard.tis_db_list.ddb
........\........\..\keyboard_global_asgn_op.abo
........\........\..\lpm_divide_eem.tdf
........\........\..\lpm_divide_hem.tdf
........\........\..\lpm_divide_j6m.tdf
........\........\..\lpm_divide_m6m.tdf
........\........\..\prev_cmp_keyboard.asm.qmsg
........\........\..\prev_cmp_keyboard.fit.qmsg
........\........\..\prev_cmp_keyboard.map.qmsg
........\........\..\prev_cmp_keyboard.qmsg
........\........\..\prev_cmp_keyboard.tan.qmsg
........\........\..\sign_div_unsign_olh.tdf
........\........\..\sign_div_unsign_qlh.tdf
........\........\..\sign_div_unsign_rlh.tdf
........\........\..\sign_div_unsign_tlh.tdf
........\........\incremental_db
........\........\..............\compiled_partitions
........\........\..............\...................\keyboard.root_partition.cmp.atm
........\........\..............\...................\keyboard.root_partition.cmp.dfp
........\........\..............\...................\keyboard.root_partition.cmp.hdbx
........\........\..............\...................\keyboard.root_partition.cmp.kpt
........\........\..............\...................\keyboard.root_partition.cmp.logdb
........\........\..............\...................\keyboard.root_partition.cmp.rcf
........\........\..............\...................\keyboard.root_partition.map.atm
........\........\..............\...................\keyboard.root_partition.map.dpi
........\........\..............\...................\keyboard.root_partition.map.hdbx
........\........\..............\...................\keyboard.root_partition.map.kpt
........\........\..............\README
........\........\core.bsf
........\........\keyboard.archive.rpt
........\........\keyboard.asm.rpt
........\........\keyboard.bdf
........\........\keyboard.done
........\........\keyboard.dpf
........\........\keyboard.fit.rpt
........\........\keyboard.fit.smsg
........\........\keyboard.fit.summary
........\........\keyboard.flow.rpt
........\........\keyboard.map.rpt
........\........\keyboard.map.smsg
........\........\keyboard.map.summary
........\........\keyboard.pin
........\........\keyboard.pof
........\........\keyboard.qar
........\........\keyboard.qarlog
........\........\keyboard.qpf
........\........\keyboard.qsf
........\........\keyboard.qws
........\........\keyboard.sof
........\........\keyboard.tan.rpt
........\........\keyboard.tan.summary
........\........\keyboard_assignment_defaults.qdf
........\........\state_tube.bsf
........\piano
........\.....\db
........\.....\..\piano.db_info
........\.....\..\piano.eco.cdb
........\.....\..\piano.sld_design_entry.sci
........\.....\..\piano_global_asgn_op.abo
........\.....\..\prev_cmp_piano.asm.qmsg
........\.....\..\prev_cmp_piano.fit.qmsg
........\.....\..\prev_cmp_piano.map.qmsg
........\.....\..\prev_cmp_piano.qmsg
........\.....\..\prev_cmp_piano.tan.qmsg
........\.....\incremental_db
........\.....\..............\compiled_partitions
........\.....\..............\...................\piano.root_partition.cmp.atm
........\.....\..............\...................\piano.root_partition.cmp.dfp
........\.....\..............\...................\piano.root_partition.cmp.hdbx
........\.....\..............\...................\piano.root_partition.cmp.kpt
........\.....\..............\...................\piano.root_partition.cmp.logdb
........\.....\..............\...................\piano.root_partition.cmp.rcf
........\.....\..............\...................\piano.root_partition.map.atm
........\.....\..............\...................\piano.root_partition.map.dpi
........\.....\..............\...................\piano.root_partition.map.hdbx
........\.....\..............\...................\piano.root_partition.map.kpt
........\.....\..............\README
........\.....\piano_restored
........\.....\clk4.v
........\.....\clk6250000.v
........\.....\piano.asm.rpt
........\.....\piano.bsf
........\.....\piano.done
........\.....\piano.fit.rpt
........\.....\piano.fit.smsg
........\.....\piano.fit.summary
........\.....\piano.flow.rpt
........\.....\piano.map.rpt
........\.....\piano.map.smsg
........\.....\piano.map.summary
........\.....\piano.pin
........\.....\piano.pof
........\.....\piano.qar
........\.....\piano.qarlog
........\.....\piano.qpf
........\.....\piano.qsf
........\.....\piano.qws
........\.....\piano.sof
........\.....\piano.tan.rpt
........\.....\piano.tan.summary
........\.....\piano.v
........\.....\piano.v.bak
........\.....\piano_assignment_defaults.qdf