import os import sys top_level = "scan_chain" addr = 0 file1 = open('demo_main.vhx', 'r') Lines_inst = file1.readlines() path = './' # filename = '{}.io'.format(top_level) filename = '{}.csv'.format(top_level) with open(os.path.join(path, 'scan_bitstream.csv'), 'w') as f: # scan_out i_imem_rdata = '00000000000000000000000000000000' i_dmem_rdata = '00000000000000000000000000000000' # scan_in sc_en_cnt = '0' sc_clkgen_fc = '00000' # 5 sc_clkgen_div = '0000' # 4 sc_imem_ctrl = '0' sc_imem_req = '0' sc_imem_addr = '00000000000000000000000000000000' # 32 sc_imem_wen = '0' sc_imem_wdata = '00000000000000000000000000000000' # 32 sc_imem_clk = '0' sc_dmem_ctrl = '0' sc_dmem_req = '0' sc_dmem_addr = '00000000000000000000000000000000' # 32 sc_dmem_wen = '0' sc_dmem_ben = '0000' sc_dmem_wdata = '00000000000000000000000000000000' # 32 sc_dmem_clk = '0' sc_fsm_mode = '0' sc_fsm_indef = '0' sc_fsm_cycle = '00000000000000000000000000000000' def write_output(move_scanchain, scan_i0o1, load, scan_in, clk_int, clk_ext, resetn, num_cycles): if move_scanchain: f.write('100' + str(scan_in) + '\n') f.write('000' + str(scan_in) + '\n') f.write('010' + str(scan_in) + '\n') f.write('000' + str(scan_in) + '\n') elif not move_scanchain and not clk_ext: f.write('00'+ str(load) + '0' + '\n') f.write('00'+ str(load) + '0' + '\n') f.write('00'+ str(load) + '0' + '\n') f.write('00'+ str(load) + '0' + '\n') elif clk_ext: for i in range(num_cycles): f.write('0000' + '\n') f.write('0000' + '\n') def refresh_combine(): global combine combine = ( str(sc_fsm_cycle) + str(sc_fsm_indef) + str(sc_fsm_mode) + str(sc_dmem_clk) + str(sc_dmem_wdata) + str(sc_dmem_ben) + str(sc_dmem_wen) + str(sc_dmem_addr) + str(sc_dmem_req) + str(sc_dmem_ctrl) + str(sc_imem_clk) + str(sc_imem_wdata) + str(sc_imem_wen) + str(sc_imem_addr) + str(sc_imem_req) + str(sc_imem_ctrl) + str(sc_clkgen_div) + str(sc_clkgen_fc) + str(sc_en_cnt) + str(i_dmem_rdata) + str(i_imem_rdata) ) ########################## # scan_instruction ########################## for i in range(len(Lines_inst)): sc_imem_ctrl = '1' sc_dmem_ctrl = '1' sc_imem_cen = '0' sc_imem_wen = '0' sc_imem_addr = "{:032b}".format(i * 4) sc_imem_wdata = str(bin(int(Lines_inst[i].strip(), 16))[2:].zfill(32)) #print(sc_imem_wdata) sc_imem_clk = '0' sc_dmem_clk = '0' refresh_combine() #reversed_combine = combine[::-1] #print(len(combine)) for char in combine: # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=char, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # load data write_output(move_scanchain=False, scan_i0o1=0, load=1, scan_in=0, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) sc_imem_clk = '1' sc_dmem_clk = '1' refresh_combine() for char in combine: # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=char, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # load data write_output(move_scanchain=False, scan_i0o1=0, load=1, scan_in=0, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) ########################## # scan_clk_config ########################## sc_en_cnt = '1' sc_clkgen_fc = '00101' sc_clkgen_div = '0100' sc_imem_clk = '0' sc_dmem_clk = '0' sc_imem_ctrl = '0' sc_dmem_ctrl = '0' ######################## refresh_combine() for char in combine: # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=char, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # load data write_output(move_scanchain=False, scan_i0o1=0, load=1, scan_in=0, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) ################################ # scan_enable_fsm_config ################################ sc_fsm_mode = '1' sc_fsm_indef = '1' sc_fsm_cycle = '00000000000000000000000000000000' sc_imem_addr = '00000000000000000000000000000000' sc_imem_wdata = '00000000000000000000000000000000' ######################## refresh_combine() for char in combine: # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=char, clk_int=1, clk_ext=0, resetn=1, num_cycles=0) # load data write_output(move_scanchain=False, scan_i0o1=0, load=1, scan_in=0, clk_int=1, clk_ext=0, resetn=1, num_cycles=0) write_output(move_scanchain=False, scan_i0o1=0, load=0, scan_in=0, clk_int=1, clk_ext=0, resetn=0, num_cycles=0) write_output(move_scanchain=False, scan_i0o1=0, load=0, scan_in=0, clk_int=1, clk_ext=0, resetn=0, num_cycles=0) write_output(move_scanchain=False, scan_i0o1=0, load=0, scan_in=0, clk_int=1, clk_ext=0, resetn=0, num_cycles=0) write_output(move_scanchain=False, scan_i0o1=0, load=0, scan_in=0, clk_int=1, clk_ext=0, resetn=0, num_cycles=0) write_output(move_scanchain=False, scan_i0o1=0, load=0, scan_in=0, clk_int=1, clk_ext=0, resetn=0, num_cycles=0) write_output(move_scanchain=False, clk_ext=True, num_cycles=100, scan_i0o1=0, load=0, scan_in=0, clk_int=1, resetn=1) # ########################## # # scan_out_DMEM # ########################## # sc_imem_ctrl = '1' # sc_imem_req = '1' # sc_imem_wen = '1' # sc_imem_clk = '1' # sc_imem_wdata = '00000000000000000000000000000000' # refresh_combine() # for char in combine: # # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn # write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=char, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # # scan out data # write_output(move_scanchain=False, scan_i0o1=1, load=0, scan_in=0, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # for char in combine: # # phi, phib, scan_i0o1, load, scan_in, clk_int, clk_ext, rstn # write_output(move_scanchain=True, scan_i0o1=0, load=0, scan_in=0, clk_int=0, clk_ext=0, resetn=0, num_cycles=0) # # f.write(header + iopin.format(right)) f.close()