Escola de Engenharia Departamento de Engenharia Eletrnica
Laboratrio de Sistemas Digitais Aulas 11 e 12: Construo de bibliotecas VHDL com componentes parametrizveis.
sd11_e_sd12.docx 1/5 OBJETIVOS: Projeto de componentes em VHDL. Projeto e simulao de uma biblioteca de componentes em VHDL no ambiente Quartus II Altera para construo de um caminho de dados (ou bloco operacional) e de um bloco de controle (ou unidade de controle) para implementao de lgica RTL. Implementao prtica no Kit didtico de lgica programvel Exsto XD301. Criao de uma biblioteca de componentes parametrizveis (de tamanho genrico). MATERIAL UTILIZADO: Microcomputador com software Quartus II Altera Web Edition (gratuita). Kit didtico de lgica programvel marca EXSTO modelo XD301 com CPLD da famlia MAX3000A, modelo EPM3064ALC44-10 e Gravador USB Blaster e cabo USB. INTRODUO: Nessa prtica voc estudar e implementar em VHDL uma biblioteca de componentes. Os componentes que voc implementar nessa prtica so normalmente encontrados em qualquer processador. Todos os processadores so constitudos de duas partes bsicas: o caminho de dados (ou bloco operacional) e a parte de controle (ou unidade de controle). O caminho de dados a parte responsvel por levar dados de um componente de armazenamento a outro e de processar (ou modificar) esses dados de alguma forma, seja atravs de uma operao lgica (AND, OR, etc.) ou uma operao aritmtica qualquer. A unidade de controle, por sua vez, a parte do processador responsvel por instruir os componentes que constituem o caminho de dados a executarem suas funes em uma ordem pr-estabelecida. Essa ordem pr-estabelecida a sequncia de aes que caracteriza um processador, ou seja, sua capacidade de executar tarefas encadeadas. Keyword GENERIC Em VHDL, o construto generic permite a criao de estruturas com tamanhos parametrizveis. Por exemplo, as entradas e sadas do multiplicador seguinte tm tamanhos que so definidos pela varivel n:
Figura 1: VHDL - Exemplo de uso do construto generic Componente mult_se_neg com valor default de n=16 bits.
Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrnica Laboratrio de Sistemas Digitais Aulas 11 e 12: Construo de bibliotecas VHDL com componentes parametrizveis.
sd11_e_sd12.docx 2/5 A definio de um generic precisa ser feito na entity do mdulo. A sintaxe : entity generic ( <nome do generic1> : <tipo do generic1> := <valor default>; <nome do generic2> : <tipo do generic2> := <valor default>; ); O tipo do generic pode ser natural ou integer, por exemplo. O generic pode ser usado na definio do tamanho de um std_logic_vector. Dessa forma, estruturas aritmticas podem ser usadas. Por exemplo, as sentenas seguintes definem o sinal teste1 com o tamanho de n bits e o sinal teste2 com o tamanho de 2 n bits (** = elevado a). signal teste1 : std_logic_vector (n-1 downto 0); signal teste2 : std_logic_vector (2**n-1 downto 0); Em um projeto hierrquico os generic de vrios mdulos podem ser conectados. Isso feito pelo construto generic map. Por exemplo, o CPLD EMP3064ALC44-10 existente no kit Exsto no comporta um multiplicador de 16 bits como estabelece o valor default de n=16 na rotina mult_se_neg mostrada na Figura 1. Mas podemos instruir o compilador para usar um valor diferente do default, digamos gen=4 bits como mostra o exemplo a seguir (Figura 2).
Figura 2: Exemplo de sobreposio do parmetro default n=16 bits por gen=4 bits no uso do componente mutl_se_neg pela entity Projeto.
Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrnica Laboratrio de Sistemas Digitais Aulas 11 e 12: Construo de bibliotecas VHDL com componentes parametrizveis.
sd11_e_sd12.docx 3/5 Neste exemplo, o generic gen do mdulo projeto conecta-se com o generic n do mdulo mult_se_neg de tal forma que n para a instncia instancia_mult1 do componente mult_se_neg assume o valor contido em gen, i.e. instancia_mult1 tem efetivamente 4 bits (e no 16 bits, que seria seu valor default caso a sentea generic fosse omitida), como mostra a Figura 3 a seguir. Note que a arquitetura para o componente mult_se_neg constante da Figura 1 testa o valor da multiplicao e s o coloca na sada se este for negativo (bit mais significativo em 1 quando usamos aritmtica em complemento de dois). Veja na Figura 3-a que a realizao prtica desta arquitetura no CPLD usa o bit mais significativo para habilitar os latches (a variable temp[7] vai nas entradas ENABLE dos latches ). No caso da sada incondicional (com a linha do else no comentada), temos a sada ligada direto no multiplicador (Figura 3-b).
(a)
(b) Figura 3: Diferena entre as implementaes sem e com o else do componente mult_se_neg implementado na Figura 1, respectivamente letras (a) e (b) acima. A arquitetura para o componente que testa o valor negativo usa o bit mais significativo para habilitar os latches (temp[7] vai nas entradas ENA dos latches ). No caso da sada incondicional (com a linha do else ativa), temos apenas o multiplicador, sem inferncia de latches.
Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrnica Laboratrio de Sistemas Digitais Aulas 11 e 12: Construo de bibliotecas VHDL com componentes parametrizveis.
sd11_e_sd12.docx 4/5 TAREFAS QUE DEVERO SER FEITAS ANTES DO DIA DA AULA (PR-RELATRIO) 1. Estude os comandos em VHDL mais apropriados para descrio de componentes parametrizveis e gerao de pacotes de componentes. GENERIC, GENERATE e PACKAGE. 2. Estude no captulo 4 do livro de Sistemas Digitais do Frank Vahid o funcionamento dos seguintes componentes: a. Registrador de carga paralela; b. Registrador de deslocamento (sequencial); c. Somadores (ripple carry); d. Deslocadores (combinacional); e. Comparadores de igualdade e de magnitude; f. Contadores Ascendentes / Descendentes; g. Temporizadores. h. Banco de Registradores 3. Implemente em VHDL cada um dos componentes acima de maneira a formar uma biblioteca, onde eles possam ser reutilizados em um projeto de um processador dedicado com capacidade de processamento de um nmero qualquer de bits. Em outras palavras, escreva um componente em VHDL de forma parametrizvel. Valide cada um dos componentes por meio de simulao temporal. ATIVIDADES NO LABORATRIO: Valide cada um dos componentes desenvolvidos no kit XD301. ESCLARECIMENTOS SOBRE BIBLIOTECAS (LIBRARIES) NO QUARTUS II: Cada vez que se compila um package ele acrescentado biblioteca work, sendo necessrio somente fazer a declarao de "use.work.nome_do_package.all". A condio default jogar todas as design units para a biblioteca work. Voc pode manter assim ou ento acrescentar uma diretiva para jog-las para um outro arquivo, o que especfico da ferramenta que est usando. Veja abaixo como isso feito no Quartus II. O texto na caixa mostrada na prxima pgina foi extrado do Help do Quartus II e diz como gerar uma library com o nome que voc escolher (ao invs de jogar tudo na library "work"). A Altera tambm recomenda que toda clusula "use" seja precedida de uma clusula "library" correspondente. Em assignments > settings > libraries voc especifica a localizao dos arquivos de library que ir usar:
Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrnica Laboratrio de Sistemas Digitais Aulas 11 e 12: Construo de bibliotecas VHDL com componentes parametrizveis.
sd11_e_sd12.docx 5/5 Texto extrado do Help do Quartus II: A VHDL library stores analyzed design units. Every design unit in a VHDL design must be compiled into a library, and two design units with the same name cannot be compiled into the same library. For example, if a design contains declares two packages with the same name, it must compile the packages into different libraries. By default, the Quartus II software compiles all VHDL files into the work library. If a VHDL design refers to a library that does not exist, or if the library does not contain a referenced design unit, the software searches for the design unit in the work library. This behavior allows the Quartus II software to compile most VHDL designs with minimal setup.
Note: The Quartus II software cannot process VHDL designs with two or more entities of the same name even if the entities are compiled into separate custom libraries. Prior to analyzing the sources files in a design, you may specify a different destination library for the design units in a source file. You can use one of the following three methods, described in more detail below: In the File Properties dialog box in the Quartus II graphical user interface (GUI) In the Quartus Settings File (.qsf) or with a Tcl command In the VHDL file itself, using a synthesis directive When the Quartus II Compiler analyzes the file (in a flow that requires analysis of the source file), it stores the analyzed design units in the file's destination library. To specify a destination library name in the Quartus II GUI: To specify a library name in the GUI for one of your VHDL files, follow these steps: 1. In the File name list on the Files page of the Settings dialog box, select the appropriate VHDL file. 2. Click Properties. 3. In the Type list, select VHDL (if it is not already selected). 4. In the Library box, type the library name or select an existing library name To specify a destination library name in the QSF or with Tcl: In the QSF or through Tcl commands, you can specify the VHDL library name with the -library argument associated with the VHDL_FILE assignment. For example, the following QSF or Tcl assignment specifies that the Quartus II software should analyze my_file.vhd and store its contents (design units) in the VHDL library my_lib. set_global_assignment VHDL_FILE my_file.vhd -library my_lib To specify a destination library name in your VHDL file: You can use the library synthesis directive to specify a library name in your VHDL source file. This directive takes a single string argument: the name of the destination library. Specify the library directive in a VHDL comment prior to the context clause for a primary design unit (a package declaration, an entity declaration, or a configuration), using one of the supported keywords for synthesis directives, i.e. synthesis, pragma, synopsys, or exemplar. The library directive overrides the default destination library work, the Library setting specified for the current file through the GUI, QSF or Tcl, and any prior library directive in the current file. The directive remains effective until the end of the file or the next library synthesis directive. The following is an example using the library synthesis directive to create a library called my_lib that contains the design unit my_entity. -- synthesis library my_lib library ieee; use ieee.std_logic_1164.all; entity my_entity(...) end entity my_entity;
Note: Specifying the library name through the GUI, QSF or Tcl allows you to specify only a single destination library for all the design units in a given source file. This synthesis directive allows you to change the destination VHDL library within a source file, providing the option of organizing the design units in a single file into different libraries, rather than just a single library. The Quartus II software gives an error if you use the library directive in the middle of a design unit.