Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

130 lines (101 sloc) 6.226 kb
\chapter{Arquitetura de hardware}
\label{apdx:hw_arch}
Este capítulo descreve a arquitetura de hardware deste trabalho onde é descrito em detalhes
as conexões pertinentes entre os blocos de {\it{hardware}} utilizados. Neste capítulo é
também descrita a maneira de programação do FPGA e o canal de comunicação entre
o processador e o FPGA, passando por um mapeamento em memória dos blocos implementados
dentro do FPGA.
Todo desenvolvimento foi feito sobre um hardware com as seguintes características mostradas
na Tabela \ref{tab:hw_ch}.
\begin{table}[htbp]
\begin{center}
\caption{Características físicas do sistema embarcado de testes.}
\label{tab:hw_ch}
\begin{tabular}[C]{c|c} \hline
Processador Principal & Freescale MPC8314E - PowerPC e300. \\
Memória & 128 MBytes SDRAM. \\
FPGA & Xilinx Virtex6 LXT 130. \\
NAND Flash & 1 Gbit. \\ \hline
\end{tabular}
\end{center}
\end{table}
A Figura {\ref{fig:procmem}} mostra as ligações físicas pertinentes entre os dispositivos
que compõem a arquitetura deste projeto. O processador principal ligado diretamente
à uma memória externa e ao FPGA. A ligação entre o FPGA e o processador é feita
por um barramento que está ligado ao {\it{localbus controller}} (LBC) do processador
utilizado \cite{MPC8314}.
\begin{figure}[!ht]
\centering
\includegraphics[width=.65\textwidth]{procmem}
\caption{Conexões entre processador, memória e FPGA.}
\label{fig:procmem}
\end{figure}
\section{Mapeamento em memória}
Os dispositivos implementados em lógica programável no FPGA são mapeados em memória do ponto
de vista do processador. O LBC provê a interface aos periféricos de forma que o trabalho do
{\it{driver}} de escrita e leitura é somente atuar sobre este controlador. Todo o controle de
sinalização entre processador e FPGA é feito através deste bloco diretamente em hardware.
O LBC provê diferentes maneiras de criar interfaces entre dispositivos que são conectados a ele, o que
permite a implementação de sistemas de memória com requisitos de temporização bem específicos.
As três principais interfaces utilizadas por este controlador são o
{\it{General Purpose Chip-select Machine}} (GPCM), a máquina SDRAM e as
{\it{User Programmable Machines}} (UPMs). Quando uma transação de acesso a um dispositivo de memória
é entregue ao LBC, o endereço de memória é comparado para ativar o {\it{chip select}} da máquina
que estará sendo utilizada.
A máquina SDRAM provê uma interface para SDRAMs usando técnicas
específicas para se obter alta performance sobre um canal multiplexado de dados e endereços.
A máquina GPCM provê uma interface para dispositivos mais simples e de baixa performance, como
por exemplo memórias e outros dispositivos que podem ser mapeados em memória. Ele é de baixa
performance pois não suporta acesso em rajadas ({\it{bursting access}}). Por esta razão, a máquina
GPCM é usada primariamente na fase de {\it{boot loading}} do sistema e também em dispositivos
mapeados em memória de baixa performance. A máquina UPM suporta praticamente qualquer outro tipo
de periférico, inclusive os que têm requisitos de alta performance. É necessário entretanto
uma pequena lógica de cola para alguns sinais deste barramento quando utilizado neste modo.
\begin{figure}[!ht]
\centering
\includegraphics[width=.65\textwidth]{lbc}
\caption{Diagrama de blocos do controlador {\it{localbus}}.}
\label{fig:lbc}
\end{figure}
A Figura {\ref{fig:lbc}} mostra o diagrama de blocos do LBC \cite{MPC8314}.
O FPGA é acessado através das UPMs deste bloco sendo que o {\it{driver}} de acesso a este bloco
do processador já é fornecido pelo fabricante do processador. Este código pode ser encontrado em
arch/powerpc/sysdev/fsl\_lbc.c diretamente no Kernel do Linux.
Do ponto de vista do FPGA, é necessário ler os sinais das ligações com o processador e registrá-los
conforme a necessidade. Foi criado um multiplexador de leitura e escrita na arquitetura topo
do {\it{design}} em lógica programável de forma que é possível selecionar o endereço desejado
no sinal do barramento de endereços do {\it{localbus}} e a partir da operação desejada, leitura
ou escrita, a lógica acessa a memória no endereço desejado. Desta forma é possível que o processador
principal veja módulos implementados em lógica programável sobre a forma de endereços mapeados
em memória.
\section{Programação do FPGA}
O FPGA é programado através do processador principal e para isso é utilizado o modo
{\it{slave serial}}, conforme o manual de configuração do dispositivo \cite{VIRTEX6}.
São utilizados alguns pinos de GPIO para fazer a comunicação serial entre o processador
e o FPGA. A Figura~\ref{fig:fpgaprog} mostra as conexões físicas entre processador e FPGA
para fins de programação deste dispositivo.
\begin{figure}[!ht]
\centering
\includegraphics[width=.65\textwidth]{fpgaprog}
\caption{Conexões necessárias para programação do FPGA.}
\label{fig:fpgaprog}
\end{figure}
São necessários alguns pinos de entrada e saída do processador para a configuração do FPGA
e para isso são utilizados os terminais de {\it{General Purpose Input-Output}} (GPIO) do
processador. Através destes pinos é feita a comunicação do processador com o FPGA para
fins de enviar-se o {\it{bitstream}} ao FPGA. Os dados saem do processador no terminal
indicado por SERIAL\_OUT sendo que um bit é transferido a cada pulso de {\it{clock}}. Isso
fica mais claro na Figura \ref{fig:fpga_prog_sig}. É necessário dar um pulso nos
sinais PROGRAM\_B e INIT\_B antes de se começar a enviar os dados. Uma vez que
o FPGA está programado, o sinal DONE é ativado, indicando ao processador o fim da programação.
\begin{figure}[!ht]
\centering
\includegraphics[width=.85\textwidth]{fpga_prog_sig}
\caption{Sinais utilizados na programação do FPGA.}
\label{fig:fpga_prog_sig}
\end{figure}
O código mostrado na listagem \ref{lst:fpga_prog} mostra um conjunto de funções utilizadas
na programação do FPGA. Estas funções foram criadas a nível do Kernel do Linux e algumas
funções são exportadas ao espaço de usuário para que a programação possa ser chamada
de qualquer usuário do sistema. As funções de acesso aos pinos de GPIO do processador
podem ser encontradas diretamente no Kernel do Linux no arquivo arch/powerpc/sysdev/gpio.c.
Jump to Line
Something went wrong with that request. Please try again.