trabajo VHDL

Anuncio
INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA ELECTRÓNICA
TRABAJO TUTORADO DE VHDL. Primer Cuatrimestre Curso 2005/2006.
OBJETIVOS:
Con este proyecto se pretende que el alumno practique y afiance los conocimientos adquiridos en clase de teoría
sobre descripción de hardware para aplicaciones industriales. El alumno deberá conocer la estructura, formato y estilo del
leguaje de descripción de hardware VHDL.
ESTRUCTURA:
El trabajo será realizado en equipo (máximo tres alumnos). Tanto el enunciado del trabajo, como la división del
mismo serán decisiones a tomar por el equipo. El seguimiento del trabajo se realizará en tres sesiones, cuyos horarios
están publicados en http://www.atc.us.es y a los que los alumnos deben apuntarse a través de dicha página web.
Sesión 1: Propuesta del trabajo por grupo. Herramientas de edición de proyectos VHDL (Xilinx ISE Foundation) y de
Simulación VHDL (ModelSim). (8/Nov/2006 ó 15/Nov/2006)
Los alumnos deben asistir al laboratorio con el equipo consolidado (máximo 3 alumnos), y con una propuesta de
enunciado del trabajo siguiendo las indicaciones del apartado de ‘preparación’ de este enunciado. Defenderán dicha
propuesta ante el profesor.
Exposición y práctica sencilla sobre el manejo de las herramientas de edición y simulación. Usar los códigos VHDL del
anexo 1.
Sesión 2: Revisión: diagrama de bloques, VHDL sistema y simulación. Herramienta de Síntesis VHDL. (22/Nov/2006 ó
29/Nov/2006)
Los alumnos deben asistir al laboratorio con una descripción VHDL de su sistema y un diagrama de bloques de la solución
propuesta. Cada grupo defenderá ante el profesor la solución aportada y comentará y solventará los problemas que se han
presentado con las simulaciones.
Exposición y práctica sencilla sobre el manejo de la herramienta de síntesis VHDL. Cada grupo deberá realizar los mismos
pasos con su proyecto. Realizar la simulación y la síntesis del sistema propuesto en el Anexo 2.
Sesión 3: Revisión estado del trabajo. (22/Nov/2005)
En esta sesión el profesor revisará el estado del trabajo de cada equipo. Será requisito disponer de una versión del VHDL
totalmente operativa tanto del sistema como de la simulación del mismo. Cada grupo mostrará los resultados de la
simulación de su proyecto al profesor. Los alumnos aprovecharán para preguntar y resolver los problemas que han ido
encontrando durante la síntesis.
PREPARACIÓN:
Cada grupo debe pensar en un proyecto para este trabajo tutorado, siendo objeto de evaluación su originalidad. Se
recomienda seguir las siguientes indicaciones:
-
La descripción VHDL debe ser de un hardware sencillo y aplicable a la industria.
Su estructura de control contendrá al menos una máquina de estados.
Su estructura de datos contendrá una parte combinacional (operaciones lógicas) y otra secuencial (registros
y biestables).
- Sólo se usará una señal de reloj (CLK) y un reset asíncrono a nivel alto (RST). Si se necesitan otras
frecuencias de reloj se solventará a través de los enables de los biestables.
Ejemplo: un hardware que conectado a un Microcontrolador, extienda su operabilidad.
MEMORIA:
Se entregará una memoria por equipo, con los siguientes apartados: enunciado del problema, reparto del trabajo,
diagrama de bloques comentado de la solución propuesta, descripción VHDL comentada de la solución, descripción
VHDL comentada de la simulación, resultados de la simulación (cronogramas comentados), comentarios de la síntesis y
datos más relevantes (área ocupada, velocidad máxima), memoria de la evolución del proyecto.
FECHA ENTREGA:
La fecha tope de entrega de las memorias es el día del examen del primer cuatrimestre. Los grupos deberán
entregar firmada la hoja de reparto de nota adjunta, junto con la memoria.
1
ANEXO 1
Código VHDL de un generador de números aleatorios.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity prandom32 is
port (EN: in std_logic;
PCLK: in std_logic;
RSTz: in std_logic;
O: out std_logic_vector (31 downto 0));
end prandom32;
architecture A1 of prandom32 is
signal ran: std_logic_vector (31 downto 0);
begin
BRAN: process (RSTz,PCLK)
begin
if RSTz='0' then
ran <= "00000000000000000000000000000001"; --seed
elsif PCLK'event and PCLK='1' then
if EN='1' then
for i in 31 downto 1 loop
ran(i) <= ran(i-1);
ran(0) <= ran(30) xor ran(2);
end loop;
end if;
end if;
end process;
BOUT: process (ran,RSTz)
begin
O <= ran;
end process;
end A1;
architecture A2 of prandom32 is
signal ran: std_logic_vector (31 downto 0);
begin
process (RSTz,PCLK)
begin
if RSTz='0' then
ran <= "00000000000000000000000000000001"; --seed
elsif PCLK'event and PCLK='1' then
if EN='1' then
for i in 31 downto 1 loop
ran(i) <= ran(i-1);
ran(0) <= ran(31) xor ran(6) xor ran(4) xor ran(2) xor ran(1) xor ran(0);
end loop;
end if;
end if;
end process;
BOUT: process (ran,RSTz)
begin
O <= ran;
end process;
end A2;
Código VHDL de la simulación del generador de números aleatorios.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY testbench IS
END testbench;
ARCHITECTURE behavior OF testbench IS
COMPONENT prandom32
PORT(
EN : IN std_logic;
PCLK : IN std_logic;
RSTz : IN std_logic;
O : OUT std_logic_vector(31 downto 0)
);
END COMPONENT;
SIGNAL
SIGNAL
SIGNAL
SIGNAL
EN : std_logic;
PCLK : std_logic;
RSTz : std_logic;
O : std_logic_vector(31 downto 0);
BEGIN
uut: prandom32 PORT MAP(
);
EN => EN,
PCLK => PCLK,
RSTz => RSTz,
O => O
tb : PROCESS
BEGIN
pclk
wait
pclk
wait
END PROCESS;
<= '0';
for 5 ns;
<= '1';
for 5 ns;
brst: process
begin
rstz <= '0';
wait for 1 us;
rstz <= '1';
wait;
end process;
en <= '1';
END;
2
ANEXO 2
Código VHDL de un sistema simple: Receptor de protocolo RS-232 serie. CLKS es el reloj de 9600 baudios y
CLK el reloj del sistema de 25 MHz.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
-- Lee la linea de recepcion del puerto serie (TX del PC y RX en nuestro receptor) y saca los 8 bits en paralelo dando
-- un pulso en LD para su captura por otro circuito.
-- La senal de salida WS se usa para la sincronizacion del divisor del reloj
entity rx_serie is
Port (CLKS: in std_logic; -- 9600 baudios
CLK: in std_logic; -- 25 MHz
RX: in std_logic;
RSTz: in std_logic;
WS: out std_logic; -- indica si estamos en el estado de espera por bit de start.
LD: out std_logic;
DOUT: out std_logic_vector(7 downto 0));
end rx_serie;
architecture Behavioral of rx_serie is
type t_state is (wait_start,read_data,stop_bit);
signal estado,proximo_estado: t_state;
signal data: std_logic_vector (7 downto 0);
signal cont: integer range 0 to 8;
signal iLD: std_logic;
begin
B_SYNC: process (CLKS,RSTz)
begin
if RSTz='0' then
estado <= wait_start;
cont <= 0;
data <= (others=>'0');
elsif CLKS'event and CLKS='1' then
estado <= proximo_estado;
case estado is
when read_data =>
if cont < 8 then
data(cont)<=RX;
cont<=cont+1;
end if;
when others =>
cont <= 0;
end case;
end if;
end process;
B_ASYN: process (estado,cont,RX,data)
begin
case estado is
when wait_start =>
if RX='0' then proximo_estado <= read_data;
else proximo_estado <= wait_start;
end if;
iLD <= '0';
WS <= '1';
when read_data =>
if cont <7 then proximo_estado <= read_data;
else proximo_estado <= stop_bit;
end if;
iLD <= '0';
WS <= '0';
when stop_bit
=>
if RX='1' then proximo_estado <= wait_start;
else proximo_estado <= read_data;
end if;
iLD <= '1';
WS <= '0';
end case;
end process;
DOUT <= data;
B_LD: process (CLK,RSTz)
variable one: boolean; -- Para dar un pulso de CLK por un pulso de CLKS
begin
if RSTz='0' then
LD <= '0';
one := true;
elsif CLK'event and CLK='1' then
if iLD='1' and one then
LD <= '1';
one := false;
elsif iLD='1' and not one then
LD <='0';
elsif iLD='0' then
one := true;
LD <= '0';
end if;
end if;
end process;
end Behavioral;
3
Código de simulación del sistema anterior.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY sim_rxserie_vhd IS
END sim_rxserie_vhd;
ARCHITECTURE behavior OF sim_rxserie_vhd IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT rx_serie
PORT(
CLKS : IN std_logic;
CLK : IN std_logic;
RX : IN std_logic;
RSTz : IN std_logic;
WS : OUT std_logic;
LD : OUT std_logic;
DOUT : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
--Inputs
SIGNAL CLKS : std_logic := '0';
SIGNAL CLK : std_logic := '0';
SIGNAL RX : std_logic := '0';
SIGNAL RSTz : std_logic := '0';
--Outputs
SIGNAL WS : std_logic;
SIGNAL LD : std_logic;
SIGNAL DOUT : std_logic_vector(7 downto 0);
constant data: std_logic_vector(0 to 7) := "01010101"; -- Dato = 0xAA
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: rx_serie PORT MAP(
CLKS => CLKS,
CLK => CLK,
RX => RX,
RSTz => RSTz,
WS => WS,
);
LD => LD,
DOUT => DOUT
BRST: process
begin
rstz <= '0';
wait for 1 us;
rstz <= '1';
wait;
end process;
BCLK: PROCESS
BEGIN
clk <= '0';
wait for 20 ns;
clk <= '1';
wait for 20 ns;
END PROCESS;
BCLKS: PROCESS
BEGIN
clks <= '0';
wait for 51 us;
clks <= '1';
wait for 51 us;
END PROCESS;
BDATA: process
begin
rx <= '1';
wait until rstz='1';
wait until clks'event and clks='1';
rx <= '0'; -- bit de start
for i in 0 to 7 loop
wait until clks'event and clks='1';
rx <= data(i);
end loop;
wait until clks'event and clks='1';
rx <= '1'; -- bit de stop
wait;
end process;
END;
4
INGENIERÍA TÉCNICA INDUSTRIAL ELECTRÓNICA
INFORMÁTICA INDUSTRIAL
CURSO 2006-2007
TRABAJO TUTORADO DE VHDL.
REPARTO DE CALIFICACIONES ENTRE LOS COMPONENTES DEL GRUPO.
3º INGENIERÍA TÉCNICA INDUSTRIAL, ESPECIALIDAD ELECTRÓNICA.
Los componentes del equipo que ha desarrollado el trabajo titulado .....................................................
...………...................................................................................................................., que ha obtenido una
calificación de ....... puntos, consideran que el reparto de dicha calificación , de acuerdo al reparto del trabajo
que se ha realizado, debe ser la indicada a continuación, estando conformes todos los componentes del equipo.
Nombre y Apellidos
1.....................................................................................................
2.....................................................................................................
3.....................................................................................................
Fdo.................................
Fdo.....................................
Calificación
....................
....................
....................
Fdo.....................................
Sevilla, ...... de .................. de 200…
5
Descargar