1 / 66

Others, soporte para síntesis.

signal Z_BUS: bit_vector (3 downto 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0);. Others, soporte para síntesis.

reuben
Download Presentation

Others, soporte para síntesis.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. signal Z_BUS: bit_vector (3 downto 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0); Others, soporte para síntesis. • Los agregados tienen la habilidad de usar la sentencia others, la cual asignará un valor a todos los otros elementos de un arreglo que no han sido especificados. Finalmente, no todas las herramientas de síntesis soportan el uso de agregados, por lo que puede ser necesario usar concatenación para realizar manipulaciones sobre arreglos. X<= (3=>’1’, 1 =>’0’, others=>B)

  2. Necesidad de mas que el “0” y el “1” • El tipo bit tiene unas limitaciones, puede solo representar el 0 y el 1. En simulación puede ser útil el poder representar otros valores, por ejemplo: desconocido, no inicializado, alta impedancia. Mientras para la síntesis puede ser útil representar una condición: don’t care

  3. High impedance “Z” Logic 0 “0” Logic 1 “1” Un-initialised “U” Unknown “X” Don’t care “-” Lógica de valores múltiples • La idea de una lógica de valores múltiples, o un sistema LVM lleva un tipo de señal enumerado definido por todos los valores, junto con un grupo de funciones que realizan operaciones lógicas tales como: AND y OR sobre objetos de ese tipo.

  4. VDD 0 1 ? 1 0 Output c input c Compuerta inversora NMOS Estática

  5. VDD VDD RONPU H ROFFPD Input=H VDD RONPU L Output=Vdd Output=Vdd ROFFP RONPD =H =L Input=L RONPD RONPU RONPU ROFFPD RONPD + + Compuerta inversora NMOS Estática

  6. VDD 0 1 1 0 Output c input c Compuerta inversora NMOS Estática 0

  7. OBJETOS MANIPULABLES • Los objetos que se pueden manipular en VHDL son: 1 SEÑALES: Los “ports” declarados dentro de una entidad son señales. 2 CONSTANTES: permiten definir valores permanentes 3 VARIABLES: utilizados solamente dentro de los procesos(instrucciones secuénciales). 4 ARCHIVOS (FICHEROS)

  8. Declaraciòn de Objetos La formula de declaraciòn de constantes, variables y señales es: Tipo_de_Objeto Nombre_de_Objeto Tipo_de_Dato:=Valor Inicial Por ejemplo: SIGNAL nodno1: BIT:='1'; VARIABLE var1:BIT; CONST pi: REAL:=3.14159;

  9. Señales • Son objetos que permiten simular la interconexión de componentes dentro de la arquitectura de diseño. • Permiten representar entradas o salidas de entidades.

  10. Señales • X0 y x1 no tienen asignada una terminal en la entidad de diseño (funcionan como un medio de interconexión).

  11. Sintaxis general de una señal signal id {,...} : tipo [:= expresion ]; port ( { id {, ...} : direccion tipo [:= expresion];}] Signal Reloj : std _logic :='0'; signal Comparacion: bit; signal Resultado : integer range 0 to 7; port ( a,b : in integer range 0 to 7; c : out integer range 0 to 7; d : inout std_logic );

  12. Señales • Forma de declarar una señal: signal identificator: tipo: [rango]; Ejemplo: signal vcc: bit: ´1´; signal suma: bit_vector: (3 downto 0);

  13. Señales • las señales pueden declararse en una entidad, en una arquitectura o en un paquete. • si se quiere inicializar una señal hay que indicar un valor en [:=expression] • por ejemplo: signal s: bit:='1'; • de otra manera, el valor es inicializado al valor mas bajo del tipo de variable definido.

  14. Señales • Escalar: signal name(s):=type [range_contraint][:=expression]; • Vectorial: signal name(s): array_type[index_constraint] [:=expression]; • Entidad: port (name(s): direction type [range_constraint][:=expression]);

  15. Señales Ejemplos: • signal count: integer range 1 to 50; (el valor inicial será1) • signal GROUND: BIT:='0'; • signal YS_BUS std_logic_vector (7 downto 0); • port (B,A: in integer range 0 to 9); • signal bogus: bit_vector; (Errónea, no hay dimensión)

  16. Driver de señal • Un conductor (driver) para una señal se define por el proceso que asigna valores a la señal. • Los valores que viajan por los caminos de datos en un tiempo dado están contenidos en dicho conductor, el cual consta de una colección de parejas (tuplas) valor/tiempo llamadas transacciones.

  17. Asignación múltiple o concurrente • Los “conductores” son creados por sentencias de asignación de señales. • Una asignación concurrente de señal dentro de una arquitectura produce un “conductor” para cada asignación de señal. Asignaciones múltiples producirán “conductores” múltiples de señal.

  18. Creación de un driver ARCHITECTURE t1 OF d1 IS BEGIN a <= b AFTER 10 ns ; a <= c AFTER 10 ns ; END t1;

  19. Función de resolución • La señal ´”a” está siendo manejada por dos fuentes, b y c. • Cada asignación concurrente creará un conductor para la señal a, esto no es admitido a menos que se defina una función de resolución (resolved signals). • La forma en que esto se resuelve queda a cargo del diseñador.

  20. Atributos función de las señales S´EVENT Retorna verdadero si ocurrió un evento en S durante el corriente delta, de lo contrario devuelve falso. S´ACTIVE Retorna verdadero si ocurrió una transición en S durante el corriente delta, else falso. S´LAST_EVENT Retorna el tiempo transcurrido desde la transición previa de la señal S. S´LAST_VALUE Retorna el valor previo de S antes del último evento. S´LAST_ACTIVE Retorna el tiempo transcurrido desde la transacción previa de la señal.

  21. type MY_SATE is (RESET, IDLE, RW_CYCLE, INT_CYCLE); … Signal STATE: MY_STATE; Signal TWO_BIT: bit_vector (0 to 1); … STATE<=RESET; STATE<=“00”; STATE<=TWO_BIT; Señales de tipo definido • Habiendo definido el tipo, podemos definir señales de este tipo. Aquí hemos declarado la señal STATE de tipo MY_STATE. Debemos observar las reglas estrictas cuando usemos estas señales: no podemos asignar nada a la señal STATE que no sea del tipo MY_STATE

  22. CONSTANTES Una constante es un objeto que se inicializa a un determinado valor y no puede ser cambiado una vez inicializado. Sintaxis general de una constanteconstant id {,...} : tipo [:= expresion];

  23. Ejemplos Constant Pi: real : =3.1415; constant BitsPalabra : integer :=8; constant NumPalabras : integer :=64; constant NumBits : integer :=BitsPalabras * NumPalabras; constant RetardoAND2 , RetardoOR2 : time := 2 ns

  24. VARIABLES Una variable es un objeto que se inicializa a un determinado valor y a diferencia de una constante su valor puede ser alterado en cualquier instante. Sintaxis general de una variablevariable id {,....} : tipo [expresion];

  25. Ejemplos Variable Indice1, Indice2, Indice3 : integer := 0; variable Comparacion : boolean; variable Resultado : real;

  26. ARCHIVOS (FICHEROS) Permiten comunicar un diseño VHDL con el exterior, el modelo lee y escribe datos persistentes. En el paquete texti o de la biblioteca standar hay tipos de datos y operaciones de lectura/escritura de archivos de texto. VHDL soporta subprogramas para leer y escribir archivos en forma secuencial.

  27. Sintaxis general de un archivofile id {,....} : tipo [is direcciòn “nombre” ;]file id {,....} : tipo [ [ open tipo_acceso] is “nombre”;] Ejemplos file Estimulos : FicheroEnteros open read_mode is “datos.in”; file Salida : FicheroEnteros open write_mode id “datos.out”;

  28. ASIGNACION DE UN VALOR • A una señal se le asigna un valor, en VHDL, por medio de una sentencia de Asignación de señal. • Una Asignación a una señal define un driver sobre esa señal. • Se pueden tener multilples drivers.

  29. DEFINICION DE PUERTOS Señales que relacionan una entidad con otra

  30. Forma genérica de designar un puerto nombre_variable: modo tipo; Ejemplos: puertoa: in bit; puertob: in bit_vector(0 to 7); puertoc: out bit_vector(3 downto 0); puertod: buffer bit; puertoe:inout std_logic;

  31. Modo de Puerto in  Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad y se suele usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de entrada unidireccionales. out Un puerto es de modo out si la información fluye hacia fuera de la entidad. Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al compilador que el estado lógico en el que se encuentra no es leíble. buffer Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional, y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de otra entidad. Una aplicación muy común de este modo es la de salida de un contador, ya que debemos saber la salida en el momento actual para determinar la salida en el momento siguiente. inout Es usado para señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose usar este modo para todos los puertos.

  32. Tipos Nativos para VHDL boolean Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador que da verdadero si los números comparados son iguales y falso si no lo son bit Puede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más usado de los nativos bit_vector Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran, ya que según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es el número más alto o el más bajo del vector, respectivamente.. numero : bit_vector (0 to 7); numero : bit_vector (7 downto 0); integer Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está prácticamente creado para la simulación.

  33. Definir un modelo de comportamiento sintetizable (ARCHITECTURE) • Usando el juego de instrucciones soportado por las herramientas de síntesis architecture archpro of programa is -- Declaración de señales y otros accesorios Begin -- Núcleo del programa End archpro; Para describir una arquitectura podremos usar cuatro estilos Estilo behavioral Estilo dataflow Estilo structural Estilo mixto

  34. Estilo dataflow Estilo behavioral entity compa is port ( a,b: in bit_vector(3 downto 0);igual: out bit );end compa; architecture dataflow1 of compa isbegin   igual<='1' when (a=b) else '0';end dataflow1; architecture dataflow2 of compa isbegin   igual<= not(a(0) xor b(0))andnot(a(1) xor b(1))andnot(a(2) xor b(2))andnot(a(3) xor b(3));end dataflow2; architecture behavioral of compa isbegincomp: process (a, b)  begin   if a= b then    igual<='1';   else    igual<='0';   endif;  endprocess comp;endbehavioral;

  35. Estilo structural Estilo mixto architecture struct of compa issignal x: bit_vector(0 to 3); Component xnor2 Port (e1,e2:in bit; y:out bit); End component; Component and4 Port (e1,e2,e3,e4:in bit; y:out bit); End component; begin u0: xnor2 portmap (a(0),b(0),x(0)); u1: xnor2 portmap (a(1),b(1),x(1)); u2: xnor2 portmap (a(2),b(2),x(2)); u3: xnor2 portmap (a(3),b(3),x(3)); u4: and4 portmap (x(0),x(1),x(2),x(3),igual);end struct;

  36. Estilo de Escritura RTL (Register Transfer Level) Netlist Describe los componentes que posee y las conexiones entre ellos (Estilo Estructural) RTL Describe el comportamiento de cada entidad

  37. CONCEPTO DE TIPO DE DATO • Todos los objetos en VHDL son de un tipo dado. • Un tipo de dato se caracteriza por el conjunto de • valores que puede tomar y los operadores que • se le puede aplicar a un objeto.

  38. TIPO • El tipo define un conjunto de valores y una asignación a esa señal debe ser un valor definido por ese conjunto. • Cuando hacemos una asignación a una señal, los tipos en ambos lados del operador de asignación de señal deben corresponder.

  39. Declaraciòn de tipos de datos Sintaxis general type id is definiciòn_tipo; Ejemplos type DiaMes is range 1 to 31 ; type Dela31 is range 1 to 31; type Orientacion is (norte,sur,este,oeste); Uso constant DiasEnero : DiasMes :=31; variable DiaHoy : DiaMes; signal Direcciòn : Orientacion;

  40. Los tipos deben corresponder • Cuando hacemos una asignaciòn a una señal, • los tipos en ambos lados del operador de • asignaciòn de señal deben corresponder. Ejemplo: • Entity HALFADD is • port (A,B : in bit; • SUM, CARRY : out bit); • end HALFADD;

  41. Tipos predefinidos • Escalares • Enumerados • BOOLEAN,BIT,CHARACTER • Enteros • INTEGER • Físicos • TIME • Flotantes • REAL • Compuestos • Arrays • STRING,BIT_VECTOR

  42. Otros Puntero ACCESS Archivos FILE

  43. TIPO BOOLEAN Este tipo de dato puede tomar un valor falso o verdadero • TRUE • FALSO Cuando se comparan dos valores de tipo boolean el resultado también es de tipo boolean.

  44. TIPO BIT El tipo BIT sirve para modelar niveles lógicos. Conjunto de valores ‘0’ y ‘1’ Operaciones definidas sobre el: • Lógicas: not,and,nand,or,nor,xor y xnor • Comparación: ‘=‘, ‘/=‘,’<‘, ‘<=‘, ‘>’, ‘>=‘ • Concatenación: & type bit is (‘0’, ‘1’)

  45. TIPO CHARACTER Se utiliza para definir un solo carácter. ‘A’ ‘b’ ‘x’

  46. TIPO INTEGER Un tipo integer es un dato cuyo contenido es un valor numerico entero que esta dentro del siguiente rango : 2,147,483,647 a +2,147,483,647. Ejemplos +1 682 -139 +239 TYPE Integer IS 0 TO 255; TYPE index IS RANGE 7 DOWNTO 1;

  47. TIPO TIME El tipo TIME sirve para especificar valores de tiempo en los modelos Se define la unidad básica y las derivadas de ellas. type time is orange -2147483647 to 2147483647 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; min = 60 sec; end units;

  48. TIPO REAL Conocidos también como coma flotante, son los tipos que definen un numero real. Al igual que los enteros se definen mediante la palabra clave RANGE, con la diferencia de que los límites son números reales.

  49. TIPO STRING El tipo string se define como un arreglo de cadenas de caracteres. Ejemplos “error en sincronia” “Hola Mundo”

  50. TIPO BIT_VECTOR El tipo bit_vector es un arreglo de bit: • Permite modelar buses con un solo driver • Solo admite valores ‘0’ y ‘1’ "0101_1001" x"00AF" type bit_vector is array (natural range <>) of bit;

More Related