@@ -41,6 +41,7 @@ NC=$'\033[0m' # No Color
41
41
# defaults
42
42
_YOSYS_EXEC=" yosys"
43
43
_TEST_INPUT_LIST=()
44
+ _VERILOG_INPUT_LIST=()
44
45
_REGENERATE_BLIF=" off"
45
46
_SHOW_FAILURE=" off"
46
47
_CLEAN=" off"
@@ -71,11 +72,11 @@ function print_test_stat() {
71
72
START_TIME=" $2 "
72
73
73
74
if [ _${STAT} == " _E" ]; then
74
- echo " [${BLUE} EXIST${NC} ] . . . . . . . . . . . . . . . . . . _BLIF/ ${TASK_DIR} / ${TCL_BLIF_NAME }"
75
+ echo " [${BLUE} EXIST${NC} ] . . . . . . . . . . . . . . . . . . ${OUTPUT_REALPATH }"
75
76
elif [ _${STAT} == " _C" ]; then
76
- echo " [${GREEN} CREATED${NC} ] . . . . . . . . . . . . . . . . . _BLIF/ ${TASK_DIR} / ${TCL_BLIF_NAME } - [${GREEN} $( print_time_since " ${START_TIME} " ) ${NC} ]"
77
+ echo " [${GREEN} CREATED${NC} ] . . . . . . . . . . . . . . . . . ${OUTPUT_REALPATH } - [${GREEN} $( print_time_since " ${START_TIME} " ) ${NC} ]"
77
78
elif [ _${STAT} == " _F" ]; then
78
- echo " [${RED} FAILED${NC} ]${RED} . . . . . . . . . . . . . . . . . ${NC} _BLIF/ ${TASK_DIR} / ${TCL_BLIF_NAME }"
79
+ echo " [${RED} FAILED${NC} ]${RED} . . . . . . . . . . . . . . . . . ${NC}${OUTPUT_REALPATH } "
79
80
fi
80
81
}
81
82
@@ -128,6 +129,7 @@ function help() {
128
129
OPTIONS
129
130
-h|--help $( _prt_cur_arg off) print this
130
131
-s|--show_failure $( _prt_cur_arg off) show failures in yosys blif generating process
132
+ -V|--verilog < test name > A path to a single Verilog file
131
133
-t|--test < test name > A path to a single test file
132
134
-T|--task Test name is either a absolute or relative path to
133
135
a directory containing a task.ycfg, task_list.conf
@@ -198,17 +200,28 @@ function parse_args() {
198
200
_TEST_INPUT_LIST+=( " $2 " )
199
201
shift
200
202
201
- ;;--regenerate_blif)
202
- _REGENERATE_BLIF=" on"
203
- echo " regenerating blifs of benchmark/_BLIF"
204
-
205
- ;;--show_failure)
206
- _SHOW_FAILURE=" on"
207
- echo " show yosys log if a benchmark fails"
203
+ ;;-V|--verilog)
204
+ # this is handled down stream
205
+ if [ " _$2 " == " _" ]
206
+ then
207
+ echo " empty argument for $1 "
208
+ _exit_with_code " -1"
209
+ fi
210
+ # concat tests
211
+ _VERILOG_INPUT_LIST+=( " $2 " )
212
+ shift
208
213
209
- ;;--clean)
210
- _CLEAN=" on"
211
- echo " clean up yosys generated BLIFs directory if exist"
214
+ ;;--regenerate_blif)
215
+ _REGENERATE_BLIF=" on"
216
+ echo " regenerating blifs of benchmark/_BLIF"
217
+
218
+ ;;--show_failure)
219
+ _SHOW_FAILURE=" on"
220
+ echo " show yosys log if a benchmark fails"
221
+
222
+ ;;--clean)
223
+ _CLEAN=" on"
224
+ echo " clean up yosys generated BLIFs directory if exist"
212
225
213
226
esac
214
227
@@ -299,6 +312,40 @@ function populate_arg_from_file() {
299
312
fi
300
313
}
301
314
315
+ function run_single_files() {
316
+ for circuit in " ${_VERILOG_INPUT_LIST[@]} "
317
+ do
318
+ # validate input file
319
+ if [ " ${circuit: -2} " != " .v" ]; then
320
+ echo " Invalid input Verilog file (${circuit} )"
321
+ _exit_with_code " -1"
322
+ fi
323
+
324
+ export OUTPUT_BLIF_PATH=" ${ODIN_DIR} /yosys"
325
+
326
+ # run yosys for the current circuit
327
+ CIRCUIT_FILE=$( basename " ${circuit} " )
328
+
329
+ CIRCUIT_NAME=" ${CIRCUIT_FILE% .* } "
330
+
331
+ # to check the required path and files
332
+ check " ${OUTPUT_BLIF_PATH} " " ${CIRCUIT_NAME} "
333
+
334
+ export TCL_CIRCUIT=" ${circuit} "
335
+ export TCL_BLIF_NAME=" ${CIRCUIT_NAME} .blif"
336
+ OUTPUT_REALPATH=" ${ODIN_DIR} /${TCL_BLIF_NAME} "
337
+
338
+ if [ -f " ${OUTPUT_BLIF_PATH} /${TCL_BLIF_NAME} " ]; then
339
+ print_test_stat " E"
340
+ continue
341
+ fi
342
+
343
+ run_yosys " ${ODIN_DIR} /synth.tcl"
344
+ done
345
+
346
+ unset _VERILOG_INPUT_LIST
347
+ }
348
+
302
349
function run_task() {
303
350
directory=" $1 "
304
351
if [ " _${_CLEAN} " == " _on" ]; then
@@ -326,12 +373,13 @@ function run_task() {
326
373
327
374
export TCL_CIRCUIT=" ${circuit} "
328
375
export TCL_BLIF_NAME=" ${CIRCUIT_NAME} .blif"
376
+ OUTPUT_REALPATH=" _BLIF/${TASK_DIR} /${TCL_BLIF_NAME} "
329
377
330
378
if [ -f " ${OUTPUT_BLIF_PATH} /${TCL_BLIF_NAME} " ]; then
331
379
print_test_stat " E"
332
380
continue
333
381
fi
334
-
382
+
335
383
336
384
run_yosys " ${ODIN_DIR} /synth.tcl"
337
385
done
@@ -394,6 +442,17 @@ function run_suite() {
394
442
fi
395
443
}
396
444
445
+ function run() {
446
+ # run single verilog file
447
+ if [ ${# _VERILOG_INPUT_LIST[@]} -gt 0 ]; then
448
+ run_single_files
449
+ elif [ ${# _TEST_INPUT_LIST[@]} -gt 0 ]; then
450
+ run_suite
451
+ else
452
+ echo " No test is passed it must pass a verilog file or test directory containing either a task_list.conf or a task.ycfg, see --help"
453
+ _exit_with_code " -1"
454
+ fi
455
+ }
397
456
398
457
# #############################################################################################
399
458
# ######################################## START HERE #########################################
403
462
404
463
parse_args " $@ "
405
464
406
- run_suite
465
+ run
0 commit comments