Estimados/as...
Por este medio quería dejarles mi mas afectuoso saludos de un HERMOSA NAVIDAD y un MUY PROSPERO AÑO NUEVO. Esperando y deseando que el 2015 sea un GraN AÑO para todos Uds. en todo sentido.
El 2014 los he tenido un poco abandonados, pero fue un año bastante complicado, por suerte recien estoy volviendo de un Curso en Costa Rica (saludos a los valientes participantes) que me ha llenado de sugerencias para el blog, así es q esperen novedades pronto....
Muchas Felicidades y los Mejores Augurios !!
Cristian
Acá podrás encontrar todo lo que no encuentras en libros, no se aprende en clases, y nadie sabe donde lo puede buscar. El enfoque práctico de situaciones, problemas o solo curiosidades para los que hacemos desarrollos con VHDL/Verilog-FPGAs/CPLDs.
martes, 23 de diciembre de 2014
miércoles, 22 de octubre de 2014
Diseño Jerárquico - Components / Port Map / Generic Map
Introducción
VHDL es extremadamente potente cuando un gran sistema se divide en sub-sistemas individuales, pequeños, y luego se va creando el sistema mediante la conexión de los componentes individuales. algunos les llaman sub-sistema, sub-componentes, otros sub-modulos, etc. también se le llama diseño top-down a este modo de dividir en partes pequeñas un sistema complejo.
Para poder construir un componente complejo a partir de diversos sub-componentes, VHDL tiene un par de instrucciones que facilitan este proceso: declaración de componente, e instanciacion de componente.
Declaración de Componentes
Para usar un componente ya
definido (entity/architecture), que va pasar a ser un sub-componente, en un nuevo componente es necesario primer
declarar el componente a usar, y luego instanciarlo. Una declaración de
componente simplemente específica la interface de E/S del componente mediante
el uso de los puertos de E/S (I/O ports), y los generics.
-- declaracion de component
component register
generic(bus);
port (
clk: in std_logic;
rst: in std_logic;
d_b: in std_logic_vector(bus-1 downto 0);
reg: out std_logic_vector(bus-1
downto 0)
);
end component;
Nota: cuando la cantidad de declaración de componentes sea un número considerable, es aconsejable declarar los componentes en un paquete. De este modo el código en sí queda mas ordenado, limpio, y fácil de seguir. De todos modos a partir de VHDL-2008 no hace falta la declaración de componentes si la sintaxis de la instanciación de componentes es similar a la que se detalla en el ejemplo debajo.
Instanciación de Componentes
Específica como las E/S del
componente declarado (usando la declaración de componente explicada
previamente), son conectadas en el diseño en que se utiliza el componente.
-- a)instanciacion de componente con
asociacion posicional
U1: register port map (sys_clk, sys_rst, data_bus, reg_data);
-- b) instanciacion
de componente con asociacion por nombre
U1: register port map (
clk => sys_clk,
rst => sys_rst,
d_b => data_bus,
reg => reg_data
rst => sys_rst,
d_b => data_bus,
reg => reg_data
);
-- c) instanciación en VHDL-2008 (sin declaración de componente)
U1: entity work.register port map
(
clk => sys_clk,
rst => sys_rst,
d_b => data_bus,
reg => reg_data
);
d_b => data_bus,
reg => reg_data
);
En la instanciación por posición, la lista de conexiones se hace en el mismo orden en que los puertos fueron declarados en la entidad del componente instanciado.
Se aconseja el uso de asociación por nombre, ya que es menos propensa a errores. En esta caso también se aconseja separar las asociaciones por funcionalidad mas que por si son entradas o salidas.
Ejemplo Sencillo
library
ieee;
use iee.std_logic_1164.all;
entity GATING is
port (A, CK, MR, DIN: in std_logic;
use iee.std_logic_1164.all;
entity GATING is
port (A, CK, MR, DIN: in std_logic;
RDY, CTRLA : out std_logic);
end GATING;
architecture STRUCT of GATING is
component AND2
port( X, Y: in std_logic;
Z : out std_logic);
end
component;
component DFF
port (D, CLOCK: in std_logic;
Q, QBAR : out std_logic);
end
component;
component NOR2
port ( DA, DB: in std_logic;
DZ : out std_logic);
end component;
signal S1, S2: std_logic;
begin
D1: DFF port map (A, CK, S1, S2);
A1: AND2 port
map (x => S2, y=>DIN, Z => CTRLA);
N1: NOR2 port
map (S1, MR, RDY);
end STRUCT;
Salidas no Usadas
En caso en que una salida del componente instanciado no se use cuando se instancia el componente, se debe explícitamente usar la palabra clave open para especificar que esa salida se deja abierta, no se utiliza, por lo que si es posible el sintetizado puede optimizar la lógica correspondiente.Entradas no Usadas
En caso en que una entrada del componente instanciado no se use cuando se instancia el componente, se debe explícitamente fijar un valor lógica a dicha entrada. Para ello se puede asociar la entrada no utilizada con '1' o '0'.
Generic Map
El generic es un valor constante usado para describir
en forma parametrizada una entidad. Ahora bien, diferentes instanciaciones de una misma
entidad pueden tener diferentes valores de generic,
para ello se usa el generic map.
Del mismo modo que antes, en caso de haber mas de un generic se puede usar asociación por posición o asociación por nombre.
Ejemplo:
entity registro_dff
generic(reg_width: positive);
port(
rst,clk: in std_logic;
d, q
: out std_logic_vector(reg_width-1 downto 0);
);
end entity registro_dff;
. . .
architecture
ejemplo of registro_dff is
....
....
end ejemplo;
-- instanciacion de registro_dff en otra entity
....
architecture test of registro_bus is
....
....
end ejemplo;
-- instanciacion de registro_dff en otra entity
constant
width_8 : positive:= 8;
constant
width_16: positive:= 16;
signal d8,
q8 : std_logic_vector(7 downto 0);
signal
d16, q16: std_logic_vector(15 downto
0);
. . .
begin
ff8: registro_dff generic map(width_8)
port map (rst, clk, d8, q8);
ff16: registro_dff generic map(width_16)
port map (rst, clk, d16,
q16);
. . .
end test;
martes, 14 de octubre de 2014
Reduciendo el tiempo de compilación en Quartus II
Por defecto Quartus recompila todos los módulos .vhd/.v del proyecto que se está llevando a cabo, aún cuando lo único que se haya modificado haya sido un punto y coma en uno solo de los módulos .vhd o .v.
Existe una opción que permite recompilar solo los módulos modificados, ahorrando así mucho tiempo de compilación.
Los pasos a seguir para configurar Quartus para minimizar el tiempo de compilación son:
Assignments menu -> Settings
Compilation Process Settings -> Incremental Compilation , click para seleccionar Rapid Recompile opción ON.
Otra opción que permite reducir tiempo de compilación es configurar Quartus para que use todos los núcleos del procesador de la computadora que se esté usando.
Compilation Process Settings -> Parallel Compilation -> Use All Available Processors
Una ultima opción, es decirle a Quartus que use Smart Compilation. Al usar Smart Compilation se saltean alguno de los pasos del Compiler, tales como Analysis y Synthesis (cuando estos no son necesarios para recompilar el diseño).
Compilation Process Settings -> Smart Compilation, click para opción ON.
Nota: estas son soluciones muy simples para diseños simples . Para diseños complejos hay otras opciones y factores a tener en cuenta que los detallaré en otro blog.
viernes, 3 de octubre de 2014
Descanso del Blog y ..... VHDL Guía de Referencia...
Fines del '13 y comienzos del '14 fueron bastantes ocupados para mi ... cursos varios (VHDL Básico/ VHDL Avanzado / NIOS), lugares diversos (Los Reyunos / Parana / Trieste / Buenos Aires) todo esto me mantuvo alejado de este Blog....
PERO, PERO, la frutilla del postre es un pequeño libro de referencia que terminé (finalmente) de escribir- "VHDL Sintax. Guía de Referencia Rápida".
Es una guía bastante práctica que describe las instrucciones de VHDL más frecuentemente usadas para la descripción de un sistema digital que será implementado en un FPGA. Por cada instrucción se presenta en forma detallada la sintaxis, la síntesis resultante, consejos para el mejor uso de la instrucción y algún cuidado o precaución a tener en cuenta cuando se la use.
Por supuesto que está a la venta para quien quiera tenerlo en sus manos.
Por favor contactarme por email para costo, envío, etc, etc...
viernes, 11 de abril de 2014
Correcto uso de Reset en FPGAs y su Codificación en VHDL
Introducción
En esta nota técnica se describirán con
bastante detalle los distintos tipos de reset que se pueden usar en un sistema
digital, sus ventajas y desventajas, y cual de ellos es el más aconsejable a
usar para tener un sistema más confiable.
A pesar de que el reset de un sistema es un
tema crítico, pocas veces se le da la importancia que tiene y es usualmente uno
de los aspectos ignorados en un diseño con FPGA. Un circuito de reset que no se
comporte correctamente resulta directamente en un mal funcionamiento aleatorio
del sistema. Y como ya sabemos, los problemas aleatorios, no repetitivos, de un
sistema son los más difíciles de depurar.
Un diseño puede tener reset sincrónico o
asincrónico. Normalmente la señal de reset es generada externamente al FPGA,
por lo que es una señal asincrónica. Básicamente la señal de reset es una
entrada al sistema que posibilita la correcta inicialización del mismo. Como así
también, pueda forzar al sistema a ese estado inicial cuando haga falta (por
ejemplo, cuando el sistema se ‘cuelga’, o se va de su normal funcionamiento). Esta
señal asincrónica puede sincronizarse a través de un circuito sincronizador,
para de este modo crear una señal de reset sin glitches y por lo menos de un
ciclo de reloj de ancho. Sin embargo, como se detallará en los próximos puntos
el reset totalmente sincrónico puede ocasionar alguna fallas aleatorias, por lo
que se propone otro circuito a fin de hacer el sistema más confiable.
.........................................................................................................................................................
Comencé a escribir este blog, investigué bastante, y me encontré conque no hay algún lugar donde se pueda encontrar lo que yo considero importante de este tema. Por eso armé algo basado en mi experiencia, más una que otra información, y me quedó un blog kilométrico, que no creo conveniente publicar algo tan largo como un blog; por lo que sí te interesa este tema podes bajar el pdf desde este -link-
Espero te sea útil.
Hasta pronto, y gracias por visitar mi blog. . .
Cristian
Etiquetas:
Altera,
constraints,
DLL,
FPGA,
FPGA Editor,
múltiple relojes,
PLL,
Quartus,
reset,
restricciones,
sincronizador,
sintesis,
TimeQuest,
Timing Analyzer,
timing report,
VHDL,
Xilinx
Suscribirse a:
Entradas (Atom)