Prévia do material em texto
LÓGICA PROGRAMÁVEL
AULA 6
Prof. Ederson Cichaczewski
2
CONVERSA INICIAL
Nesta aula, abordaremos os conceitos de processadores embarcados, o
processador NIOS II e o microprocessador em VHDL ‒ além de sua
arquitetura, sua operação e seu teste.
Em lógica programável é possível fazer o projeto completo de um
microprocessador, chamado de processador embarcado.
A ferramenta de desenvolvimento permite realizar o projeto de duas
formas:
1. utilizando um bloco IP core;
2. utilizando a descrição VHDL.
TEMA 1 – PROCESSADOR EMBARCADO
1.1 Processador embarcado em FPGA (field programmable gate array)
Um sistema embarcado realiza um conjunto de tarefas predefinidas,
geralmente com requisitos específicos.
Por meio da lógica programável, pode-se aperfeiçoar um projeto, além
de reduzir o tamanho, os recursos computacionais e o custo do produto.
Com a implementação em hardware da lógica programável baseada em
FPGA (field programmable gate array), é possível alcançar maiores eficiência e
rapidez na execução de determinadas tarefas.
1.1.1 Processamento digital
O processamento digital de sinais DSP (digital signal processor) é
necessário para realizar operações aritméticas intensas, tais como
multiplicação, adição e divisão.
Essas operações, dependendo de seu tamanho e complexidade, podem
ser executadas por dois tipos de hardwares:
processadores DSP tradicionais;
dispositivos FPGA (field programmable gate array).
Quando for necessário utilizar alta velocidade de processamento, a
opção de hardware deve ser um dispositivo FPGA.
O uso de FPGA é mais vantajoso que o de DSP, porque ele:
3
é mais rápido;
tem menor consumo;
possui mais recursos para simulação e teste;
implementa algoritmos DSP com uso paralelo de recursos, como blocos
MAC;
implementa algoritmos em pipeline, ou seja, todas as partes do algoritmo
são executadas ao mesmo tempo.
1.1.2 Sistemas SoC
Para a implementação em hardware de um sistema embarcado,
diferentes soluções podem ser adotadas.
Para aplicações com produção em grande escala, usa-se o sistema SoC
(system-on-chip, "sistema em uma única pastilha").
A arquitetura de hardware de um SoC pode conter um ou mais
processadores, memórias, interfaces para periféricos e blocos IP dedicados
(intellectual property cores).
1.1.3 IP cores (intellectual property cores)
Consistem em blocos de hardware que executam tarefas especificas e
que são definidos de modo a permitir o seu reuso em diferentes sistemas.
A tecnologia SOPC possibilita projetar dispositivos FPGA (field
programmable gate array) com memória, elementos lógicos e um processador
IP core em sua arquitetura interna.
Os processadores IP cores disponíveis em FPGAs podem ser
classificados em:
hardware core: possui maior desempenho, mas não é reconfigurável.
Ex: Altera Excalibur ARM;
software core: é reconfigurável. Ex: NIOS II.
TEMA 2 – PROCESSADOR NIOS II
O NIOS II é o processador software core da Altera. Ele pode ser
implementado em alguns dispositivos FPGA (field programmable gate array) da
4
Altera por meio dos softwares Quartus II e Qsys Builder (também chamado de
SOPC Builder em versões anteriores da ferramenta).
A figura a seguir apresenta a arquitetura do processador software core
NIOS II da Altera.
Figura 1 ‒ Arquitetura do processador software core NIOS II da Altera
Todos os componentes estão interligados no barramento interno de
dados chamado Avalon Switch Fabric.
Os blocos de interface de memória permitem acessar chips de memórias
externas, e as interfaces serial e paralela permitem aplicações de E/S.
O bloco JTAG debug permite o download de programas e o debug com
breakpoints e watches.
A figura a seguir apresenta o fluxo de projeto SOPC com FPGA.
Figura 2 ‒ Fluxo de projeto SOPC com FPGA
5
São necessárias três ferramentas de software para o projeto:
SOPC/Qsys Builder: configura o hardware do processador core;
NIOS II IDE: configura o software do processador core;
Quartus II: compila o HDL e configura o FPGA.
Para o programa da aplicação que roda no NIOS II, utiliza-se as
linguagens C ou C++.
2.1 Exemplo prático de processador SOPC
O processador NIOS II será configurado na família FPGA Cyclone II,
dispositivo EP2C35F672C6. Ele é constituído de:
uma CPU de 32 bits;
duas portas PIO (paralela de E/S): uma porta de entrada para oito
chaves tipo pushbuttons e uma porta de said́a para oito LEDs;
uma memória on-chip (RAM) com capacidade de 4 Kbytes arranjados
em palavras de 32 bits;
uma interface "JTAG UART" para comunicação com o computador host.
1º Passo
Primeiro é preciso criar um novo projeto no Quartus II, e depois ir ao
menu Tools Qsys/SOPC Builder para fazer a configuração do processador
NIOS II.
Deverão ser adicionados os seguintes itens da janela "Component
Library":
Item Library Processors Nios II Processor;
Item Memories and Memory Controllers On-Chip On-Chip Memory
(RAM or ROM);
Item Peripherals Microcontroller Perpherals PIO (Parallel IO); tem
de ser adicionado duas vezes: um para a entrada e outro para a saída;
Item Interface Protocols Serial JTAG UART.
A especificação final do processador é apresentada a seguir.
6
Figura 3 ‒ Especificação final do processador NIOS II
Salve a configuração com o nome "Nios_system1", clique na aba
“System Generation” e, depois, no botão "Generate".
2º Passo
Nessa etapa, é necessário criar um diagrama de blocos no Quartus II
para o NIOS II.
crie um novo "Block Diagram"/"Schematic File" (.bdf) e insira o
processador NIOS II gerado ("Nios_system1");
insira os terminais de entrada e saída;
compile e programe no dispositivo o arquivo .sof.
O projeto completo do processador NIOS II em arquivo .bdf é
apresentado a seguir.
7
Figura 4 ‒ Projeto completo do processador NIOS II em arquivo .bdf
3º Passo
Nessa fase é preciso projetar o programa no NIOS II IDE Eclipse. Para
isso, você deve:
Criar um novo projeto do tipo “Nios II Application and BSP from
Template” no software NIOS II IDE;
Especificar o arquivo de configuração do processador;
Dar um nome para o projeto e deixar marcado o template “Hello World”;
Compilar o projeto;
Clicar com o botão direito do mouse no nome do projeto, ir até “Run As”
e clicar em “Nios II Hardware”.
Estando com o kit FPGA conectado via "JTAG", o programa rodará e,
então, será vista a mensagem de retorno "Hello World" no console.
A figura a seguir apresenta a tela de projeto do ambiente NIOS II IDE.
8
Figura 5 ‒ NIOS II IDE com o projeto "Hello World"
Saiba mais
Acesse <https://www.altera.com/en_US/pdfs/literature/tt/tt_my_first_nios
_sw.pdf> para ver um exemplo completo de configuração e execução utilizando
o ambiente NIOS II IDE, também chamado NIOS II SBT (software build tools),
parte do NIOS II EDS (embedded design suite). Acesso em: 26 nov. 2017.
TEMA 3 – MICROPROCESSADOR VHDL
Agora, faremos a completa descrição de um microprocessador didático.
Assim, entenderemos as partes que o compõem: a arquitetura, os modos de
endereçamento e o conjunto de instruções.
Alguns conceitos sobre a operação de microprocessadores em geral são
pré-requisitos para a melhor compreensão deste conteúdo.
A arquitetura permite analisar situações triviais em um
microprocessador, como:
operações dos sinais de controle com a memória;
operações de instruções que acessam a memória;
instruções de desvios;
chamadas de sub-rotinas.
O conjunto de instruções prevê modos de endereçamento direto, indireto
e imediato.
9
3.1 Exemplo prático: microprocessador em VHDL
A seguir é apresentado o diagrama de blocos do processador.
Figura 6 ‒ Diagrama de blocos do processador VHDL
Osbarramentos de dados e endereços são de 8 bits. São previstos
cinco registradores:
Acumulador (Acc): armazena o resultado das operações realizadas com
a ALU (arithmetic logic unit, "unidade lógica e aritmética"), recebe dados
da memória e fornece dados para a ALU;
Condições;
Página (Pg): em conjunto com os 4 bits menos significativos da instrução
forma um ponteiro para 16 endereços de memória. Esses 16 endereços
operam como registradores auxiliares do microprocessador;
Contador de programa (Pc): indica o endereço da instrução, e o seu
valor pode ser incrementado (execução de código), alterado (instruções
10
de desvio) e armazenado na memória ou recuperado da memória
(instruções de sub-rotinas);
Ponteiro da pilha (St): aponta para o local da memória que armazena o
endereço de retorno da chamada seguinte nas operações com sub-
rotina.
A figura a seguir apresenta os modos de endereçamento do
processador.
Figura 7 ‒ Modos de endereçamento do processador VHDL
3.2 Conjunto de instruções
Na tabela a seguir são apresentadas as instruções previstas para carga,
armazenamento e aritméticas.
11
Tabela 1 ‒ Conjunto de instruções de carga, armazenamento e aritméticas
Na tabela,
[Pc+1] = conteúdo do endereço de memória apontado pelo valor do
registrador Pc + 1;
[Pg & n] = conteúdo do endereço de memória apontado pelo registrador
Pg concatenado com os 4 bits menos significativos da instrução n;
[[Pg & n]] = endereçamento indireto; o conteúdo do endereço de
memória [Pg & n] armazena o endereço efetivo em que será realizada
uma operação de carga ou armazenamento.
Na tabela a seguir são apresentadas as instruções previstas para
desvio, desvio condicional e sub-rotina.
Tabela 2 ‒ Conjunto de instruções de desvio, desvio condicional e sub-rotina
12
3.3 Operações de leitura e escrita na memória
Os ciclos de leitura e escrita demoram quatro ciclos de clock cada uma.
Há duas máquinas de estado: uma para borda de subida (mestre) e uma
para borda de subida (escrava) do clock.
A figura a seguir apresenta um diagrama das conexões entre o
processador e a memória.
Figura 8 ‒ Diagrama de conexões entre o processador e a memória
A figura a seguir apresenta os ciclos de leitura e escrita.
Figura 9 ‒ Ciclos de leitura e escrita na memória com quatro ciclos cada
As linhas “mrq_n”, “rd_n” e “wr_n” são ativas em niv́el baixo, e estão
associadas às seguintes informações: endereço válido no barramento, ciclo de
leitura e ciclo de escrita. No ciclo de leitura, o dado fornecido pela memória
deve estar válido na borda de subida do terceiro periódo do sinal de clock. No
13
ciclo de escrita, o dado fica válido para o armazenamento na memória durante
o intervalo de tempo que “mrq_n” está ativo.
A figura a seguir apresenta em detalhes as operações das duas
máquinas de estados.
Figura 10 ‒ Máquinas de estados para os ciclos de leitura e escrita
A máquina controlada pela borda de subida (mestra) executa as
operações conforme a instrução decodificada pelo processador. Caso uma
instrução necessite uma leitura ou escrita na memória, o sinal “Ler” ou
“Escrever” é ativado, e a máquina escrava aciona os sinais de controle da
memória em quatro passos definidos pelo sinal “Passo_rd_wr”. O sinal
“Passo_rd_wr” é monitorado pela máquina mestra, que executa as operações
necessárias na borda de subida do sinal de clock.
A figura a seguir apresenta a descrição VHDL da máquina mestre.
Figura 11 ‒ Descrição VHDL da máquina mestre
14
A figura a seguir apresenta a descrição VHDL da máquina escrava.
Figura 12 ‒ Descrição VHDL da máquina escrava
A operação das máquinas pode ser entendida na busca de uma
instrução na memória. O ciclo tem inićio com os comandos da linha 5 da
máquina mestre; na borda de subida de “ck”, o sinal “Ler” é ativado e o valor do
registrador “Pc” é armazenado no registrador “end_mem” ligado ao barramento
de endereços. Com o sinal “Ler” ativado, a máquina escrava leva os sinais de
controle da memória “mrq_b” e “rd_b” para o niv́el baixo na borda de descida
de “ck”, conforme descrição da máquina escrava. O estado da máquina
escrava, definido pelo sinal “Passo_rd_wr”, é também alterado. No estado “2”
da máquina escrava, a máquina mestre realiza a leitura do dado, armazenando
o valor presente no sinal “Dt” (barramento de dados) no registrador “Ir”
(registrador de instruções) na borda de subida de “ck”, conforme descrição da
máquina mestre. O ciclo termina quando a máquina mestre detecta que a
máquina escrava atingiu o estado “3”.
TEMA 4 – OPERAÇÃO DO MICROPROCESSADOR VHDL
A figura a seguir apresenta o diagrama de blocos completo do
microprocessador.
15
Figura 13 ‒ Diagrama de blocos do microprocessador
São previstos os seguintes registradores e circuitos de seleção:
"Ir": armazena a instrução em execução que foi obtida no ciclo de busca;
"Pc": contador de programa associado a um somador e um circuito de
seleção para operações em endereços relativos ao endereço atual
apontado pelo contador de programa;
"St": semelhante ao "Pc", mas para sub-rotinas, tendo associada uma
unidade de soma e subtração, pois "St" é decrementado na chamada e
incrementado no retorno da sub-rotina.
4.1 Operação da instrução load indirect acc (LDiA,n)
O diagrama de tempo da instrução LDiA,n (load indirect acc) é
apresentado na figura a seguir.
16
Figura 14 ‒ Diagrama de tempo da instrução LDiA,n
Após a busca da instrução, o registrador “Ir” armazena o valor “2” nos 4
bits mais significativos.
O valor 78 está na posição 34, cujo endereço é apontado pela
concatenação do registrador de página, valor "3", com os 4 bits menos
significativos da instrução (valor "2").
A figura a seguir apresenta a descrição VHDL da instrução LDiA,n.
Figura 15 ‒ Descrição VHDL da instrução LDiA,n
As instruções são divididas em dois passos: “Passo_op_cod=0” e
“Passo_op_cod=1”.
O primeiro passo ("Passo_op_cod=0") é ler o dado do endereço 32 e
armazenar no registrador "Aux". De acordo com a linha 4, o sinal “Ler” é
ativado e o valor “32” é transferido para o registrador “End_mem” na borda de
subida de “ck”. Na linha 5, o valor presente no barramento de dados (valor
contido no endereço “32”) é armazenado no registrador “Aux” na borda de
subida de “ck”. A operação de leitura é finalizada com “Passo_rd_wr” igual a
“3”.
O segundo passo ("Passo_op_cod=1") é ler o dado do endereço 34 e
armazenar no registrador Acc. O contador de programa é incrementado na
17
linha 10 para a busca da próxima instrução. O sinal “pc_inc” é a said́a de um
circuito somador cujo valor é “Pc+1”. A segunda operação de leitura é
finalizada com “Passo_rd_wr” igual a “3”.
A figura a seguir apresenta as unidades do processador envolvidas na
instrução LDiA,n para "Passo_op_cod=0".
Figura 16 ‒ Unidades envolvidas na instrução LDiA,n para Passo_op_cod=0
A figura a seguir apresenta as unidades do processador envolvidas na
instrução LDiA,n para "Passo_op_cod=1".
Figura 17 ‒ Unidades envolvidas na instrução LDiA,n para Passo_op_cod=1
18
TEMA 5 – TESTE DO MICROPROCESSADOR VHDL
A descrição é composta por uma entidade "cpu_8bits" e um pacote
"cpu_aux".
A memória com instruções do programa de teste é uma "ram_8x8", que
recebe os dados de um arquivo que contém os mnemônicos das instruções.
A entidade "conjunto_5" interliga esses componentes, permitindo
visualizar a execução do código contido na memória RAM.
No início da execução do teste, o arquivo é lido, e os mnemônicos são
interpretados e convertidos no hexadecimal correspondente.
Durante a conversão, os dados são armazenados na entidade da
memória RAM e a execução do programa testeé realizada após o término da
leitura do arquivo.
A figura a seguir apresenta o diagrama do esquema de conexões do
teste do microprocessador.
Figura 18 ‒ Diagrama do teste do microprocessador
A figura a seguir apresenta a descrição VHDL da entidade "conjunto_5",
que interliga o processador e a memória.
19
Figura 19 ‒ Descrição VHDL da entidade conjunto_5
A figura a seguir apresenta o fluxo e as unidades envolvidas na
execução da instrução "Call,mm" ("Passo_op_cod=1").
Figura 20 ‒ Unidades envolvidas na instrução Call,mm (Passo_op_cod=1)
20
A figura a seguir apresenta a descrição da parte do código com o
controle do sinal “st_novo” na instrução “Call,mm”, parte da ALU (arithmetic
logic unit, "unidade lógica aritmética").
Figura 21 ‒ Descrição VHDL do controle do sinal st_novo na instrução Call,mm
Saiba mais
Acesse o seguinte link para ver um detalhamento completo da operação
do microprocessador VHDL, por Roberto D'Amore:
<http://www.ele.ita.br/~damore/vhdl/v012_exemplos/cpu1/>. Acesso em: 26
nov. 2017.
FINALIZANDO
Nesta aula, vimos conceitos de processadores embarcados, o
processador NIOS II e o microprocessador em VHDL ‒ além de sua
arquitetura, sua operação e seu teste.
A compreensão do conteúdo desta aula é fundamental para a sua
formação em lógica programável.
21
REFERÊNCIAS
COSTA, C. Projetos de circuitos digitais com FPGA. 3. ed. São Paulo: Érica,
2014. Capítulo 7.
D’AMORE, R. VHDL: descrição e síntese de circuitos digitais. 2. ed. Rio de
Janeiro: LTC, 2012. cap. 17 (apêndice).
MY FIRST NIOS II Software: tutorial. Altera. San Jose, CA: Altera 2012.
Disponível em: <https://www.altera.com/en_US/pdfs/literature/tt/tt_my_first_nios
_sw.pdf>. Acesso em: 26 nov. 2017.