-
alman
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
Вробе бы как JTAG это программно-аппаратный интерфейс для прошивки (возмжно и для отладки) ПЛИС.
В первом Марсоходе это отдельное устройство, а во втором он интегрирован на плату.
В юности пользовался JTAG для ARM, что позволяло производить пошаговую отладку устройства непосредственно из среды программирования.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Leka
-
-
Не в сети
-
Живу я здесь
-
-
Сообщений: 635
-
Спасибо получено: 54
-
-
|
Осваиваю 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.
|
Время создания страницы: 0.146 секунд