Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
Aunque es conveniente describir sistemas en forma secuencial, esto no ocurre en la realidad. El Mundo No es Secuencial.
Todos los vehculos se mueven al mismo tiempo, es decir, concurrentemente. Si cada vehculo lo consideramos como un sistema, tenemos sistemas operando concurrentemente. Sin embargo, a un nivel de detalle apropiado, se puede especificar el funcionamiento de cada sistema como una secuencia de acciones o procesos.
Como conclusin, la jerrqua de VHDL permite especificar a los sistemas como Un conjunto de sub-sistemas secuenciales trabajando concurrentemente.
2
CPU
MEMORIA
SISTEMA I/O
FD
HD
CPU : Process Begin . . . . End Process CPU; Memoria : Process Begin . . . . End Process Memoria;
I_O : Process Begin . . . . End Process I_O; FD : Process Begin . . . . End Process FD;
El nivel de detalle en cada proceso depende de lo que est especificando. Por ejemplo, el proceso que especifica el comportamiento del procesador es mas complejo que el de la memoria. Una Arquitectura puede tener ms de un proceso y ellos sern ejecutados en forma concurrente.
Architecture Ejemplo of Microcomputador is Signal DataBus : Bit_Vector (31 downto 0); begin CPU : Process Begin . . . . End Process CPU; Memoria : Process Begin . . . . End Process Memoria; . . . HD : Process Begin . . . . End Process HD; End Architecure Ejemplo;
La ejecucin concurrente de procesos es uno de los conceptos mas confusos en VHDL. La idea sera mas clara si los procesos fueran escritos en columnas :
Architecture SomeArch of SomeEntity is Begin P1 : Process( A, B) Begin Proposicin 1; Proposicin 2; Proposicin 3; End Process P1; P2 : Process ( B, C ) Begin Proposicin 1; Proposicin 2; Proposicin 3; Proposicin 4; End Process P2; P3 : Process ( B ) Begin Proposicin 1; Proposicin 2; End Process P3;
Recordemos que un proceso permanece suspendido mientras no ocurran cambios en las seales que estan en la lista de sensitividad. Cuando se tienen mltiples procesos es lo mismo; si una seal cambia, todos aquellos procesos que la incluyan en su lista de sensitividad sern restaurados y se ejecutarn. Puesto que los procesos no distinguen entre seales generadas externamente (viniendo de su ambiente) y seales generadas internamente (dentro de la arquitectura), un proceso pueder ser activado con un cambio generado en otro proceso.
5
Architecture SomeArch of SomeEntity is Begin P1 : Process( A, B, E) Begin Proposicin 1; Proposicin 2; D <= expresion1; End Process P1; P2 : Process ( A, C ) Begin Proposicin 1; Proposicin 2; Proposicin 3; E <= expresion2; End Process P2; P3 : Process ( B, D ) Begin Proposicin 1; Proposicin 2; End Process P3; End Architecture SomeArch;
Si una seal cambia, el proceso se ejecuta, no importa de donde se gener el cambio. De hecho las seales son el nico medio para intercambiar informacin entre procesos, puesto que las variables son locales a cada proceso y el valor de una variable no puede ser conocido por todos los procesos.
Debido a que las compuertas trabajan en forma concurrente, no es conveniente usar un solo proceso; sin embargo, cada proceso bsicamente consiste de una proposcin.
7
B
X C D
Los asignamientos de seal concurrente pueden combinarse con procesos, dentro de una arquitectura, o bien con otros asignamientos concurrentes. Entonces, si dentro de un proceso aparecen dos o mas asignamientos de seal, estos se ejecutaran secuencialmente. Sin embargo, si las asignaciones no estn dentro de un proceso, su ejecucin ser concurrente.
8
S A
Architecture CondProc of MUX2_TO1 is Begin Process ( A, B , S ) begin if S = 1 then Y <= A; else Y <= B; end if; End process MUX2TO1; End CondProc;
A Y B
10
La principal diferencia entre un asignamiento condicional y una proposicin condicional en la que se realicen asignaciones, es que la primera es exclusica para seales mientras que en la segunda se puede hacer la asignacin de cualquier tipo de objeto: seal o variable.
11
COMPUERTA PROGRAMABLE
Dato1 Salida Dato2 Modo
-- Estructura Case .. Is .. When .. Architecture Gate_Prog of Gate_Prog is Begin process ( Modo, Dato1, Dato2 ) begin case Modo is when 000 => Salida <= Dato1 and Dato2; when 001 => Salida <= Dato1 or Dato2; when 010 => Salida <= Dato1 nand Dato2; when 011 => Salida <= Dato1 nor Dato2; when 100 => Salida <= not Dato1; when 101 => Salida <= not Dato2; when others => Salida <= 0; end case; end process; End Gate_Prog;
-- Asignamiento Seleccionado de una seal Architecture AsSel of Gate_Prog is Begin With Modo select Salida <= Dato1 and Dato2 when 000, Dato1 or Dato2 when 001, Dato1 nand Dato2 when 010, Dato1 nor Dato2 when 011, not Dato1 when 100, not Dato2 when 101, 0 when others; End AsSel;
12
13
Para verificar si ocurri un flanco de subida o bajada en alguna seal (usualmente CLK), es necesario conocer si su valor es 1 o 0 y si acaba de ocurrir un cambio en ella, el atributo event permite conocer la ltima condicin, para la primera se requiere evaluar otras condiciones. If CLKevent AND CLK = 1 AND CLKlast_value = 0 then . . . . -- Detecta un flanco de subida
If CLKevent AND CLK = 0 AND CLKlast_value = 1 then . . . . -- Detecta un flanco de bajada
14
Lazos Universales :
Existen algunos lazos for que por lo general trabajan en un arreglo unidimensional, sin importar cual sea el rango de ese arreglo, para simplificar este tipo de operaciones VHDL introduce los atributos: range y reverse_range su uso simplifica los lazos, ya que el nmero de iteraciones es el mismo que el rango del arreglo. For i in ArrDatosrange loop . . . . For i in ArrDatosreverse_range loop . . . .
Indice del Bit ms significativo :
En la definicin de un arreglo a la izquierda se coloca el ndice del bit ms significativo, en ocasiones se hacen evaluaciones de este bit, y si el arreglo se modifica, tales evaluaciones deben corregirse. Para evitar estas correcciones puede usarse el atributo left por medio del cual se obtiene el ndice del bit ms significativo. AlgunArregloleft
15
If CLKevent AND CLK = 1 AND CLKlast_value = 0 then SetupVilated := SomeSignallast_event < SetupTime;
end if;
Nota:
En el Estandar de VHDL existen mas atributos para las seales u otros objetos (son 36 en total), solo se han comentado los mas populares.
16
Cada uno de estos dispositivos maneja al bus, por lo que cada lnea de seal del bus debe tener mltiples drivers. VHDL puede manipular mltiples drivers puesto que fue creado para trabajar con sistemas digitales. Se debe tener cuidado cuando existan mltiples fuentes para una seal, o bien, establecer un mecanismo que las maneje y coordine.
17
DataBus
. . . <= DataBus;
end Process CPU;
Z <= A; . . . Z <= B;
R G
B
Z G/B
18
Como consecuencia, si solo usamos los tipos bit o bit_vector, no ser posible definir buses compartidos como ocurre en un procesador o algn sistema similar.
Lo que significa que requerimos de otro tipo de datos que maneje ms de 2 valores y cuente con una funcin de resolucin definida para poder mezclar valores distintos.
19
20
Se debe incluir el paquete correspondiente, para ello antes de la descripcin de la entidad habr que incluir las siguientes sentencias:
Library IEEE; Use IEEE.Std_Logic.1164.all;
21
Se pueden aplicar todos los definidos para los tipos bit y bit_vector, es decir: and, nand, or, nor, xor y not. Y debido a que son 9 posibles valores, se tiene una tabal de definicin para cada operacin, por ejemplo para la and:
CONSTANT and_table : stdlogic_table := ( -- ------------------------------------------------------------ U X 0 1 Z W L H -- ------------------------------------------------------------( U, U , 0 , U , U, U, 0, U, U ), -( U, X , 0 , X , X, X, 0, X, X ), -( 0, 0 , 0 , 0 , 0, 0, 0, 0, 0 ), -( U, X , 0 , 1 , X, X, 0, 1, X ), -( U, X , 0 , X , X, X, 0, X, X ), -( U, X , 0 , X , X, X, 0, X, X ), -( 0, 0 , 0 , 0 , 0, 0, 0, 0, 0 ), -( U, X , 0 , 1 , X, X, 0, 1, X ), -( U, X , 0 , X , X, X, 0, X, X ) -); Deteccin de Flancos de subida o bajada:
U X 0 1 Z W L H -
Por conveniencia, para este tipo especial de datos se han incluido dos funciones: falling_edge para detectar los flancos de bajada y rising_edge para los de subida.
22
Como consecuencia de ello, el tipo std_logic es actualmente un de facto de los paquetes de sntesis.
El paquete std_logic_1114 incluye tambin el tipo de datos std_logic_vector el cual es un arreglo unidimensional de std_logic. La tabla de resolucin se muestra a continuacin.
23
U U X 0 1 Z W U U U U U U
X U X X X X X
0 U X 0 X 0 0
1 U X X 1 1 1
Z U X 0 1 Z W
W U X 0 1 W W
L U X 0 1 L W
H U X 0 1 H W
U X X X X X
L
H -
U
U U
X
X X
0
0 X
1
1 X
L
H X
W
W X
L
W X
W
H X
X
X X