Divisor De Voltaje
Entity comp is
Port ( a,b: in bit_vector (1 downto 0);
C: out bit);
end comp;
architecture functional of comp is
begin
compara: process (a,b)
begin
if a=b then
c <= ´1´;
else
c <=´0´;
end if;
end process compara;
end functional;
library ieee;
use ieee.std_logic_1164.all;
entity comp4 is port (
a,b: in std_logic_vector(3downto 0)
x,y,z: out std_logic);
end comp4;
architecture arq_comp4 of comp4 is
begin
process (a,b)
if (a=b) then
x <=´1´;
elsif (a>b) then
y <=´1´
else
z <=´1´
end if;
end process;
end arq_comp4;
Ejemplos de diagramas de maquinas de estadoFunciones y subprogramas
Declaración de funciones y procedimientos
Las declaraciones de estos elementos pueden realizarse en la parte declarativas de las arquitecturas, bloques, paquetes, etc. A continuación, se muestra la estructura de un procedimiento.
PROCEDURE nombre[(parámetros)] IS
[declaraciones]
BEGIN[sentencias]
END [PROCEDURE] [nombre];
La estructura de las funciones corresponden a las siguientes líneas.
[PURE | IMPURE]
FUNCTION nombre[(parámetros)] RETURN tipo IS
[declaraciones]
BEGIN
[sentencias] -- Debe incluir un RETURNEND [FUNCTION] [nombre];
Como ya se explicó, la lista de parámetros es opcional en ambos casos. Estos parámetros se declaran de forma similar a como se hacen los puertos de una entidad.
<nombre del puerto> : <tipo de puerto> <tipo de objeto>
Dependiendo de la estructura que se utilice, funciones o procedimientos, los parámetros tendrán un significado uotro. En las funciones sólo es posible utilizar el tipo de puerto IN, mientras que en los procedimientos pueden usarse los tipos IN, OUT e INOUT. Además, en las funciones el parámetro puede ser CONSTANT o SIGNAL, por defecto es CONSTANT. Por otro lado, en los procedimientos los parámetros de tipo IN son CONSTANT por defecto y VARIABLE para el resto, aunque también es posible utilizar SIGNAL siempreque se declare explícitamente. No se aconseja utilizar señales como parámetros, por los efectos que pueden tener en la ejecución de un programa.
Las funciones PURE o puras devuelven el mismo valor para unos parámetros de entrada determinados. Mientras que una función es IMPURE o impura si para los mismos valores de entrada se devuelve distinto valor. Estas últimas pueden depender de una variableo señal global. Realmente, estas palabras reservadas hacen de comentario, puesto que una función no se hace impura o pura por indicarlo.
Un ejemplo de una función sería el siguiente.
FUNCTION es_uno(din : std_logic_vector(31 downto 0)) RETURN std_logic IS
VARIABLE val : std_logic;
BEGIN
IF din =X"00000001" THEN
val := '1';
ELSE
val := '0';
END IF;
RETURN val;
END es_uno;
Por otro lado, un ejemplo de un procedimiento podría pertenecer a las siguientes líneas.
PROCEDURE es_uno(din : std_logic_vector(31 downto 0)dout : std_logic) IS
BEGIN
IF din = X"00000001" THEN
dout := '1';
ELSE
dout := '0';
END IF;
END es_uno;
En la asignación a la señal de salida se realiza con el operador :=, puesto que no es una señal,...
Regístrate para leer el documento completo.