logic_log.txt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. > set sh_continue_on_error false
  2. > set sh_echo_on_source true
  3. > set sh_quiet_on_source true
  4. > set cc_critical_as_fatal true
  5. >
  6. > set_seed_rand 10
  7. > if { ! [info exists LOGIC_DEVICE] } {
  8. set LOGIC_DEVICE AGRV2KL100
  9. }
  10. > if { ! [info exists LOGIC_DESIGN] } {
  11. set LOGIC_DESIGN top
  12. }
  13. > if { ! [info exists LOGIC_MODULE] } {
  14. set LOGIC_MODULE "$LOGIC_DESIGN"
  15. }
  16. > if { ! [info exists LOGIC_FORCE] } {
  17. set LOGIC_FORCE false
  18. }
  19. > if { ! [info exists IP_INSTALL_DIR] } {
  20. set IP_INSTALL_DIR ""
  21. }
  22. > if { ! [info exists LOGIC_TOPPIN] } {
  23. set LOGIC_TOPPIN false
  24. }
  25. > if { ! [info exists LOGIC_DIR] } {
  26. set LOGIC_DIR .
  27. }
  28. > if { ! [info exists LOGIC_VV] } {
  29. set LOGIC_VV "${LOGIC_DESIGN}.v"
  30. }
  31. > if { ! [info exists IP_VV] } {
  32. set IP_VV ""
  33. }
  34. > if { ! [info exists LIB_DIRS] } {
  35. set LIB_DIRS {.}
  36. }
  37. > if { ! [info exists LOGIC_ASF] } {
  38. set LOGIC_ASF ""
  39. }
  40. > if { ! [info exists LOGIC_PRE] } {
  41. set LOGIC_PRE ""
  42. }
  43. > if { ! [info exists LOGIC_POST] } {
  44. set LOGIC_POST ""
  45. }
  46. > if { ! [info exists DESIGN_ASF] } {
  47. set DESIGN_ASF ""
  48. }
  49. > if { ! [info exists DESIGN_PRE] } {
  50. set DESIGN_PRE ""
  51. }
  52. > if { ! [info exists DESIGN_POST] } {
  53. set DESIGN_POST ""
  54. }
  55. > if { ! [info exists SDC_FILE] } {
  56. set SDC_FILE ""
  57. }
  58. > if { ! [info exists VE_FILE] } {
  59. set VE_FILE ""
  60. }
  61. > if { ! [info exists VEX_FILE] } {
  62. set VEX_FILE ""
  63. }
  64. > if { ! [info exists AGF_FILE] } {
  65. set AGF_FILE ""
  66. }
  67. > if { ! [info exists LOGIC_COMPRESS] } {
  68. set LOGIC_COMPRESS false
  69. }
  70. >
  71. > cd $LOGIC_DIR
  72. >
  73. > alta::set_verbose_cmd false
  74. > set logic_ip false
  75. > if { $IP_INSTALL_DIR != "" } {
  76. set logic_ip true
  77. }
  78. >
  79. > set ETC_DIR [file join [alta::prog_home] "etc"]
  80. > set IP_FILES ""
  81. > set VERILOG_FILES $LOGIC_VV
  82. > if { $IP_VV != "" } {
  83. set VERILOG_FILES "$VERILOG_FILES $IP_VV"
  84. }
  85. > set VQM_FILES ""
  86. > set VHDL_FILES ""
  87. > set AF_QUARTUS_TEMPL [file join $ETC_DIR "af_quartus.tcl"]
  88. > set AF_QUARTUS "af_quartus.tcl"
  89. > set AF_IP_TEMPL [file join $ETC_DIR "af_ip.tcl"]
  90. > set AF_IP "af_ip.tcl"
  91. > set AF_MAP_TEMPL [file join $ETC_DIR "af_map.tcl"]
  92. > set AF_MAP "af_map.tcl"
  93. > set AF_RUN_TEMPL [file join $ETC_DIR "af_run.tcl"]
  94. > set AF_RUN "af_run.tcl"
  95. > set AF_BATCH_TEMPL [file join $ETC_DIR "af_batch.tcl"]
  96. > set AF_BATCH "af_batch.tcl"
  97. >
  98. > if { ! [info exists ORIGINAL_DIR] } {
  99. set ORIGINAL_DIR ""
  100. }
  101. > if { ! [info exists ORIGINAL_OUTPUT] } {
  102. set ORIGINAL_OUTPUT ""
  103. }
  104. > if { ! [info exists ORIGINAL_QSF] } {
  105. set ORIGINAL_QSF ""
  106. }
  107. > if { ! [info exists ORIGINAL_PIN] } {
  108. set ORIGINAL_PIN ""
  109. }
  110. >
  111. > set GCLK_CNT -1; # Allow an extra gclk for GCLKSW
  112. > set USE_DESIGN_TEMPL true
  113. >
  114. > proc print_fdata { fp data } {
  115. if { [string index $data end] == "\n" } {
  116. puts -nonewline $fp $data
  117. } else {
  118. puts $fp $data
  119. }
  120. }
  121. >
  122. > proc backup_files { fnames } {
  123. foreach fname $fnames {
  124. if { $fname != "" } {
  125. set new_fname ".__${fname}__"
  126. if { [file exists $fname] } {
  127. catch "file delete -force $new_fname"
  128. catch "file rename -force $fname $new_fname"
  129. }
  130. }
  131. }
  132. }
  133. >
  134. > proc restore_files { fnames } {
  135. foreach fname $fnames {
  136. if { $fname != "" } {
  137. set new_fname ".__${fname}__"
  138. if { [file exists $new_fname] } {
  139. catch "file delete -force $fname"
  140. catch "file rename -force $new_fname $fname"
  141. }
  142. }
  143. }
  144. }
  145. >
  146. > proc read_file { fname } {
  147. set lines {}
  148. if { ! [file exists $fname] } {
  149. return $lines
  150. }
  151. set fp [open $fname]
  152. set is_pio false
  153. set skip_empty false
  154. while { [gets $fp line] >= 0 } {
  155. if { [string first "pio_begin" $line] >= 0 } {
  156. set is_pio true
  157. } elseif { [string first "pio_end" $line] >= 0 } {
  158. set is_pio false
  159. set skip_empty true
  160. } elseif { ! $is_pio } {
  161. if { ! ($skip_empty && [regexp -expanded {^[ #]*$} $line]) } {
  162. lappend lines $line
  163. set skip_empty false
  164. }
  165. }
  166. }
  167. close $fp
  168. return $lines
  169. }
  170. >
  171. > set logic_hx ${LOGIC_DESIGN}.hx
  172. > set hx_fp [open $logic_hx r]
  173. > set hsi_freq 0
  174. > set hse_freq 0
  175. > set sys_freq 0
  176. > set bus_freq 0
  177. > while { [gets $hx_fp line] >= 0 } {
  178. set words [split $line]
  179. if { [lindex $words 0] == "#define" } {
  180. if { [lindex $words 1] == "BOARD_HSI_FREQUENCY" } {
  181. set hsi_freq [lindex $words 2]
  182. } elseif { [lindex $words 1] == "BOARD_HSE_FREQUENCY" } {
  183. set hse_freq [lindex $words 2]
  184. } elseif { [lindex $words 1] == "BOARD_PLL_FREQUENCY" } {
  185. set sys_freq [lindex $words 2]
  186. } elseif { [lindex $words 1] == "BOARD_BUS_FREQUENCY" } {
  187. set bus_freq [lindex $words 2]
  188. }
  189. if { [lindex $words 1] == "BOARD_PLL_CLKIN" } {
  190. set BOARD_PLL_CLKIN [lindex $words 2]
  191. }
  192. if { [lindex $words 1] == "USB0_MODE" } {
  193. set USB0_MODE [lindex $words 2]
  194. }
  195. }
  196. }
  197. > close $hx_fp
  198. >
  199. > if { ! $logic_ip } {
  200. set sdc_file ${LOGIC_DESIGN}.sdc
  201. set sdc_ip ""
  202. } else {
  203. set sdc_file ${LOGIC_DESIGN}_.sdc
  204. set sdc_ip ${LOGIC_DESIGN}.sdc
  205. }
  206. >
  207. > set logic_qsf ${LOGIC_DESIGN}.qsf
  208. > set logic_qpf ${LOGIC_DESIGN}.qpf
  209. > set supra_proj ${LOGIC_DESIGN}.proj
  210. > set keep_files [list $sdc_file $sdc_ip]
  211. > set skip_setup 0
  212. > if { [file exists $logic_qsf] || [file exists $logic_qpf] } {
  213. if { $LOGIC_FORCE } {
  214. alta::tcl_info "Overwrite existing LOGIC preparation files in $LOGIC_DIR"
  215. set skip_setup 1
  216. } else {
  217. alta::tcl_warn "Files for LOGIC preparation already exist in $LOGIC_DIR"
  218. set skip_setup 2
  219. alta::lconcat keep_files [list $logic_qsf $logic_qpf $supra_proj]
  220. }
  221. }
  222. Warn: Files for LOGIC preparation already exist in logic.
  223. >
  224. > if { $skip_setup < 3 } {
  225. backup_files $keep_files
  226. load_architect -no_work -no_route -type $LOGIC_DEVICE
  227. if { ${SDC_FILE} == "" && ${AGF_FILE} == "" && ${VEX_FILE} == "" } {
  228. alta::setupRun ${LOGIC_DESIGN} ${LOGIC_MODULE} \
  229. "${IP_FILES}" \
  230. "${VERILOG_FILES}" \
  231. "${VQM_FILES}" \
  232. "${VHDL_FILES}" \
  233. "${LIB_DIRS}" \
  234. "${AF_QUARTUS_TEMPL}" "${AF_QUARTUS}" \
  235. "${AF_IP_TEMPL}" "${AF_IP}" \
  236. "${AF_MAP_TEMPL}" "${AF_MAP}" \
  237. "${AF_RUN_TEMPL}" "${AF_RUN}" \
  238. "${AF_BATCH_TEMPL}" "${AF_BATCH}" \
  239. "${VE_FILE}" \
  240. "." "${ORIGINAL_DIR}" "${ORIGINAL_OUTPUT}"\
  241. "${ORIGINAL_QSF}" "${ORIGINAL_PIN}" \
  242. "${GCLK_CNT}" "${USE_DESIGN_TEMPL}"
  243. } else {
  244. alta::setupRun ${LOGIC_DESIGN} ${LOGIC_MODULE} \
  245. "${IP_FILES}" \
  246. "${VERILOG_FILES}" \
  247. "${VQM_FILES}" \
  248. "${VHDL_FILES}" \
  249. "${LIB_DIRS}" \
  250. "${AF_QUARTUS_TEMPL}" "${AF_QUARTUS}" \
  251. "${AF_IP_TEMPL}" "${AF_IP}" \
  252. "${AF_MAP_TEMPL}" "${AF_MAP}" \
  253. "${AF_RUN_TEMPL}" "${AF_RUN}" \
  254. "${AF_BATCH_TEMPL}" "${AF_BATCH}" \
  255. "${VE_FILE}" \
  256. "." "${ORIGINAL_DIR}" "${ORIGINAL_OUTPUT}"\
  257. "${ORIGINAL_QSF}" "${ORIGINAL_PIN}" \
  258. "${GCLK_CNT}" "${USE_DESIGN_TEMPL}" \
  259. "${SDC_FILE}" "${AGF_FILE}" "${VEX_FILE}"
  260. }
  261. if { true } {
  262. set proj_fp [open $supra_proj w]
  263. puts $proj_fp {[GuiMigrateSetupPage]}
  264. puts $proj_fp "design=$LOGIC_DESIGN"
  265. puts $proj_fp "device=$LOGIC_DEVICE"
  266. puts $proj_fp "flowInline=true"
  267. puts $proj_fp ""
  268. puts $proj_fp {[GuiMigrateRunPage]}
  269. puts $proj_fp "fitting=1"
  270. puts $proj_fp "fitter=5"
  271. puts $proj_fp "effort=2"
  272. puts $proj_fp "skew=2"
  273. if { $logic_ip } {
  274. puts $proj_fp "flow=0"
  275. }
  276. close $proj_fp
  277. }
  278. restore_files $keep_files
  279. if { true } {
  280. set proj_lines [read_file $supra_proj]
  281. set proj_fp [open $supra_proj w]
  282. set flow_inline false
  283. foreach line $proj_lines {
  284. if { [string first "flowInline" $line] >= 0 } {
  285. puts $proj_fp "flowInline=force"
  286. set flow_inline true
  287. } else {
  288. puts $proj_fp $line
  289. }
  290. }
  291. if { ! $flow_inline } {
  292. puts $proj_fp "\n\[GuiMigrateSetupPage\]"
  293. puts $proj_fp "flowInline=force"
  294. }
  295. close $proj_fp
  296. }
  297. if { $sdc_file != "" } {
  298. set sdc_lines [read_file $sdc_file]
  299. set sdc_fp [open $sdc_file w]
  300. puts $sdc_fp "# pio_begin"
  301. if { $hsi_freq != 0 } {
  302. set hsi_period [expr 1000000000.0/$hsi_freq]
  303. puts $sdc_fp "if { ! \[info exists ::HSI_PERIOD\] } {"
  304. puts $sdc_fp " set ::HSI_PERIOD $hsi_period"
  305. puts $sdc_fp "}"
  306. puts $sdc_fp "create_clock -name PIN_HSI -period \$::HSI_PERIOD \[get_ports PIN_HSI\]"
  307. puts $sdc_fp "set_clock_groups -asynchronous -group PIN_HSI"
  308. }
  309. if { $hse_freq != 0 } {
  310. set hse_period [expr 1000000000.0/$hse_freq]
  311. puts $sdc_fp "if { ! \[info exists ::HSE_PERIOD\] } {"
  312. puts $sdc_fp " set ::HSE_PERIOD $hse_period"
  313. puts $sdc_fp "}"
  314. puts $sdc_fp "create_clock -name PIN_HSE -period \$::HSE_PERIOD \[get_ports PIN_HSE\]"
  315. puts $sdc_fp "set_clock_groups -asynchronous -group PIN_HSE"
  316. }
  317. puts $sdc_fp "derive_pll_clocks -create_base_clocks"
  318. puts $sdc_fp "set_false_path -from rv32|resetn_out"
  319. puts $sdc_fp "# pio_end"
  320. puts $sdc_fp "##\n"
  321. foreach line $sdc_lines {
  322. puts $sdc_fp $line
  323. }
  324. close $sdc_fp
  325. }
  326. if { $sdc_ip != "" } {
  327. set sdc_lines [read_file $sdc_ip]
  328. set sdc_fp [open $sdc_ip w]
  329. puts $sdc_fp "# pio_begin"
  330. if { $sys_freq != 0 } {
  331. set sys_period [expr 1000000000.0/$sys_freq]
  332. puts $sdc_fp "create_clock -name sys_clock -period $sys_period \[get_ports sys_clock\]"
  333. }
  334. if { $bus_freq != 0 } {
  335. set bus_period [expr 1000000000.0/$bus_freq]
  336. puts $sdc_fp "create_clock -name bus_clock -period $bus_period \[get_ports bus_clock\]"
  337. }
  338. puts $sdc_fp "set_false_path -from resetn"
  339. puts $sdc_fp "# pio_end"
  340. puts $sdc_fp "##\n"
  341. foreach line $sdc_lines {
  342. puts $sdc_fp $line
  343. }
  344. close $sdc_fp
  345. }
  346. if { $logic_ip } {
  347. set qsf_lines [read_file $logic_qsf]
  348. set qsf_fp [open $logic_qsf w]
  349. puts $qsf_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  350. puts $qsf_fp "set_instance_assignment -name VIRTUAL_PIN ON -to *"
  351. puts $qsf_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  352. puts $qsf_fp "##\n"
  353. foreach line $qsf_lines {
  354. puts $qsf_fp $line
  355. }
  356. close $qsf_fp
  357. set run_lines [read_file $AF_RUN]
  358. set run_fp [open $AF_RUN w]
  359. puts $run_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  360. puts $run_fp "if { [info exists MODE] && (\$MODE == \"SYNPLICITY\" || \$MODE == \"NATIVE\") } {"
  361. puts $run_fp " set FLOW SKIP"
  362. puts $run_fp "} else {"
  363. puts $run_fp " set FLOW PACK"
  364. puts $run_fp "}"
  365. puts $run_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  366. puts $run_fp "##\n"
  367. foreach line $run_lines {
  368. puts $run_fp $line
  369. }
  370. close $run_fp
  371. set map_lines [read_file $AF_MAP]
  372. set map_fp [open $AF_MAP w]
  373. puts $map_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  374. if { $logic_ip } {
  375. puts $map_fp "set IOPAD false"
  376. } else {
  377. puts $map_fp "set IOPAD true"
  378. }
  379. puts $map_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  380. puts $map_fp "##\n"
  381. foreach line $map_lines {
  382. puts $map_fp $line
  383. }
  384. close $map_fp
  385. }
  386. if { true } {
  387. set pre_asf ${LOGIC_DESIGN}.pre.asf
  388. set pre_lines [read_file $pre_asf]
  389. set pre_fp [open $pre_asf w]
  390. puts $pre_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  391. if { "$LOGIC_PRE" != "" } {
  392. set logic_fp [open $LOGIC_PRE r]; set logic_data [read $logic_fp]; close $logic_fp
  393. print_fdata $pre_fp $logic_data
  394. }
  395. if { !$logic_ip } {
  396. if { [info exists BOARD_PLL_CLKIN] } {
  397. puts $pre_fp "set BOARD_PLL_CLKIN $BOARD_PLL_CLKIN"
  398. }
  399. if { [info exists USB0_MODE] } {
  400. puts $pre_fp "set USB0_MODE $USB0_MODE"
  401. }
  402. puts $pre_fp "set db_io_name_priority $LOGIC_TOPPIN"
  403. puts $pre_fp "set ip_pll_vco_lowpower true"
  404. if { $LOGIC_COMPRESS } {
  405. puts $pre_fp "set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION \"ON\""
  406. } else {
  407. puts $pre_fp "set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION \"OFF\""
  408. }
  409. }
  410. if { "$DESIGN_PRE" != "" } {
  411. set design_fp [open $DESIGN_PRE r]; set design_data [read $design_fp]; close $design_fp
  412. print_fdata $pre_fp $design_data
  413. }
  414. puts $pre_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  415. puts $pre_fp "##\n"
  416. foreach line $pre_lines {
  417. puts $pre_fp $line
  418. }
  419. close $pre_fp
  420. }
  421. if { true } {
  422. set asf_asf ${LOGIC_DESIGN}.asf
  423. set asf_lines [read_file $asf_asf]
  424. set asf_fp [open $asf_asf w]
  425. puts $asf_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  426. if { "$LOGIC_ASF" != "" } {
  427. set logic_fp [open $LOGIC_ASF r]; set logic_data [read $logic_fp]; close $logic_fp
  428. print_fdata $asf_fp $logic_data
  429. }
  430. if { "$DESIGN_ASF" != "" } {
  431. set design_fp [open $DESIGN_ASF r]; set design_data [read $design_fp]; close $design_fp
  432. print_fdata $asf_fp $design_data
  433. }
  434. puts $asf_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  435. puts $asf_fp "##\n"
  436. foreach line $asf_lines {
  437. puts $asf_fp $line
  438. }
  439. close $asf_fp
  440. }
  441. if { true } {
  442. set post_asf ${LOGIC_DESIGN}.post.asf
  443. set post_lines [read_file $post_asf]
  444. set post_fp [open $post_asf w]
  445. puts $post_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  446. if { "$LOGIC_POST" != "" } {
  447. set logic_fp [open $LOGIC_POST r]; set logic_data [read $logic_fp]; close $logic_fp
  448. print_fdata $post_fp $logic_data
  449. }
  450. if { $logic_ip } {
  451. puts $post_fp "file mkdir $IP_INSTALL_DIR"
  452. puts $post_fp "if { ! \[file exists ${IP_INSTALL_DIR}/${LOGIC_DESIGN}.sdc\] } {"
  453. puts $post_fp " file copy -force ./${LOGIC_DESIGN}_.sdc ${IP_INSTALL_DIR}/${LOGIC_DESIGN}.sdc"
  454. puts $post_fp "}"
  455. puts $post_fp "file copy -force ./${LOGIC_DESIGN}_.ve ${IP_INSTALL_DIR}/${LOGIC_DESIGN}.ve"
  456. puts $post_fp "if { \$MODE == \"SYNPLICITY\" || \$MODE == \"NATIVE\" } {"
  457. puts $post_fp " file copy -force ${LOGIC_DESIGN}.vqm ${IP_INSTALL_DIR}/${LOGIC_DESIGN}.vq"
  458. puts $post_fp "} else {"
  459. puts $post_fp " file copy -force ./alta_db/packed.vx ${IP_INSTALL_DIR}/${LOGIC_DESIGN}.vx"
  460. puts $post_fp "}"
  461. }
  462. if { "$DESIGN_POST" != "" } {
  463. set design_fp [open $DESIGN_POST r]; set design_data [read $design_fp]; close $design_fp
  464. print_fdata $post_fp $design_data
  465. }
  466. puts $post_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  467. puts $post_fp "##\n"
  468. foreach line $post_lines {
  469. puts $post_fp $line
  470. }
  471. close $post_fp
  472. }
  473. if { true } {
  474. set pre_asf ${LOGIC_DESIGN}.pre_map.asf
  475. set pre_lines [read_file $pre_asf]
  476. set pre_fp [open $pre_asf w]
  477. puts $pre_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  478. puts $pre_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  479. puts $pre_fp "##\n"
  480. foreach line $pre_lines {
  481. puts $pre_fp $line
  482. }
  483. close $pre_fp
  484. }
  485. if { true } {
  486. set post_asf ${LOGIC_DESIGN}.post_map.asf
  487. set post_lines [read_file $post_asf]
  488. set post_fp [open $post_asf w]
  489. puts $post_fp "# pio_begin >>>>>> DO NOT MODIFY THIS SECTION! >>>>>>"
  490. puts $post_fp "# pio_end <<<<<< DO NOT MODIFY THIS SECTION! <<<<<<"
  491. puts $post_fp "##\n"
  492. foreach line $post_lines {
  493. puts $post_fp $line
  494. }
  495. close $post_fp
  496. }
  497. }
  498. Total IO : 150
  499. Total Pin : 128/17
  500. Top array is built.
  501. Loading architect libraries...
  502. ## CPU time: 0:0:0, REAL time: 0:0:0
  503. ## Memory Usage: 52MB (52MB)
  504. Warn: Can not find SDC file .\\fpga_boot.sdc, create a empty one.
  505. Info: Using device QSF template file C:/Users/zzz17/.platformio/packages/tool-agrv_logic/etc/AGRV2K_templ.qsf.
  506. Info: Can not find pre_map-ASF file ./fpga_boot.pre_map.asf, create a empty one.
  507. Info: Can not find post_map-ASF file ./fpga_boot.post_map.asf, create a empty one.
  508. >
  509. > exit
  510. Total 0 fatals, 0 errors, 2 warnings, 3 infos.