Introducción Módulo comparador...

23
Introducción Módulo comparador Puertos desconectados Puertas con más de dos entradas MÓDULOS

Transcript of Introducción Módulo comparador...

Introducción Módulo comparador Puertos desconectados Puertas con más de dos entradas

MÓDULOS

l  El diseño modular es un recurso muy usado en informática

l  Consiste en dividir el problema en unidades sencillas llamadas módulos 1.  Autocontenidos: desde dentro de un módulo no se

puede acceder a otro 2.  Interfaces bien definidas por las que se realiza la

comunicación con el exterior 3.  Posibilidad de anidar módulos (construir módulos

dentro de otros)

INTRODUCCIÓN

¡  Ventajas del diseño modular §  Facilita el proceso de construcción de sistemas complejos a partir de

otros más simples §  En caso de fallo, es más fácil localizar el fallo y depurar la aplicación

¡  En Verilog los módulos serán módulos electrónicos y las interfaces con el exterior u otros módulos serán puertos .

¡  Hay tres tipos de puertos § De entrada (input) § De salida (output) § De entrada/salida (inout)

¡  Podemos ver las puertas vistas como pequeños módulos predefinidos por Verilog

INTRODUCCIÓN

¡  Las reglas de conexión (reg o wire) dependen del tipo de puerto

INTRODUCCIÓN

¡ Definamos y construyamos el módulo comparador de un bit visto en teoría

¡  Interfaz §  2 entradas (a y b) §  3 salidas (mayor, igual y

menor) §  Todas las entradas y salidas

son de 1 bit

¡ Comportamiento §  El módulo comparará sus dos

entradas activando su salida correspondiente

MÓDULO COMPARADOR

¡ Definamos y construyamos un módulo Frankenstein

¡ Interfaz § Entrada: ojos, oídos § Salida: manos, pies § Entrada/salida: boca, nariz

¡ Comportamiento § Esperado: un ser humano § Erróneo: un monstruo!

MÓDULO FRANKENSTEIN

¡  La interfaz del módulo define sus cables de entrada y salida:

¡  La interfaz define cómo se podrá usar el módulo ¡  Es la única parte del módulo visible a otros módulos

MÓDULO COMPARADOR: INTERFAZ

// MOdulo comparador de un bit!module Comp1(output wire mayor, output wire igual, !

! ! ! !output wire menor,input wire a, input wire b);!! // AquI vendrA el cOdigo del mOdulo!!endmodule!

?

!mayor!!!

igual!!!menor!

FRANKENSTEIN: INTERFAZ

input: ojos para ver a sus víctimas

input: oídos para oír sus gemidos

output: boca para emitir sonidos guturales

¡  En el código del módulo diseñaremos las conexiones entre puertas que permitan realizar la función deseada

¡  Para ello hay que nombrar cada uno de los cables y puertas que vamos a usar

§  2 puertas NOT: nArriba y nAbajo!§  2 puertas AND: aArriba y aAbajo!§  1 puerta NOR: n!§  2 cables adicionales a los de la interfaz: wAbajo y wArriba!

MÓDULO COMPARADOR: CÓDIGO

¡ El cerebro de Frankenstein procesará la información de entrada

¡ Y generará datos de salida acordes a su funcionamiento

¡ Ojo con programarlo mal!

FRANKENSTEIN: CÓDIGO

MÓDULO COMPARADOR: DISEÑO

¡  El módulo diseñado (interfaz y comportamiento) quedaría así:

¡  El módulo diseñado se llama Comp1!

// MOdulo comparador de un bit!module Comp1(output wire mayor, output wire igual,!

! ! ! !output wire menor, input wire a, input wire b);!! wire wArriba, wAbajo;!! not nArriba(wArriba,a);! not nAbajo(wAbajo,b);! and aArriba(mayor,a,wAbajo);! and aAbajo(menor,b,wArriba);! nor n(igual,mayor,menor);!!endmodule!

FRANKENSTEIN: DISEÑO

¡  Cuidado! El módulo diseñado es sólo eso: las instrucciones para hacer a Frankenstein.

¡  Cada vez que queramos crear uno tendremos que instanciarlo y comprobar su funcionamiento

¡  El módulo define un circuito, pero no lo pone en funcionamiento

¡  Para ello tenemos que definir un módulo auxiliar , en el mismo fichero, que: §  Creará una instancia del módulo § Definirá cables externos y los conectará a los puertos de la instancia

del módulo §  Inyectará datos al sistema y los recogerá

MÓDULO COMPARADOR: COMPROBACIÓN

COMPROBACIÓN

module TestComp1;!! reg a,b;! wire M,m,igual;! ! Comp1 c(M,igual,m,a,b);!! // Bloque de comportamiento! initial!! begin! $monitor($time," a=%b, b=%b, mayor=%b, igual=%b, menor=%b",! a,b,M,igual,m);! a=0; b=0;! #5 a=0; b=1;! #5 a=1; b=0;! #5 a=1; b=1;! end!!endmodule!

Línea fundamental que instancia el módulo. Creamos un circuito que se llama c que es un tipo de circuito Comp1, con los cables definidos arriba, a través de su interfaz

Estas líneas insuflan valores a los registros de entrada cada 5 unidades de tiempo

Monitorizamos cualquier cambio en los cables de la interfaz e imprimimos todos sus valores

FRANKENSTEIN: COMPROBACIÓN

¡  Debemos insuflar energía al monstruo para que su interfaz de entrada empiece a recibir datos, su cerebro los procese y su interfaz de salida emita resultados (generalmente gruñidos incomprensibles)

Nótese que el diseño para crear un monstruo es siempre el mismo Es cuando lo instanciamos que cobra vida y le damos nombre Podríamos crear a Frankenstein I, Frankensten II, etc. con el mismo diseño!

¡  Al instanciar un módulo establecemos las conexiones indicando qué cables se conectan a cada puerto de la interfaz

¡  Podemos dejar puertos sin conexión omitiendo ciertos puertos de la interfaz

¡  Por ejemplo si queremos crear un comparador sólo de igualdad de nombre c7 , con el diseño de nuestro comparador Comp1 , podríamos hacer: §  Comp1 c7(,igual,,a,b);!

PUERTOS DESCONECTADOS

¡  Es posible usar puertas lógicas de más de dos entradas en Verilog, por ejemplo una puerta AND de cuatro entradas

¡  Para instanciar más puertas, simplemente se añaden argumentos en la línea de instanciación: §  and a4(salida, entrada1, entrada2, entrada3, entrada 4)!

PUERTAS CON MÁS DE DOS ENTRADAS

¡ Instanciad dos veces el módulo comparador de un bit para construir un comparador de dos bits, según el esquema de la figura Ejerc ic io 3

EJERCICIO

Com

para

dor

de u

n bi

t #1

C

ompa

rado

r de

un

bit #

2

Comparador de dos bits

Comparador de un bit #1 Comparador de un bit #1 Comparador de un bit #1

¡ NOTA: distinguid contextos!

Ejerc ic io 3 EJERCICIO

Comparador de un bit #1

Comparador de dos bits

r[0] a[0] a mayor

mayor1

r[1] b[0] b

igual

igual1

menor

menor1

Módulo de prueba

¡ Prográmese en un mismo fichero Verilog tres módulos §  Uno para realizar un codificador 4x2 normal

como se muestra a la izquierda de la figura § Otro para un codificador 4x2 con prioridad

como el que aparece a la derecha §  Un módulo de comprobación para probar cuáles

son sus salidas para cada una de las 16 posibles entradas

¡ Comparad los resultados de los dos codificadores

Ejerc ic io 5 EJERCICIO

¡ Uno de los problemas que presentan los diseños del ejercicio 5 es que no hay manera de diferenciar, observando las líneas de salida, el estado en que ninguna de las líneas de entrada del codificador está activa

¡ Añádase una línea de salida adicional, V, que se active cuando la salida sea válida, es decir, permanezca desactivada (0) cuando no haya ninguna línea del codificador activa

Ejerc ic io 7 EJERCICIO

¡ Tomando sólo el caso del decodificador sin prioridad, modifíquese el caso anterior para que la línea V se mantenga activa si y sólo si hay exactamente una línea activa en la entrada

Ejerc ic io 8 EJERCICIO

Programadores inspeccionando el código de un módulo Frankenstein defectuoso. La interfaz parece que está bien, pero por si acaso el módulo está desconectado