Forum Discussion

ABoel's avatar
ABoel
Icon for New Contributor rankNew Contributor
5 years ago
Solved

Virtual JTAG Mega function transfer speed is about 6kbps. Is there any other IP with a higher speed ?

I'm using DE10-Lite Board to project a rgb picture on a 480 by 640 VGA screen.

The picture size 460800 bytes. So 12 times 480*640 pixels.

Due to limited resources on DE-10 LITE platform I have to upload this picture at startup.

I'm using Virtual JTAG mega function along with tcl script on Quartus_stp to upload this file into the SDRAM.

The upload speed is about 6kbps.So it takes about between 10 to 11 minutes to upload the picture file.

Intel Hex format:

After that I'm able to see the picture on the VGA screen.

For example the .sof file generated for this project is about 3.2MB and it loads within 5 seconds.

Is there a faster IP Mega function that can do this file transfer in seconds and pairing with Quartus_stp or custom C#, C to host the file. ? Let me know if there is a sample project I can sample from.

Find tcl script used for the file transfer below

#upload file to SDRAM using VJTAG
 
global usbblaster_name
global test_device
foreach hardware_name [get_hardware_names] {
 puts $hardware_name
 if { [string match "USB-Blaster*" $hardware_name] } {
 set usbblaster_name $hardware_name
}
 }
puts "\nSelect JTAG chain connected to $usbblaster_name.\n"
foreach device_name [get_device_names -hardware_name $usbblaster_name] {
 puts $device_name
 if { [string match "@1*" $device_name] } {
 set test_device $device_name
 }
 }
puts "\nSelect device: $test_device.\n";
 
#open_device -hardware_name $usbblaster_name -device_name $test_device
######################################################################################################
#########decimal to binary string##############
proc dec2bin n { 
    incr n 0
    set r {} 
    while {$n > 0} { 
        set r [expr {$n & 1}]$r
        set n [expr {$n >> 1}]
    } 
    return $r
}
#########end decimal to binary string###########
 
##############3 MAX 10 lite##########################
open_device -hardware_name {USB-Blaster [USB-0]} -device_name {@1: 10M50DA(.|ES)/10M50DC (0x031050DD)}
 
###########################TEST#################################
for {set i 0} {$i < 0} {incr i} {
	set ln [format %08s [dec2bin $i]]
	device_lock -timeout 10000
	device_virtual_ir_shift -instance_index 0 -ir_value 3 -no_captured_ir_value
	puts "writing=$ln"
	device_virtual_dr_shift -dr_value 3deaf4321 -instance_index 0  -length 35 -no_captured_dr_value -value_in_hex
	device_virtual_ir_shift -instance_index 0 -ir_value 0 -no_captured_ir_value
	device_unlock
	after 100
}	
##########################END TEST##############################
 
########################File transfer module###############################
 
#set fname "C:\\vga1short.hex"
#set fname "C:\\vga1.hex"
set fname "C:\\vga2.hex"
#set fname "C:\\secuence.hex"
 
 
set file [open $fname r]
set num_row 0
set segment 0
 
 
#while { $num_row <1024 && [gets $file line]>= 0 } {
while { [gets $file line]>= 0 } {
	set segment_data [string range $line 1 12]
	set EOF_len [string length $line]
	if { $segment_data =="020000040001" |   $segment_data =="020000040002" |  $segment_data =="020000040003" |  $segment_data =="020000040004" } {
		
			if { $segment_data =="020000040001" } {
				set segment 1
			} elseif { $segment_data =="020000040002" } {
				set segment 2
			} elseif { $segment_data =="020000040003" } {
				set segment 3
			} elseif { $segment_data =="020000040004" } {
				set segment 4
			}
			#incr segment
			puts $segment_data
	 
	} 	elseif { $EOF_len<15} {
		puts "End of data"
	} else {
		incr num_row
		set address [string range $line 3 6]
		set data [string range $line 9 12]
		#puts "address:$segment$address : $data"
 
		##################### JTAG TRANSFER #######################
		set ln $segment$address$data
		#set ln $data
		set data_length [string length $ln]
		device_lock -timeout 10000
		device_virtual_ir_shift -instance_index 0 -ir_value 3 -no_captured_ir_value
		#puts "writing=$ln"
		device_virtual_dr_shift -dr_value $ln -instance_index 0  -length 35 -no_captured_dr_value -value_in_hex
		device_unlock
		#after 1000
		##################### END JTAG TRANSFER #######################
	}
}
puts "rows:$num_row"
close $file
 
########################End File transfer module###############################
 
close_device
	
 
  • ABoel's avatar
    ABoel
    5 years ago
    Got it.
    In the meantime I came accros an article using jtag_atlantic dll with C# and using JtagUART IP. Doqnload happens in seconds.

2 Replies