metodologia de projeto de circuitos digitais -...

18
EPUSP PCS3635 Laboratório Digital I Uma Metodologia de Projeto de Circuitos Digitais (2017) 1 RESUMO Este documento tem como objetivo a apresentação e familiarização de uma metodologia de projeto de circuitos digitais com dispositivos programáveis. O projeto de um sistema digital deve ser realizado através de uma sequência organizada de etapas de desenvolvimento. Depois de sua apresentação, a metodologia é exemplificada através de um circuito didático simples. O circuito digital projetado pode ser sintetizado em uma placa de desenvolvimento com uma FPGA. 1. Conceitos Importantes 1.1. Conceituação de um Sistema Digital Atualmente, os sistemas digitais estão amplamente difundidos e encontrados em (quase) todos os lugares. Temos a presença de sistemas digitais nos celulares que carregamos aonde vamos, no forno de micro-ondas na cozinha de casa ou no escritório, nos brinquedos eletrônicos modernos, e nos próprios tablets, notebooks ou computadores desktop onde editamos nossos documentos 1 . Outros exemplos pouco conhecidos pelo público leigo 2 incluem os microcontroladores que são responsáveis pelo sistema de controle de tração e pelos freios ABS dos carros atuais ou o sistema de controle dos carros autônomos em desenvolvimento por várias montadoras de veículos e fabricantes, como a Google. Tais sistemas digitais são sistemas complexos não triviais. E o desenvolvimento desses sistemas envolve uma série de atividades que devem seguir uma metodologia de projeto, que contém uma sequência de atividades de forma a tratar esta complexidade de forma sistemática. Um sistema digital (SD) pode ser definido, de maneira geral, como um sistema com entradas e saídas, similar a qualquer outro sistema real (fig.1). O fato que diferencia um SD de outros sistemas diz respeito ao tipo dos dados que são processados: tanto os dados internos como os de entrada e de saída são digitais, ou seja, são grandezas discretas, representadas por um conjunto finito de sinais binários e discretos. Figura 1 – Um Sistema Digital geral. Quando há a necessidade de tratar informações e/ou dados ou gerar sinais de saída em formato analógico, um processo de conversão de sinais deve ser adicionado nas extremidades do SD. Por exemplo, um sinal de entrada analógico é convertido para o formato digital com auxílio de um conversor analógico/digital. O processo inverso é realizado por um conversor digital/analógico. A figura 2 ilustra o posicionamento dos conversores de sinais. 1 Por exemplo, os arquivos do PowerPoint das aulas ou os arquivos fonte de programas C ou Java. 2 Talvez “desconhecidos”, pelo menos, para a maioria das pessoas, que não tem conhecimento técnico ou experiência na área de projeto de sistemas digitais. Desenvolvimento Sistemático de Projetos de Circuitos Digitais

Upload: hoangcong

Post on 18-Jan-2019

222 views

Category:

Documents


0 download

TRANSCRIPT

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 1

RESUMO

Este documento tem como objetivo a apresentação e familiarização de uma metodologia de

projeto de circuitos digitais com dispositivos programáveis. O projeto de um sistema digital deve

ser realizado através de uma sequência organizada de etapas de desenvolvimento. Depois de

sua apresentação, a metodologia é exemplificada através de um circuito didático simples. O

circuito digital projetado pode ser sintetizado em uma placa de desenvolvimento com uma FPGA.

1. Conceitos Importantes

1.1. Conceituação de um Sistema Digital

Atualmente, os sistemas digitais estão amplamente difundidos e encontrados em (quase) todos

os lugares. Temos a presença de sistemas digitais nos celulares que carregamos aonde vamos,

no forno de micro-ondas na cozinha de casa ou no escritório, nos brinquedos eletrônicos

modernos, e nos próprios tablets, notebooks ou computadores desktop onde editamos nossos

documentos1. Outros exemplos pouco conhecidos pelo público leigo2 incluem os

microcontroladores que são responsáveis pelo sistema de controle de tração e pelos freios ABS

dos carros atuais ou o sistema de controle dos carros autônomos em desenvolvimento por várias

montadoras de veículos e fabricantes, como a Google. Tais sistemas digitais são sistemas

complexos não triviais. E o desenvolvimento desses sistemas envolve uma série de atividades

que devem seguir uma metodologia de projeto, que contém uma sequência de atividades de

forma a tratar esta complexidade de forma sistemática.

Um sistema digital (SD) pode ser definido, de maneira geral, como um sistema com entradas

e saídas, similar a qualquer outro sistema real (fig.1). O fato que diferencia um SD de outros

sistemas diz respeito ao tipo dos dados que são processados: tanto os dados internos como os

de entrada e de saída são digitais, ou seja, são grandezas discretas, representadas por um

conjunto finito de sinais binários e discretos.

Figura 1 – Um Sistema Digital geral.

Quando há a necessidade de tratar informações e/ou dados ou gerar sinais de saída em formato

analógico, um processo de conversão de sinais deve ser adicionado nas extremidades do SD.

Por exemplo, um sinal de entrada analógico é convertido para o formato digital com auxílio de

um conversor analógico/digital. O processo inverso é realizado por um conversor

digital/analógico. A figura 2 ilustra o posicionamento dos conversores de sinais.

1 Por exemplo, os arquivos do PowerPoint das aulas ou os arquivos fonte de programas C ou Java. 2 Talvez “desconhecidos”, pelo menos, para a maioria das pessoas, que não tem conhecimento técnico ou experiência na área de projeto de sistemas digitais.

Desenvolvimento Sistemático de

Projetos de Circuitos Digitais

Edson Midorikawa

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 2

Figura 2 – Conversões entre sinais analógicos e sinais digitais.

1.2. Projeto de Sistemas Digitais

Tradicionalmente, um SD era projetado como um sistema único e usando-se componentes

discretos SSI e MSI com circuitos integrados TTL [Fregni & Saraiva, 1995] [Morris & Miller,

1978]. O desenvolvimento de circuitos digitais era baseado em um diagrama de circuitos

conhecido como captura esquemática (fig.3).

Figura 3 – Exemplo de projeto de circuito digital com captura esquemática.

Com a evolução e o aumento da complexidade de sistemas digitais, esta metodologia tradicional

se mostrou limitada e novas estratégias tiveram de ser desenvolvidas. O projeto hierárquico foi

uma forma de tratar a complexidade dos circuitos grandes, com a divisão do circuito em blocos

ou módulos menores3 que são projetados em separado e depois interligados para compor o

sistema completo (fig.4).

Figura 4 – Exemplo de projeto hierárquico de sistemas digitais.

3 O circuito da figura 3 é um detalhamento do módulo denominado padroes_fd do projeto hierárquico mostrado na figura 4.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 3

Cada bloco em um projeto hierárquico é um subprojeto que também possui um diagrama de

captura esquemática. Esta hierarquia pode conter vários níveis, até que a complexidade de um

bloco seja adequada para um projeto tradicional usando componentes digitais básicos. Assim,

um sistema digital complexo era composto por um conjunto de circuitos digitais interligados,

formando uma hierarquia.

Apesar da definição de estratégias de particionamento de circuitos como forma de

gerenciamento de complexidade, projetistas menos experientes mostravam muita dificuldade

para projetar circuitos muito complexos. Esta dificuldade se refere principalmente ao

desenvolvimento e depuração de circuitos de controle e de sincronização de seus sinais de

controle. Torna-se importante então a aplicação de estratégias específicas para o projeto de

circuitos digitais não-triviais. Por exemplo, para o projeto de circuitos de controle, a literatura

mostra uma série de ferramentas para a especificação, modelagem e desenvolvimento:

diagramas de transição de estados [Wakerly, 2006], statecharts [Harel, 1987] e diagramas ASM

[Givone, 2003] [Mano & Kime, 2000], entre outros. Estas ferramentas auxiliam o projetista no

desenvolvimento de circuitos sequenciais, facilitando o teste e, depois, a verificação da corretude do circuito projetado.

A aplicação de estratégias de auxílio ao projeto de sistemas digitais complexos é independente

da forma como o circuito digital é desenvolvido. Antes da década de 1980, a captura esquemática

foi muito difundida e ferramentas de software eram utilizadas pelos projetistas para o projeto e

documentação, as chamadas ferramentas de CAD (computer-aided design) ou, como é conhecida mais atualmente, ferramentas de EDA (electronic design automation).

Nos anos 1980, a utilização de linguagens de descrição de hardware (HDL – hardware description

language) se difundiu e começou a se tornar uma alternativa para o projeto de circuitos. As

padronizações das linguagens VHDL em 1987 (IEEE Standard 1076-1987) e Verilog em 1995

(IEEE Standard 1364-1995) permitiram o uso destas linguagens de forma universal, desde a especificação de sistemas até a etapa de síntese de circuitos integrados.

As linguagens de descrição de hardware se caracterizam pelo uso de uma descrição textual de

sistemas digitais e um conjunto de ferramentas para a análise e síntese de circuitos. A figura 5

abaixo apresenta um trecho da descrição de um processador de 32 bits na linguagem

SystemVerilog.

Uma das primeiras aplicações das HDLs foi a especificação de sistemas digitais, ao invés do uso

de linguagens naturais para evitar problemas, como ambiguidade, e obter especificações

corretas. Atualmente, as ferramentas de EDA permitem desde a edição da descrição do circuito

e a simulação de seu comportamento, até a realização de análise temporal de sinais, uma

previsão do consumo de energia do circuito, e finalmente a síntese do circuito.

Figura 5 – Trecho da descrição em linguagem SystemVerilog de um processador de 32 bits.

(extraído de [Harris & Harris, 2013]).

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 4

Nos dias atuais várias outras linguagens de descrição de hardware estão disponíveis,

incorporando diversas características, inclusive extensões para suporte a sinais analógicos

(analog and mixed-signal extensions), como por exemplo, o VHDL-AMS, Verilog-A e Verilog-

AMS. Para suporte a projetos em alto nível, ou seja, em nível de sistema (system-level

modelling), tem-se a linguagem SystemC (IEEE Standard 1666-2005). Já a linguagem SystemVerilog (IEEE Standard 1800-2005) inclui também suporte à verificação de projetos.

As seções a seguir apresentam conceitos de uma metodologia de projeto de sistemas digitais

não-triviais com a apresentação de estratégias específicas. Estas estratégias são independentes

da forma como o circuito é implementado, seja na forma de esquemáticos ou com uso de HDLs.

Para ilustrar os conceitos, será desenvolvido um projeto exemplo.

1.3. Particionamento de Sistemas Digitais

Para gerenciar a complexidade do projeto de um sistema digital não trivial, convém adotar uma

estratégia do tipo “dividir para conquistar” (divide and conquer), onde um sistema é organizado

como um conjunto de subsistemas menores interligados entre si.

O projeto de um sistema digital pode ser organizado, em um primeiro nível, particionando o SD

em duas partes com funções distintas: o Fluxo de dados (FD) e a Unidade de controle (UC). O

fluxo de dados compreende a parte do circuito responsável pela manipulação, processamento,

armazenamento e geração de dados. A unidade de controle é responsável pelo

sequenciamento das operações executadas no fluxo de dados, de forma a garantir o correto

funcionamento do circuito. A figura 6 mostra um diagrama com a estruturação interna detalhada

do SD, onde são apresentadas as duas partes principais e os sinais internos para interconexão

entre elas.

Figura 6 – Estruturação interna de um sistema digital.

Os sinais de entrada de dados são ligados ao fluxo de dados, que também gera os sinais de

saída (de dados). Os sinais de status4 indicam a condição (ou estado5) atual do fluxo de dados

e incluem sinais como o valor atual de um determinado registrador, a saída de um comparador

e a detecção de uma condição em particular.

4 Sinal de status ou sinal de condição é a tradução do termo em inglês “status signal”. Não confundir com o termo “estado” de um diagrama de transição de estados de um circuito sequencial. 5 Estado aqui se refere à condição dos elementos do fluxo de dados como o valor atual e não deve ser confundido com o estado de uma máquina de estados.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 5

Os sinais de status do fluxo de dados e os sinais de entrada de controle são os responsáveis pela

execução da unidade de controle. Um sinal de entrada de controle é um sinal que aciona a

execução de um comando pelo SD (p.ex. uma entrada INICIAR usado para acionar a execução

de um sistema). Normalmente a unidade de controle é modelada usando um circuito sequencial

através de uma máquina de estados finita. A saída da unidade de controle são sinais de controle

para os componentes do fluxo de dados, como por exemplo, a seleção de função de uma ULA,

a habilitação de um contador ou a habilitação de um circuito de memória RAM. Opcionalmente,

a unidade de controle também pode gerar alguns sinais de saída. Por exemplo, é conveniente

gerar como saída uma identificação do estado atual da máquina de estados finitos para ser usada

para a depuração do circuito. Outro exemplo de sinal de saída de controle é indicar o término da

execução de uma operação (sinal FIM), que normalmente é usado para sincronizar a execução

de circuitos independentes.

Esta organização de sistemas digitais pode ser aplicada em sistemas embarcados [Flynn & Luk,

2011], como por exemplo, em um sistema de controle automotivo, ou em modernos

processadores multicore usados em dispositivos que variam de computadores e tablets até

dispositivos móveis como relógios inteligentes [Patterson & Hennessy, 2009][Harris & Harris,

2013].

1.3.1. Projeto do fluxo de dados

O fluxo de dados deve ser projetado como um circuito digital no nível de transferência de

registradores. Um sistema é dito estar no nível de transferência de registradores (RTL – register

transfer level) se as informações fluírem pelo circuito através de componentes de memória ou

armazenamento de dados (registradores). À medida que os dados fluem pelo circuito, estes

podem ser manipulados por blocos combinatórios implementando uma determinada lógica

(fig.7). O circuito descrito na figura 7 é basicamente um circuito sequencial síncrono, onde um

sinal global de relógio (clock) gerencia o fluxo de informações pelo sistema digital. Um bloco de

lógica combinatório pode incluir um circuito com portas lógicas ou outros componentes mais

complexos, como, multiplexadores, decodificadores, ULAs, etc. Já os módulos registradores

incluem registradores, propriamente ditos, ou simplesmente flip-flops ou ainda registradores de

deslocamento.

Figura 7 – Estrutura de um circuito no nível RTL.

A identificação dos componentes do fluxo de dados pode ser feita a partir do algoritmo ou

descrição detalhada do funcionamento do circuito digital. A partir da identificação dos

componentes (por exemplo, contador), pode-se verificar quais operações são executadas por

estes componentes (por exemplo, zerar, incrementar, reiniciar, carregar novo valor, etc).

Um circuito no nível RTL é estruturado como um conjunto de caminhos para o fluxo de

informações pelo sistema digital completo. A ordenação correta e o processamento específico

são determinados pela unidade de controle que aciona os sinais de controle dos vários

componentes combinatórios do fluxo de dados (por exemplo, função da ULA) e também dos

elementos registradores (por exemplo, habilitação da saída tri-state de um registrador). Outro

exemplo desta ordenação de sinais de controle é o cálculo da multiplicação de dois valores

inteiros por somas sucessivas: primeiro antes de se iniciar a sequência de somas, deve-se zerar

o registrador que armazena o resultado final.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 6

Os recursos disponíveis no fluxo de dados implementam funções diferentes no hardware [de

Micheli, 1994], que podem ser classificados em:

Os recursos funcionais processam dados. Eles implementam funções aritméticas ou lógicas

e podem ser agrupadas em duas subclasses. A primeira são os recursos primitivos que foram

projetados cuidadosamente uma vez e usados frequentemente. São exemplos desta classe

as unidades lógicas e aritméticas e as funções lógicas padrão, como os codificadores e

decodificadores. A segunda classe inclui recursos específicos da aplicação, pois incorporam

circuitos que executam uma tarefa particular. Um exemplo desta classe é o circuito de

tratamento de interrupções de um processador.

Os recursos de memória armazenam dados. São exemplos os registradores e as memórias

EPROM e RAM. O requisito para armazenar informação é importante no sequenciamento de

operações de um sistema digital.

Os recursos de interface realizam a transferência de dados. Estes recursos incluem as vias

de dados e os multiplexadores que compõem um meio de comunicação essencial em um

fluxo de dados. Interfaces com circuitos externos incluem ainda pinos de E/S e circuitos de

interfaceamento.

1.3.2. Projeto da unidade de controle

A unidade de controle deve organizar o funcionamento do sistema digital garantindo o correto

sequenciamento de operações realizadas pelos elementos do fluxo de dados. Uma forma para

desenvolver a unidade de controle é a partir de um diagrama de transição de estados ou do diagrama ASM que modelam este sequenciamento de sinais.

A implementação da unidade de controle envolve projetar um circuito digital que realiza o

diagrama ASM. A figura 8 ilustra com um exemplo.

Figura 8 – Diagramas ASM e de transição de estados equivalente de uma unidade de controle.

A unidade de controle segue a sequência de estados especificados no diagrama ASM durante a

operação do circuito conforme os sinais de entrada e os sinais de status do fluxo de dados. A

cada estado ou transição de estados um ou mais sinais de controle são gerados. Pode-se adotar

o modelo Moore ou modelo Mealy6.

6 É também comum para alguns projetistas adotar o modelo misto, onde alguns sinais de controle são gerados usando saídas Moore e outros usando saídas Mealy.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 7

2. Etapas da Metodologia de Projeto de Sistemas Digitais

A metodologia de projeto de sistemas digitais não triviais proposto neste documento possui sete

etapas:

1. Escrever uma descrição verbal do sistema;

2. Desenvolver um pseudocódigo do funcionamento;

3. Elaborar um diagrama ASM de alto nível;

4. Selecionar os elementos do fluxo de dados para as operações;

5. Identificar sinais de status e de controle dos elementos do fluxo de dados;

6. Elaborar um diagrama ASM da unidade de controle a partir do fluxo de dados;

7. Verificar conexão do fluxo de dados e da unidade de controle para formar o sistema

digital.

O desenvolvimento do projeto inicia com a escrita da especificação do sistema digital, através

de uma descrição verbal do sistema. Esta descrição em linguagem natural deve apresentar as

funcionalidades a serem implementadas e possíveis restrições. Uma narrativa do funcionamento

do circuito a ser projetado é um bom exemplo de descrição a ser desenvolvida.

A leitura e interpretação da descrição verbal do sistema são usadas para a geração de uma

forma algorítmica do funcionamento do sistema. Assim, na segunda etapa, gera-se um

pseudocódigo com o algoritmo do sistema digital. Este pseudocódigo usa os comandos básicos

usados na descrição de algoritmos de software [Cormen et al. 2009], como comandos em

sequência, comandos de decisão, comparações e estruturas em laço. Deve-se evitar o uso de

estruturas complexas, como o uso de recursão.

Em seguida, a partir do pseudocódigo obtido, a metodologia gera um diagrama abstrato que

modela o comportamento descrito. Este diagrama, chamado diagrama ASM de alto nível,

contém os elementos de um diagrama ASM convencional, mas inclui comandos e testes em

linguagem natural. Esta etapa visa gerar uma primeira descrição mais formal ou abstrata do

sistema em desenvolvimento.

De posse do pseudocódigo e do diagrama ASM de alto nível, é possível identificar os principais

elementos do fluxo de dados. As variáveis identificadas no algoritmo podem ser

implementadas usando registradores. As operações sobre estas variáveis podem ser projetadas

com unidades funcionais combinatórias, como somadores, ULAs, codificadores ou outro circuito

combinatório específico. As trocas de informações entre variáveis formam o sistema de

transferência de dados descrito na seção 1.3.1. Este sistema pode ser realizado como uma via

de dados tri-state ou por um sistema de transferência de dados com uma rede de

multiplexadores.

A quinta etapa pode ser executada pela definição dos sinais de controle que acionam os

elementos do fluxo de dados. Por exemplo, a saída de um multiplexador depende do valor de

sua entrada de seleção e uma ULA depende das entradas de seleção de função. O uso de um

registrador de deslocamento pode gerar vários sinais de controle para zerar seu conteúdo,

deslocar os bits para a direita e carregar outro valor pelas entradas paralelas. Os sinais de

status são identificados pelos blocos de decisão do diagrama ASM. Assim, bits de um registrador

podem ser usados para verificar o conteúdo de um dado ou a saída de um comparador de

magnitude pode identificar uma condição para o término de execução de uma operação.

De posse dos sinais de controle e de status dos elementos do fluxo de dados, o diagrama ASM

de alto nível pode ser detalhado para gerar o diagrama ASM da unidade de controle com

estes sinais para acionar o fluxo de dados e testar as condições de estado. Cabe lembrar aqui

que um diagrama ASM adota, como padrão, sinais ativos em ALTO e os blocos de estado e de

saída condicional indicam apenas aqueles sinais de saída que devem ser ativados.

Finalmente, com a definição dos elementos do fluxo de dados e do comportamento da unidade

de controle, pode-se prosseguir para uma primeira versão da microarquitetura do sistema digital

com a obtenção da estrutura interna que contém a conexão do fluxo de dados e da unidade

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 8

de controle. Esta estrutura é uma primeira aproximação do projeto final. Devem ser incluídos

os elementos do fluxo de dados, o bloco da unidade de controle e os sinais de controle e de

estados interligando ambos os blocos.

Se o circuito final obtido não for considerado adequado ou eficiente o suficiente, pode-se

reexecutar as etapas definidas com o refinamento dos resultados.

2.1. Observação importante

Um ponto importante que devemos ressaltar é com os elementos sensíveis a borda do clock.

Considere que um contador normalmente é acionado por uma borda ativa da entrada de clock.

Assim um projetista poderia considerar a entrada de clock deste contador como um sinal de

controle deste elemento do fluxo de dados. Contudo isto vai de encontro com a estrutura RTL

definida na seção 1.3.1 onde todos os elementos devem compartilhar de um mesmo sinal de

relógio. Desta forma, elementos sensíveis a borda de clock devem ser acionados por um sinal

de habilitação de função, ao invés do próprio sinal de relógio.

Vejamos um exemplo concreto: considere um deslocador que precisa das funções de atualização

do conteúdo atual (deslocamento) e de carga de um valor inicial. Os sinais de controle que

devemos adotar são aqueles que especificam o deslocamento do conteúdo e a carga do valor da

entrada paralela. Para isto usaremos como exemplo o circuito integrado 74165, cuja pinagem e

tabela funcional de seus sinais de função são apresentadas na figura 9.

Figura 9 – Deslocador integrado 74165 (fonte: Texas Instruments).

A operação de deslocamento no 74165 depende de três sinais de entrada: o sinal SHIFT/LOAD̅̅ ̅̅ ̅̅ ̅̅ ̅

deve ser igual a 1, CLOCK_INHIBIT deve ser igual a 0 e é necessário haver uma borda de subida

do CLOCK. Já a carga do valor de entrada paralela depende apenas do sinal SHIFT/LOAD̅̅ ̅̅ ̅̅ ̅̅ ̅ ser

igual ao valor 0 (função assíncrona). Assim, de forma a usar sinais de controle ativos em 1 é

necessário projetar um circuito adicional para acionar os pinos de controle do circuito integrado.

Este circuito adicional deve seguir os valores abaixo.

CARGA DESLOCA SHIFT/LOAD CLOCK_INHIBIT FUNÇÃO

0 0 1 1 Mantém valor interno

0 1 1 0 Desloca para a direita

1 0 0 X Carrega valor paralelo

1 1 1 1 Erro (mantém valor)

Finalmente, o diagrama lógico da figura 10 mostra o circuito com o deslocador 74165 que contém

os sinais de controle ativos em 1, conforme solicitado pela metodologia.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 9

Figura 10 – Diagrama lógico do elemento deslocador com comandos de carga e deslocamento.

Quando o projeto é implementado com uma linguagem de descrição de hardware, este aspecto

deve ser implementado no próprio componente. Por exemplo, um deslocador com sinais de

controle para carga e deslocamento ativos em nível alto pode ser implementado em VHDL

conforme ilustrado na figura 11.

Figura 11 – Descrição VHDL do elemento deslocador com comandos de carga e deslocamento.

Na descrição acima7, pode-se observar que os sinais de controle carrega e desloca são testados

na borda ativa do clock, para acionar as respectivas funções.

7 Além dos sinais carrega e desloca, a descrição VHDL também apresenta um sinal reset síncrono.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 10

2.2. Pseudocódigo

Na área de programação de computadores, define-se um algoritmo como qualquer

procedimento computacional bem definido que toma algum valor ou conjunto de valores como

entrada e produz algum valor ou conjuntos de valores de saída. Um algoritmo é uma sequência

de passos computacionais que transformam a entrada na saída [Cormen, 2009]. Desta forma,

pode-se desenvolver um programa de computador para computar os valores das saídas com

base nos valores das entradas.

A implementação do programa é normalmente baseada no desenvolvimento do algoritmo que

resolve o problema de mapear as entradas e as saídas, pois o algoritmo descreve um

procedimento computacional específico para se alcançar esse relacionamento da entrada com a

saída. Um algoritmo pode ser especificado em linguagem comum, para um programa de

computador ou mesmo para um projeto de hardware. O único requisito é que a especificação

deve fornecer uma descrição precisa do procedimento computacional a ser seguido.

Para se conseguir expressar o procedimento com precisão mantendo o uso de uma linguagem

comum, adota-se o uso de um pseudocódigo8 para descrever algoritmos. Podemos dizer que

um pseudocódigo é uma forma de descrição que usa ao mesmo tempo construções de linguagens

de programação ou de descrição de hardware e termos em linguagem natural. Por exemplo, a

figura 12 abaixo ilustra o pseudocódigo que descreve o algoritmo insertion sort para ordenação

de uma sequência de valores. Note a estrutura básica de um programa ou descrição de hardware

com definição clara das entradas e saídas e a parte com linhas numeradas que define a sequência

específica de instruções ou comandos a serem realizados.

Figura 12 – Pseudocódigo de um algoritmo de ordenação.

De uma maneira geral, o pseudocódigo segue o seguinte formato: a parte inicial identifica o

pseudocódigo com um termo que define sua funcionalidade. Em seguida, são definidos os

principais sinais de entrada e de saída. Caso o sinal for um valor simples, coloca-se apenas seu

identificador (p.ex. CLEAR, LOAD, CLOCK). Se o sinal contiver múltiplos valores, coloca-se

também o número de elementos contidos e seus respectivos índices (p.ex. DADOS(1..8),

A(0..3), etc). A descrição da sequência de comandos que devem ser executados pelo algoritmo

constitui a parte final do pseudocódigo. Os comandos incluem também comentários que devem

ser precedidos por //.

8 Para mais informações, consulte as referências [Cormen, 2009] e [PCS-EPUSP, 2016].

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 11

De uma maneira geral, os comandos que podem ser usados no pseudocódigo incluem:

Atribuição de valores: o valor de um sinal pode ser transferido a outro sinal ou elemento

de um conjunto de sinais, usando o operador := (veja como exemplo a linha 3 da figura 13,

onde o j-ésimo elemento de A é transferido para chave).

Sequência de comandos: os comandos são executados em sequência, assim, o comando

da linha 7 deve ser executado antes do comando da linha 8.

Indentação: a indentação dos comandos no pseudocódigo indica a estrutura de bloco, ou

sejam, comandos que mantém a mesma distância com relação à margem esquerda do texto

pertencem ao mesmo bloco de comandos. Por exemplos, os comandos das linhas 7 e 8 são

parte do corpo do comando while da linha 6.

Comandos de repetição: comandos de repetição9 executam comandos internos diversas

vezes dependendo de uma certa condição. Na exemplo da figura 13, temos o comando while

da linha 2 que executa os comandos do seu corpo (que inclui as linhas 3 a 10) enquanto a

condição j≤comprimento(A) for verdadeiro. Uma variante de comando de repetição é o

comando repeat-until. Este comando repete a execução dos comandos do seu corpo até que

a condição for verdadeira (ou seja, executa enquanto a condição for falsa). Por exemplo,

temos o seguinte:

repeat

A(i+1):=A(i)

i := i-1

until A(i)<chave

Comando de condição: o comando de condição define a execução condicionada de

comandos com base na avaliação de uma condição. Por exemplo, o comando

if x > 5

a := 2

else

a := i-1

define um novo valor para a baseado na condição x>5.

Comando wait-for: este comando é especifico para descrição de uma funcionalidade

comum em um circuito síncrono: a espera pela ativação de um determinado sinal. Por

exemplo, o comando

wait for START

especifica que o circuito deve aguardar a ativação do sinal START. Enquanto o sinal estiver

desativado, o circuito permanece em estado de espera.

Comandos em linguagem natural: quando o projeto está em suas fases preliminares, o

pseudocódigo pode incluir comandos especificados com frases. Em etapas posteriores, o

pseudocódigo pode ser refinado e detalhes de como estes comandos de alto nível podem ser

implementados podem ser incluídos. Veja o exemplo:

if dado não for válido

sinalize erro

requisite retransmissão da informação

9 Na metodologia de projeto apresentadodeste documento, não deve ser usado o comando de repetição for, que é muito comum em linguagens de programação.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 12

3. Desenvolvimento de um Projeto Exemplo

Para ilustrar os conceitos, vamos desenvolver um projeto exemplo aplicando a metodologia de

projeto aqui apresentada. A cada etapa, busca-se explicar as decisões de projeto tomadas e os

resultados obtidos.

3.1. Descrição verbal do projeto

A especificação do funcionamento do circuito é apresentada abaixo:

“Projetar um sistema digital (SD) que seja responsável pelo armazenamento de dois números

de 4 bits, que serão introduzidos através de uma única entrada de dados. Após a introdução

inicial de um ou mais valores, o SD deve disponibilizar os números armazenados, um de cada

vez, em uma única saída de dados. Para o armazenamento dos números e posterior

apresentação, são disponíveis sinais de comando. Tanto o armazenamento quanto a

apresentação dos dados devem ocorrer sincronamente com o sinal de relógio”.

A interface do projeto exemplo é ilustrada na figura 12. O sistema digital exemplo tem cinco

sinais de entrada10 e um sinal de saída [Ranzini et all, 2002] [Menezes et all, 2011]:

• IN[1..4] – entrada de dados de quatro bits;

• N1 – sinal para armazenar o primeiro valor de quatro bits presente na entrada IN;

• N2 – sinal para armazenar o segundo valor de quatro bits presente na entrada IN;

• M1 – sinal para apresentar na saída de dados OUT o primeiro valor armazenado;

• M2 – sinal para apresentar o na saída de dados OUT o segundo valor armazenado;

• OUT[1..4] – saída de dados de quatro bits.

Figura 12 – Interface de entrada e saída do projeto exemplo.

O sistema digital deve armazenar dois números de 4 bits internamente, que depois podem ser

apresentados na saída OUT. Para que o primeiro número seja armazenado no sistema, ele deve

ser colocado na entrada de dados IN e o sinal N1 deve ser ativado. De maneira análoga, o

segundo número é armazenado quando o mesmo é colocado na entrada IN e o sinal N2 é ativado.

Para mostrar cada um destes números na saída OUT, os sinais M1 ou M2 devem ser acionados.

Caso seja acionado M1, a saída OUT deverá mostrar o primeiro número. Caso M2 seja acionado,

a saída OUT deverá mostrar o segundo número.

10 Cinco sinais de entrada, sem contar os sinais de relógio (CLOCK) e de reinício (RESET), presentes normalmente em todos os sistemas digitais síncronos.

SISTEMADIGITAL

EXEMPLO

IN[1..4]

OUT[1..4]

N1

N2

M1

M2

CLOCK

RESET

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 13

A interpretação da especificação acima do SD nos leva a concluir que os sinais M1 e M2 devem

ser ignorados enquanto, pelo menos, um número não for armazenado. Outra conclusão é a de

que podem ser armazenados mais de dois números antes de se ativar, pela primeira vez, o sinal

de apresentação de número na saída.

Convém ressaltar que todos os sinais de controle são definidos como ativos em alto, ou seja,

para acioná-los, deve-se colocar um valor lógico ALTO ou 1.

3.2. Elaboração do pseudocódigo

A extração ou obtenção de uma descrição algorítmica da descrição verbal anterior é a primeira

atividade que envolve conceitos de projeto. Alguns aspectos conceituais, como por exemplo

variáveis e estruturas de repetição, devem ser identificados de forma a obter o pseudocódigo.

A partir da interpretação da especificação do projeto exemplo, pode-se elaborar um

pseudocódigo abaixo que descreve o funcionamento lógico do circuito (figura 13).

Projeto Exemplo

entradas: IN(1..4),N1,N2,M1,M2

saídas: OUT(1..4)

1 // iniciar registradores

2 R1 := 0;

3 R2 := 0;

4 R3 := 0;

5 // entrada inicial de dados

6 repeat

7 if (N1 = 1) R1 := IN; break

8 else if (N2 = 1) R2 := IN; break;

9 until (false);

10 // processar sinais N1, N2, M1 e M2

11 repeat

12 if (N1 = 1) R1 := IN; // copiar entrada no primeiro registrador

13 else if (M1 = 1) R3 := R1; // copiar primeiro registrador para a saída

14 else if (N2 = 1) R2 := IN; // copiar entrada no segundo registrador

15 else if (M2 = 1) R3 := R2; // copiar segundo registrador para a saída

16 until (false);

Figura 13 – Pseudocódigo do projeto exemplo.

As primeiras linhas do pseudocódigo mostram a determinação da condição inicial dos

registradores. As linhas 6 a 9 mostram a entrada inicial dos dados, com a verificação dos sinais

de entrada N1 e N2. Caso um destes sinais seja ativado, o respectivo registrador armazena o

valor presente na entrada IN. Pode-se notar aqui que os sinais de comando M1 e M2 são

ignorados neste ponto, conforme foi especificado na descrição verbal do projeto. As linhas 11 a

16 descrevem o comportamento do circuito11 a ser projetado com a execução dos comandos de

armazenamento e de apresentação de dados na saída.

Esta etapa é importante, pois a metodologia se baseia no pseudocódigo gerado para a realização

do projeto do sistema digital. Se houver a necessidade de alterar alguma instrução do

pseudocódigo, será preciso reexecutar as demais etapas.

3.3. Criação do diagrama ASM de alto nível

O diagrama ASM de alto nível correspondente ao funcionamento do circuito descrito pelo

pseudocódigo da figura 13 pode ser elaborado tendo-se em conta a estrutura de controle e o

sequenciamento de operações a serem executadas. Normalmente, uma sequência de comandos

em um pseudocódigo é representada como uma sequência de transição de estados. Já uma

estrutura em loop é traduzida com uma estrutura circular de transição de estados no diagrama

11 Pela descrição no pseudocódigo, há uma ordem de precedência dos sinais de comando N1, M1, N2 e M2, com o sinal N1 como o de maior precedência e M2, o de menor precedência. Isto quer dizer que se dois sinais forem acionados simultaneamente, somente o de maior precedência será considerado.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 14

ASM. Comandos de decisão onde uma condição é verificada são traduzidos pelo uso do bloco de

decisão. A figura 14 apresenta o diagrama resultante desta etapa da metodologia.

Figura 14 – Diagrama ASM de alto nível para o projeto exemplo.

É importante observar inicialmente alguns pontos durante a elaboração do diagrama ASM de

alto nível:

Primeiro, um diagrama ASM deve possuir um estado inicial, onde as condições iniciais

dos elementos do fluxo de dados devem ser estabelecidas. Por exemplo, zerar conteúdos

de registradores e estabelecer um valor inicial de um contador regressivo.

Contudo, um diagrama ASM não deve possuir “estados finais”, onde a unidade de

controle “termina” sua execução. Isto pode ser explicado pelo fato de um circuito

projetado segundo nossa metodologia funcionar de forma contínua. Caso houver um

“estado final”, seria necessário reiniciar sua operação desligando e religando o circuito

ou acionando-se um sinal de reset.

Um erro comum na elaboração de um diagrama ASM é criar uma estrutura de laço (ou

“looping”) para uma determinada condição de forma que não existe um próximo estado

quando esta condição for verdadeira. Deve-se garantir que para cada estado do diagrama

haja um estado seguinte para cada avaliação da condição testada (verdadeira e falsa),

como ilustrado na figura 15.

Figura 15 – Erro comum na elaboração de um diagrama ASM.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 15

O diagrama ASM de alto nível contém comandos escritos com palavras, ao invés de sinais de

controle. Por exemplo, no estado S1, a ação tomada é “copiar o valor na entrada IN para o

primeiro registrador”. Este estado está relacionado com o comando da linha 7 do pseudocódigo.

Podemos observar também a característica da entrada inicial dos dados descrita nas linhas 6 a

9, com a estrutura de laço (“loop”) das transições a partir do estado S0 quando os sinais N1 e

N2 não são acionados.

Os estados S1 a S5 estão relacionados com o tratamento dos comandos de armazenamento de

dados (estados S1 e S2) e dos comandos de apresentação dos dados nos registradores na saída

(S4 e S5). Enquanto nenhum dos comandos for acionado, o circuito permanece no estado S3.

3.4. Identificar e selecionar os elementos do fluxo de dados

Aqui passamos a definir quais componentes serão parte do circuito digital. Analisando o

pseudocódigo, vemos que precisaremos de três registradores de 4 bits para armazenar e

apresentar os números (R1, R2 e R3). Os dados de entrada IN são copiados para R1 e R2, e

posteriormente, valores em R1 e R2 podem ser copiados para R3. Este comportamento pode ser

implementado pelo circuito representado pelo diagrama de blocos da figura 16. Os sinais de

entrada IN são ligados diretamente aos registradores R1 e R2. As saídas destes registradores

são conectadas na entrada de um multiplexador 2x1. E a saída deste multiplexador é ligada na

entrada do registrador R3. Finalmente, a saída de R3 é ligada no sinal de saída OUT.

Figura 16 – Esquema do fluxo de dados do projeto exemplo.

Um leitor mais atento e que possui conhecimento de projeto de circuitos digitais pode agora

estar imaginando outra solução para o fluxo de dados do projeto. Este circuito alternativo poderia

usar registradores com saída tri-state para interligar R1 e R2 para a entrada de R3. Isto faria

com que o multiplexador não fosse necessário no projeto. Este comentário é oportuno, pois

mostra que durante o processo de desenvolvimento do circuito, o projetista faz escolhas entre

alternativas possíveis e toma determinadas decisões de projeto. Aqui, adotaremos a solução

ilustrada na figura 16.

3.5. Identificar sinais de status e de controle do fluxo de dados

A partir da definição dos elementos do fluxo de dados realizada na etapa anterior, determinamos

aqui os sinais de controle para a realização dos comandos especificados no diagrama ASM de

alto nível. Além disto, os comandos de decisão presentes nos blocos de decisão devem ser

estabelecidos como sinais de status. Nesta etapa detalhamos os componentes identificados

anteriormente com a definição dos sinais de status e de controle. Para o projeto exemplo.

observe que podemos definir os sinais de controle necessários para controlar (ou acionar) as

operações dos componentes do fluxo de dados: para a reinicialização dos registradores (CLR1,

R2

R1

MU

X2

X1

R3 OUT[1..4]

IN[1..4]

CLOCK

EN3

CLR3

EN2

CLR2

EN1

CLR1

SEL

0

1

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 16

CLR2 e CLR3), para o controle do armazenamento dos dados nos registradores (EN1, EN2 e

EN3) e para a seleção de entrada do multiplexador (SEL). Neste projeto em particular, não há

nenhum sinal de status adicional do fluxo de dados que é usado como sinal de entrada na

unidade de controle. Isto pode ser verificado nos blocos decisão do diagrama ASM da figura 14:

apenas os sinais de entrada N1, N2, M1 e M2 são usados para verificar as condições de decisão.

Algumas vezes é necessário acrescentar um outro módulo combinatório no fluxo de dados

quando o diagrama ASM de alto nível contém uma decisão com uma comparação mais elaborada.

Por exemplo, no projeto em desenvolvimento, se houvesse o teste “se registrador de saída tiver

valor igual a 3”, seria necessário acrescentar um comparador de R3 com o valor 3 para produzir

um sinal de status R3_igual_3 para ser usado pela unidade de controle.

3.6. Detalhar o diagrama ASM da unidade de controle

Com as informações obtidas até aqui, podemos agora substituir os comandos em linguagem

verbal do diagrama ASM de alto nível para os sinais de controle e de status para obtermos um

diagrama ASM. O diagrama ASM da unidade de controle é gerado com a especificação direta dos

sinais de controle e dos sinais de status. Neste caso, os blocos de estado contêm os sinais de

controle que devem ser ativados no estado correspondente12 e os blocos de condição testam o

valor do sinal de status. Vale lembrar que o diagrama ASM da unidade de controle trabalha com

sinais digitais binários, ou seja, as saídas de um bloco de decisão devem ser apenas 0 ou 1. A

figura 17 mostra o diagrama ASM da unidade de controle do projeto exemplo.

Note que o estado S5 do primeiro diagrama ASM precisou ser dividido em dois estados (S5 e

S6) no diagrama ASM final, por causa dos requisitos de tempo do registrador R3 (tempo de

preparação ou setup time). A razão disto é que, para copiar o conteúdo de R2 para R3, a entrada

1 do multiplexador deve ser selecionado para, posteriormente, o registrador R3 armazenar sua

saída. Assim, antes de copiar o dado para o registrador R3, é necessário acrescentar um estado

anterior para selecionar a entrada correta do multiplexador.

Figura 17 – Diagrama ASM do projeto exemplo.

12 Isto quando os sinais de controle são ativados em um estado como saídas Moore. Pode-se, opcionalmente, usar blocos de saída condicional no diagrama ASM para especificar saídas Mealy.

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 17

3.7. Verificar a conexão de sinais entre o fluxo de dados e a unidade de controle

Com a definição dos sinais internos do projeto (sinais de controle e de status), podemos

visualizar como os blocos internos do projeto se conectam. Isto é mostrado na figura 18. Observe

que o sinal de relógio é ligado em ambos os blocos, porque o sistema digital é um circuito

síncrono.

Na figura 18 temos a ligação interna dos sinais de entrada de dados (sinal IN) para o fluxo de

dados e dos sinais de entrada de comandos (sinais N1, N2, M1, M2 e RESET) para a unidade de

controle. Os sinais de controle são responsáveis pelo controle dos registradores internos (sinais

EN1, CLR1, EN2, CLR2, EN3 e CLR3) e do multiplexador (sinal SEL) do fluxo de dados. E a saída

OUT é gerada também pelo fluxo de dados.

Figura 18 – Particionamento do projeto exemplo.

3.8. Considerações Finais

Descrevemos aqui um método sistemático com etapas determinadas, que tem como objetivo

organizar as ideias do projetista de circuitos digitais. O resultado final desta metodologia é a

estruturação e definição da microarquitetura do sistema.

Contudo, é importante enfatizar que somente a aplicação da metodologia para o projeto lógico

de um circuito digital não garante seu funcionamento correto. Para verificar o funcionamento do

sistema digital projetado, deve-se realizar a simulação do projeto completo desenvolvido como

apresentada na figura 19 abaixo. Nas formas de onda mostradas, inicialmente é armazenado o

valor 6 (acionando N1) e em seguida o valor 7 (acionando N2). Ao acionar M1, o primeiro valor

é apresentado na saída. Depois, ao acionar M2, o segundo valor armazenado é mostrado. No

final, o acionamento de RESET faz o sistema voltar ao estado inicial.

Figura 19 – Simulação do sistema digital do projeto exemplo.

Outros exemplos de projeto de circuitos digitais usando esta metodologia serão apresentados

nas aulas. Por exemplo, temos o circuito de multiplicação binária inteira desenvolvido em

[RUGGIERO & MARGI 2011].

EPUSP — PCS3635 — Laboratório Digital I

Uma Metodologia de Projeto de Circuitos Digitais (2017) 18

4. BIBLIOGRAFIA

ALTERA. Altera DE2 Development and Education Board User Manual. 2008.

CHU, P.P. RTL Hardware Design Using VHDL: coding for efficiency, portability, and scalability. Wiley, 2006.

CORMEN, T.H. et al. Introduction to Algorithms. 3rd edition, The MIT Press, 2009.

DE MICHELI, G. Synthesis and Optimization of Digital Circuits. McGraw-Hill, 1994.

FLYNN, M.J. & LUK, W. Computer System Design: System-on-Chip, Wiley, 2011.

FREGNI, E. & SARAIVA, A.M. Engenharia do Projeto Lógico Digital: conceitos e prática. Edgard

Blücher, 1995.

GAJSKI, D.D. Principles of Digital Design. Prentice-Hall, 1997.

GIVONE, D.D. Digital Principles and Design. McGraw-Hill, 2003.

HAREL, D. Statecharts: a Visual Formalism for Complex Systems. Science of Computer

Programming, vol. 8, pp. 231-274, 1987.

HARRIS, D.M. & HARRIS, S.L. Digital Design and Computer Architecture. 2nd edition, Morgan Kaufmann, 2013.

LALA, P.K. Principles of Modern Digital Design. Wiley, 2007.

MANO, M. M.; KIME, C. R. Logic and computer design fundamentals. 2nd edition, Prentice-Hall, 2000.

MENEZES, M.P.; SATO, L.M.; MIDORIKAWA, E.T. Projeto de Circuitos com Quartus II 9.1. Apostila de Laboratório Digital, 2011.

MIDORIKAWA, E.T. Metodologia de Projeto com Dispositivos Programáveis. Apostila de

Laboratório Digital, 2016.

MORRIS, R.L. & MILLER, J.R. Projeto com Circuitos Integrados TTL. Editora Guanabara Dois, 1978.

PATTERSON, D.A. & HENNESSY, J.L. Computer Organization and Design: the hardware/software interface. 4th edition, Morgan Kaufmann, 2009.

PCS-EPUSP. Pseudocódigo. Apostila de PCS3110 – Algoritmos e Estruturas de Dados para Engenharia Elétrica, 2016.

PEDRONI, V.A. Circuit Design and Simulation with VHDL. 2nd ed., The MIT Press, 2010.

RANZINI, E.; HORTA, E.L.; MIDORIKAWA, E.T. Projeto de Circuitos com MAX+PLUS II. Apostila de Laboratório Digital, 2002.

RUGGIERO, W. & MARGI, C.B. Metodologia de projeto de sistemas digitais. Apostila de Organização de Sistemas Digitais, 2011.

SIGNETICS. TTL Logic Data Manual. 1982.

TOCCI, R. J.; WIDMER, N. S.; MOSS, G. L. Digital Systems: Principles and Applications. 11th ed.,

Prentice-Hall, 2011.

TOKHEIM, R.L. Princípios Digitais. Schaum-McGraw Hill, 1983.

WAKERLY, J.F. Digital Design: Principles and Practices. 4th edition, Prentice-Hall, 2006.

Histórico de Revisões E.T.M./2015 – versão inicial. E.T.M./2016 – revisão e reorganização do texto. E.T.M./2017 – revisão e expansão do texto.