OpenCores
URL https://opencores.org/ocsvn/phr/phr/trunk

Subversion Repositories phr

[/] [phr/] [trunk/] [doc/] [informe-tesis/] [reports/] [schedule_2013-03-20/] [schedule.tex~] - Blame information for rev 112

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 71 guanucolui
%$Id $
2
\documentclass[11pt,a4paper,oneside]{article}
3
\usepackage[utf8]{inputenc}
4
\usepackage[spanish]{babel}
5
\usepackage{acronym}
6
\usepackage{graphicx}
7
\usepackage{multicol}
8
\usepackage{balance}
9
%\usepackage{subfig}
10
%\usepackage[cm]{fullpage}
11
\usepackage[a4paper]{geometry}
12
%\usepackage{subfigure}
13
\usepackage{float}
14
\usepackage{fancyhdr}
15
\usepackage{caption}
16
\usepackage{subcaption}
17
\title{Plataforma de hardware recofigurable \\ \small{JTAG -- Configuración OOCD-Links, (\textsl{Hardware \& Software})}}
18
\author{Luis A. Guanuco}
19
\date{\today}
20
\pagestyle{fancy}
21
\addtolength{\textheight}{2cm}
22
%\addtolength{\voffset}{-1cm}
23
%\addtolength{\textwidth}{1cm}
24
 
25
\begin{document}
26
 
27
\maketitle{}
28
 
29
\chead{\includegraphics[width=0.1\textwidth]{images/logov2_ES}}
30
%\begin{figure}[h]
31
%  \centering
32
%  \includegraphics[width=0.3\textwidth]{images/logov2_ES}
33
%\end{figure}
34
 
35
\section{Introducción}
36
\label{sec:intro}
37
 
38
Una gran parte del proyecto \emph{\ac{PHR}} se basa en la implementación de códigos de programación en diferentes lenguajes. En esta etapa
39
El presente reporte desarrolla la continuación del armado, testeo de las distintas placas que conformarán la \emph{\ac{PHR}}.Gran parte del informe se basa en el \textsl{software} que permitirá la comunicación entre la PC y el programador \ac{JTAG}.
40
 
41
\section{Programador \ac{JTAG}}
42
\label{sec:prog-jtag}
43
Gran parte de los \textsl{scripts} utilizados se obtuvieron del manual de usuario de \ac{OpenOCD} que se encuentra publicado en la web. Se recuerda que anteriormente al uso de \ac{OpenOCD}, se intentó utilizar el \textsl{software} Ur\ac{JTAG}, pero debido a la limitaciones que presentaba la versión estable, se optó por cambiarlo. Además existía mayor documentación de \ac{OpenOCD} que de UrJTAG.
44
 
45
\subsection{\textsl{Software} \ac{OpenOCD}}
46
\label{sec:soft-openocd}
47
En el proceso de lograr obtener el \textsl{software} funcional, se realizó un gran trabajo que se podría diferenciar en tres etapas:
48
\begin{itemize}
49
\item Instalación del \textsl{software} \ac{OpenOCD}
50
\item \textsl{Interface}
51
\item \textsl{Target}
52
\end{itemize}
53
 
54
\subsubsection{Instalación del \textsl{software} \ac{OpenOCD}}
55
Para la instalación se recurrió a la documentación del \textsl{software}. En dicho documento se hace referencia a los requerimientos para cada \ac{SO}. Como ya se mencionó en anteriormente reportes, se utilizará herramientas libres, por lo que se realizará la instalación en un \ac{SO} GNU/Linux Debian ``Squeeze'' 6.0.
56
 
57
\subsubsection{\textsl{Interface}}
58
El \textsl{Interface} hace referencia al \textsl{hardware} que realiza el enlace entre el dispositivo que queremos programar y la PC. En éste caso el \textsl{interface} será nuestra placa OOCD-Links. \ac{OpenOCD} dispone de \textsl{scripts} para varios \textsl{interface} entre los cuales se encuentra nuestra placa programadora. La información que proporciona éste código hace a que tipo de driver se utilizará como así también identificación del dispositivo central. A continuación se puede ver la estructura del archivo \texttt{oocdlink.cfg}.
59
\begin{verbatim}
60
#
61
# Joern Kaipf's OOCDLink
62
#
63
# http://www.joernonline.de/contrexx2/cms/index.php?page=126
64
#
65
 
66
interface ft2232
67
ft2232_device_desc "OOCDLink"
68
ft2232_layout oocdlink
69
ft2232_vid_pid 0x0403 0xbaf8
70
jtag_khz 5
71
\end{verbatim}
72
 
73
\subsubsection{\textsl{Target}}
74
\textsl{Target} define las especificaciones del \textsl{hardware} al cual queremos acceder con el \textsl{interface} OOCD-Links. Al igual que con los \textsl{interfaces}, \ac{OpenOCD} dispone de \textsl{scripts} con varias \textsl{targets} conocidas. En nuestro caso vamos a utilizar éstos archivos como ejemplo para configurar y adaptar a nuestra placa de prueba. Por último se probará agregar varios dispositivos al archivo que se generé y poder programarlos a la vez con la placa OOCD-Links.
75
 
76
\subsection{Documentación de comandos y \textsl{scripts}}
77
Luego de la configuración del \textsl{software} \ac{OpenOCD}, se procede a generar código de programa que nos permita realizar las tareas que necesitamos para nuestros proyecto \emph{\ac{PHR}}.
78
En principio se agregarán comandos útiles que servirán en general para cualquier dispositivo. Entre ellos se puede destacar,
79
\begin{itemize}
80
\item Identificar información de un dispositivo sin datos del proveedor, para agregarlo a una cadena \ac{JTAG} como \ac{TAP}.
81
\item Configurar dispositivo en modo \textsl{halt}.
82
\end{itemize}
83
 
84
\subsubsection{Agregar \ac{TAP}}
85
Para acceder a un dispositivo mediante el protocolo \ac{JTAG}, se debe proporcionar información del \textsl{hardware} al \textsl{interface}. Muchas veces ésta información no se encuentra fácil de acceder en la hoja de datos de dichos dispositivos por lo que \ac{OpenOCD} dispone de un modo \textsl{Autoprobing}, para más información sobre éste modo se puede obtener del Manual de Usuario de \ac{OpenOCD} en la sección 10.7 Autoprobing.
86
En definitiva, para capturar la información del dispositivo conectado se debe generar una archivo \texttt{openocd.cfg} base como el que se muestra a continuación,
87
\begin{verbatim}
88
# OpenOCD configuration script
89
# 2013-03-25 lguanuco
90
# Hardware:
91
# - OOCD-Link-s
92
 
93
# ("3": max. verbosity level)
94
debug_level 3
95
# (set log file)
96
log_output out.log
97
 
98
source [find core.cfg]
99
 
100
# 3. Other configs
101
 
102
reset_config trst_and_srst
103
jtag_rclk 8
104
\end{verbatim}
105
Luego de correr \ac{OpenOCD}, se debe acceder al archivo de salida con el nombre que se asignó en el archivo \texttt{openocd.cfg}, \texttt{out.log}. Este archivo registra todos los mensajes de salida que genera \ac{OpenOCD}, a continuación se muestra parte de éste archivo donde se puede observar información útil para generar el \ac{TAP} de dicho dispositivo.
106
\begin{verbatim}
107
...
108
Debug: 129 273 core.c:323 jtag_call_event_callbacks(): jtag event: TAP reset
109
Warn : 130 359 core.c:1145 jtag_examine_chain(): AUTO auto0.tap - use "jtag newtap auto0 tap -expected-id 0x4f1f0f0f ..."
110
Debug: 131 359 core.c:1323 jtag_tap_init(): Created Tap: auto0.tap @ abs position 0, irlen 0, capture: 0x1 mask: 0x3
111
Debug: 132 359 core.c:1208 jtag_validate_ircapture(): IR capture validation scan
112
Warn : 133 369 core.c:1244 jtag_validate_ircapture(): AUTO auto0.tap - use "... -irlen 4"
113
Debug: 134 369 core.c:1267 jtag_validate_ircapture(): auto0.tap: IR capture 0x01
114
Debug: 135 369 openocd.c:145 handle_init_command(): Examining targets...
115
...
116
\end{verbatim}
117
 
118
Una vez obtenida éstas lineas se puede rescatar los datos más importantes que son,
119
\begin{itemize}
120
\item \emph{id}
121
\item \emph{irlen}
122
\item \emph{capture}
123
\item \emph{mask}
124
\end{itemize}
125
 
126
\subsubsection{Modo \textsl{Halt}}
127
El modo \textsl{halt}, permite congelar al dispositivo tanto para agregar \textsl{breakpoints} como también programar el dispositivo. Un problema común es que dicho modo no puede ser aplicado, para solucionar ésto es necesario realizar un \textsl{reset}, con el comando \texttt{reset halt}. Luego de esto se puede pasar al modo \textsl{halt} sin problemas.
128
 
129
\subsubsection{Programación \ac{CPLD}}
130
Para los \ac{CPLD}, primero se debe tener el archivo \ac{SVF}, que es generado por la herramienta con la que se diseña y sintetiza el código VHDL o Verilog. En éste caso se utiliza el \textsl{software} ISE Xilinx. Una vez que se tiene el archivo \ac{SVF}, desde \ac{OpenOCD}, se corre el siguiente comando;
131
\begin{verbatim}
132
svf {file.svf} quiet
133
\end{verbatim}
134
Lo que generaría una salida como la que sigue,
135
\begin{verbatim}
136
svf processing file: "file.svf"
137
500 kHz
138
 
139
Time used: 0m7s478ms
140
svf file programmed successfully for 8468 commands
141
\end{verbatim}
142
 
143
En el caso de que se tenga problemas en la transferencia del archivo, se podría probar bajando la frecuencia de la comunicación \ac{JTAG}. Recordar que esto quizá se deba cambiar también desde el entorno ISE Xilinx.
144
 
145
Algo interesante se puede observar en el archivo \texttt{fiel.svf}, pues en una de sus lineas tiene el IDCODE del dispositivo al que se va a transferir, que debería coincidir con el que se le pasa cuando se agrega el \ac{TAP} al código de \ac{OpenOCD}.
146
\begin{verbatim}
147
...
148
//Loading device with 'idcode' instruction.
149
SIR 8 TDI (fe) SMASK (ff) ;
150
SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f9604093) MASK (0fffffff) ;
151
//Check for Read/Write Protect.
152
SIR 8 TDI (ff) TDO (01) MASK (e3) ;
153
//Boundary Scan Chain Contents
154
//Position 1: xc9572xl
155
...
156
\end{verbatim}
157
 
158
En la conexión de los puertos \ac{JTAG}, hemos encontrado un problema y es el nivel de tensión que maneja éstos pines con respecto a los de la placa OOCD-Links.
159
La placa OOCD-Links cuenta con un dispositivo central, FT2232D. Éste dispositivo posee dos alimentaciones, por una parte la alimentación de núcleo del circuito integrado y por otro lado la alimentación de los \textsl{interfaces} de salida. La primera alimentación es tomada desde el puerto USB al que se encuentra conectado, mientas que la alimentación de sus puertos de conexión lo toma del conector \emph{P1}. Éste último debería tener el mismo nivel de tensión que la placa con la que se conecte. Es decir, si se hace una conexión entre la placa OOCD-Links y una placa con un CPLD XC9572XL, se debería asegurar que ambas tengan la misma tensión en sus puertos \ac{JTAG}, en éste caso 3.3V.
160
Una solución transitoria a éste problema sería proporcionar la alimentación de los \textsl{interfaces} de la placa OCD-Links desde el puerto de alimentación de la placa CPLD. La placa OT-CPLD posee los puertos de alimentación, regulado a 3.3V, como salida en sus pines de conexión \emph{P1} y \emph{P2}. El principal inconveniente que se podría encontrar es el consumo de corriente. Pues el regulador de la placa OT-CPLD se tendría que proporcionar energía a la placa OOCD-Links, pero como es en el proceso de programación y como proceso de testeo, no debería haber inconvenientes.
161
 
162
Otra posible solución sería implementar los puertos de \ac{JTAG} como lo tiene la placa ARM de ĺa Cátedra Técnicas Digitales II. Al parecer presenta solo unos resistores pullup a la salida de los pines que van al conector \ac{JTAG}.
163
 
164
Se investiga la posibilidad de que el problema de la placa OT-CPLD sea la falta de resistores pull-up en los puertos \ac{JTAG}; TDI, TDO, TMS, TCK.
165
 
166
 
167
\section{Documentación}
168
La documentación resulta fundamental en ésta etapa del desarrollo. Si bien se quiere lograr el correcto funcionamiento de las placas, la documentación sirve para realizar correciones a las versiones futuras de cada placa. Otro objetivo es documentar el funcionamiento de cada dispositivo que sirvan al reporte final como así también a los usuarios de la \emph{Plataforma de Hardware Reconfigurable}.
169
 
170
 
171
\newpage{}
172
 
173
\appendix{}
174
\section{Acrónimos}
175
\begin{acronym}
176
  \acro{PHR}[PHR]{Plataforma de Hardware Reconfigurable}
177
  \acro{OpenOCD}[OpenOCD]{Open On-Chip Debugger}
178
  \acro{JTAG}[JTAG]{Joint Test Action Group}
179
  \acro{TAP}[TAP]{Test Access Port}
180
  \acro{SVF}[SVF]{Serial Vector Format}
181
  \acro{CPLD}[CPLD]{Complex Programmable Logical Device}
182
  \acro{SO}[SO]{sistema operativo}
183
  \acro{UTN-FRC}{Universidad Tecnológica Nacional -- Facultad Regional Córdoba}
184
\end{acronym}
185
 
186
\section{Repositorio de proyecto}
187
 
188
El proyecto se encuentra alojado en los servidores de \emph{OpenCores}. Por lo que se puede acceder a los repositorios mediante el siguiente link, \texttt{http://opencores.org/project,phr}
189
De todas formas se pueden comunicar por correo, \texttt{guanucoluis@gmail.com}.
190
 
191
\end{document}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.