Sunteți pe pagina 1din 5

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 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.

S-ar putea să vă placă și