• Nenhum resultado encontrado

VHDL – VHSIC HARDWARE DESCRIPTION LANGUAGE

N/A
N/A
Protected

Academic year: 2019

Share "VHDL – VHSIC HARDWARE DESCRIPTION LANGUAGE"

Copied!
11
0
0

Texto

(1)

1

VHDL

VHSIC HARDWARE DESCRIPTION LANGUAGE

Tutorial 02 - VHDL

(2)

2

TUTORIAL02

Objetos e tipos de dados em VHDL

Objetos do VHDL

Antes de descrever os tipos de dados, deve-se descrever brevemente os objetos em VHDL. Um objeto é um item nomeado de um tipo específico, que tem um valor ou seja são meios pelos quais os valores são passados adiante no circuito.

Os objetos em VHDL são CONSTANT, SIGNAL, VARIABLE e FILE. Por exemplo, veremos que PORT são objetos do tipo SIGNAL enquanto GENERIC são objetos do tipo constante.

COSTANT

Como o nome indica é um objeto cujo valor não pode mudar. Uma sintaxe simplificada para a declaração de uma constante é:

CONSTANT constant_name: constant_type := constant_value;

Exemplo:

CONSTANT bits: INTEGER := 16;

Uma CONSTANT pode ser declarada na parte declarativa de uma ENTIDADE, ARCHITECTURE, PACKAGE, PACKAGE BODY, BLOCK, GENERATE, PROCESS, FUNCTION e PROCEDURE

SIGNAL

Um SIGNAL serve para passar valores para dentro e para fora do circuito, bem como entre suas unidades internas. Ou seja, representa interconexões (fios) no circuito. Todas as portas são SIGNALs por defaut.Uma sintaxe simplificada para a declaração de um SIGNAL é:

SIGNALsignal_name: signal_type[:= defaut_value];

Exemplo:

SIGNALenable: BIT :=‘0’;

SIGNAL temp: BIT_VECTOR(3 DOWNTO 0);

(3)

3 VARIABLE

Ao contrário de CONSTANT e SIGNAL, VARIABLE representa apenas informação local e pode só ser vista ou modificada dentro da unidade sequêncial(PROCESS, FUNCTION e PROCEDURE) onde foi criada. Sua atualização é imediata e pode ser utilizada prontamente na próxima linha de código.Uma sintaxe simplificada para a declaração de umaVARIABLE é:

VARIABLEvariable_name:variable_type [:= defaut_value];

Exemplo:

VARIABLEflip: STD_LOGIC := ‘1’;

VARIABLEaddress: STD_LOGIC_VECTOR(0 TO 15);

FILE

O objeto FILE (arquivo) permite armazenar informação de diferentes formatos, os quais podem ser lidos ou escritos posteriormente. Para se declarar um objeto FILE é necessário primeiramente criar o tipo de arquivo.Uma sintaxe simplificada para a declaração de um tipo de arquivo é:

TYPE type_name IS FILE OF type_in _file;

Uma sintaxe simplificada para a declaração de um FILE é:

FILE file_identifier: Type_name [[OPEN open_mode] IS expression]

A parte opcinal OPEN indica o modo de abertura do arquivo (read_mode.

Writ_modeorappend_mode). A parte opcional “expression” pode ser o nome do arquivo.

Exemplo:

TYPE bit_file IS FILE OF BIT;

(4)

4

Tipos de dados em VHDL

A linguagem VHDL permite a utilização de várias formas de representação de dados, sendo cada uma, mais conveniente para uma determinada aplicação.

Os tipos mais comuns são:

BIT

BIT_VECTOR

BOOLEAN

BOOLEAN_VECTOR

INTEGER

NATURAL

POSITIVE

INTEGER_VECTOR

CHARACTER

STRING

STD_LOGIC

STD_LOGIC_VECTOR

SIGNED

UNSIGNED

SFIXED

UFIXED

FLOAT

Como veremos alguns tipos de dados exigem a declaração de pacotes específicos na seção de bibliotecas, para sua utilização.

Estes pacotes presentes nas bibliotecasdescrevem os tipos de dados, operadores (lógicos aritméticos, etc.) e funções de conversão entre tipos de dados.

(5)

5

Tendo em vista que os operadores de dados são citados nas definições mostradas mais adiante, convém lista-los a seguir.

Operadoreslógicos: NOT, AND, NAND, OR, NOR, XOR, XNOR

Operadores aritméticos: +, -, *, /, **, ABS, REM, MOD

Operadores de comparação (relacionais): =, /=, >, >=, <, <=

Operadores de deslocamento (shift): SLL, SRL, SLA, SRA, ROR, ROL

Operador de concatenação &

Descrição dos tipos de dados

BIT

É um dado escalar (um único elemento) sendo formado por um único bit podendo assumir os valores ‘0’ e ’1’. Suporta os operadores lógicos e de comparação.

Exemplo de utilização:

SIGNAL a, x, y: BIT -- 3 sinais de 1 bit

BIT_VECTOR

É um dado vetorial (vários elementos indexados),sendoformado por uma sequência de BITs.Suporta os operadores lógicos, de comparação, de deslocamento (shift) e de concatenação.

Exemplo de utilização:

SIGNAL a, x, y: BIT_VECTOR(7 DOWNTO 0); -- 3 sinais 8 bits

BOOLEAN

É um dado escalar (um único elemento) podendo assumir os valores ‘FALSE’ e ’TRUE’. Suporta os operadores lógicos e de comparação.

Exemplo de utilização:

(6)

6 BOOLEAN_VECTOR

É a forma vetorial de BOOLEAN.Suporta os operadores lógicos, de comparação, de deslocamento (shift) e de concatenação.

Exemplo de utilização:

SIGNAL a, b: BOOLEAN_VECTOR(3 DOWNTO 0); -- 2 sinais de 4 bits

INTEGER

É um dado escalar que representa um número inteiro, podendo assumir valores entre -2147483647 e -2147483647 (32 bits). Suporta os operadores aritméticos e de

comparação.

No código em VHDL é importante especificar uma faixa de valores de utilização (mínimo e máximo), caso contrário o compilador utilizará 32 bits para representa-los.

Exemplo de utilização:

SIGNAL a: INTEGER RANGE 0 TO 15; -- inteiro de 4 bits

SIGNAL b: INTEGER RANGE -15 TO 15; -- inteiro de 5 bits

NATURAL

É um subtipo de INTEGER, representando números inteiros não negativos, incluindo o zero.

POSITIVE

É um subtipo de INTEGER, representando números inteiros positivos, diferentes de zero.

INTEGER_VECTOR

(7)

7 CHARACTER

É um tipo de 256 símbolos de 8 bits cada um (null = “00000000” até ÿ = “11111111”). Suporta apenas operadores de comparação. Os primeiros 128 símbolos correspondem à tabela de códigos ASCII regular.

Exemplo de utilização:

SIGNAL char1, char2: CHARACTER; -- Dois sinais tipo CHARACTER

STRING

É a forma vetorial de CHARACTER.Suporta os operações de comparação, e de concatenação.

Exemplo de utilização:

SIGNAL str: STRING (1 TO 4); -- Uma string de 4 caracteres

STD_LOGIC

É um tipo de dados semelhante ao tipo BIT, porém aceita outros valores além de ‘0’ e ‘1’. O pacote std_logic_1164 define apenas operações lógicas para este tipo de dados. Declarando-se também o pacote std_logic_unsigned ou std_logic_signed são suportadas operações aritméticas de comparação. Os valores aceitos são:

‘0’ Forcinglow (nível baixo) ‘1’ Forcing high (nível alto) ‘L’ Weaklow (nível baixo fraco) ‘H’ Weak high (nível alto fraco) ‘Z’ High impedance (alta impedância) ‘-’ Don’tcare (irrelevante)

‘U’ Uninitialized (não inicializado)

‘X’ Forcingunknown (não determinado)

(8)

8 STD_LOGIC_VECTOR

É a forma vetorial de STD_LOGIC.O pacote std_logic_1164 define apenas operações lógicas para este tipo de dados. Declarando-se também o pacote std_logic_unsigned ou std_logic_signed são suportadas operações aritméticas de comparação, e de deslocamento (shift).

Exemplo de utilização:

SIGNAL a: STD_LOGIC_VECTOR (7 DOWNTO 0); -- 8 bits

SIGNED

Este tipo de dados é definido em dois pacotes destintos (numerc_std e std_logic_arith), sendo o primeiro mais utilizado, pois define as operações aritméticas de comparação, e de deslocamento (shift). É um tipo de dados vetorial baseado no tipo STD_LOGIC, onde o bit mais significativo é utilizado para conter o sinal (‘1’=negativo e ‘0’=positivo) e os demais bits são utilizados para conter o valor do dado.

Exemplo de utilização:

SIGNAL a: SIGNED (7 DOWNTO 0); -- 8 bits sendo um para sinal (+ ou -)

UNSIGNED

Este tipo de dados é definido em dois pacotes destintos (numerc_std e std_logic_arith), sendo o primeiro mais utilizado, pois define as operações aritméticas de comparação, e de deslocamento (shift). É um tipo de dados vetorial baseado no tipo STD_LOGIC, onde todos os bits são utilizados para conter o valor do dado não admitindo valores negativos.

Exemplo de utilização:

SIGNAL a: UNSIGNED (7 DOWNTO 0); -- 8 bits sem sinal

SFIXED

Este tipo de dado permite a representação de número sinalizado com ponto decimal fixo. A declaração é feita utilizando-se uma faixa de bits que atinge índices negativos os quais são utilizados para a parte fracionária do número. O bit mais significativo é utilizado para conter o sinal (‘1’=negativo e ‘0’=positivo). Para utilização deste tipo de dados é necessário declarar a biblioteca ieee_proposed usando os pacotes proposed.fixed_pkg.all

Exemplo de utilização:

(9)

9 UFIXED

Este tipo de dado permite a representação de número não sinalizado com ponto decimal fixo. A declaração é feita utilizando-se uma faixa de bits que atinge índices negativos os quais são utilizados para a parte fracionária do número. Para utilização deste tipo de dados é necessário declarar a biblioteca ieee_proposed usando os pacotes proposed.fixed_pkg.all

Exemplo de utilização:

SIGNAL x: UFIXED (2 DOWNTO -3); -- 6bits “xxx.xxx”

FLOAT

Este tipo de dado permite a representação de número sinalizado com ponto decimal flutuante. A declaração é feita utilizando-se uma faixa de bits que atinge índices negativos os quais são utilizados para a parte fracionária do número (F). O bit mais significativo é utilizado para conter o sinal (‘1’=negativo e ‘0’=positivo)(S).Os demais bits com índice maior ou igual a zero são utilizados para o expoente do valor (E). Para utilização deste tipo de dados é necessário declarar a biblioteca ieee_proposed usando os pacotes proposed.float_pkg.all

O número contido neste tipo de dado é 𝑥= (−1)𝑆∗ 1 +𝐹 ∗2𝐸−𝑁 onde (S) é o sinal (0 ou 1), (F) é a fração , (E) é o expoente e 𝑁=(𝐸𝑚𝑎𝑥 + 1)/2−1 (por exemplo, N = 127 quando o expoente tem 8bits).

Exemplo de utilização:

(10)

10

Categoria Pacote de origem Tipo predefinidos sintetizável

Standard standard BIT

BIT_VECTOR BOOLEAN INTEGER NATURAL POSITIVE CHARACTER STRING

standard (expansão 2008) BOOLEAN VECTOR

INTEGER_VECTOR

numeric_bit_unsigned(2008) (somente operadores para BIT e BV)

Stadardlogic std_logic_1164 STD_(U)LOGIC

STD_(U)LOGIC_VECTOR std_logic_1164(expansão 2008) STD_(U)LOGIC

STD_(U)LOGIC_VECTOR

std_logic_unsigned (somente operadores para SLV)

std_logic_signed (somente operadores para SLV)

numeric_std_unsigned (2008) (somente operadores para SL e SLV) Unsigned e

Signed

numeric_bit UNSIGNED (base = BIT)

SIGNED (base = BIT)

numeric_std UNSIGNED (base = STD_LOGIC)

SIGNED (base = STD_LOGIC)

std_logic_arith UNSIGNED (base = STD_LOGIC)

SIGNED (base = STD_LOGIC) Fixedand

Floating point

fixed_pkg + associatedpackages (2008)

UFIXED SFIXED

float_pkg +assoc. pack(2008) FLOAT

Tarefas:

1. Crie um novo projeto e sintetise o contador de 0 a 9 utilizando sinais do tipo "NATURAL", conforme o código VHDL a seguir. Verifique a simulação e teste o circuito na placa DE1

(11)

Referências

Documentos relacionados

• Quando o navegador não tem suporte ao Javascript, para que conteúdo não seja exibido na forma textual, o script deve vir entre as tags de comentário do HTML. &lt;script Language

Código Descrição Atributo Saldo Anterior D/C Débito Crédito Saldo Final D/C. Este demonstrativo apresenta os dados consolidados da(s)

Nos tempos atuais, ao nos referirmos à profissão docente, ao ser professor, o que pensamos Uma profissão indesejada por muitos, social e economicamente desvalorizada Podemos dizer que

A persuasão comportamental foi exercida através do ensaísmo e do tratadismo de seus adeptos; temas como a relação entre ciências naturais e sociais, o papel da Tradição

Para esse fim, analisou, além do EVTEA, os Termos de Referência (TR) do EVTEA e do EIA da Ferrogrão, o manual para elaboração de EVTEA da empresa pública Valec –

Requiring a realignment of the EVTEA with its ToR, fine-tuning it to include the most relevant socio-environmental components and robust methodologies for assessing Ferrogrão’s impact

Na imagem abai- xo, por exemplo, as dimensões e o posicionamento dos personagens (Tio Sam e Cardoso) traduzem, em linguagem simples, o desnível geopolítico existente entre Brasil

Tais restrições, sendo convencionais, operam efeitos entre o loteador e os que vão construir no bairro, enquanto não colidentes com a legislação urbanística ordenadora da cidade e