101 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
| # -----------------------------------------------------------------------------
 | |
| #  The confidential and proprietary information contained in this file may
 | |
| #  only be used by a person authorised under and to the extent permitted
 | |
| #  by a subsisting licensing agreement from ARM limited.
 | |
| #
 | |
| #             (C) COPYRIGHT 2018 ARM limited.
 | |
| #                 ALL RIGHTS RESERVED
 | |
| #
 | |
| #  This entire notice must be reproduced on all copies of this file
 | |
| #  and copies of this file may only be made by a person if such person is
 | |
| #  permitted to do so under the terms of a subsisting license agreement
 | |
| #  from ARM limited.
 | |
| #
 | |
| #       SVN Information
 | |
| #
 | |
| #       Checked In          : $Date$
 | |
| #
 | |
| #       Revision            : $Revision$
 | |
| #
 | |
| #       Release Information : Cortex-M1 DesignStart-r0p1-00rel0
 | |
| #                             
 | |
| # -----------------------------------------------------------------------------
 | |
| #  Project : Cortex-M1 Arty A7 Example design with V2C-DAPLink adaptor board
 | |
| #
 | |
| #  Purpose : Script to create bit and mcs files for Arty A7 board
 | |
| #
 | |
| #            Combines the original bit file, mmi file, and software elf to create
 | |
| #            the full bitstream
 | |
| #            Then converts full bitstream to mcs for download to the onboard flash
 | |
| #
 | |
| #            Can be run either in Vivado GUI TCL console, or else in batch mode
 | |
| #            from command line
 | |
| #            If run in Vivado TCL console, pwd needs to be set to root of project, 
 | |
| #            in the same location as the bit file
 | |
| # -----------------------------------------------------------------------------
 | |
| 
 | |
| # Input files
 | |
| set mmi_file            "./m1.mmi"
 | |
| set elf_file            "../bsp/bootloader.elf"
 | |
| set source_bit_file     "./aum1.runs/impl_1/au_top.bit"
 | |
| set reference_bit_file  "./aum1_reference.bit"
 | |
| 
 | |
| # Output files
 | |
| set output_bit_file "aum1.bit"
 | |
| set output_bin_file "aum1.bin"
 | |
| 
 | |
| # Enable to turn on debug
 | |
| set updatemem_debug 0
 | |
| 
 | |
| # Assemble bit file that can be downloaded to device directly
 | |
| # Combine the original bit file, mmi file, and software elf to create the full bitstream
 | |
| 
 | |
| # Delete target file
 | |
| file delete -force $output_bit_file
 | |
| file delete -force $output_bin_file
 | |
| 
 | |
| # Determine if the user has built the project and has the target source file
 | |
| # If not, then use the reference bit file shipped with the project
 | |
| if { ![file exists $source_bit_file] } {
 | |
|     puts "\n********************************************"
 | |
|     puts "INFO - File $source_bit_file doesn't exist as project has not been built"
 | |
|     puts "       Using $reference_bit_file instead\n"
 | |
|     puts "********************************************/n"
 | |
|     set source_bit_file $reference_bit_file
 | |
| }
 | |
| 
 | |
| # Banner message to console as there is no output for a few seconds
 | |
| puts "  Running updatemem ..."
 | |
| 
 | |
| if { $updatemem_debug } {
 | |
|     set error [catch {exec updatemem --debug --force --meminfo $mmi_file --data $elf_file --bit $source_bit_file --proc dummy --out $output_bit_file} result]
 | |
| } else {
 | |
|     set error [catch {exec updatemem --force --meminfo $mmi_file --data $elf_file --bit $source_bit_file --proc dummy --out $output_bit_file} result]
 | |
| }
 | |
| 
 | |
| # Print the stdout from updatemem
 | |
| puts $result
 | |
| 
 | |
| # Updatemem returns 0 even when there is an error, so cannot trap on error.  Having deleted output file to start, then
 | |
| # detect if it now exists, else exit.
 | |
| if { ![file exists $output_bit_file] } {
 | |
|     puts "ERROR - $output_bit_file not made"
 | |
|     return -1
 | |
| } else {
 | |
|     puts "\n********************************************"
 | |
|     puts "  $output_bit_file correctly generated"
 | |
|     puts "********************************************\n"
 | |
| }
 | |
| 
 | |
| # Create BIN file for base board QSPI flash memory
 | |
| write_cfgmem -force -format BIN -size 2 -interface SPIx1 -loadbit " up 0 $output_bit_file" $output_bin_file
 | |
| 
 | |
| # Check BIN was correctly made
 | |
| if { ![file exists $output_bin_file] } {
 | |
|     puts "ERROR - $output_bit_file not made"
 | |
|     return -1
 | |
| } else {
 | |
|     puts "\n********************************************"
 | |
|     puts "  $output_bin_file correctly generated"
 | |
|     puts "********************************************\n"
 | |
| } |