Grado en Ingeniería de Tecnologías de Telecomunicación 3er Curso Sistemas Electrónicos Digitales PRACTICA nº 4 Descripción VHDL a nivel algorítmico y síntesis de un procesador dedicado elemental para la caracterización de vectores binarios y su conversión a enteros decimales con aproximación Objetivos: Diseño y síntesis sobre un dispositivo FPGA de un pequeño procesador hardware dedicado a obtener el número de 1s en un número binario, las posiciones más y menos significativa con valor 1, su valor decimal equivalente (asumiendo la representación en binario sin signo) y su valor aproximado con el menor número de 1s según un criterio establecido. Descripción a nivel de algoritmo basada en la utilización de un “procedure”. Descripción estructural basada en módulos descritos a nivel de algoritmo. Síntesis sobre FPGA y comparación de ambas implementaciones. Herramientas CAD:Quartus II©. Instrumentación: -. Material fungible o de laboratorio: -. Se desea realizar un circuito capaz de recibir como entrada un vector (“std_logic_vector”) y dar como salidas: La posición de la componente ‘1’ más significativa del vector; la posición de la componente ‘1’ menos significativa; el numero de ‘1s’; el valor entero considerando al vector como un entero sin signo; el valor aproximado (con un número de ‘1s” reducido) del vector. En el caso de que ninguna de las componentes del vector sea ‘1’, las posiciones de los ‘1s’ más significativo y menos significativo se codificarán como -1. Para obtener el valor aproximado se considerará el siguiente criterio: sea p = 0, 1, 2, …, n-1, la posición de la componente ‘1’ más significativa; si el número de ‘1s’ detrás del más significativo es mayor que p-3, el valor del entero se aproximará por 2p+1, excepto que p sea la posición más significativa del vector o que el vector no tenga ninguna componente ‘1’. Parte 1:Diseño del procesador elemental utilizando para su descripción el lenguaje VHDL. La descripción, de tipo algorítmico, consistirá en una entidad principal que incluya un procedure. El procedure deberá ser declarado y descrito en un package. La caracterización del vector: número y posiciones de los ‘1s’ y valor decimal equivalente deberán ser obtenidos por el procedure, mientras que la entidad principal obtendrá el valor aproximado según el criterio establecido. a) Implementar el procesador elemental. Suponer que el vector es de tamaño 8. 1 de 3 Grado en Ingeniería de Tecnologías de Telecomunicación 3er Curso Sistemas Electrónicos Digitales Una descripción VHDL del package conteniendo la declaración del procedure conforme con lo anterior se muestra en la figura 1: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package paquete_procedu is procedure vector_to_int (signal data_in: in std_logic_vector; data_out: out integer; ms : out std_logic_vector; ls : out std_logic_vector; nu_un : out integer); end paquete_procedu; package body paquete_procedu is procedure vector_to_int (signal data_in: in std_logic_vector; data_out: out integer; ms : out std_logic_vector; ls : out std_logic_vector; nu_un : out integer) is variable a_out : integer; variable m : std_logic_vector (ms'length-1 downto 0); variable l : std_logic_vector (ls'length-1 downto 0); variable nu : integer; begin m := std_logic_vector(to_signed(-1,ms'length)); l := std_logic_vector(to_signed(-1,ls'length)); a_out := 0; nu := 0; for i in (data_in'length-1) downto 0 loop a_out := a_out*2; if (data_in(i) = '1') then a_out := a_out+1; nu := nu+1; if (i > to_integer(signed(m))) then m := std_logic_vector(to_signed(i,ms'length)); end if; if (i < to_integer(unsigned(l)) or to_integer(signed(l)) = -1) then l := std_logic_vector(to_signed(i,ls'length)); end if; end if; end loop; ms := m; ls := l; data_out := a_out; nu_un := nu; end vector_to_int; end paquete_procedu; Figura 1 Una descripción VHDL para la entidad principal (top level) se muestra en la figura 2: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.paquete_procedu.all; entity procedu is generic (long : integer := 8; log2_long : integer := 3); port ( i : in std_logic_vector(long-1 downto 0); pos_ms1 : out std_logic_vector (log2_long downto 0); pos_ls1 : out std_logic_vector (log2_long downto 0); 2 de 3 Grado en Ingeniería de Tecnologías de Telecomunicación 3er Curso Sistemas Electrónicos Digitales o : out integer; o_apr : out integer; num_unos : out integer); end procedu; architecture behave of procedu is begin process (i) variable ms1 : std_logic_vector (log2_long downto 0); variable ls1 : std_logic_vector (log2_long downto 0); variable o_out : integer; variable o_apr_out : integer; variable num_u : integer; begin vector_to_int(i,o_out,ms1,ls1,num_u); if (num_u > to_integer(signed(ms1))-2 and to_integer(signed(ms1)) < long-1 and to_integer(signed(ms1)) > -1) then o_apr_out := 2**(to_integer(signed(ms1))+1); else o_apr_out := o_out; end if; pos_ms1 <= ms1; pos_ls1 <= ls1; o <= o_out; o_apr <= o_apr_out; num_unos <= num_u; end process; end behave; Figura 2 Mediante Quartus II, sintetizar el circuito. Para la compilación y síntesis, seleccionar el chip FPGA Cyclone II EP2C35F672C6 (Assignments -> Settings: Settings fsm_control -> Device: Family √ Cyclone II: Target Device √ Specific Device selected in ‘Available devices’ list. Show in ‘Available devices’ list √ Fastest. Available devices √ EP2C35F672C6). b) Utilizando Quartus II editar un fichero de Formas de Onda para simulación y verificar el correcto funcionamiento del circuito sintetizado. Parte 2:Diseño del procesador dedicado completo utilizando una descripción VHDL jerárquica en 2 niveles, mediante módulos exclusivamente. a) Realizar una descripción estructural del procesador elemental. El módulo del segundo nivel deberá ser descrito a nivel de algoritmo. Como en la Parte 1, el número y posiciones de los ‘1s’ y valor decimal equivalente deberán ser obtenidos por el módulo del segundo nivel, mientras que la entidad principal deberá obtener el valor aproximado según el criterio establecido. Sintetizar el circuito mediante Quartus II. b) Utilizando el mismo fichero de Formas de Onda para simulación generado en la Parte 1, simular mediante Quartus II el circuito sintetizado y verificar su correcto funcionamiento. Comparar los resultados con los obtenidos para el procesador diseñado en la Parte 1. 3 de 3