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()