14 3.2 Projeto da Unidade de Controle (VHDL) 3.2.1 Diagrama ASM (Algorithmic State Machine) ASM é um fluxograma através do qual se representa a seqüência de ações que a unidade de controle de um sistema digital deve realizar, para se obter o comportamento especificado. As ações realizadas dependem das entradas externas do sistema digital e também de condições que traduzem a situação em que se encontram a própria unidade de controle e o fluxo de dados. Na verdade, ASM é uma representação gráfica do algoritmo que descreve o comportamento do sistema digital. Um fluxograma ASM parece semelhante aos fluxogramas convencionais, mas deve ser interpretado de outra maneira. Nos fluxogramas convencionais há apenas a descrição dos passos a serem seguidos e as decisões a serem tomadas, sem nenhuma relação com a variável tempo. Já nos diagramas ASM, além da descrição da seqüência dos eventos há as relações temporais entre os estados da unidade de controle e as ações que ocorrem, em cada estado, em resposta às bordas do CLOCK. O diagrama ASM contém dois elementos básicos: o bloco de estado e o bloco de decisão. Bloco de estado: o nome do estado é colocado externamente ao bloco e, dentro do mesmo, aparecem as ações ou saídas que são ativadas (fig. 14). N o m e d o E s t a d o S i n a i s a t i v o s n e s t e e s t a d o ( s a í d a s ) Fig. 14 - Bloco de Estado do Diagrama ASM Bloco de decisão: representa o efeito das entradas, na seqüência de controle. A condição mostrada na figura 15 tanto pode ser expressa por uma única variável como por uma expressão booleana. Os dois caminhos referem-se aos dois possíveis valores que a condição pode assumir.
15 1 Condição (entrada) 0 Fig. 15- Bloco de Decisão do Diagrama ASM Bloco ASM: é o conjunto construído por um bloco de estado e todos os blocos de decisão que ficam entre a saída do bloco de estado e a entrada do mesmo bloco ou de um outro bloco de estado. Ver figura 16. EST_0 0 INÍCIO 1 EST_1 EN1 Fig. 16 - Exemplo de Diagrama ASM A cada borda de subida, as condições dos blocos de decisão são examinadas e, dependendo do seu valor (0 ou 1), segue-se para o estado seguinte indicado. No exemplo da figura 15, enquanto o sinal INICIO=0, a cada borda de atuação do CLOCK, o ASM permanece em EST_0. Se, num instante qualquer, o sinal INICIO=1, na primeira borda de atuação do CLOCK após INICIO=1, o ASM alcançará o estado EST_1. Neste estado será acionado o sinal EN1.
A figura abaixo ilustra um exemplo de Diagrama ASM com a sua correspodente carta de tempos. Observe que os sinais de saída (EN2 e EN3) são acionados logo após a borda de subida do clock (CLKUC), momento no qual o sinal de entrada (LOAD) é amostrado. 16 Fig. 17 - Simulação de Diagrama ASM 3.2.2 A Linguagem VHDL A linguagem VHDL (VHSIC Very High Speed Integrated Circuit - Hardware Description Language) foi desenvolvida inicialmente para documentar e simular sistemas digitais, no início da década de 80. Após isto, na década de 90, ela começou a ser utilizada por empresas fornecedoras de chips para descrever os projetos contidos nos mesmos. Utilizando-se a linguagem VHDL é possível descrever um sistema digital através de um arquivo texto, possibilitando a implementação do mesmo por diferentes ferramentas de desenvolvimento. Os elementos principais contidos em uma descrição VHDL são: entity : declaração inicial de um módulo, contendo seu nome e os sinais de entrada e saída do mesmo. Para declarar estes sinais de entrada e saída é utilizada a construção port. A figura abaixo exemplifica a declaração de uma entity denominada SOMA:
17 A B SOMA SAIDA Fig. 18 - Exemplo de Entidade VHDL entity SOMA is Port ( A : in std_logic; B : in std_logic; SAIDA : out std_logic; ); end SOMA; architecture : descrição da arquitetura interna de uma entity. Esta descrição pode ser formada por blocos funcionais conectados através de sinais internos ou construções que descrevem o funcionamento de um módulo. A descrição de um somador pode ser feita através da seguinte linha: SAIDA <= A + B; signal : declaração de sinais internos ao módulo, utilizados na construção architecture ; process : declaração de um processo interno a um módulo, dependente de um ou mais sinais, contidos em uma lista logo após o nome do processo. Esta construção é utilizada para descrever processos que são executados em paralelo. A principal diferença existente entre uma linguagem de programação usual e VHDL está na construção process. Uma entity pode conter um ou mais processos, que estão sendo executados todos em paralelo, geralmente sincronizados por um sinal de relógio (não devemos esquecer que estamos descrevendo hardware, que possue um alto grau de paralelismo). No próximo item será visto como abrir um projeto em VHDL na ferramenta ISE. 3.2.3 Diagrama ASM em VHDL Para a descrição do Diagrama ASM através da linguagem VHDL, basta criar uma entidade ("entity") contendo dois processos ("process") principais. O primeiro deles será responsável pela inicialização do ASM e o segundo será responsável pela atribuição dos valores das saídas da Unidade de Controle, juntamente com a definição de qual será o próximo estado a seguir. Na declaração da entidade são colocados os sinais de entrada e saída do Diagrama ASM juntamente com os sinais CLOCK e RESET. Estes sinais não estão presentes no Diagrama ASM mas são utilizados para controlar o funcionamento do mesmo. A figura abaixo mostra um exemplo de Diagrama ASM, com dois estados, uma entrada (LOAD) e duas saídas (EN1 e EN2).
18 EST_0 LOAD 0 EST_1 1 EN1, EN2 Fig. 19 - Exemplo de Diagrama ASM A descrição da entidade deste ASM é a seguinte: entity exemplo_asm is Port ( clock : in std_logic; reset : in std_logic; end exemplo_asm; load : in std_logic; en1 : out std_logic; en2 : out std_logic); O número de estados do ASM é descrito através da criação de um tipo novo de dados, contendo o nome de cada um deles. No exemplo da figura X tem-se: type tipo_estado is (est_0, est_1); Os dois processos do arquivo VHDL utilizam dois sinais do tipo acima para descrever o funcionamento do ASM: estado_atual e proximo_estado. No arquivo VHDL utiliza-se a linha abaixo para criar estes sinais: signal estado_atual, proximo_estado : tipo_estado; O processo que inicializa o ASM no primeiro estado é descrito da seguinte maneira:
19 sincronismo_asm: process (clock,reset) begin if (reset='1') then estado_atual <= est_0; elsif ( clock 'event and clock = '1') then estado_atual <= proximo_estado; end if; end process; A descrição acima será idêntica para todos os ASMs descritos neste curso. O processo que descreve o funcionamento do ASM contém uma construção CASE para definir qual será o próximo estado caso alguma condição ocorra e quais as saídas acionadas no mesmo. O ASM da figura 19 é descrito da seguinte maneira, com relação ao processo de decodificação de proximo estado: decodificacao_proximo_estado: process (estado_atual, load) begin proximo_estado <= estado_atual; case (estado_atual) is -- definicao do estado 0 when est_0 => if load = '1' then proximo_estado <= est_1; end if; en1 <= '0'; en2 <= '0'; -- definicao do estado 1 when est_1 => proximo_estado <= est_0; en1 <= '1'; en2 <= '1'; when others => proximo_estado <= est_0; end case; end process;
20 3.2.3.1 Projeto em VHDL no ISE A utilização de um arquivo VHDL como descrição do projeto para a ferramenta ISE é semelhante à utilização de um arquivo do tipo esquemático, visto no item 3.1. A ferramenta ISE facilita a criação do arquivo VHDL através da geração de um arquivo modelo, para que o usuário complete com a descrição da arquitetura da entity desejada. Basta seguir o procedimento abaixo: a) abrir o Project Navigator (Iniciar Programas Xilinx ISE 6.3 Project Navigator b) selecionar File New Project. c) Na janela New Project, escolher o diretório de trabalho (Project Location), o nome do projeto (ASM_VHDL) e o tipo de arquivo do módulo principal (Top-Level Module Type). O tipo de arquivo é HDL. No diretório de trabalho será criado um sub-diretório com o nome do projeto escolhido; d) Clicar em <avançar> e) Selecionar o dispositivo e o tipo de projeto Device Family: Spartan-3 Device: xc3s200 Package: ft256 Speed Grade: -4 Top-Level Module Type: HDL Synthesis Tool: XST(VHDL/Verilog) Simulator: Modelsim Generated Simulation Language: VHDL f) Clicar em <avançar>. g) Clicar na opção New Source h) Na opção Create New Source, selecionar a opção VHDL Module e colocar o nome do arquivo igual a asm_vhdl, deixando a opção Add to project selecionada. i) Clicar em <avançar> j) Na opção Define VHDL Source, no campo Entity Name colocar exemplo_asm. No campo Architecture Name colocar exemplo_asm _arq. Esta janela possui uma tabela que nos permite definir os sinais externos de entrada e saída do nosso módulo. No ASM existem duas entradas que sempre estarão presentes: clock e reset. Além destas entradas devem ser declarados os sinais de entrada e saída do ASM. Para o exemplo da figura 19, basta preencher a tabela da seguinte maneira: Port Name Direction MSB LSB clock in reset in LOAD in EN1 out EN2 out k) Clicar em <avançar> e <concluir>. l) Na opção Create New Source novamente, clicar em <avançar>. m) Na opção Add Existing Source, clicar em <avançar>. n) Na janela New Project Information, verificar se as opções descritas estão corretas e clicar em <concluir>
Após o procedimento acima, na janela do Project Navigator denominada Sources in Project aparecerá o arquivo asm_vhdl.vhd, logo abaixo do nome da FPGA escolhida anteriormente. Este arquivo com a descrição VHDL modelo será aberto automaticamente. Neste arquivo está faltando apenas descrever a arquitetura da entidade exemplo_asm. Para isto basta copiar os trechos descritos no item anterior, com a declaração dos estados do diagrama, o processo de inicialização do ASM e o processo de decodificação de estados. Para implementar o projeto através do ISE, basta seguir o procedimento descrito no item 3.1.3, escolhendo o arquivo que descreve o mesmo na janela Sources in Project e depois clicar duas vezes no processo chamado Implement Design, na janela Process for Source.... Para a simulação do projeto basta seguir o procedimento do item 3.1.4, gerando o Testbench e simulando através do ModelSim. 3 o Exercício: implementar o exemplo de ASM e simular o mesmo, verificando se o funcionamento é compatível com a descrição da figura 19. 21