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

Subversion Repositories phr

[/] [phr/] [trunk/] [doc/] [informe-tesis/] [phd-thesis-template-master/] [ProgramacionDeLaPHR/] [ProgramacionDeLaPHR.tex] - Blame information for rev 299

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

Line No. Rev Author Line
1 208 guanucolui
 
2
\chapter{Programación de la PHR}
3
\label{chap:prog-phr}
4
 
5 299 guanucolui
\ifpdf
6
    \graphicspath{{ProgramacionDeLaPHR/Figs/Raster/}{ProgramacionDeLaPHR/Figs/PDF/}{ProgramacionDeLaPHR/Figs/}}
7
\else
8
    \graphicspath{{ProgramacionDeLaPHR/Figs/Vector/}{ProgramacionDeLaPHR/Figs/}}
9
\fi
10 208 guanucolui
 
11 299 guanucolui
% \section{Flujo del proceso de programación}
12
% \label{sec:prog-phr-flujo}
13 208 guanucolui
 
14 299 guanucolui
% \section{Manejo de \textsl{scripts}}
15
% \label{sec:prog-phr-scripts}
16
 
17
\section{Introducción}
18
 
19
Para transferir el diseño que realiza el usuario a la FPGA es necesario establecer una comunicación entre la computadora donde se sintetiza el proyecto y la FPGA de la placa PHR. En bajo nivel la computadora se comunica a través de un puerto USB con el chip FT2232D de la placa OOCDLink que luego se conecta mediante interfaz JTAG con la FPGA y la PROM. Subiendo en el nivel de abstracción es necesario un software que tome un archivo generado por la herramienta de síntesis y lo envíe a través de los drivers del sistema operativo al dispositivo concreto.
20
 
21
PHR GUI es una interfaz gráfica que permite al usuario transmitir los datos de una manera muy sencilla sin la necesidad de tener que sumirse en los pormenores de la transferencia del fichero. Si bien este es el software con el que interactúa el usuario, tiene que considerarse simplemente como un front-end para la aplicación que hace el verdadero trabajo. Esta es la denominada xc3sprog.
22
 
23
\begin{figure}[!h]
24
\centering
25
  \includegraphics{./img/intro/front-end.pdf}
26
  \caption{PHR GUI es una interfaz que facilita el uso de xc3sprog.}
27
%  \label{none}
28
\end{figure}
29
 
30
Xc3sprog\footnote{http://xc3sprog.sourceforge.net/} es en realidad un conjunto de aplicaciones de licencia libre que funciona en linea de comandos y sirve para programar mediante JTAG varios dispositivos. Su nombre hace referencia a que inicialmente fue diseñado para la familia de FPGA Spartan-3 de Xilinx. Sin embargo se ha extendido el manejo a otros tipos de dispositivos que incluyen otras FPGAs, CPLDs, XCF flash PROMs, microprocesadores AVRs de Atmel y memorias flash SPI. Xc3sprog soporta varios cables JTAG, incluyendo cables de puerto paralelo y programadores USB.
31
 
32
Es además capaz de funcionar con los drivers propietarios del chip FT2232D o con la libreria libre libUSB. Se encuentra disponible para los sistemas GNU/Linux y Windows.
33
 
34
 
35
\section{Instalación}\label{sec:instalacion}
36
 
37
\subsection{MS Windows}
38
Actualmente PHR GUI para Windows funciona con los drivers propietarios ofrecidos por el fabricante del chip FT2232D, Future Technology Devices International\footnote{http://www.ftdichip.com/}.
39
 
40
El procedimiento general para hacer correr la aplicación en los sistemas Windows consiste en primero descargar los drivers propietarios del FT2232D, luego instalarlos para poder conectar la placa OOCDLink y por último instalar PHR GUI v0.1 que distribuye los binarios de xc3sprog.
41
 
42
A continuación se desarrolla el procedimiento específico para Windows XP.
43
 
44
\subsubsection{Windows XP}
45
 
46
Necesitará el hardware PHR y los siguientes paquetes de software:
47
\begin{description}
48
\item[Drivers D2XX:] Son los drivers provistos por FTDI y están disponibles en distintas formas. Este manual  ejemplifica la instalación con la versión ejecutable. En particular se usa el archivo \texttt{CDM v2.10.00 WHQL Certified.exe}, pero se recomienda la versión mas nueva al momento de la descarga.
49
 
50
Para descargarlo consulte: \texttt{http://www.ftdichip.com/Drivers/}.
51
En la misma página puede ver el procedimiento mas detallado de instalación.
52
 
53
\item[Instalador de PHR GUI v0.1:] Se puede obtener de la sección de descargas en el sitio web del proyecto: \texttt{http://opencores.org/project,phr,descargas}.
54
 
55
\end{description}
56
 
57
\subsubsection*{Procedimiento:}
58
 
59
\begin{enumerate}
60
 
61
\item  Ejecutar el asistente de instalación de los drivers D2XX. Esto prepara al sistema para que en el próximo paso se reconozcan los controladores de una forma mas sencilla.
62
 
63
\begin{center}
64
  \includegraphics[width=0.9\textwidth]{./img/instalacion/ftdi-wiz.pdf}
65
%  \caption{caption.}
66
%  \label{none}
67
\end{center}
68
 
69
Si Windows le muestra una advertencia de que el software no supera la prueba de compatibilidad con Windows XP elija \emph{Continuar}.
70
 
71
\item Conectar la PHR al puerto USB de la computadora, la cual debe usar los drivers pre-instalados para configurar dos nuevos dispositivos. A continuación se muestra como cambia el Administrador de dispositivos de Windows.
72
 
73
\begin{center}
74
  \includegraphics[width=0.9\textwidth]{./img/instalacion/ad-disp.pdf}
75
%  \caption{caption.}
76
%  \label{none}
77
\end{center}
78
 
79
\item Ejecutar el instalador de PHR GUI v0.1. Una vez terminado el asistente puede optar por abrir el programa que debe estar listo para ser utilizado.
80
 
81
\begin{center}
82
  \includegraphics[width=0.9\textwidth]{./img/instalacion/phr-gui-wiz.pdf}
83
%  \caption{caption.}
84
%  \label{none}
85
\end{center}
86
 
87
\end{enumerate}
88
 
89
 
90
\subsection{GNU/Linux} \label{inst-linux}
91
 
92
La instalación en los sistemas GNU/Linux no es necesaria ya que PHR GUI v0.1 en un software desarrollado en el lenguaje Python (versión 2.7.6) y las distribuciones GNU/Linux incluyen un interprete Python. Sin embargo hay que seguir una serie de pasos que están relacionados en su mayoría con el software xc3sprog. Se describe el procedimiento general:
93
 
94
\begin{enumerate}
95
\item Obtener los binarios de xc3sprog. Para esto hay dos opciones:
96
        \begin{enumerate}
97
        \item Descargar desde la web los binarios ya compilados para la arquitectura específica (\texttt{http://sourceforge.net/projects/xc3sprog/}).
98
        \item Descargar desde la web o a través de svn el código fuente del proyecto y compilarlo manualmente (Método mas recomendado que el anterior).
99
        \end{enumerate}
100
\emph{Nota:} Xc3sprog hace uso de los paquetes \emph{usblib} y \emph{libftdi}.
101
 
102
\item Desde el sitio web de PHR descargar PHR GUI v0.1 para GNU/Linux.
103
 
104
\item Descomprimir el archivo anterior y moverse en los directorios hacia la carpeta descomprimida. El script que corre la aplicación es el \texttt{phr-gui.py}.
105
 
106
\begin{lstlisting}
107
user@host:~/$ tar -xzf phr-gui-linux.tar.gz
108
user@host:~/$ cd phr-gui-linux
109
user@host:~/phr-gui-linux$ ls
110
crear-enlace.sh  ejemplos  grafica  phr-gui.py
111
\end{lstlisting}
112
 
113
\item PHR GUI buscará el software xc3sprog en una carpeta del mismo nombre. Se puede mover el directorio o crear un enlace:
114
 
115
\begin{lstlisting}
116
user@host:~/phr-gui-linux$ ln -s /carpeta/de/los/binarios xc3sprog
117
\end{lstlisting}
118
 
119
\item Para una ejecución correcta de xc3sprog, éste debe tener permisos especiales de superusuario.
120
 
121
\begin{lstlisting}
122
user@host:~/phr-gui-linux$ cd xc3sprog
123
user@host:~/phr-gui-linux/xc3sprog$ su
124
Password:
125
root@host:/home/user/phr-gui-linux/xc3sprog# chown root:root xc3sprog
126
root@host:/home/user/phr-gui-linux/xc3sprog# chmod 4755 xc3sprog
127
root@host:/home/user/phr-gui-linux/xc3sprog# exit
128
user@host:~/phr-gui-linux/xc3sprog$ cd ..
129
user@host:~/phr-gui-linux$
130
\end{lstlisting}
131
 
132
Mediante \texttt{chown} se cambia el propietario del archivo al usuario root. Luego, con \texttt{chmod} se modifican los permisos:
133
 
134
\begin{description}
135
\item[4:] Hace que al ejecutarse el archivo se le asigne el UID del propietario (root).
136
\item[7:] Confiere permisos de lectura, escritura y ejecución al propietario (root).
137
\item[5:] Confiere permisos de lectura y ejecución al grupo.
138
\item[5:] Confiere permisos de lectura y ejecución al resto de los usuarios.
139
\end{description}
140
 
141
 
142
\item Al asignar permisos de ejecución, \texttt{phr-gui.py} debe estar listo para ejecutarse:
143
 
144
\begin{lstlisting}
145
user@host:~/phr-gui-linux$ chmod +x phr-gui.py
146
user@host:~/phr-gui-linux$ ./phr-gui.py
147
\end{lstlisting}
148
 
149
\item Para tener una experiencia totalmente gráfica se recomienda crear un lanzador. El script \texttt{crear-lanzador.sh} se encarga de esto.
150
 
151
\begin{lstlisting}
152
user@host:~/phr-gui-linux$ chmod +x crear-enlace.sh
153
user@host:~/phr-gui-linux$ ./crear-lanzador.sh
154
\end{lstlisting}
155
 
156
Se genera un nuevo archivo que puede moverse a un lugar conveniente del entorno gráfico.
157
 
158
\end{enumerate}
159
 
160
 
161
\section{Uso de la interfaz}
162
 
163
Para poder transferir el diseño a la placa el usuario debe realizar la síntesis del proyecto y generar un archivo en formato BIT que es el formato por defecto de Xilinx.
164
 
165
Una ves obtenido el fichero, la PHR ofrece dos posibilidades al momento de descargar el diseño sobre la FPGA. Un método consiste en transferir los datos directamente a la FPGA (\emph{configuración de la FPGA}) y el otro método consiste en transferirlos a la PROM (\emph{programación de la PROM}). El primero es mucho mas rápido pero debido a la volatilidad de la FPGA tiene la desventaja de que se pierde el diseño una vez que el circuito es desenergizado. Contrariamente, el segundo es un procedimiento mas lento pero su ventaja radica en que los datos se conservan en los sucesivos ciclos de encendido y apagado.
166
 
167
La forma en que se setea la FPGA para que ésta tome los datos de una u otra fuente es mediante un selector en donde un jumper se cambia de posición. El hecho se ilustra en la Fig. \ref{cargaFPGA}. Luego el usuario debe interactuar con la interfaz PHR GUI (ver Fig. \ref{phrgui}) para que la computadora efectivamente envíe los datos correspondientes.
168
 
169
\begin{figure}[!h]
170
\centering
171
  \includegraphics{./img/uso/fpgaSelector.pdf}
172
  \caption{Selección de la fuente de carga.}
173
  \label{cargaFPGA}
174
\end{figure}
175
 
176
\begin{figure}[!h]
177
\centering
178
  \includegraphics[width=11cm]{./img/uso/msw9x.png}
179
  \caption{Interfaz de usuario PHR GUI.}
180
  \label{phrgui}
181
\end{figure}
182
 
183
\subsection{Configuración de la FPGA}
184
Procedimiento para transferir el diseño a la FPGA:
185
 
186
\begin{enumerate}
187
\item Coloque el jumper de la PHR para que la FPGA cargue desde JTAG (ver Fig. \ref{cargaFPGA}).
188
\item Elija el archivo BIT que desea transferir desde el diálogo que surge al presionar el botón \emph{Elegir fichero}.
189
\item Presione el botón \emph{Configurar FPGA}.
190
\item El software xc3sprog es invocado y PHR GUI muestra su salida.
191
\item El diseño debe comenzar a funcionar una vez terminado el proceso de descarga.
192
 
193
\end{enumerate}
194
 
195
\subsection{Programación de la PROM}
196
Procedimiento para transferir el diseño a la PROM:
197
 
198
\begin{enumerate}
199
\item Coloque el jumper de la PHR para que la FPGA cargue desde PROM (ver Fig. \ref{cargaFPGA}).
200
\item Elija el archivo BIT que desea transferir desde el diálogo que surge al presionar el botón \emph{Elegir fichero}.
201
\item Presione el botón \emph{Programar PROM}.
202
\item El software xc3sprog es invocado y PHR GUI muestra su salida.
203
\item Una vez terminado el proceso de programación, presione el botón de RESET en la placa PHR (ver Fig.  \ref{cargaFPGA}) para que la FPGA cargue el diseño.
204
 
205
\end{enumerate}
206
 
207
\subsection{Interpretación de las salidas de texto}
208
 
209
\subsubsection*{Comprobar conexión}
210
 
211
Para verificar que el hardware esté bien conectado se puede recurrir al botón \emph{Comprobar conexión}. Al presionarlo se espera una salida como la siguiente:
212
 
213
\begin{lstlisting}
214
PHR>>> xc3sprog\xc3sprog -c ftdi -L -j -v
215
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 299 $ OS: Windows
216
Free software: If you contribute nothing, expect nothing!
217
Feedback on success/failure/enhancement requests:
218
        http://sourceforge.net/mail/?group_id=170565
219
Check Sourceforge for updates:
220
        http://sourceforge.net/projects/xc3sprog/develop
221
 
222
Using built-in device list
223
Using built-in cable list
224
Cable ftdi type ftdi VID 0x0403 PID 0x6010 dbus data 00 enable 0b cbus data 00 data 00
225
Using FTD2XX, Using JTAG frequency 1200000
226
JTAG chainpos: 0 Device IDCODE = 0x02218093     Desc: XC3S200A
227
JTAG loc.:   0  IDCODE: 0x02218093  Desc:      XC3S200A Rev: A  IR length:  6
228
JTAG loc.:   1  IDCODE: 0xd5045093  Desc:        XCF02S Rev: M  IR length:  8
229
USB transactions: Write 6 read 4 retries 0
230
 
231
PHR>>>
232
\end{lstlisting}
233
 
234
Lo importante son las dos últimas líneas en donde se reconocen 2 elementos en la cadena JTAG. En la posición 0 con ID 0x02218093 se encuentra la FPGA (XC3S200A). En la posición 1 con ID 0xd5045093 se encuentra la PROM (XCF02S).
235
 
236
\subsubsection*{Configurar FPGA}
237
 
238
Al configurar la FPGA se espera esta salida:
239
 
240
\begin{lstlisting}
241
PHR>>> xc3sprog\xc3sprog -v -L -c ftdi -p 0 fpgaFile:w:0:BIT
242
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 299 $ OS: Windows
243
Free software: If you contribute nothing, expect nothing!
244
Feedback on success/failure/enhancement requests:
245
        http://sourceforge.net/mail/?group_id=170565
246
Check Sourceforge for updates:
247
        http://sourceforge.net/projects/xc3sprog/develop
248
 
249
Using built-in device list
250
Using built-in cable list
251
Cable ftdi type ftdi VID 0x0403 PID 0x6010 dbus data 00 enable 0b cbus data 00 data 00
252
Using FTD2XX, Using JTAG frequency 1200000
253
JTAG chainpos: 0 Device IDCODE = 0x02218093     Desc: XC3S200A
254
Created from NCD file: test1_top.ncd;UserID=0xFFFFFFFF
255
Target device: 3s200avq100
256
Created: 2014/03/19 18:31:15
257
Bitstream length: 1196128 bits
258
DNA is 0x95cde80efb9ba0fe
259
done. Programming time 1044.1 ms
260
USB transactions: Write 84 read 9 retries 0
261
 
262
PHR>>>
263
\end{lstlisting}
264
 
265
La penúltima linea es la que indica que la grabación ha finalizado y muestra el tiempo que demoró el proceso.
266
 
267
\subsubsection*{Programar PROM}
268
 
269
La salida que se lista está resumida puesto que suele ser muy larga:
270
 
271
\begin{lstlisting}
272
PHR>>> xc3sprog\xc3sprog.exe -v -L -c ftdi -p 1 fpgaFile:w:0:BIT
273
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 299 $ OS: Windows
274
Free software: If you contribute nothing, expect nothing!
275
Feedback on success/failure/enhancement requests:
276
        http://sourceforge.net/mail/?group_id=170565
277
Check Sourceforge for updates:
278
        http://sourceforge.net/projects/xc3sprog/develop
279
 
280
Using built-in device list
281
Using built-in cable list
282
Cable ftdi type ftdi VID 0x0403 PID 0x6010 dbus data 00 enable 0b cbus data 00 data 00
283
Using FTD2XX, Using JTAG frequency 1200000
284
JTAG chainpos: 1 Device IDCODE = 0xd5045093     Desc: XCF02S
285
Erasing......done
286
Erase time 3129.2 ms
287
Programming does not end at block boundary (nbits = 1196128), padding
288
 
289
Programming block      0/   293 at XCF frame 0x0000.
290
...
291
Programming block    292/   293 at XCF frame 0x2480.done
292
Programming time 2802.2 ms
293
 
294
Verify block      0/   293 at XCF frame 0x0000
295
...
296
Verify block    278/   293 at XCF frame 0x22c0
297
VerSuccess! Verify time 1893.1 ms
298
USB transactions: Write 1815 read 906 retries 0
299
 
300
PHR>>>
301
\end{lstlisting}
302
 
303
Básicamente se efectúan tres operaciones. Primero se borra la memoria PROM, luego se programa la misma y después se verifican los datos. Para el caso que se muestra (depende de la versión de xc3sprog que se use) la línea que dice \texttt{VerSuccess!} indica que la programación fue exitosa.
304
 
305
\section{Soluciones a problemas frecuentes}
306
 
307
%\subsection{Instalación}
308
%\subsection{Uso de la interfaz}
309
 
310
\problema{[Windows] Cualquiera de los tres botones, Configurar FPGA, Programar PROM o Comprobar conexión, invocan comandos pero no producen salida alguna}
311
 
312
\solucion{Si la placa OOCDLink no se conectó nunca en la computadora, posiblemente sea necesario instalar la librería para que xc3sprog funcione correctamente. Consulte la sección \ref{sec:instalacion} para instalar la placa.}
313
 
314
 
315
\problema{[GNU/Linux] Al presionar alguno de los tres botones Configurar FPGA, Programar PROM o Comprobar conexión, se produce una salida similar a: }
316
\begin{lstlisting}
317
PHR>>> ./xc3sprog/xc3sprog -c ftdi
318
/bin/sh: ./xc3sprog/xc3sprog: not found
319
 
320
PHR>>>
321
\end{lstlisting}
322
\solucion{PHR GUI v0.1 busca los binarios de xc3sprog en el subdirectorio del mismo nombre y no lo encuentra. Debe descargar el software xc3sprog y ubicarlo en dicho directorio (consulte \emph{Instalación en GNU/Linux}, página \pageref{inst-linux}).}
323
 
324
 
325
\problema{[GNU/Linux] Al presionar alguno de los tres botones Configurar FPGA, Programar PROM o Comprobar conexión, se produce una salida similar a:}
326
\begin{lstlisting}
327
HR>>> ./xc3sprog/xc3sprog -c ftdi
328
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 299 $ OS: Linux
329
Free software: If you contribute nothing, expect nothing!
330
Feedback on success/failure/enhancement requests:
331
        http://sourceforge.net/mail/?group_id=170565
332
Check Sourceforge for updates:
333
        http://sourceforge.net/projects/xc3sprog/develop
334
 
335
Could not open FTDI device (using libftdi): inappropriate permissions on device!
336
Unable to access FTDI device with either libftdi or FTD2XX
337
 
338
PHR>>>
339
\end{lstlisting}
340
 
341
\solucion{Posiblemente xc3sprog no tenga permisos para acceder al puerto USB. Debe conceder los permisos (consulte \emph{Instalación en GNU/Linux}, página \pageref{inst-linux}).}
342
 
343
 

powered by: WebSVN 2.1.0

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