Pārlūkot izejas kodu

tools: nsdk_runner able to run using command below

python3 tools/scripts/nsdk_cli/nsdk_runner.py --appcfg tmp/sdk_bench.json --appyaml tmp/sdk_bench.yaml --config n900

Signed-off-by: Huaqi Fang <578567190@qq.com>
Huaqi Fang 3 gadi atpakaļ
vecāks
revīzija
456900c538

+ 17 - 17
tools/scripts/nsdk_cli/nsdk_runner.py

@@ -42,7 +42,7 @@ class nsdk_runner(object):
         if os.path.isdir(sdk) == False:
             print("Invalid sdk path %s" % (sdk))
             sys.exit(1)
-        runner_schema = os.path.join(os.path.realpath(__file__), "runner_schema.yaml")
+        runner_schema = os.path.join(os.path.dirname(os.path.realpath(__file__)), "runner_schema.yaml")
         if yaml_validate(runner_schema, runyaml):
             print("Invalid runner yaml file %s" % (runyaml))
             sys.exit(1)
@@ -67,7 +67,7 @@ class nsdk_runner(object):
         cur_runcfg = self.runcfg["configs"][config]
         fpga = cur_runcfg.get("fpga", None)
         bitstream = cur_runcfg.get("bitstream", None)
-        openocdcfg = cur_runcfg.get("openocdcfg", None)
+        openocdcfg = cur_runcfg.get("openocd_cfg", None)
         ncycm = cur_runcfg.get("ncycm", None)
         cpu = cur_runcfg.get("cpu", None)
 
@@ -76,7 +76,7 @@ class nsdk_runner(object):
             if self.runcfg["fpga_runners"][runner]["board_type"] == fpga:
                 fpgas2run[runner] = self.runcfg["fpga_runners"][runner]
                 fpgas2run[runner]["bitstream"] = bitstream
-                fpgas2run[runner]["openocdcfg"] = openocdcfg
+                fpgas2run[runner]["openocd_cfg"] = openocdcfg
         ncycm2run = dict()
         for runner in self.runcfg["ncycm_runners"]:
             if runner == ncycm:
@@ -113,20 +113,20 @@ class nsdk_runner(object):
             return False
         # check fpga/ncycm runner
         if runon == "fpga":
-            if len(cpu2run["fpga"] == 0):
+            if len(runcfg["fpga"]) == 0:
                 print("ERROR: No fpga board available for this cpu")
                 return False
 
             fpgaready = False
             ftdi_serial = serport = ""
-            for fpga in cpu2run["fpga"]:
+            for fpga in runcfg["fpga"]:
                 # check fpga and bitstream, serial port, ftdi_serial
-                ftdi_serial = cpu2run["fpga"][fpga]["ftdi_serial"]
-                fpga_serial = cpu2run["fpga"][fpga]["fpga_serial"]
-                bitstream = cpu2run["fpga"][fpga]["bitstream"]
+                ftdi_serial = runcfg["fpga"][fpga]["ftdi_serial"]
+                fpga_serial = runcfg["fpga"][fpga]["fpga_serial"]
+                bitstream = runcfg["fpga"][fpga]["bitstream"]
                 fpgaloc = self.runcfg["environment"]["fpgaloc"]
-                serport = cpu2run["fpga"][fpga]["serial_port"]
-                openocdcfg = os.path.join(self.sdk, cpu2run["fpga"][fpga]["openocdcfg"])
+                serport = runcfg["fpga"][fpga]["serial_port"]
+                openocdcfg = os.path.join(self.sdk, runcfg["fpga"][fpga]["openocd_cfg"])
                 if (os.path.isfile(openocdcfg)) == False:
                     print("OpenOCD Configuration File %s not found" % (openocdcfg))
                     continue
@@ -161,10 +161,10 @@ class nsdk_runner(object):
             self.appcfg["run_config"]["hardware"]["serport"] = serport
         elif runon == "ncycm":
             # check ncycm
-            if len(cpu2run["ncycm"] == 0):
+            if len(runcfg["ncycm"]) == 0:
                 print("ERROR: No cycle model available for this cpu")
                 return False
-            ncycm_path = cpu2run["ncycm"]["model"]
+            ncycm_path = runcfg["ncycm"]["model"]
             ncycm_loc = self.runcfg["environment"]["ncycmloc"]
             if os.path.isfile(ncycm_path) == False:
                 ncycm_path = os.path.join(ncycm_loc, ncycm_path)
@@ -183,17 +183,17 @@ class nsdk_runner(object):
             subappcfg = merge_config_with_makeopts(subappcfg, runcfg["cpu"]["nsdk_makeopts"][subcfg])
             sublogdir = os.path.join(logdir, subcfg)
             start_time = time.time()
-            cmdsts, result = nsdk_ext.run_apps(subappcfg, True, sublogdir, False)
+            cmdsts, result = nsdk_ext.run_apps(subappcfg, False, sublogdir, False)
             runtime = round(time.time() - start_time, 2)
             print("Run application for config %s run status: %s, time cost %s seconds" % (subcfg, cmdsts, runtime))
-            ret = check_expected(result, config, args.run)
+            ret = check_expected(result, subappcfg, True)
             print("Application build as expected: %s" % (ret))
             save_results(subappcfg, None, subappcfg, result, sublogdir)
             if result:
                 # Generate build or run report
                 rptfile = os.path.join(sublogdir, "report.md")
                 rpthtml = os.path.join(sublogdir, "report.html")
-                generate_report(config, result, rptfile, rpthtml, sublogdir, True)
+                generate_report(subappcfg, result, rptfile, rpthtml, sublogdir, True)
                 csvfile = os.path.join(sublogdir, "result.csv")
                 save_bench_csv(result, csvfile)
                 print("Generate report csv file to %s" % (csvfile))
@@ -220,7 +220,7 @@ if __name__ == '__main__':
     args = parser.parse_args()
 
     if args.sdk is None:
-        args.sdk =  os.path.abspath(os.path.join(os.path.realpath(__file__), "../../../"))
+        args.sdk =  os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../../"))
     if (os.path.isfile(args.appcfg) == False) or (os.path.isfile(args.appyaml) == False):
         print("Invalid application cfg/yaml, please check!")
         sys.exit(1)
@@ -236,4 +236,4 @@ if __name__ == '__main__':
     if ret:
         sys.exit(0)
     else:
-        sys.exit(1)
+        sys.exit(1)

+ 17 - 10
tools/scripts/nsdk_cli/nsdk_utils.py

@@ -640,21 +640,28 @@ def parse_benchmark_runlog(lines):
 def program_fpga(bit, target):
     print("Try to program fpga bitstream %s to target board %s" % (bit, target))
     found_vivado = False
-    if sys.platform == 'win32':
-        if os.system("where vivado") == 0:
-            found_vivado = True
-    else:
-        if os.system("which vivado") == 0:
-            found_vivado = True
+    vivado_cmd = "vivado"
+    for vivado_cmd in ("vivado", "vivado_lab"):
+        if sys.platform == 'win32':
+            if os.system("where %s" % (vivado_cmd)) == 0:
+                found_vivado = True
+                break
+        else:
+            if os.system("which %s" % (vivado_cmd)) == 0:
+                found_vivado = True
+                break
+    # check vivado is found or not            
     if found_vivado == False:
         print("vivado is not found in PATH, please check!")
         return False
-    tcl = os.path.join(os.path.realpath(__file__), "program_bit.tcl")
-    ret = os.system("vivado -mode tcl -nolog -nojournal -source %s -tclargs %s %s" % (tcl, bit, target))
+    tcl = os.path.join(os.path.dirname(os.path.realpath(__file__)), "program_bit.tcl")
+    target = "*%s" % (target)
+    ret = os.system("%s -mode tcl -nolog -nojournal -source %s -tclargs %s %s" % (vivado_cmd, tcl, bit, target))
     if ret != 0:
-        printf("Program fpga bit failed, error code %d", ret)
+        print("Program fpga bit failed, error code %d" % ret)
         return False
-    return False
+    print("Program fpga bit successfully")
+    return True
 
 def check_serial_port(serport):
     if serport in find_possible_serports():

+ 7 - 6
tools/scripts/nsdk_cli/program_bit.tcl

@@ -7,10 +7,11 @@ if { [file exists $bitfile] != 1 } {
     puts "Using bitfile $bitfile"
 }
 open_hw_manager
-connect_hw_server
+connect_hw_server -quiet
 set target [lindex [get_hw_targets -quiet -nocase $hwtarget] 0]
 if { $target eq "" } {
     puts "Can't found hardware target $hwtarget"
+    disconnect_hw_server
     close_hw_manager
     exit 2
 }
@@ -19,16 +20,16 @@ open_hw_target
 set first_hw_device [lindex [get_hw_devices -quiet] 0]
 if { $first_hw_device eq "" } {
     puts "No hardware device found!"
+    disconnect_hw_server
     close_hw_manager
     exit 3
 }
 current_hw_device $first_hw_device
 set_property PROGRAM.FILE $bitfile $first_hw_device
 
-if { [program_hw_devices $first_hw_device] != 1 } {
-    puts "Program bitfile $bitfile failed"
-    close_hw_manager
-    exit 4
-}
+program_hw_devices $first_hw_device
+puts "Program bitfile $bitfile finished"
+disconnect_hw_server
+close_hw_manager
 
 exit 0

+ 2 - 1
tools/scripts/requirements.txt

@@ -4,4 +4,5 @@ pyserial==3.5
 markdown
 pyusb
 yamale
-pyyaml
+pyyaml
+pyexcel