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 161

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 79 guanucolui
\usepackage{amssymb}
18 160 guanucolui
\usepackage{fancyvrb}
19
\usepackage{listings}
20
\usepackage{xcolor}
21
 
22
\definecolor{light-gray}{gray}{0.9}
23
 
24
\lstset{
25
  basicstyle=\ttfamily\footnotesize,%\scriptsize,
26
  backgroundcolor=\color{light-gray},
27
  language=bash,
28
  keywordstyle=\bfseries,
29
  breaklines=true,
30
  keywords=[2]{INT8U,INT16U,DIO\_DI,DIO\_DO,CPU\_INT16S,CPU\_INT08U}
31
}
32
 
33
\lstset{literate=
34
  {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
35
  {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
36
  {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
37
  {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
38
  {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
39
  {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
40
  {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
41
  {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
42
  {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
43
  {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
44
  {€}{{\EUR}}1 {£}{{\pounds}}1 {"}{{``}}1 {~}{{$\sim$}}1
45
}
46
 
47
\renewcommand{\lstlistingname}{Código}
48
 
49 125 guanucolui
\title{Plataforma de hardware reconfigurable \\ \small{JTAG -- Configuración OOCD-Links, (\textsl{Hardware \& Software})}}
50 71 guanucolui
\author{Luis A. Guanuco}
51 83 guanucolui
\date{Marzo 2013}
52 71 guanucolui
\pagestyle{fancy}
53
\addtolength{\textheight}{2cm}
54
%\addtolength{\voffset}{-1cm}
55
%\addtolength{\textwidth}{1cm}
56
 
57
\begin{document}
58
 
59
\maketitle{}
60
 
61 79 guanucolui
%\chead{\includegraphics[width=0.1\textwidth]{images/logov2_ES}}
62
\begin{figure}[h]
63
  \centering
64
  \includegraphics[width=0.3\textwidth]{images/logov2_ES}
65
\end{figure}
66 71 guanucolui
 
67 160 guanucolui
\tableofcontents{}
68
 
69 71 guanucolui
\section{Introducción}
70
\label{sec:intro}
71
 
72 79 guanucolui
El presente reporte desarrolla la continuación del armado, testeo de las distintas placas que conformarán la \emph{\ac{PHR}}. Además, gran parte del informe se basa en el \textsl{software} que permitirá la comunicación entre la PC y el programador \ac{jtag}.
73 71 guanucolui
 
74 160 guanucolui
\section{\textsl{Software} \ac{openocd}}
75
\label{sec:soft-openocd}
76 79 guanucolui
Los \textsl{scripts} utilizados se obtuvieron del manual de usuario del \textsl{software} \ac{openocd} que se encuentra publicado en la web\footnote{http://openocd.sourceforge.net/doc/html/index.html}.
77
Anteriormente al uso de \ac{openocd} se intentó utilizar el \textsl{software} UrJTAG\footnote{http://urjtag.org/} pero debido a la limitaciones que presentaba la versión estable se lo descartó.
78 71 guanucolui
 
79 79 guanucolui
La instalación y puesta en funcionamiento del \textsl{software} \ac{openocd} se realiza en tres etapas:
80 71 guanucolui
\begin{itemize}
81 79 guanucolui
\item Instalación del \textsl{software} \ac{openocd}
82 71 guanucolui
\item \textsl{Interface}
83
\end{itemize}
84
 
85 160 guanucolui
\subsection{Instalación del \textsl{software} \ac{openocd}}
86
\label{sec:instal-openocd}
87 79 guanucolui
Se recomienda descargar la última versión estable de \ac{openocd} y compilarlo manualmente con los correspondientes argumentos necesarios para el \textsl{driver} a utilizar. En nuestro caso utilizaremos el \textsl{driver} libftdi\footnote{http://www.intra2net.com/en/developer/libftdi/}. Además en la documentación oficial de \ac{openocd} 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. Como así también los drivers para el \textsl{hardware} están licenciados como \ac{GPL}.
88
Un documento de referencia muy útil es la Nota Técnica \emph{Entorno de desarrollo de \textsl{firmware} sobre arquitecturas ARM Cortex-M3, basado en herramientas libres}\cite{2012-SSE-FIUBA-NT01-00}.
89 71 guanucolui
 
90 160 guanucolui
\subsection{\textsl{Interface}}
91 79 guanucolui
\textsl{Interface} hace referencia al \textsl{hardware} que realiza el enlace entre el puerto \ac{jtag} del dispositivo al que se quiere acceder 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}.
92
 
93 160 guanucolui
\begin{lstlisting}
94 71 guanucolui
#
95
# Joern Kaipf's OOCDLink
96
#
97
# http://www.joernonline.de/contrexx2/cms/index.php?page=126
98
#
99
 
100
interface ft2232
101
ft2232_device_desc "OOCDLink"
102
ft2232_layout oocdlink
103
ft2232_vid_pid 0x0403 0xbaf8
104
jtag_khz 5
105 160 guanucolui
\end{lstlisting}
106 71 guanucolui
 
107 79 guanucolui
Para obtener el VIP (vendor ID) y el PID (product ID) se lo puede obtener una vez conectada el \textsl{interface} a la PC y listando los dispositivos conectados al puerto USB, por ejemplo,
108 71 guanucolui
 
109 160 guanucolui
\begin{lstlisting}
110 79 guanucolui
luis@luis-laptop:openocd$ lsusb
111
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
112
Bus 006 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
113
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
114
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
115
Bus 001 Device 002: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader
116
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
117 160 guanucolui
\end{lstlisting}
118 79 guanucolui
 
119
En la salida del \texttt{lsusb} se puede ver que tenemos el dispositivo \emph{0403:6001 Future Technology Device International}. Luego utilizamos éste dato para modificar o crear nuestro archivo \texttt{openocd.cfg} que será argumento de \ac{openocd}.
120
 
121 71 guanucolui
\subsection{Documentación de comandos y \textsl{scripts}}
122 79 guanucolui
Una vez que se logra comunicar el \textsl{interface} \ac{jtag} con el  \textsl{software} \ac{openocd}, se crean los archivos necesarios para acceder a los dispositivos que se encuentren conectados en el protocolo \ac{jtag}.
123
Para correr \ac{openocd} correctamente se necesita pasarle algunos simples argumentos,
124 160 guanucolui
\begin{lstlisting}
125 79 guanucolui
luis@luis-laptop:trunk$ openocd -h
126
Open On-Chip Debugger 0.6.1 (2012-12-08-02:21)
127
Licensed under GNU GPL v2
128
For bug reports, read
129
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
130
Open On-Chip Debugger
131
Licensed under GNU GPL v2
132
--help       | -h       display this help
133
--version    | -v       display OpenOCD version
134
--file       | -f       use configuration file <name>
135
--search     | -s       dir to search for config files and scripts
136
--debug      | -d       set debug level <0-3>
137
--log_output | -l       redirect log output to file <name>
138
--command    | -c       run <command>
139 160 guanucolui
\end{lstlisting}
140 79 guanucolui
 
141
Los más importantes de éstos son \texttt{--file}, que permite definir que archivo de configuración \ac{openocd} utilizará. Dentro de éste archivo se podría agregar cualquiera de los otros comandos.
142
Es recomendable que la estructura de archivos sea la siguiente,
143 71 guanucolui
\begin{itemize}
144 79 guanucolui
\item Directorio raíz de trabajo (por ej.: \texttt{openocd\_dir})
145
  \begin{itemize}
146
  \item [$\rightarrow$] \texttt{core.cfg}, contiene los comandos básicos para que \ac{openocd} reconozca el \textsl{interface}
147
  \item [$\rightarrow$] \texttt{openocd.cfg}, contiene los comandos que configura el acceso al protocolo \ac{jtag}
148
  \item [$\rightarrow$] \texttt{device.cfg}, contiene los comandos propios de los dispositivos a conectar en la cadena \ac{jtag}, por ejemplo ID, cantidad de bits de los registros, etc.
149
  \item [$\rightarrow$] \texttt{files/...}, también se debe conciderar tener un subdirectorio en el cual almacenar archivos que se transerirán a los dispositivos mediante \ac{jtag}, por ejemplo: archivos .svf, archivos .elf, etc.
150
  \end{itemize}
151 71 guanucolui
\end{itemize}
152
 
153 79 guanucolui
A continuación se describen comandos útiles que se pueden aplicar en forma general a cualquier dispositivo a conectar.
154
 
155 160 guanucolui
\subsection{Agregar un \ac{TAP}}
156 79 guanucolui
Para acceder a un dispositivo mediante el protocolo \ac{jtag}, se debe proporcionar especificaciones del mismo. Muchas veces ésta información no se encuentra fácil de acceder en la hoja de datos de los dispositivos conectados al \textsl{interface}. Para situaciones como la descrita, \ac{openocd} dispone de un modo llamado \textsl{Autoprobing}\cite{openocd-manual-autoprobing}.
157
 
158
En definitiva, para capturar la información del dispositivo conectado se debe generar una archivo base \texttt{openocd.cfg} como el que se muestra a continuación,
159 160 guanucolui
\begin{lstlisting}
160 71 guanucolui
# OpenOCD configuration script
161
# 2013-03-25 lguanuco
162
# Hardware:
163
# - OOCD-Link-s
164
 
165
# ("3": max. verbosity level)
166
debug_level 3
167
# (set log file)
168
log_output out.log
169
 
170
source [find core.cfg]
171
 
172
# 3. Other configs
173
 
174
reset_config trst_and_srst
175
jtag_rclk 8
176 160 guanucolui
\end{lstlisting}
177 79 guanucolui
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.
178 160 guanucolui
\begin{lstlisting}
179 71 guanucolui
...
180
Debug: 129 273 core.c:323 jtag_call_event_callbacks(): jtag event: TAP reset
181
Warn : 130 359 core.c:1145 jtag_examine_chain(): AUTO auto0.tap - use "jtag newtap auto0 tap -expected-id 0x4f1f0f0f ..."
182
Debug: 131 359 core.c:1323 jtag_tap_init(): Created Tap: auto0.tap @ abs position 0, irlen 0, capture: 0x1 mask: 0x3
183
Debug: 132 359 core.c:1208 jtag_validate_ircapture(): IR capture validation scan
184
Warn : 133 369 core.c:1244 jtag_validate_ircapture(): AUTO auto0.tap - use "... -irlen 4"
185
Debug: 134 369 core.c:1267 jtag_validate_ircapture(): auto0.tap: IR capture 0x01
186
Debug: 135 369 openocd.c:145 handle_init_command(): Examining targets...
187
...
188 160 guanucolui
\end{lstlisting}
189 71 guanucolui
 
190
Una vez obtenida éstas lineas se puede rescatar los datos más importantes que son,
191
\begin{itemize}
192
\item \emph{id}
193
\item \emph{irlen}
194
\item \emph{capture}
195 79 guanucolui
\item \emph{mask}
196 71 guanucolui
\end{itemize}
197
 
198 79 guanucolui
Por lo tanto, con estos datos se puede generar nuestro propio \textsl{script} en el cual agregar manualmente el \ac{TAP}, por ejemplo \texttt{lpc2124.cfg}
199 160 guanucolui
\begin{lstlisting}
200 79 guanucolui
jtag newtap arm_lpc2124 tap -irlen 4 -ircapture 0x01 -irmask 0x3 -expected-id 0x4f1f0f0f
201 160 guanucolui
\end{lstlisting}
202 71 guanucolui
 
203 160 guanucolui
\subsection{Multiples \ac{TAP}}
204 79 guanucolui
Muchas plataformas o kits de desarrollo tienen multiples TAPs. Por ejemplo, en nuestro caso tenemos conectados dos dispositivos a la cadena \ac{jtag} que son la \ac{FPGA} y la memoria \ac{PROM} de programación del mismo. Si la conexión es tal que,
205
 
206
\begin{itemize}
207
\item OpenOCD TDI(output) $\rightarrow$ XC3S50A pin TDI(BS input).
208
\item XC3S50A pin TDO(BS input) $\rightarrow$ XCF01S pin TDI.
209
\item XCF01S pin TDO(BS output) $\rightarrow$ OpenOCD TDO(input).
210
\end{itemize}
211
 
212
Los comandos para agregar éstos TAPs deberán respetar él orden con el que fueron conectados físicamente,
213 160 guanucolui
\begin{lstlisting}
214 79 guanucolui
...
215
jtag newtap xcf01s tap -irlen ...
216
jtag newtap xc3s50a tap -irlen ...
217
...
218 160 guanucolui
\end{lstlisting}
219 79 guanucolui
 
220
Es decir, se agrega los TAPs recorriendo la cadena JTAG desde el pin TDO al pin TDI desde el interface, aquí sería desde la placa OOCDLink.
221
 
222 161 guanucolui
\subsection{Programación del \ac{CPLD}}
223 79 guanucolui
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;
224 160 guanucolui
\begin{lstlisting}
225 79 guanucolui
svf -tap tap_name file.svf quiet
226 160 guanucolui
\end{lstlisting}
227 71 guanucolui
Lo que generaría una salida como la que sigue,
228 160 guanucolui
\begin{lstlisting}
229
svf processing file: ``file.svf''
230 71 guanucolui
500 kHz
231 79 guanucolui
...
232
...
233 71 guanucolui
Time used: 0m7s478ms
234
svf file programmed successfully for 8468 commands
235 160 guanucolui
\end{lstlisting}
236 71 guanucolui
 
237 79 guanucolui
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}.
238 71 guanucolui
 
239 79 guanucolui
Algo interesante se puede observar en el archivo \texttt{file.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}. O quizá diferenciarse con el valor hexadecimal más significativo, que indica la versión del dispositivo.
240 160 guanucolui
\begin{lstlisting}
241 71 guanucolui
...
242
//Loading device with 'idcode' instruction.
243
SIR 8 TDI (fe) SMASK (ff) ;
244
SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f9604093) MASK (0fffffff) ;
245
//Check for Read/Write Protect.
246
SIR 8 TDI (ff) TDO (01) MASK (e3) ;
247
//Boundary Scan Chain Contents
248
//Position 1: xc9572xl
249
...
250 160 guanucolui
\end{lstlisting}
251 71 guanucolui
 
252 79 guanucolui
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 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 \ac{jtag}, del \emph{Pin 1}. De tal manera que la tensión de los puertos de conexión \ac{jtag} del \textsl{interface} siempre tiene la misma tensión que maneja las señales \ac{jtag} de la placa conectada. Es decir, si se hace una conexión entre la placa OOCD-Links y una placa con un CPLD XC9572XL, ambas tendrán la misma tensión en sus puertos \ac{jtag}, en éste caso 3.3V.
253 71 guanucolui
 
254 79 guanucolui
Un inconveniente podría ser 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. Igualmente se debe tener en cuenta.
255 71 guanucolui
 
256
Se encontró en la nota de aplicación de Xilinx [\emph{ug445.pdf}] que para los pines TDI y TMS de los CPLD XC9572XL, se dispone de resistores \textsl{pull-ups} internos. Por lo que no es necesario colocar resistores externos en el diseño del PCB.
257
 
258 79 guanucolui
\subsection{\textsl{Debugging}}
259
Para el \textsl{debugging} se utiliza varias herramientas y todas ellas corren sobre terminales \textsl{bash} de nuestro \ac{SO}. Entre éstos \textsl{software}, tenemos
260
\begin{itemize}
261
\item \emph{terminator}, múltiples terminales en una sola ventana (escritorio GNOME).
262
\item \emph{tailf}, sigue la escritura de un archivo( por ej.: archivos de .log).
263
\item \emph{ccze}, un robusto visor de archivos log con la posibilidad de colorear las líneas.
264
\item \emph{grep}, imprime las líneas similares a un patrón.
265
\end{itemize}
266 71 guanucolui
 
267 79 guanucolui
Todos éstos comandos son utilizados a la vez. La forma de trabajo es correr \emph{terminator} y luego dividir la pantalla en varios terminales al vez, eso será útil para ingresar comandos al puerto telnet 4444 donde se puede acceder al \textsl{interface} \ac{jtag}. Los otros \textsl{software} se utilizar a modo de \textsl{debugger}, pues nos permiten resaltar mensajes que genera \ac{openocd}. Por ejemplo, una forma estándar de ver la salida es,
268
 
269 160 guanucolui
\begin{lstlisting}
270 79 guanucolui
luis@luis-laptop:~$ tailf  codigo/jtag/openocd/find_tap/out.log | ccze -A -o scroll
271 160 guanucolui
\end{lstlisting}
272 79 guanucolui
 
273
También se podría utilizar \emph{grep} para filtrar o diferenciar las líenas en función si son \emph{\textsl{Error, Warning, Debug \& User}}.
274
 
275 160 guanucolui
 
276
\section{\textsl{Software} \emph{xc3sprog}}
277
\label{sec:soft-xc3sprog}
278
 
279
Si bien el \ac{openocd} se consideró como el \textsl{software} a utilizar, se encontraron algunos inconvenientes a la hora de interactuar con la placa \ac{PHR}. El problema, en principio, se debía a que el \ac{openocd} no puede manejar archivos binarios que pesaran más de 2Mb[REF]. Existe la posibilidad de modificar \ac{openocd} de forma tal que se pueda transferir datos binarios con tamaños superiores a 2Mb pero quizá genere otro tipos de errores como consecuencia.
280
 
281
Frente al inconveniente planteado en el párrafo anterior, se busco herramientas alternativas. Mediante el contacto con otros desarrolladores/usuarios de plataformas basadas en PLDs se encontró el \textsl{software} \emph{xc3sprog}. Este programa permite con unos simples comandos programar varias FPGAs, memorias PROM y hasta microcontroladores mediante el interfaz \ac{jtag}.
282
 
283
En una aplicación típica, xc3sprog lee un archivo \texttt{.bit} generado por la herramienta de diseño de la FPGA y programará el chip PROM de la placa que contiene la FPGA. Como su nombre lo indica, xc3sprog fue diseñado originalmente para la familia de FPGA Sparta-3 de Xilinx. Sin embargo se ha extendido el manejo a varios otros tipos de dispositivos que incluyen otras FPGAs, CPLDs, XCF flash PROMs, microprocesadores AVRs de Atmel y memorias flash SPI. El \textsl{software} xc3sprog soporta varios cables JTAG, incluyendo cables de puerto paralelo y programadores USB.
284
 
285
 
286
\subsection{Instalación del \textsl{software} xc3sprog}
287
 
288
Para obtener el xc3sprog, primero se debe descargar el código fuente desde SourceForge\footnote{http://sourceforge.net/projects/xc3sprog/}. El proceso se realizará sobre un terminal del \ac{SO} GNU/Linux que estemos utilizando.
289
 
290
\begin{lstlisting}
291
luis@luis-laptop:~$ cd ~/
292
luis@luis-laptop:~$ mkdir sourceforge
293
luis@luis-laptop:~$ cd sourceforge
294
luis@luis-laptop:~$ svn co https://xc3sprog.svn.sourceforge.net/svnroot/xc3sprog/trunk xc3sprog
295
\end{lstlisting}
296
 
297
Luego se debe compilare e instalar el programa
298
 
299
\begin{lstlisting}
300
luis@luis-laptop:~$ cd  xc3sprog
301
luis@luis-laptop:~$ cmake .
302
luis@luis-laptop:~$ make
303
luis@luis-laptop:~$ make install
304
\end{lstlisting}
305
 
306
En esta sección no se hace referencia al \textsl{driver} de la placa OOCDLink pues los pasos para la instalación del controlador son los mismos que se describieron en la sección \ref{sec:instal-openocd}.
307
 
308
\subsection{Documentación de comandos y \textsl{scripts}}
309
 
310
Al igual que el \textsl{software} \ac{openocd}, xc3sprog recibe varios argumentos en función de como se quiera interactuar con  los dispositivos a programar. Para listar las opciones que se tienen, se debe correo el programa desde el directorio donde se construyó el proyecto, llamado \texttt{build},
311
 
312
\begin{lstlisting}
313
luis@luis-laptop:~$ cd ~/sourceforge/xc3sprog/build
314
luis@luis-laptop:~$ ./xc3sprog
315
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 161 $ OS: Linux
316
Free software: If you contribute nothing, expect nothing!
317
Feedback on success/failure/enhancement requests:
318
        http://sourceforge.net/mail/?group_id=170565
319
Check Sourceforge for updates:
320
        http://sourceforge.net/projects/xc3sprog/develop
321
 
322
usage:  xc3sprog -c cable [options] <file0spec> <file1spec> ...
323
        List of known cables is given with -c follow by no or invalid cablename
324
        filespec is filename:action:offset:style:length
325
        action on of 'w|W|v|r|R'
326
        w: erase whole area, write and verify
327
        W: Write with auto-sector erase and verify
328
        v: Verify device against filename
329
        r: Read from device,write to file, don't overwrite existing file
330
        R: Read from device and write to file, overwrite existing file
331
        Default action is 'w'
332
 
333
        Default offset is 0
334
 
335
        style: One of BIT|BIN|MCS|IHEX|HEX
336
        BIT: Xilinx .bit format
337
        BIN: Binary format
338
        MCS: Intel Hex File, LSB first
339
        IHEX: INTEL Hex format, MSB first (Use for Xilinx .mcs files!)
340
        HEX:  Hex dump format
341
        Default for FPGA|SPI|XCF is BIT
342
        Default for CPLD is JED
343
        Default for XMEGA is IHEX
344
        Default length is whole device
345
\end{lstlisting}
346
 
347
xc3sprog utiliza dos archivos más que ofrecen mayor información y configuración tanto al \textsl{interface} JTAG como también sobre los dispositivos que vayamos a programar. Estos archivos se encuentran en el mismo directorio \texttt{build} donde se compiló el programa, estos son: \texttt{cablelist.txt} y \texttt{devlist.txt}.
348
 
349
\subsubsection{Configuración del \textsl{interface}}
350
\label{sec:xc3sprog-cablelist}
351
 
352
El archivo \texttt{cablelist.txt} contiene, por cada línea, diferentes tipos de configuraciones para \textsl{interface} de programación JTAG. Si bien son varios, a continuación se listan algunos de los más reconocidos en los sistemas embebidos.
353
\begin{lstlisting}
354
luis@luis-laptop:build$ cat cablelist.txt
355
# Alias       Type  OptString Max_Freq
356
# OptString for ftdi:
357
# VID:PID:PRODDESC:INTERFACE:DBUS_DATA:DBUS_EN:CBUS_DAT:ACBUS_EN
358
# OptString for pp:
359
# OptString for xps:  VID:PID
360
# Max_Freq == 0 mean use maximum speed of device
361
# Use 1500000 for all cable connected cables and max for all on board cables
362
 
363
ftdi          ftdi    1500000 0x0403:0x6010:
364
ftdiphr       ftdi    6000000 0x0403:0x6010:
365
papilio       ftdi    6000000 0x0403:0x6010:
366
ft232h        ftdi    1500000 0x0403:0x6014:
367
amontec       ftdi    1500000 0x0403:0xcff8::1:0x00:0x10:0x00:0x00
368
olimex        ftdi    1500000 0x15b1:0x0003::1:0x00:0x10:0x00:0x08
369
knob2usb      ftdi    0       0x0403:0x6010:KNOB2USB:0:0x00:0x10:0x00:0x40
370
xpc           xpc     0       0x03fd:0x0008
371
llbbc08       fx2     0       0xfffe:0x0018
372
pp            pp      0       NULL
373
dlc5          pp      0       NULL
374
jtaghs1       ftdi    1500000 0x0403:0x6010:Digilent Adept USB Device:0:0x80:0x80:0x00:0x0
375
turtelizer    ftdi    1500000 0x0403:0xbdc8:Turtelizer JTAG/RS232 Adapter:0:0x00:0x10:0x00:0x0
376
arm-usb-ocd-h ftdi    1500000 0x15ba:0x002b::1:0x00:0x10:0x00:0x08
377
\end{lstlisting}
378
Se puede ver que el formato de este documento consiste en
379
\begin{itemize}
380
\item El nombre con que se define el \textsl{inteface}
381
\item El \textsl{hardware} que se utiliza, es decir, si se utiliza el puerto paralelo, el usb a través de un dispositivo FTDI, etc.
382
\item La frecuencia en Hertz a la que trabajará el \textsl{interface} JTAG
383
\item El identificador del \textsl{hardware} según el \ac{SO} GNU/Linux.
384
\end{itemize}
385
Se toma como ejemplo algunas de estas configuraciones que utilice como base el dispositivo FTDI y se agrega una nueva línea con la configuración de nuestra placa OOCDLink. Es la segunda configuración  disponible del archivo \texttt{cablelist.txt},
386
\begin{lstlisting}
387
  ftdiphr       ftdi    6000000 0x0403:0x6010:
388
\end{lstlisting}
389
 
390
\subsubsection{Dispositivos soportados}
391
\label{sec:xc3sprog-devlist}
392
 
393
El archivo \texttt{devlist.txt} contiene información de los diferentes dispositivos soportados por xc3sprog. Este documento se presente a modo descriptivo pues no tenemos por que modificar ninguna de las líneas de este archivo. El programa xc3sprog utiliza este documento para obtener fundamentalmente el tamaño de algunos registros mediante la identificación del \emph{IDCODE} que proporciona todo los dispositivos JTAG cuando son escaneados. Como se podrá apreciar, se ha evitado incluir todos los dispositivos ya que son varias líneas, por lo que se utilizó los puntos $\cdots$ para acortar el documento.
394
 
395
\begin{lstlisting}
396
luis@luis-laptop:build$$ cat devlist.txt
397
# IDCODE IR_len ID_Cmd Text
398
...
399
04001093      6    0x9 XC6SLX9
400
04002093      6    0x9 XC6SLX16
401
04004093      6    0x9 XC6SLX25
402
...
403
02210093      6    0x9 XC3S50A
404
02218093      6    0x9 XC3S200A
405
02220093      6    0x9 XC3S400A
406
02228093      6    0x9 XC3S700A
407
02230093      6    0x9 XC3S1400A
408
...
409
05044093      8    0xfe XCF01S
410
05045093      8    0xfe XCF02S
411
05046093      8    0xfe XCF04S
412
...
413
#XC95XL
414
09602093      8  0xfe XC9536XL
415
09604093      8  0xfe XC9572XL
416
09608093      8  0xfe XC95144XL
417
09616093      8  0xfe XC95288XL
418
...
419
#unsupported
420
#Virtex2
421
01020093      6     5 XC2V500
422
#XC95
423
09502093      8  0xfd XC9536
424
09504093      8  0xfd XC9572
425
09506093      8  0xfd XC95108
426
...
427
##Atmel
428
#list should not care for the version part
429
0978203f      4   0x1 AT90USB
430
0958103f      4   0x1 AT90CAN32
431
0968103f      4   0x1 AT90CAN64
432
0978103f      4   0x1 AT90CAN128
433
...
434
#ARM 7 in ICE Mode (e.g. AT91SAM7X)
435
3f0f0f0f      4   0xe  ARM-ICE-MODE
436
4f1f0f0f      4   0xe  ARM-ICE-MODE(ARM7TDMI-S rev4)
437
 
438
#AVR32
439
01e8203f     5   0x1 AT32AP7000
440
 
441
#STM
442
06410041     5   0x1 STM32L1_Med_density
443
...
444
#ARM Debug
445
3BA00477     4   0xe ARM_Cortex-M3_r1p1-01rel0
446
4BA00477     4   0xe ARM-Cortex-M4F_r0p1
447
 
448
#Unsure about IR_Len...
449
0270817f     11  0x1 BCM2835
450
 
451
#Manufacturer list
452
00000093        99  0 Xilinx_Unknown
453
0000003f        99  0 Atmel_Unknown
454
\end{lstlisting}
455
 
456
\subsubsection{Comandos básicos}
457
\label{sec:xc3sprog-com-bas}
458
 
459
En el \textsl{usage} del xc3sprog define una estructura básica para correr comandos. El comando se debe correr desde el directorio \texttt{build} donde se ha compilado el programa.
460
\begin{lstlisting}
461
  xc3sprog -c cable [options] <file0spec> <file1spec> ...
462
\end{lstlisting}
463
En este comando, lo principal es definir que \emph{cable} se utilizará de la lista que tenemos en el archivo \texttt{cablelist.txt}. Para esto, se debe indicar luego del \texttt{-c} el nombre de la lista de \textsl{interfaces}. Una vez definido el cable, se concatenan demás tareas que debe procesar el xc3sprog, pero ya teniendo referencia a que tipo de \textsl{interface} está conectado. Los tareas son,
464
\begin{description}
465 161 guanucolui
\item[\texttt{-j}] Detecta la cadena JTAG e imprime una lista de dispositivos encontrados. La numeración de la posición del dispositivo en la cadena se cuenta desde el dispositivo conectado al pin TDO del \textsl{interface}.
466
\item[\texttt{-p val}] Define a que dispositivo de la cadena JTAG se está por acceder, donde \texttt{val} es el número que ocupa en la cadena y es visualizado por el comando \texttt{-j}. El valor por defecto de \texttt{val} es 0.
467
\item[\texttt{-T n}] Testea la cadena JTAG \texttt{n} veces. Cuando se corre en modo ISF, se testea la conexión SPI.
468 160 guanucolui
  \begin{itemize}
469
  \item Si \texttt{n} no se específica, el valor por defecto es de 10,000 veces.
470
  \item Si \texttt{n = 0} se mantendrá en un testeo para siempre.
471
  \end{itemize}
472 161 guanucolui
\item[\texttt{-J freq}] Ejecuta a una frecuencia específica el clock del JTAG (\texttt{freq} se encuentra en Hz). Si no se proporciona este dato, o \texttt{freq = 0}, el \textsl{interface} trabajará a la máxima frecuencia que soporte y se encuentre definido en el archivo \texttt{cablelist.txt} (véase \ref{sec:xc3sprog-cablelist}).
473
\item[\texttt{-e}] Borra el dispositivo seleccionado por el parámetro \texttt{-p}.
474
\item[\texttt{-I file}] Define si se trabaja en modo ISF para programar una memoria serial \textsl{flash} interna. La memoria \textsl{flash} está junta al dispositivo JTAG primario, pero no es accesible directamente mediante la cadena JTAG. El \textsl{interface} JTAG primario es usado como un \emph{proxy} para enviar datos sobre SPI a la memoria \textsl{flash}. Si se especifica el argumento \texttt{file}, se comenzará por programar el bitfile especificado en el \textsl{interface} JTAG primario (típicamente una FPGA).
475
\item[\texttt{-R}] Envía un comando de reconfiguración al dispositivo de memoria del \textsl{hardware} utilizado (por ejemplo: XVC, XCF, XCFP para las FPGA o directamente a los dispositivos XC3S, XC6S, XC2V).
476
\item[\texttt{-m mapdir}] Búsqueda de archivos de mapeo (XC2C) en el directorio especificado por \texttt{mapdir}. Los archivos de mapeo (\textsl{map files}) son requeridos para manejar archivos JEDEC durante la programación de los CPLDs. Si se especifica el directorio, por defecto el valor que se toma es \texttt{\$XC\_MAPDIR}.
477
\item[\texttt{-d /dev/parportN}] Especifica el puerto paralelo a utilizar. Si no es especificado, por defecto se utiliza el valor \texttt{\$XCPORT} o \texttt{/dev/parport0}.
478
\item[\texttt{-s serialnum}] Utiliza el puerto USB con \textsl{string} de número de serie específico.
479
\item[\texttt{-L}] Usa el controlador \emph{libFTD2XX} en luag de \emph{libftdi} para acceder a un \textsl{interface} basados en los dispositivos FTDI.
480
\item[\texttt{-D}] Genera los archivos \texttt{cablelist.txt} y \texttt{devlist.txt} en el directorio actual. Si ya existiesen, xc3sprog intentará generar los mismos archivos pero agregando al nombre de los archivos un número que incrementará.
481
\item[\texttt{-v}] Habilita la salida formal detallada (\textsl{verbose}).
482
\item[\texttt{-h}] Imprime un texto de ayuda para el programa.
483 160 guanucolui
\end{description}
484
 
485 161 guanucolui
Luego de reconocer los diferentes comandos que permiten ejecutarse con xc3sprog, se presenta a continuación algunas acciones posibles que se pueden correr. Cada una de estas acciones está compuesta de un archivo \texttt{filename} seguido opcionalmente por atributos de la forma:
486
\begin{lstlisting}
487
<filename:action:offset:style:length>.
488
\end{lstlisting}
489
\begin{description}
490
\item[\texttt{filename}] Corresponde al archivo que será escrito por el dispositivo seleccionado, o también puede ser el archivo que almacena el dato para luego ser leído por el dispositivo que se encuentra en la cadena JTAG.
491
\item[\texttt{action}] Es una letra que indica si se escribe, lee, o verifica el dispositivo. Si es especificado, la acción de escritura es indicado por defecto.
492
  \begin{description}
493
  \item[\texttt{w}] Borra, luego escribe los datos desde el archivo al dispositivo y por último verifica.
494
  \item[\texttt{W}] Escribe con un tipo de borrado \textsl{auto-sector}, luego verifica. Este modo permite borrar solo el espacio necesario.\\
495
  \item[\texttt{v}] Verifica el dato del dispositivo comparando el un archivo especificado.
496
  \item[\texttt{r}] Lee los datos desde el dispositivo y los escribe al archivo (sin sobre-escritura).
497
  \item[\texttt{R}] Lee los datos desde el dispositivo y los escribe al archivo, si ya existe el archivo lo sobreescribe.
498
  \end{description}
499
\item[\texttt{offset}] El desplazamiento interno en \textsl{byte} del dispositivo donde la escritura/lectura deberá comenzar. Solo soportado para dispositivos SPI, XCFxxS y XMEGA.
500
\item[\texttt{style}] Define el formato del archivo especificado.
501
  \begin{description}
502
  \item[\texttt{BIT}] Formato de archivo de Xilinx \texttt{.BIT}. Por defecto para los dispositivos FPGA, XCF y memorias SPI.
503
  \item[\texttt{BIN}] Archivo binario.
504
  \item[\texttt{MCS}] Formato de archivo de Xilinx \texttt{.MCS}.
505
  \item[\texttt{IHEX}] Formato de Intel \texttt{HEX}. También usado por los formatos PROMGEN de Xilinx cuando escribe archivos MCS. Por defecto para los archivos XMEGA.
506
  \item[\texttt{HEXRAW}] Secuencia en bruto de dígitos hexadecimales.
507
  \item[\texttt{JEDEC}] Por defecto para los dispositivos CPLDs.
508
  \end{description}
509
\item[\texttt{length}] El número de \textsl{bytes} a programar/leer. Solo soportado para SPI, XCFxxS y XMEGA.
510
\end{description}
511 160 guanucolui
 
512 161 guanucolui
\subsection{Programación de la \ac{FPGA}}
513 160 guanucolui
 
514
 
515 161 guanucolui
\subsection{Programación del \ac{CPLD}}
516 160 guanucolui
 
517 71 guanucolui
\section{Documentación}
518
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}.
519
 
520 79 guanucolui
\begin{thebibliography}{}
521
  \bibitem{2012-SSE-FIUBA-NT01-00} Sebastián García, ``Entorno de desarrollo de firmware sobre arquitectura ARM Cortex-M3, basado en herramientas libres'', 31 de Julio del 2013, Versión 0
522
  \bibitem{openocd-manual-autoprobing} \ac{openocd}, ``\ac{openocd} User's Guide'', 25 de Noviembre del 2012, 10.7~Autoprobing, 58~p., Versión 0.7.0-dev
523
\end{thebibliography}
524 71 guanucolui
 
525
\newpage{}
526
 
527
\appendix{}
528 79 guanucolui
 
529 71 guanucolui
\section{Acrónimos}
530
\begin{acronym}
531
  \acro{PHR}[PHR]{Plataforma de Hardware Reconfigurable}
532 79 guanucolui
  \acro{openocd}[OpenOCD]{\textsl{Open On-Chip Debugger}}
533
  \acro{jtag}[JTAG]{\textsl{Joint Test Action Group}}
534
  \acro{TAP}[TAP]{\textsl{Test Access Port}}
535
  \acro{SVF}[SVF]{\textsl{Serial Vector Format}}
536
  \acro{CPLD}[CPLD]{\textsl{Complex Programmable Logical Device}}
537
  \acro{FPGA}[FPGA]{\textsl{Field Programmable Gate Array}}
538
  \acro{PROM}[PROM]{\textsl{Programmable Read-Only Memory}}
539 71 guanucolui
  \acro{SO}[SO]{sistema operativo}
540 79 guanucolui
  \acro{GPL}[GPL]{\textsl{General Public License}}
541 71 guanucolui
  \acro{UTN-FRC}{Universidad Tecnológica Nacional -- Facultad Regional Córdoba}
542
\end{acronym}
543
 
544
\section{Repositorio de proyecto}
545
 
546
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}
547
De todas formas se pueden comunicar por correo, \texttt{guanucoluis@gmail.com}.
548
 
549
\end{document}

powered by: WebSVN 2.1.0

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