Está en la página 1de 37

Circuitos combinacionales vs.

secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

VHDL para Diseño Digital en CPLDs y FPGAs


Construcciones básicas de modelado: sentencias
concurrentes

Jorge Scandaliaris

2012-06-11

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Circuitos combinacionales vs. secuenciales

Circuitos combinacionales:
No tiene estado interno

La salida es función sólo de las entradas

No hay lazos cerrados, ni latches, ni flip-flops

Circuitos secuenciales
Tienen estado interno

La salida es función de las entradas y del estado interno

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sentencia de asignación simple de señal

Caso especial de la sentencia de asignación condicional de señal


Sintaxis:
nombre_de_señal <= forma_de_onda_proyectada;

Ejemplo:
y <= a + b + 1 after 10 ns;

Información temporal ignorada en la síntesis, se utilizan


retardos-δ:
nombre_de_señal <= expresión_de_valor;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sentencia de asignación simple de señal

Ejemplos
1 status <= ’1’
par <= (p1 and p2) or (p3 or p4);
3 arith_result <= a + b + c -1;

Implementación de la ultima sentencia

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sentencia de asignación de señal con lazo de


realimentación

Una señal aparece en ambos lados de la sentencia de


asignación concurrente
Ejemplo:

q <= ((not q) and (not en) or (d and en));

Sintácticamente correcta

Forma un lazo cerrado de realimentación

Debe ser evitada

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sintaxis

Sintaxis simplificada:
1 nombre_de_señal <= expr_valor_1 when expr_booleana_1 else
expr_valor_2 when expr_booleana_2 else
3 expr_valor_3 when expr_booleana_3 else
...
5 expr_valor_n

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: multiplexor de 4 a 1
Tabla de función:
entrada salida
s x
00 a
01 b
10 c
11 d

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: multiplexor de 4 a 1
1 library ieee;
use ieee.std_logic_1164.all;
3 entity mux4 is
port(
5 a,b,c,d: in std_logic_vector(7 downto 0);
s: in std_logic_vector(1 downto 0);
7 x: out std_logic_vector(7 downto 0)
);
9 end mux4;

11 architecture cond_arch of mux4 is


begin
13 x <= a when (s="00") else
b when (s="01") else
15 c when (s="10") else
d;
17 end cond_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: decodificador binario de 2 a 4


Tabla de función:
entrada salida
s x
00 0001
01 0010
10 0100
11 1000

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: decodificador binario de 2 a 4


1 library ieee;
use ieee.std_logic_1164.all;
3 entity decoder4 is
port(
5 s: in std_logic_vector(1 downto 0);
x: out std_logic_vector(3 downto 0)
7 );
end decoder4;
9
architecture cond_arch of decoder4 is
11 begin
x <= "0001" when (s="00") else
13 "0010" when (s="01") else
"0100" when (s="10") else
15 "1000";
end cond_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: Codificador con prioridad de 4 a 2

Tabla de función:

entrada salida
r código activo
1--- 11 1
01-- 10 1
001- 01 1
0001 00 1
0000 00 0

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: codificador con prioridad de 4 a 2


library ieee;
2 use ieee.std_logic_1164.all;
entity prio_encoder42 is
4 port(
r: in std_logic_vector(3 downto 0);
6 code: out std_logic_vector(1 downto 0);
active: out std_logic
8 );
end prio_encoder42;
10
architecture cond_arch of prio_encoder42 is
12 begin
code <= "11" when (r(3)=’1’) else
14 "10" when (r(2)=’1’) else
"01" when (r(1)=’1’) else
16 "00";
active <= r(3) or r(2) or r(1) or r(0);
18 end cond_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Implementación conceptual

Sintaxis:
nombre_de_señal <=
2 expr_valor_1 when expr_booleana_1 else
expr_valor_2 when expr_booleana_2 else
4 ...
expr_valor_n;

Evaluación en orden descendente

Realizada mediante una “red de direccionamiento con prioridad”

La expresión superior tiene mayor prioridad

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Multiplexor “abstracto” de 2 a 1

sel es de tipo booleano

Si sel es verdadero, la entrada del puerto “T” se conecta a la


salida

Si sel es falso, las entrada del puerto “F” se conecta a la salida

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Implementación conceptual
1 nombre_de_señal <= expr_valor_1 when expr_booleana_1 else
expr_valor_2;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Implementación conceptual
nombre_de_señal <= expr_valor_1 when expr_booleana_1 else
2 expr_valor_2 when expr_booleana_2 else
expr_valor_3 when expr_booleana_3 else
4 expr_valor_4;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Implementación conceptual

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado: multiplexor de 2 a 1

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado


...
2 signal a, b, y: std_logic;
...
4 y <= ’0’ when a=b else
’1’;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado


1 signal a, b, c, x, y, r: std_logic;
...
3 r <= a when x=y else
b when x>y else
5 c;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado


1 ...
signal a, b, r: unsigned(7 downto 0);
3 signal x, y: unsigned(3 downto 0);
...
5 r <= a+b when x+y>1 else
a-b-1 when x>z and y!=0 else
7 a+1;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sintaxis

Sintaxis simplificada
1 with expr_seleccion select
nombre_de_señal <= expr_valor_1 when opcion_1,
3 expr_valor_2 when opcion_2,
...
5 expr_valor_n when opcion_n;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Sintaxis

expr_seleccion
Arreglo unidimensional de tipo discreto

Con un número finito de valores posibles

opcion_i
Un valor del tipo de dato de expr_seleccion

Las opciones deben ser


Mutualmente exclusivas

Incluir todas las posibilidades de expr_seleccion

Se puede usar others como la última opcion_i

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: multiplexor de 4 a 1
1 architecture sel_arch of mux4 is
begin
3 with s select
x <= a when "00",
5 b when "01",
b when "10",
7 d when others;
end sel_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: decodificador binario de 2 a 4


architecture sel_arch of decoder4 is
2 begin
with s select
4 x <= "0001" when "00",
"0010" when "01",
6 "0100" when "10",
"1000" when others;
8 end sel_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo: codificador con prioridad de 4 a 2


architecture sel_arch of prio_encoder42 is
2 begin
with r select
4 code <= "11" when "1000"|"1001"|"1010"|"1011"|
"1100"|"1101"|"1110"|"1111",
6 "10" when "0100"|"0101"|"0110"|"0111",
"01" when "0010"|"0011",
8 "00" when others;
active <= r(3) or r(2) or r(1) or r(0);
10 end sel_arch;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Implementación conceptual
Basada en un circuito
multiplexor
Multiplexor abstracto de
(k+1) a 1
sel puede tomar (k+1)
valores: c0, c1, c2, ...,
ck

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación conceptual

expr_seleccion puede tomar 5 valores: c0, c1, c2, c3 y c4


with expr_seleccion select
2 sig <= expr_valor_0 when c0,
expr_valor_1 when c1,
4 expr_valor_n when others;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación conceptual

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado


Multiplexor de 4
a1

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Ejemplo de implementación detallado


signal a, b, r: unsigned(7 downto 0);
2 signal s: std_logic_vector(1 downto 0);
...
4 with s select
r <= a+1 when "11",
6 a-b-1 when "10",
a+b when others;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

De sentencia con selección a sentencia condicional


1 with sel select
sig <= expr_valor_0 when c0,
3 expr_valor_1 when c1 | c3 | c5,
expr_valor_2 when c2 | c4,
5 expr_valor_n when others;

7 sig <=
expr_valor_0 when (sel=c0) else
9 expr_valor_1 when (sel=c1) or (sel=c3) or (sel=c5) else
expr_valor_2 when (sel=c2) or (sel=c4) else
11 expr_valor_n;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

De sentencia condicional a sentencia con selección


1 sig <= expr_valor_0 when expr_booleana 0 else
expr_valor_1 when expr_booleana_1 else
3 expr_valor_2 when expr_booleana_2 esle
expr_valor_n;
5
sel(2) <= ’1’ when expr_booleana_0 else ’0’;
7 sel(1) <= ’1’ when expr_booleana_1 else ’0’;
sel(0) <= ’1’ when expr_booleana_2 else ’0’;
9 with sel select
sig <= expr_valor_0 when "100" | "101" | "110" | "111",
11 expr_valor_1 when "010" | "011",
expr_valor_2 when "001",
13 expr_valor_n when others;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Comparación

Sentencia de asignación con selección de señal:


Bien adaptada para circuitos descriptos por una tabla funcional

Ejemplos: decodificador binario, multiplexor

Menos adaptada cuando un patrón de entrada recibe un


tratamiento preferencial

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Comparación

Sentencia de asignación condicional de señal:


Bien adaptada para circuitos que necesitan dar trato preferencial
la ciertas condiciones o priorizar las operaciones

Ejemplo: codificador con prioridad

Puede manejar condiciones complicadas:


1 pc_next <= pc_reg + offset when (state=jump and a=b) else
pc_reg + 1 when (state=skip and flag=’1’) else
3 ...

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs


Circuitos combinacionales vs. secuenciales
Sentencia de asignación simple de señal
Sentencia de asignación condicional de señal
Sentencia de asignación con selección de señal
Sentencia de asignación condicional vs. sentencia con selección de señal

Comparación

Sentencia de asignación condicional de señal:


Puede “sobre-especificar” en casos de circuitos basados en una
tabla funcional

Ejemplo: multiplexor (se da prioridad a las condiciones en la


primera clausula)
1 x <= a when (s="00") else
b when (s="01") else
3 c when (s="10") else
d;
5
x <= c when (s="10") else
7 a when (s="00") else
b when (s="01") else
9 d;

Jorge Scandaliaris VHDL para Diseño Digital en CPLDs y FPGAs

También podría gustarte