DISEÑO DIGITAL CON VHDL, DISEÑO DIGITAL CON VHDL QUE ES VHDL
FaMAF - Leccion Clase VHDL 07
-
Upload
cancu -
Category
Technology
-
view
1.301 -
download
5
Transcript of FaMAF - Leccion Clase VHDL 07
CURSO VHDL LECCIÓN 07
• Lección 7: SEÑALES Y VARIABLES
– 7_1 – CONSTANT
– 7_2 – SIGNAL
– 7_3 – VARIABLE
– 7_4 – SIGNAL VERSUS VARIABLE
– 7_5 – NÚMERO DE REGISTROS
SEÑALES Y VARIABLES 1/3
• DATOS ESTÁTICOS:– CONSTANT Y GENERIC
• DATOS NO ESTÁTICOS:– SIGNAL Y VARIABLE
SEÑALES Y VARIABLES 2/3
• CONSTANT Y SIGNAL:– PUEDEN SER GLOBALES Y PUEDEN SER
USADAS EN EL CÓDIGO SECUENCIAL Y EN EL CÓDIGO CONCURRENTE
SEÑALES Y VARIABLES 3/3
• VARIABLE:– SON LOCALES A LOS CÓDIGOS
SECUENCIALES: PROCEDURES, FUNCTIONS Y PROCESS
Curso VHDL Lección 07
• Lección 7: SEÑALES Y VARIABLES
– 7_1 – CONSTANT
– 7_2 – SIGNAL
– 7_3 – VARIABLE
– 7_4 – SIGNAL VERSUS VARIABLE
– 7_5 – NÚMERO DE REGISTROS
7_1 CONSTANT 1/2
• CONSTANT NOMBRE: TIPO :=VALOR;
• EJEMPLOS:
• constant set_bit: bit := ‘1’;
• constant data_memory: memory
• := ((‘0’, ‘0’, ‘0’, ‘0’),
• (‘0’, ‘0’, ‘0’, ‘0’),
• (‘0’, ‘0’, ‘0’, ‘0’));
7_1 CONSTANT 2/2
• Pueden ser declarados dentro de: PACKAGES,
• ENTITY,
• ARCHITECTURES
Curso VHDL Lección 07
• Lección 7: SEÑALES Y VARIABLES
– 7_1 – CONSTANT
– 7_2 – SIGNAL
– 7_3 – VARIABLE
– 7_4 – SIGNAL VERSUS VARIABLE
– 7_5 – NÚMERO DE REGISTROS
7_2 SIGNAL 1/4
• SIRVEN PARA PASAR VALORES HACIA DENTRO O FUERA DEL SISTEMA O BIEN ENTRE MÓDULOS INTERNOS.
• SON LOS “CABLES”
• LOS PORTS SON SIGNALS
7_2 SIGNAL 2/4
• SIGNAL NOMBRE:
• TYPE [RANGE] [:= INITIAL VALUE];
• signal control: bit := ‘0’;
• signal count: integer range 0 to 100 :=14;
• signal y: std_logic_vector (7 downto 0)
• := “10001001”;
7_2 SIGNALS 3/4
.
7_2 SIGNALS 4/4
.
Curso VHDL Lección 07
• Lección 7: SEÑALES Y VARIABLES
– 7_1 – CONSTANT
– 7_2 – SIGNAL
– 7_3 – VARIABLE
– 7_4 – SIGNAL VERSUS VARIABLE
– 7_5 – NÚMERO DE REGISTROS
7_3 VARIABLE 1/4
• SON LOCALES A LOS FUNCTIONS, PROCESS O PROCEDUREES Y SOLO PUEDEN DECLARARSE DENTRO DE LOS MIMOS, (DENTRO DE CÓDIGO SECUENCIAL)
• NO SE PUEDEN USAR PARA PASAR VALORES HACIA EL EXTERIOR DIRECTAMENTE
7_2 VARIABLE 2/4
• VARIABLE NOMBRE:
• TYPE [RANGE] [:= INITIAL VALUE];
• variable control: bit := ‘0’;
• variable count: integer range 0 to 100 :=14;
• variable y: std_logic_vector (7 downto 0)
• := “10001001”;
7_2 VARIABLE 3/4
. • ---------------------------------------------------------------
• LIBRARY IEEE;
• USE IEEE.STD_LOGIC_1164.ALL;
• ---------------------------------------------------------------
• ENTITY COUNT_ONES IS
• PORT(
• DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0));
• ONES: OUT INTEGER RANGE 0 TO 8);
• END COUNT_ONES;
7_2 VARIABLES 4/4
.
Curso VHDL Lección 07
• Lección 7: SEÑALES Y VARIABLES
– 7_1 – CONSTANT
– 7_2 – SIGNAL
– 7_3 – VARIABLE
– 7_4 – SIGNAL VERSUS VARIABLE
– 7_5 – NÚMERO DE REGISTROS
7_4: Singal Versus Variable 1/15
7_4: Singal Versus Variable 2/15
• --Ejemplo de mal uso de signal y buen uso de variable:
• ---------------------------------------------------• Library ieee;• Use ieee.std_logic_1164.all;
7_4: Singal Versus Variable 3/15
• Entity mux is
• Port(a,b,c,d,s1,s0: in std_logic; y: out std_logic);
• End mux;
• Architecture not_ok of mux is
• signal sel: integer range 0 t0 3;
• Begin
• Process(a,b,c,d,s0,s1)
• begin
• ……..
• end process;
• end not_ok;
7_4: Signal Versus Variable 4/15• Architecture not_ok of mux is
• signal sel: integer range 0 t0 3;
• Begin
• Process(a,b,c,d,s0,s1)
• begin
• sel<=0;
• if(s0=‘1’) then sel<=sel+1; end if;
• if (s1=‘1’) then sel<=sel+2; end if;
• case sel is
• when 0 => y<=a;
• when 1 => y<=b;
• when 2 => y<=c;
• when 3 => y<=d;
• end case;
• end process;
• end not_ok;
7_4: Singal Versus Variable 5/15
• Entity mux is
• Port(a,b,c,d,s1,s0: in std_logic; y: out std_logic);
• End mux;
• Architecture ok of mux is
• Begin
• Process(a,b,c,d,s0,s1)
• variable sel: integer range 0 to 3;
• begin
• ……..
• end process;
• end ok;
7_4: Signal Versus Variable 6/15• Architecture ok of mux is
• Begin
• Process(a,b,c,d,s0,s1)
• variable sel: integer range 0 to 3;
• begin
• sel:=0;
• if(s0=‘1’) then sel<=sel+1; end if;
• if (s1=‘1’) then sel<=sel+2; end if;
• case sel is
• when 0 => y<=a;
• when 1 => y<=b;
• when 2 => y<=c;
• when 3 => y<=d;
• end case;
• end process;
• end ok;
7_4: Singal Versus Variable 7/15
• --Otro Ejemplo comparando el uso de signal y de variable:
• ---------------------------------------------------• Library ieee;• Use ieee.std_logic_1164.all;
7_4: Singal Versus Variable 8/15
7_4: Singal Versus Variable 9/15
7_4: Singal Versus Variable 10/15
7_4: Singal Versus Variable 11/15
7_4: Singal Versus Variable 12/15
• Otro Ejemplo: Explicar porqué funciona bien el código siguiente:
7_4: Singal Versus Variable 13/15
7_4: Singal Versus Variable 14/15
7_4: Singal Versus Variable 15/15
7_4: Singal Versus Variable 14/7
7_4: Singal Versus Variable 14/7