Herramientas Personales

Clase del martes 18 de febrero de 2014

por Martín Guillén, Sergio Última modificación 25/02/2014 13:29

(Los deberes para la siguiente clase son los "deberes por defecto", es decir, lo lógico cuando no se manda una tarea más específica: "estudiarse el PDF con las transparencias del tema". Como además ya hemos visto bastante teoría y la siguiente clase es de problemas, otra tarea lógica es. "intentar hacer los ejercicios del boletín")

 

 

En esta tercera clase se trataron las siguientes cuestiones:

  • Tuve otra vez que recordar que la hora de comienzo de las clases es la hora de comienzo de las clases. Hay que llegar a clase unos minutos antes para que podamos empezar a esa hora. Este año, los "minutos de cortesía" que se suelen permitir para que los alumnos puedan moverse de una aula a otra ya están considerandos en el horario oficial de la escuela, así que vuelvo a repetir que no se permitirá llegar a clase después de que ésta haya comenzado.
  • Se ha publicado el calendario con las fechas de las prácticas. El calendario original que se publicó tenía algunos errores bastante obvios que ya han sido subsanados. Está disponible, junto con más material específico del grupo 3 dentro del apartado correspondiente en la web de la asignatura.
  • Seguimos desarrollando el primer tema de la asignatura. La primera parte de la clase la dedicamos a explicar la técnica de descripción estructural.
  1. La técnica de descripción estructural se basa en describir un módulo Verilog como una serie de instancias de otros módulos Verilog, conectadas entre sí.
  2. Una instancia de un módulo es una copia funcional de ese módulo. Podemos decir que los módulos son una descripción no materializada de un circuito, mientras que una instancia es algo real, material, que tiene un nombre concreto que la disdistingue de otras instancias y que además tiene sus entradas y salidas conectadas a otros elementos.
  3. Para ilustrar esta técnica nos basamos en un ejemplo. Este módulo de ejemplo constaba de instancias de otros módulos Verilog que habíamos definido previamente (un MUX y un DEC) y también instancias de otros módulos predefinidos en Verilog (puertas lógicas básicas como la and, or, not, etc).
  4. Se explicó la forma de "instanciar" un módulo y las dos formas de describir las conexiones existentes entre las entradas y salidas de la instancia con el resto de elementos del módulo: Son dos formas las que tenemos disponibles, "conexión nombrada" y "conexión posicional". En ambas, por regla general, vamos a necesitar usar cables auxiliares (los "wire") que nos permitan conectarlo todo adecuadamente.
  5. La conexión nombrada es la forma recomendada pues es mucho menos propensa a errores que la otra técnica, ya que estamos obligados a nombrar cada una de las entradas y salidas y especificar a qué la conectamos. Se comentaron los errores comunes que se suelen cometer al indicar a qué conectamos las entradas y salidas de la instancia. Es frecuente intentar conectarlas a "elementos inexistentes", lo cual no suele dar errores sintácticos sino queda errores funcionales más difíciles de detectar. Destacar que no es posible conectar directamente una entrada (o salida) de una instancia a una salida (o entrada) de otra instancia, siendo obligatorio el uso de un "wire" que hayamos declarado previamente.
  6. La conexión posicional es un metodo de conectar las entradas y salidas de una instancia en el que nos ahorramos tene que saber cómo se llaman las entradas y salidas del mismo, pero por el contrario, nos exige conocer el orden exacto y la posición que ocupan dichas entradas y salidas en la declaración del módulo. Esto facilita mucho que cometamos errores y resulta que la mayoría de las veces serán errores que no detectaremos hasta más adelante, cuendo probemos el circuito y veamos que no funciona correctamente. Siempre que podamos evitar hacer uso de la "conexión posicional" debemos evitarla.
  7. Un caso en el que no podremos evitar el uso de la conexión posicional será cuando creemos instancias de las puertas lógicas básicas que vienen predefinidas en Verilog. Las puertas básicas son módulos que podemos instanciar pero de los cuales ignoramos los nombres de las entradas y las salidas, pero por el contrario, conocemos la posición de las mismas. Lo habitual es que sean módulos con una sola salida de un bit que ocupa la primera posición y varias entradas de un bit, todas del mismo tipo, que vienen a continuación.
    • Por ejemplo:

Una instancia de una puerta and de dos entradas y una puerta or de tres entradas se describen así:

and una_instancia(salida_and, entrada_A, entrada_B);

or otra_instancia(salida_or, entrada_C, entrada_D, entrada_E);

  1. Durante el desarrollo de un ejemplo de un módulo descrito de forma estructural, vimos que cuando las instancias tienen puertos de entrada o salida de varios bits de anchura puede ocurrir que no todos los bits de un puerto se conecten a un mismo sitio. Esto obliga a utilizar el operador de concatenación "{" y "}" para indicar a qué se conecta cada uno de los bits.
    • Por ejemplo:

De un modulo que hayamos definido como

module decodificador ( input wire [1:0] entrada, output wire [3:0] salida );

podríamos crear una instancia de la siguiente forma

decodificador una_instancia( .entrada( { cable1, cable2 } ), .salida( { cable3, cable4, cable_de_dos_bits } ) );

  • La parte final de la clase la dedicamos a explicar la creación de módulos verilog dedicados a probar otros módulos. Estos módulos de prueba se denominan "testbenchs".
  1. Todo lo que explicamos está descrito con mucho detalle en el PDF del tema de Verilog.
  2. Durante la clase nos limitamos a introducir el tema, para dejar clara la idea de lo que se pretende hacer con un testbench, pero es imprescindible que el alumno se lea con detenimiento el material disponible y se lo estudie, como es normal.
  3. En primer lugar se explicó la estructura general de un testbench, para cualquier tipo de circuito.
  4. Luego se explicó la forma de hacer un testbench de un circuito combinacional, que es bastante "mecánica" y, por tanto, sencilla. Basta con fijarse en el umero de bits de entrada del circuito y darle todos los valores posibles para luego comprobar si las salidas toman el valor esperado.
  5. Por último se explicó la forma de desarrollar un testbench de un circuito secuelcial. Estoya es más compicado pues no hay una forma única de hacerlo. Cada circuito secuencial es capaz de hacer una sere de operaciones y el objetivo del testbench debe ser comprobar que el circuito lleva a cabo correctamente cada operación cuando se le suministran las entradas adecuadas. En este tipo de testbench es importante saber genera correctamente la señal de reloj y tambien utilizar sentencias "de espera" relacionadas con el mismo. Todo ello, insistimos, está descrito con gran detalle en la parte dedicada a los testbench del PDF del tema de Verilog.
Acciones de Documento