JTAG TAP Código de diseño verilog (Interfaz de depuración avanzada)

0

Estoy diseñando una unidad JTAG para un procesador. Para eso, inicialmente he diseñado un controlador TAP mirando el FSM del TAP. Ahora, me han dado este fragmento de código:

reg ['IR_LENGTH-1:0]  jtag_ir;          // Instruction register
reg ['IR_LENGTH-1:0]  latched_jtag_ir;   // latched_jtag_ir_neg;
wire instruction_tdo;

always @ (posedge tck_pad_i or negedge trstn_pad_i)
begin
if(trstn_pad_i == 0)
   jtag_ir['IR_LENGTH-1:0] <= 'IR_LENGTH'b0;
else if (test_logic_reset == 1)
   jtag_ir['IR_LENGTH-1:0] <= 'IR_LENGTH'b0;
else if(capture_ir)
    jtag_ir <= 4'b0101;          // This value is fixed for easier fault detection
else if(shift_ir)
    jtag_ir['IR_LENGTH-1:0] <= {tdi_pad_i, jtag_ir['IR_LENGTH-1:1]};
end

assign instruction_tdo = jtag_ir[0];  // This is latched on a negative TCK edge after the output MUX

// Updating jtag_ir (Instruction Register)
// jtag_ir should be latched on FALLING EDGE of TCK when capture_ir == 1
always @ (posedge s_clk_neg or negedge trstn_pad_i)
begin
  if(trstn_pad_i == 0)
     latched_jtag_ir <= 'IDCODE;   // IDCODE selected after reset
  else if (test_logic_reset)
     latched_jtag_ir <= 'IDCODE;   // IDCODE selected after reset
  else if(update_ir)
     latched_jtag_ir <= jtag_ir;
  end

s_clk es el reloj invertido

No puedo entender esta parte del código. En primer lugar, los comentarios en varios puntos leen que los datos deben estar enganchados en el borde negativo del ciclo. ¿No puedo entender cómo lo hace la declaración de asignación? Además, ¿por qué ha usado 2 ir- 1) JTAG_ir 2) latched_jtag_ir.

He pasado por varios módulos. Todos dicen que el IR contiene algunas celdas y debe diseñarse de acuerdo con el estándar IEEE 1159.4. ¿Algunos podrían decirme cuál es el propósito de los dos registros?

    
pregunta Yash Karundia

1 respuesta

2

Comenzaré con la pregunta de cuándo / dónde bloquear datos.

En el flanco ascendente, muestra TMS, TDI. En el borde descendente, TDO cambia de estado. Además, por especificación, cuando TDO está inactivo, debe ser Alto-Z.

Entonces, como probablemente sepas, ingresas a un estado en el borde ascendente de TCK. Luego puede realizar una acción tan pronto como el siguiente flanco descendente, o el próximo flanco ascendente (si aún se encuentra en el estado). Para su lógica, su dispositivo solo debe considerar la instrucción "enganchada" al completar Update-IR. La Sección 6.2.1, Regla d) indica que debe bloquear los datos del registro en el borde descendente de TCK en el estado de Actualización-IR.

Ahora, en cuanto a por qué usó dos registros, recuerde la estructura de los registros JTAG. Durante la fase Shift-xR, está cambiando los datos de toda la cadena. Si tiene un dispositivo con un IR de 8 bits que ocupa el segundo lugar en la cadena, la longitud total de la cadena es de 9 bits (suponiendo que el primer dispositivo esté en BYPASS). Al cambiar el número correcto de bits, luego enclavará (supongo que podría considerarlo una 'copia') la instrucción deseada en su registro de estado interno.

Mi fuerte recomendación: si está destinado a producción o silicona, compre un JTAG TAP IP calificado / validado. Adicionalmente, acceda a la especificación publicada. Se necesita algo de tiempo para comprender los matices del protocolo, y una implementación JTAG defectuosa es lo último que desea en un dispositivo de producción.

    
respondido por el Krunal Desai

Lea otras preguntas en las etiquetas