def test_fpgadataflow_ipstitch_pynq_deployment_folder(): model = ModelWrapper( ip_stitch_model_dir + "/test_fpgadataflow_ipstitch_pynq_driver.onnx" ) try: ip = os.environ["PYNQ_IP"] # no default for this one; skip if not defined if ip == "": pytest.skip("PYNQ board IP address not specified") username = os.getenv("PYNQ_USERNAME", "xilinx") password = os.getenv("PYNQ_PASSWORD", "xilinx") target_dir = os.getenv("PYNQ_TARGET_DIR", "/home/xilinx/finn") model = model.transform(DeployToPYNQ(ip, username, password, target_dir)) pynq_ip = model.get_metadata_prop("pynq_ip") pynq_username = model.get_metadata_prop("pynq_username") pynq_password = model.get_metadata_prop("pynq_password") pynq_target_dir = model.get_metadata_prop("pynq_target_dir") assert pynq_ip == ip assert pynq_username == username assert pynq_password == password assert pynq_target_dir == target_dir deployment_dir = model.get_metadata_prop("pynq_deploy_dir") assert deployment_dir is not None assert os.path.isdir(deployment_dir) model.save( ip_stitch_model_dir + "/test_fpgadataflow_ipstitch_pynq_deployment.onnx" ) except KeyError: pytest.skip("PYNQ board IP address not specified")
def deploy(model, ip, port, username, password, target_dir): log("Deployment launched") model = model.transform( DeployToPYNQ(ip, port, username, password, target_dir)) log("Deployment completed") save(model, "8_deploy") return model
def test_end2end_cnv_w1a1_deploy_on_pynq(): model = ModelWrapper(build_dir + "/end2end_cnv_w1a1_pynq_driver.onnx") try: ip = os.environ["PYNQ_IP"] # no fault for this one; skip if not defined if ip == "": pytest.skip("PYNQ board IP address not specified") username = os.getenv("PYNQ_USERNAME", "xilinx") password = os.getenv("PYNQ_PASSWORD", "xilinx") port = os.getenv("PYNQ_PORT", 22) target_dir = os.getenv("PYNQ_TARGET_DIR", "/home/xilinx/finn") model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir)) # save the model to be able to link it to the parent model.save(build_dir + "/end2end_cnv_w1a1_pynq_deploy.onnx") except KeyError: pytest.skip("PYNQ board IP address not specified")
def test_fpgadataflow_fifo_rtlsim(Shape, folded_shape, depth, finn_dtype): # generate input data x = gen_finn_dt_tensor(finn_dtype, Shape) input_dict = prepare_inputs(x, finn_dtype) model = make_single_fifo_modelwrapper(Shape, depth, folded_shape, finn_dtype) model = model.transform(SetExecMode("rtlsim")) model = model.transform(InsertTLastMarker()) model = model.transform(GiveUniqueNodeNames()) model = model.transform(PrepareIP(test_fpga_part, target_clk_ns)) model = model.transform(HLSSynthIP()) model = model.transform(PrepareRTLSim()) y = oxe.execute_onnx(model, input_dict)["outp"] assert ( y == x ).all(), """The output values are not the same as the input values anymore.""" assert y.shape == tuple(Shape), """The output shape is incorrect.""" model = model.transform(ReplaceVerilogRelPaths()) model = model.transform(CreateStitchedIP(test_fpga_part)) model = model.transform(MakePYNQProject(test_pynq_board)) model = model.transform(SynthPYNQProject()) model = model.transform(MakePYNQDriver()) ip = os.environ["PYNQ_IP"] username = os.getenv("PYNQ_USERNAME", "xilinx") password = os.getenv("PYNQ_PASSWORD", "xilinx") port = os.getenv("PYNQ_PORT", 22) target_dir = os.getenv("PYNQ_TARGET_DIR", "/home/xilinx/finn") model = model.transform(DeployToPYNQ(ip, port, username, password, target_dir)) res = throughput_test(model) expected_dict = {} expected_dict["runtime[ms]"] = [] expected_dict["throughput[images/s]"] = [] expected_dict["DRAM_in_bandwidth[Mb/s]"] = [] expected_dict["DRAM_out_bandwidth[Mb/s]"] = [] for key in expected_dict: assert ( key in res ), """Throughput test not successful, no value for {} in result dictionary""".format( key )
def test_deploy(self, topology, wbits, abits, kind): prev_chkpt_name = get_checkpoint_name(topology, wbits, abits, "build_" + kind) model = load_test_checkpoint_or_skip(prev_chkpt_name) cfg = get_build_env(kind, target_clk_ns) if cfg["ip"] == "": pytest.skip("PYNQ board IP address not specified") model = model.transform( DeployToPYNQ( cfg["ip"], cfg["port"], cfg["username"], cfg["password"], cfg["target_dir"], ) ) # save the model to be able to link it to the parent model.save(get_checkpoint_name(topology, wbits, abits, "deploy_" + kind))
def test_fpgadataflow_ipstitch_zynqbuild(board): model = create_two_fc_model() if model.graph.node[0].op_type == "StreamingDataflowPartition": sdp_node = getCustomOp(model.graph.node[0]) assert sdp_node.__class__.__name__ == "StreamingDataflowPartition" assert os.path.isfile(sdp_node.get_nodeattr("model")) model = load_test_checkpoint_or_skip(sdp_node.get_nodeattr("model")) # generate inputs for remote exec iname = "inp" idt = model.get_tensor_datatype(iname) ishape = model.get_tensor_shape(iname) x = gen_finn_dt_tensor(idt, ishape) # bitfile using ZynqBuild model = model.transform(ZynqBuild(board, 10)) model.save(ip_stitch_model_dir + "/test_fpgadataflow_ipstitch_customzynq.onnx") bitfile_name = model.get_metadata_prop("bitfile") assert bitfile_name is not None assert os.path.isfile(bitfile_name) # deployment try: ip = os.environ[ "PYNQ_IP"] # no default for this one; skip if not defined if ip == "": pytest.skip("PYNQ board IP address not specified") username = os.getenv("PYNQ_USERNAME", "xilinx") password = os.getenv("PYNQ_PASSWORD", "xilinx") port = os.getenv("PYNQ_PORT", 22) target_dir = os.getenv("PYNQ_TARGET_DIR", "/home/xilinx/finn") model = model.transform( DeployToPYNQ(ip, port, username, password, target_dir)) deployment_dir = model.get_metadata_prop("pynq_deploy_dir") assert deployment_dir is not None assert os.path.isdir(deployment_dir) # remote exec input_dict = {"global_in": x} outp = execute_onnx(model, input_dict) assert np.isclose(outp["global_out"], x).all() except KeyError: pytest.skip("PYNQ board IP address not specified")