МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Что такое ... JTAG

Re: Что такое ... JTAG 3 года 9 мес. назад #2972

  • alman
  • alman аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 263
  • Спасибо получено: 41
Вробе бы как JTAG это программно-аппаратный интерфейс для прошивки (возмжно и для отладки) ПЛИС.
В первом Марсоходе это отдельное устройство, а во втором он интегрирован на плату.

В юности пользовался JTAG для ARM, что позволяло производить пошаговую отладку устройства непосредственно из среды программирования.
Спасибо сказали: Mastar24

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Что такое ... JTAG 3 года 5 мес. назад #3483

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Осваиваю virtual jtag, чтобы управлять платами без usb-uart, но с usb-blaster, по этой статье:
marsohod.org/projects/plata1/177-vjtagctrl .
Мой вариант демки - убрал все лишнее, чтобы код был проще.
Топ-модуль. Портов нет, тк весь ввод-вывод через virtual jtag.
module top();
	wire [7:0] a, b;
	wire [7:0] c=a+b;
	rxtx#(16,8)vjtag({a, b}, c);
endmodule
Модуль с virtual jtag. Все неиспользуемое выкинул.
module rxtx #(
	Wrx=1, Wtx=1
)(
	output reg [Wrx-1:0] rx,
	input [Wtx-1:0] tx
);
	// megafunction wizard: %Virtual JTAG%
	wire ir, tck, tdi, tdo, cdr, sdr, udr;
	sld_virtual_jtag sld_virtual_jtag_component (
		.ir_in (ir),
		.tck (tck),		
		.tdi (tdi),	
		.tdo (tdo),			
		.virtual_state_cdr (cdr),		
		.virtual_state_sdr (sdr),		
		.virtual_state_udr (udr)
	);
	defparam
		sld_virtual_jtag_component.sld_auto_instance_index = "YES",
		sld_virtual_jtag_component.sld_instance_index = 0,
		sld_virtual_jtag_component.sld_ir_width = 1;
	// 0 -> push ==> rx
	// 1 -> pop	<== tx
	reg [Wrx-1:0] srx;		
	reg [Wtx-1:0] stx;		
	always@(posedge tck) begin
		if( sdr && ir==0) srx <= { tdi, srx[Wrx-1:1] };
		if( sdr && ir==1) stx <= { tdi, stx[Wtx-1:1] };
		if( udr && ir==0 ) rx <= srx;
		if( cdr && ir==1 ) stx <= tx;
	end
	assign tdo = ir==0 ? srx[0] : stx[0];		
endmodule
Tcl скрипт. Все по минимуму, чтобы разобраться в сути. Данные вводятся в hex без пробелов.
set usb [lindex [get_hardware_names] 0]
set device [lindex [get_device_names -hardware_name $usb] 0]
puts $usb
puts $device
# 0 -> push
# 1 -> pop
proc start {} {
	global device usb
	open_device -device_name $device -hardware_name $usb 
	device_lock -timeout 10000	
}
proc stop {} {
	device_unlock
	close_device
}
proc push {x} {
	device_virtual_ir_shift -instance_index 0 -ir_value 0 -no_captured_ir_value
	device_virtual_dr_shift -instance_index 0 -dr_value $x -length 16 -value_in_hex -no_captured_dr_value
}
proc pop {} {
	variable y
	device_virtual_ir_shift -instance_index 0 -ir_value 1 -no_captured_ir_value
	set y [device_virtual_dr_shift -instance_index 0 -length 8 -value_in_hex]
}
start
while {1} {
	puts "write > "
	gets stdin x
	push $x
	puts "read:"
	pop 
	puts $y	
}
# stop
Вводим 1234, получаем 46 (0x12+0x34=0x46 ).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.
  • Страница:
  • 1
Время создания страницы: 0.115 секунд

facebook  GitHub  YouTube  Twitter