Clase - 6 - Código Secuencial en VHDL

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 31

Código secuencial en VHDL [2]

Sistemas Digitales Avanzados

Universidad Técnica Particular de Loja


Prof: Diego Barragán Guerrero

Oct. 2014 - Feb. 2015

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 1 / 39


Introducción

VHDL es por naturaleza concurrente, mas puede contener secciones de


códico secuencial.
El código secuencial se ejecuta dentro de PROCESS, FUNCTION y
PROCEDURES.
Se dará énfasis a PROCESS.
Tener en cuenta que estas estructuras secuenciales son concurrente con
otras secciones de código fuera de estas estructuras.
El código secuencial también se conoce como código comportamental
(behavioral code).
Sentencias secuenciales: IF, WAIT, CASE y LOOP.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 2 / 39


PROCESS

Sección secuencial de VHDL.


Contiene IF, WAIT, CASE o LOOP.
Contiene una lista sensitiva.
El procesos se ejecuta en cada cambio de la señal en la lista sensitiva.
En la parte declarativa del proceso se puede declarar variables.
Los valores iniciales de las variables no son sintetizables.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 3 / 39


DFF con reset ası́ncrono

Código VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--------------------------------------
ENTITY dff IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
--------------------------------------
ARCHITECTURE behavior OF dff IS
BEGIN
PROCESS (clk, rst) BEGIN
IF (rst=’1’) THEN
q <= ’0’;
ELSIF (clk’EVENT AND clk=’1’) THEN
q <= d;
END IF;
END PROCESS;
END behavior;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 4 / 39


DFF con reset ası́ncrono

Figura: Test Bench.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 5 / 39


Tarea

En el Test Bench anterior el valor de ’q’ inicialmente aparece como U (uni-


nitialized) y es mostrado de color naranja, manteniéndose ası́ justo antes
del primer flanco de reloj. Modifique el código precedente para trabajar con
tipos de dato BIT en lugar de STD LOGIC y comente el resultado del valor
’q’ en relación al mostrado en la gráfica anterior.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 6 / 39


Señales y Variables

SIGNAL VARIABLE
Declarada en PACKAGE, ENTITY o Declara en PROCESS.
ARCHITECTURE. Es local.
Es global. Actualización inmediata.
Actualización al finalizar el Asignación con :=
proceso.
Asignación com <=

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 7 / 39


IF
Sentencia usada en PROCESS, FUNCTION o PROCEDURE.
Código VHDL
IF (x<y) THEN temp:="11111111";
ELSIF (x=y AND w=’0’) THEN temp:="11110000";
ELSE temp:=(OTHERS =>’0’);

Ejemplo: contador de un dı́gito.

Figura: Diagrama del contador del ejemplo.


Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 8 / 39
Ejemplo: contador
Código VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------
ENTITY counter IS
PORT (clk : IN STD_LOGIC;
digit : OUT INTEGER RANGE 0 TO 9);
END counter;
---------------------------------------------
ARCHITECTURE counter OF counter IS BEGIN
count: PROCESS(clk)
VARIABLE temp : INTEGER RANGE 0 TO 10;
BEGIN
IF (clk’EVENT AND clk=’1’) THEN temp := temp + 1;
IF (temp=10) THEN temp := 0;
END IF;
END IF;
digit <= temp;
END PROCESS count;
END counter;
Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 9 / 39
Ejemplo: contador

Figura: Test Bench contador.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 10 / 39


Tarea

Modifique el código anterior para usar tipo de dato STD LOGIC VECTOR
y UNSIGNED en lugar de INTEGER. Use tres enfoques: el primero con la
librerı́a numeric std; el segundo con la librerı́a std logic arith y el tercero
con la librerı́a std logic unsigned.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 11 / 39


Ejemplo: Shift Register.

Figura: Shift register

Figura: Animación Shift register [1]


Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 12 / 39
Ejemplo: Shift Register.
LIBRARY ieee; USE ieee.std_logic_1164.all;
--
ENTITY shiftreg IS
GENERIC (n: INTEGER := 4); -- #
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END shiftreg;
--
ARCHITECTURE behavior OF shiftreg IS
SIGNAL internal: STD_LOGIC_VECTOR (n-1 DOWNTO 0);
BEGIN
PROCESS (clk, rst)BEGIN
IF (rst=’1’) THEN
internal <= (OTHERS => ’0’);
ELSIF (clk’EVENT AND clk=’1’) THEN
internal <= d & internal(internal’LEFT DOWNTO 1);
END IF;
END PROCESS;
q <= internal(0);
END behavior;
Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 13 / 39
Ejemplo: Shift Register.

Figura: Test bench.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 14 / 39


CASE

Todas las permutaciones deben ser verificadas.


Permite múltiples asignaciones para cada caso a verificar.

Código VHDL
CASE control IS
WHEN "00" => x<=a; y<=b;
WHEN "01" => x<=b; y<=c;
WHEN OTHERS => x<="0000"; y<="ZZZZ";
END CASE;

Código VHDL
WHEN value -- Un solo valor
WHEN value1 to value2 -- rango, para tipos enumerados
WHEN value1 | value2 |... -- valor 1 O valor 2

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 15 / 39


Ejemplo: DFF con reset ası́ncrono.

Código VHDL
--LIBRARY ieee;
--USE ieee.std_logic_1164.all;
----------------------------------------------
ENTITY dff IS
PORT (d, clk, rst: IN BIT;
q: OUT BIT);
END dff;
----------------------------------------------
ARCHITECTURE dff3 OF dff IS BEGIN
PROCESS (clk, rst) BEGIN
CASE rst IS
WHEN ’1’ => q<=’0’;
WHEN ’0’ =>
IF (clk’EVENT AND clk=’1’) THEN q <= d; END IF;
WHEN OTHERS => NULL; -- No necesario
END CASE;
END PROCESS;
END dff3;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 16 / 39


Ejemplo: DFF con reset ası́ncrono.

Figura: Test bench.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 17 / 39


Tarea

Simular el ejemplo 6.7 del libro de Pedroni, primera edición.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 18 / 39


LOOP.

Loop (bucle) repetido un número fijo de veces. Ambos lı́mites del rango
deben ser estáticos.
Código VHDL
FOR i IN 0 TO 5 LOOP
x(i) <= enable AND w(i+2);
y(0, i) <= w(i);
END LOOP;

Loop repetido hasta que la condición se mantenga.


Código VHDL
WHILE (i < 10) LOOP
WAIT UNTIL clk’EVENT AND clk=’1’;
(other statements)
END LOOP;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 19 / 39


LOOP.

EXIT: usado para finalizar el loop.


Código VHDL
FOR i IN data’RANGE LOOP
CASE data(i) IS
WHEN ’0’ => count:=count+1;
WHEN OTHERS => EXIT;
END CASE;
END LOOP;

SKIP: usado para saltar iteraciones del loop.


Código VHDL
FOR i IN 0 TO 15 LOOP
NEXT WHEN i=skip; -- jumps to next iteration
(...)
END LOOP;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 20 / 39


Ejemplo: Carry Ripple Adder.

Figura: Carry ripple adder.

sj = aj XOR bj XOR cj
cj+1 = (aj AND bj ) OR (aj AND cj ) OR (bj AND cj )

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 21 / 39


Ejemplo: Carry Ripple Adder.

Código VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------
ENTITY adder IS
GENERIC (length : INTEGER := 4);
PORT ( a, b: IN STD_LOGIC_VECTOR (length-1 DOWNTO 0);
cin: IN STD_LOGIC;
s: OUT STD_LOGIC_VECTOR (length-1 DOWNTO 0);
cout: OUT STD_LOGIC);
END adder;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 22 / 39


Ejemplo: Carry Ripple Adder.

Código VHDL
ARCHITECTURE adder OF adder IS BEGIN
PROCESS (a, b, cin)
VARIABLE carry : STD_LOGIC_VECTOR (length DOWNTO 0);
BEGIN
carry(0) := cin;
FOR i IN 0 TO length-1 LOOP
s(i) <= a(i) XOR b(i) XOR carry(i);
carry(i+1) := (a(i) AND b(i)) OR (a(i) AND
carry(i)) OR (b(i) AND carry(i));
END LOOP;
cout <= carry(length);
END PROCESS;
END adder;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 23 / 39


Ejemplo: Carry Ripple Adder.

Figura: Test bench RCA.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 24 / 39


Ejemplo: Simple Barrel Shifter.

Figura: Barrel Shifter.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 25 / 39


Ejemplo: Simple Barrel Shifter.
Código VHDL
LIBRARY ieee; USE ieee.std_logic_1164.all;
---------------------------------------------
ENTITY barrel IS
GENERIC (n: INTEGER := 8);
PORT ( inp: IN STD_LOGIC_VECTOR (n-1 DOWNTO 0);
shift: IN INTEGER RANGE 0 TO 1;
outp: OUT STD_LOGIC_VECTOR (n-1 DOWNTO 0));
END barrel;
---------------------------------------------
ARCHITECTURE RTL OF barrel IS BEGIN
PROCESS (inp, shift) BEGIN
IF (shift=0) THEN outp <= inp;
ELSE outp(0) <= ’0’;
FOR i IN 1 TO inp’HIGH LOOP
outp(i) <= inp(i-1);
END LOOP;
END IF;
END PROCESS;
END RTL;
Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 26 / 39
Ejemplo: Simple Barrel Shifter.

Figura: Test bench.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 27 / 39


Tarea

Simular el ejemplo 6.10 del libro de Pedroni, primera edición. Luego,


modificar el código para que la variable ’zeros’ sea del tipo
STD LOGIC VECTOR.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 28 / 39


CASE versus IF.

Los siguientes códigos implementan el mismo circuito multiplexor.


Puede usar IF o CASE indistintamente.

Código VHDL
---- With IF: --------------
IF (sel="00") THEN x<=a;
ELSIF (sel="01") THEN x<=b;
ELSIF (sel="10") THEN x<=c;
ELSE x<=d;
---- With CASE: ------------
CASE sel IS
WHEN "00" => x<=a;
WHEN "01" => x<=b;
WHEN "10" => x<=c;
WHEN OTHERS => x<=d;
END CASE;

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 29 / 39


CASE versus WHEN.

Figura: Comparación When vs. Case

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 30 / 39


Bibliografı́a

[1] Shift register.


http://goo.gl/fu5vq.
Acceso: 2014-09-16.
[2] V. A. Pedroni.
Circuit Design and Simulation with VHDL.
The MIT Press, 2nd edition, 2010.

Sistemas Digitales Avanzados (UTPL) IET Oct. 2014 - Feb. 2015 31 / 39

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy