Commit 8c6fd6aa authored by kazushi.kawamura's avatar kazushi.kawamura
Browse files

upload scripts

parent da31831a
Loading
Loading
Loading
Loading

scripts/README.md

0 → 100644
+0 −0

Empty file added.

scripts/main.py

0 → 100644
+115 −0
Changes for scripts/main.py: 115 added lines, 0 removed lines.
Original line number Diff line number Diff line
import numpy as np
from argparse import ArgumentParser
import time

import mySolverModule
from pynq import Overlay
from pynq import Xlnk
from pynq import MMIO

def commandParsing():
	parser = ArgumentParser()
	parser.add_argument('-p', '--problem', help='Problem file name', required=True) # Required
	parser.add_argument('-s', '--seed', help='seed value') # Option
	parser.add_argument('-o', '--output', help='Output file name') # Option
	args = vars(parser.parse_args())
	return args

def main(args):
	print('Download overlay ...', flush=True)
	OL = Overlay('/home/xilinx/pynq/overlays/190826_solver/design_1.bit')
	ip = 'solver_0'
	print(hex(OL.ip_dict[ip]['phys_addr']))

	seed_v = 3
	if args['seed'] is not None: seed_v = int(args['seed'])
	seed = mySolverModule.seed_generator(seed_v) # ndarray
	info = mySolverModule.check_problem(args['problem']) # extract info (block, line, ...)
	
	
	## Global placement
	p = mySolverModule.placer(seed, info['W'][0], info['H'][0], info['blocks'][0], info['line_num'][0], info['block_info'], info['line_info'])
	print(p['block_place'][1:info['blocks'][0]])
	
	
	## Allocate contiguous blocks
	xlnk = Xlnk()
	print(xlnk.cma_stats())
	
	seed_buf = xlnk.cma_array(shape=(3,), dtype=np.uint32)
	B_num_buf = xlnk.cma_array(shape=(1,), dtype=np.int16)
	L_num_buf = xlnk.cma_array(shape=(1,), dtype=np.int16)
	B_info_buf = xlnk.cma_array(shape=(129,5,3), dtype=np.int16)
	W_ext_buf = xlnk.cma_array(shape=(1,), dtype=np.int16)
	H_ext_buf = xlnk.cma_array(shape=(1,), dtype=np.int16)
	B_place_buf = xlnk.cma_array(shape=(129,2), dtype=np.int16)
	result_buf = xlnk.cma_array(shape=(16384,), dtype=np.int16)
	
	print(xlnk.cma_stats())
	
	xlnk.cma_memcopy(seed_buf, p['seed'], 12)
	xlnk.cma_memcopy(B_num_buf, info['blocks'], 2)
	xlnk.cma_memcopy(L_num_buf, info['line_num'], 2)
	xlnk.cma_memcopy(B_info_buf, info['block_info'], 3870)
	xlnk.cma_memcopy(B_place_buf, p['block_place'], 516)
	
	phy_addr_0 = seed_buf.physical_address
	phy_addr_1 = B_num_buf.physical_address
	phy_addr_2 = L_num_buf.physical_address
	phy_addr_3 = B_info_buf.physical_address
	phy_addr_4 = W_ext_buf.physical_address
	phy_addr_5 = H_ext_buf.physical_address
	phy_addr_6 = B_place_buf.physical_address
	phy_addr_7 = result_buf.physical_address
	print(hex(phy_addr_0), hex(phy_addr_1), hex(phy_addr_2), hex(phy_addr_3))
	print(hex(phy_addr_4), hex(phy_addr_5), hex(phy_addr_6), hex(phy_addr_7))
	
	
	## Write pointers
	lite_base_addr = OL.ip_dict[ip]['phys_addr'] # IP_BASE_ADDRESS
	lite_size = OL.ip_dict[ip]['addr_range'] # ADDRESS_RANGE
	mmio = MMIO(lite_base_addr, lite_size)
	
	mmio.write(0x18, phy_addr_0)
	mmio.write(0x20, phy_addr_1)
	mmio.write(0x28, phy_addr_2)
	mmio.write(0x30, phy_addr_3)
	mmio.write(0x38, phy_addr_4)
	mmio.write(0x40, phy_addr_5)
	mmio.write(0x48, phy_addr_6)
	mmio.write(0x50, phy_addr_7)
	
	
	## Local placement
	print('Solver start ...', flush=True)
	mmio.write(0x00, 1)
	while mmio.read(0x00) != 6:
		time.sleep(0.1)
	
	print(bin(mmio.read(0x00)))
	print(mmio.read(0x10))
	
	if mmio.read(0x10) == 0:
		print('Fail routing m(_ _)m')
		return # End function
	
	W_ext = np.zeros((1,), dtype=np.int16)
	H_ext = np.zeros((1,), dtype=np.int16)
	result = np.zeros((16384,), dtype=np.int16)
	xlnk.cma_memcopy(W_ext, W_ext_buf, 2)
	xlnk.cma_memcopy(H_ext, H_ext_buf, 2)
	xlnk.cma_memcopy(result, result_buf, 32768)
	xlnk.cma_memcopy(info['block_info'], B_info_buf, 3870)
	
	mySolverModule.show_result(W_ext[0], H_ext[0], info['blocks'][0], info['line_num'][0], info['block_info'], result)

	if W_ext[0] > info['W'][0] or H_ext[0] > info['H'][0]:
		print('Fail satisfying constraint T_T')
	else:
		print('Satisfy constraint ^_^')
		if args['output'] is not None: mySolverModule.output_to_file(args['output'], W_ext[0], H_ext[0], info['blocks'][0], info['line_num'][0], info['block_info'], result)

if __name__ == '__main__':

	args = commandParsing()
	main(args)

scripts/sample_A.txt

0 → 100644
+19 −0
Changes for scripts/sample_A.txt: 19 added lines, 0 removed lines.
Original line number Diff line number Diff line
SIZE 8X10
1, 1, 1, 2, 2, 2, 2, 0
0, 0, 4, 0, 0, 0, 2, 2
8, 8, 4, 4, 4, 0, 4, 2
7, 8, 0, 0, 4, 4, 4, 2
7, 6, 0, 0, 0, 0, 2, 2
0, 6, 6, 6, 5, 11, 0, 0
10, 10, 10, 6, 5, 11, 0, 0
0, 9, 5, 5, 5, 0, 0, 3
3, 9, 3, 3, 3, 3, 3, 3
3, 3, 3, 0, 0, 0, 0, 0
BLOCK#1 @(0,0)
BLOCK#2 @(0,3)
BLOCK#3 @(0,6)
BLOCK#4 @(2,0)
BLOCK#5 @(5,6)
BLOCK#6 @(4,4)
BLOCK#7 @(1,6)
BLOCK#8 @(4,1)

scripts/sample_Q.txt

0 → 100644
+37 −0
Changes for scripts/sample_Q.txt: 37 added lines, 0 removed lines.
Original line number Diff line number Diff line
SIZE 10X10
BLOCK_NUM 8

BLOCK#1 1X4
1
+
8
7

BLOCK#2 3X2
0,8,0
7,6,+

BLOCK#3 2X3
10,0
 +,0
 3,9

BLOCK#4 2X2
1,2
4,+

BLOCK#5 3X2
11,+,+
 0,0,3

BLOCK#6 3X2
0, +,2
5,11,0

BLOCK#7 3X2
0,10,6
9, 5,0

BLOCK#8 3X2
+,+,0
0,+,4
 No newline at end of file