Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

VHDL Introduction

Una introducción al lenguaje VHDL. Se estudian sus estructuras sintácticas principales: entidades, arquitectura, puertos, señales y operadores.
by

Heiner Castro

on 24 February 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of VHDL Introduction

An introduction to VHDL
La captura en esquemático de sistemas digitales se hace tediosa para diseños complejos y extensos.
Con un HDL se reduce tiempo y costo.
Permite una exploración rápida de diversas alternativas.
Reuso del diseño.

¿Por qué usar Hardware Description Language -HDL-?
Entidades
Puertos
Datos
Arquitecturas
Señales

Elementos Sintácticos de VHDL
Highest precedence first, left to right within same precedence group, use parenthesis to control order.
Unary operators take an operand on the right.
"result same" means the result is the same as the right operand.
Binary operators take an operand on the left and right.
VHDL Operators
library
IEEE
; use
IEEE.std_logic_1164
.all
,
IEEE.numeric_std
.all
;
use
IEEE.std_logic_unsigned
.all
;
entity
nBitAdder
is

generic
(n:
NATURAL
:=8);

Port
(A,B:
in

std_logic_vector
(n-1
downto
0);
Sum:
out

std_logic_vector
(n
downto
0));
end entity
nBitAdder;

Architecture
behavioral
of
nBitAdder
is
Begin
sum <= (‘0’&A) + (‘0’&B);
--add including Carry-out
end
behavioral;
Example: generic adder
VHDL
Shift Operators

sll
shift left logical, logical array sll integer, result same,
X <= Y sll 1;

srl
shift right logical, logical array srl integer, result same
X <= Y srl 2;


sla
shift left arithmetic, logical array sla integer, result same
X <= Y sla 3;
sra
shift right arithmetic, logical array sra integer, result same
X <= Y sra 4;
rol
rotate left, logical array rol integer, result same
X <= Y rol 5;

ror
rotate right, logical array ror integer, result same
X <= Y ror 6;

&
(1) concatenation, array or element & array or element, result array

X <= Y & Z;

Boolean Operators

=
test for equality, result is boolean
X = Y; F <= X = Y;


/=
test for inequality, result is boolean
X /= Y; F <= X /= Y;

<
test for less than, result is boolean
X < Y; F <= X < Y;

<=
test for less than or equal, result is boolean
X <= Y; F <= X <= Y;

>
test for greater than, result is boolean
X > Y; F <= X > Y;

>=
test for greater than or equal, result is boolean
X >= Y; F <= X >= Y;

(1) Precedence priority 12th
VHDL Operators
VHDL -Very High Speed Integrated Circuit Hardware Description Language-
by MSc. Heiner Castro
Es un lenguaje de descripción y modelado de sistemas digitales.

Es una herramienta estándar e independiente. Estándar 1076 y 1164 de IEEE.

La descripción se realiza de una forma independiente de la tecnología a emplear.

Se basa en un alto nivel en la sintaxis (no en abstracción).

Soportado por numerosas herramientas CAD.

VHDL: Historia y Evolución
1980: El departamento de defensa de Estados Unidos inicia el proyecto.

1985: Versión 7.2 en dominio público.

1987: Estándar IEEE 1076 (VHDL 87).

1993: Nueva versión del estándar, VHDL 93.

2000 y 2002 Actualización del estándar IEEE 1076. Cambios menores a la versión 93.

2008-2009. Mayor compatibilidad hacia otros lenguajes (C++) y con mayor posibilidad de diseño de alto nivel.
Hardware Vs. Software
Software
Los lenguajes de programación convencionales están basados en un modelo de operación secuencial.

Los lenguajes de programación convencionales no incluyen la noción del tiempo en sus sentencias.
Hardware
El hardware posee una naturaleza paralela en su funcionamiento.

Las entradas, las salidas y los circuitos mismos dependen del tiempo. 
Los HDLs y el hardware digital
Todos los
Lenguajes de Descripción de Hardware
están definidos para modelar operaciones paralelas o concurrentes.

Todos los
Lenguajes de Descripción de Hardware
incluyen sentencias para emular el tiempo en las descripciones.

Entity
Define la visión externa del dispositivo, interfaz con el entorno.

Permite realizar diseños jerárquicos: puede ser reutilizada por otros diseños manteniendo oculta la implementación concreta del sistema.

entity
ejemplo1
is
    
port
(C:
in

std_logic
;
A,B:
in

std_logic_vector
(3
downto
0);
E:
out

std_logic
;
             F:
out

std_logic_vector
(3
downto
0));
end
ejemplo1;
Ports
in
Los puertos de entrada sólo se pueden leer.

No es permitido asignarles ninguna conexión.
port
: define las entradas y salidas del módulo descrito.
out
Las puertos de salida pueden cambiar y es posible asignarles valores.

No pueden leerse. No es válido usarlas como argumentos.
inout
: describe a un puerto bidireccional, el cual permite operaciones de escritura y lectura.
Data type
Std_logic
Type
Std_logic
:
'1' : Bit 1
'0' : Bit 0
'X' : Unknown
'U' : Uninitialized
'Z' : High impedance
'L' : Driven low weakly
'H' : Driven high weakly
'W' : Weak unknown
'-' : Do not care
Type
bit
'1' : bit 1
'0' : bit 0
Architecture
Sirve para definir la funcionalidad de la entidad que representa.

Siempre está referida a una entidad concreta.

Una misma entidad puede tener diferentes arquitecturas.

architecture
behavioral
of
ejemplo1
is
-- parte declarativa
begin
-- sentencias concurrentes
F <= A -
not
(B) + C;
E <=
not
( A(3)
or
A(2)
or
A(1)
or
A(0) );
end
behavioral;
Architecure: Signals
architecture
behavioral2
of
ejemplo1
is
-- parte declarativa
signal
X :
std_logic_vector
(3
downto
0);
signal
Y :
std_logic_vector
(3
downto
0);

begin

F <= Y + C;
X <=
not
B;
E <= A(3)
nor
A(2)
nor
A(1)
nor
A(0);
Y <= A - X;

end
behavioral2;
Arithmetic Operators

**
exponentiation, numeric ** integer, result numeric
X <= Y**3;

abs
absolute value, abs numeric, result numeric
X <= abs (Y);

*
multiplication, numeric * numeric, result numeric
X <= Y*Z;


/
division, numeric / numeric, result numeric
X <= Y/Z;

mod
modulo, integer mod integer, result integer
X <= Z mod Y
;

rem
remainder, integer rem integer, result integer
X <= Y rem Z
;

+
unary plus, + numeric, result numeric
X <= +Y;

-
unary minus, - numeric, result numeric
X <= -Y;

+
addition, numeric + numeric, result numeric
X <= Y + Z;

-
subtraction, numeric - numeric, result numeric
X <= Y - Z;

source: http://www.cs.umbc.edu/portal/help/VHDL/operator.html
VHDL Operartors
Logic Operators


not
(2) complement, not logic or boolean, result same
X <= not (Y);

and
logical and, logical array or boolean, result is same
X <= Y and Z;

or
logical or, logical array or boolean, result is same
X <= Y or Z;

nand
logical complement of and, logical array or boolean, result is same

X <= Y nand Z;

nor
logical complement of or, logical array or boolean, result is same

X <= Y nor Z;

xor
logical exclusive or, logical array or boolean, result is same
X <= Y xor Z;

xnor
logical complement of exclusive or, logical array or boolean, result is same

X <= Y xnor Z;

(2) Precedence priority 3rd
source: http://www.cs.umbc.edu/portal/help/VHDL/operator.html
Examples: combinational blocks
--Adder/substractor
S <= A + B;

--S, A, B deben ser vectores
R <= A - B;

--R, A, B deben ser vectores, R está en formato C2.
--Multiplier
M <= A*B;

--M, A, B deben ser vectores.
--Tamaño de M = Tamaño de A + Tamaño de B
--Compuertas

-- A, B, C, D y E deben ser del mismo tamaño.

--Si son vectores se implementan todas las compuertas necesarios.
A <= not (B);
C <= D and A;
E <= C or A or B;
B <= A and (C nor D);
--cuidado con el uso de paréntesis
-- sobretodo en las expresiones con negación.

Ejercicicios
1. Sin usar
if

then
o
when else
desarrolle la descripción de hardware de un comparador de igualdad de dos datos de 4 bits.
3. Escriba el código VHDL del circuito que se muestra en la figura. Todos los buses son de 4 bits. No puede usar sentencias
if then
o
when else
, solamente compuertas, sumadores y restadores. Cuidado que las salidas no pueden leerse.
Ejercicios
4. Escriba la descripción de hardware completa en VHDL del sumador de la figura si A, B y S son buses de n bits y los demás puertos son de 1 bit.
5. Desarrolle el código VHDL para un sumador genérico de n bits con datos de entrada con signo en formato complemento a 2.
6. Desarrolle el VHDL para un restador genérico de n bits con datos de entrada sin signo. El resultado de la diferencia debe tener un bit de más donde este el préstamo. El circuito debe tener en cuenta un bit de préstamo de entrada.
7. Desarrolle el VHDL para un restador genérico de n bits con datos de entrada con signo en formato complemento a 2.
2. Repetir el ejercicio anterior para un comparador de igualdad de dos datos de 8 bits. No se puede usar
if then
o
when else
.
¿Es posible hacer este comparador genérico?
Full transcript