Introducción Configuración del entorno VERILOG Primer programa Elementos básicos Estructura Registros INTRODUCCIÓN l Tecnología VLSI (Very Large Scale Integration) l l l l Permite integrar 100.000+ transistores en un chip ULSI (Ultra Large SI) à 10 6 + transistores Intel Core 2 -> 291 · 10 6 transistores Nos aproximamos a GLSI (Giga Large SI) l l l l A través de paralelismo, no de aumento de densidad Core 2 Duo -> 410 · 106 transistores Quad Core 2 Duo -> 820 · 106 transistores Imposible hacer el diseño de interconexión del circuito a mano l Computer Aided Digital Design à diseño ayudado por computadores l Máquinas que hacen máquinas?? INTRODUCCIÓN l l Verilog: lenguaje de descripción de hardware HDL: Hardware Description Language l Lenguaje para describir un diseño al nivel de transferencia entre registros l l Los detalles (puertas lógicas y su interconexión) se generan mediante herramientas automáticas de síntesis a partir de su descripción en un HDL También se pueden usar para simular y depurar el resultado obtenido l la elaboración de hardware sigue un proceso similar en muchos aspectos con la elaboración de software l Hombres que usan máquinas para hacer máquinas ENTORNO DE TRABAJO l Sistema operativo GNU/Linux l l l Muchas versiones, en clase: Ubuntu Recomendado: instalarse una versión en casa Verilog para Linux l l l GPL Cver: http://sourceforge.net/projects/gplcver/ Otra opción: Icarus Verilog Para instalar (ya están instalados en clase): l l l sudo apt-get install glpcver! sudo apt-get install iverilog! Editor de texto l l Se recomienda gedit Trae un resaltador de texto para Verilog PRIMER PROGRAMA EN VERILOG ¡ ¡ Queremos un programa que nos salude con la frase “Hola, mundo” Abrid un fichero de texto que se llame hello.v y copiad lo siguiente /* Programa de ejemplo: hello.v */ module hello; initial // Imprimimos el mensaje y un salto de lInea $display("Hola, mundo\n"); endmodule COMPILACIÓN Y EJECUCIÓN Queremos ver en pantalla “Hola, mundo” programación compilación hello.v iverilog hello.v –o hello! /* Programa de ejemplo: hello.v */ module hello; initial // Imprimimos el mensaje y un salto de lInea $display("Hola, mundo\n"); endmodule hello #! /usr/bin/vvp! :ivl_version "0.9.2 " "(v0_9_2)";! :vpi_time_precision + 0;! :vpi_module "system";! :vpi_module "v2005_math";! :vpi_module "va_math";! S_0x9010aa0 .scope module, "hello" "hello" 2 2;! .timescale 0 0;! .scope S_0x9010aa0;! T_0 ;! %vpi_call 2 5 "$display", "Hola, mundo\012";! %end;! .thread T_0;! # The file index is used to find the file name in the following table.! :file_names 3;! "N/A";! "<interactive>";! "hello.v";! ejecución ./hello! “Hola, mundo” ¡ C ompila y ejecuta el programa “Hola, mundo” EJERCICIO COMENTARIOS ¡ ¡ Notas en lenguaje natural para nosotros u otros programadores FUNDAMENTALES para entender, recordar y documentar el código /* Este es un comentario que puede abarcar ! varias líneas */! // Este tipo de comentario sólo abarca una línea! CADENAS DE CARACTERES l l l Conjunto de letras, números o símbolos En Verilog se encierran entre comillas dobles (“) Algunos caracteres se marcan de modo especial l l l l l l \n \t %% \\ \” – comenzar después una nueva línea (retorno de carro) – tabulador -% -\ –“ “Hola, mundo\n” es un ejemplo de cadena de 12 caracteres l l l l 4 caracteres para hola una coma y un espacio 5 caracteres para mundo un carácter especial para producir un salto a la línea siguiente CONSTANTES NUMÉRICAS ¡ Cualquier número que no esté entre comillas se interpreta como un decimal § Se usa el signo menos (-) para los negativos § Se usa el punto decimal (.) para los decimales § Se usa la letra e (e) para notación científica ¡ Podemos expresar números en otras bases anteponiendo los prefijos § ‘b (binario) § ‘o (octal) § ‘h (hexadecimal) ¡ Ejemplos § -‘hD1C! § 7.237e6! § ‘b11_1011_111_1000! VARIABLES ¡ Elementos que contienen valores (de momento numéricos) § Primero se declara su tipo (puede ser real o entero) § integer i; //variable entera de nombre i! § real f;!//variable real de nombre f! § Asignación de valor: § i=4;! § f=2.7172;! § Utilización de su valor en distintas operaciones § Por ejemplo en operaciones aritméticas (+,-,* y /) § § § § Exponenciación: ** Operación módulo: % a=b+2.88;! a=a**2;! FUNCIÓN $DISPLAY ¡ Una función nos da un resultado a par tir de una entrada parámetros de entrada cadena de texto variables función salida o resultado $display texto por pantalla $display(cadena de texto, variables)! ! $display(“i vale %d y f vale %g”, i, f)! ! i vale 4 y f vale 2.7172 ¡ En $display, %d y %g nos dan el formato con el que imprimir el valor de las variables (como entero o como real, respectivamente) $DISPLAY Formato %d! %b! %o! %h! %c! %s! %f! %e! %g! Descripción Entero en decimal Entero en binario Entero en octal Entero en hexadecimal Carácter Cadena de caracteres Real en formato decimal Real en formato científico Real en el formato más corto de los dos anteriores BLOQUES DE CÓDIGO ¡ Conjunto delimitado de dos o más líneas de código § Pueden tener un propósito común § O encontrarse dentro de alguna estructura superior ¡ Comienza por begin y termina por end:! integer i;! real f;! ! initial! begin! i=4;! f=2.7172;! $display("i vale %d y f vale %g",i,f);! end! bloque initial ESTRUCTURA DEL PROGRAMA nombre del módulo área de definición de variables bloque “initial” área de instrucciones fin del módulo ¡ Notas: § Las declaraciones de variables e instrucciones deben acabar en punto y coma (;) § El comienzo (module) y fin (endmodule) del módulo son obligatorios § La mayoría de esta sintaxis es muy parecida a la de C que veréis en Programación ¡ R esponde a las siguientes preguntas de ejemplos vistos en teoría. Realiza primero el cálculo manualmente y luego a través de Verilog: § Expresa en decimal el número hexadecimal 0x1FEA § Ídem para el número 1000101 2 § Ídem para el octal 1234 § Pasa a hexadecimal el binario 1010011 2 EJERCICIO Ejercicio 11 REGISTROS l l Un registro es un componente de almacenamiento dentro de la circuitería de un ordenador En verilog se simulan como vectores de uno o más bits reg reloj; /* reg [31:0] busA; /* reg signed [63:0] m; /* ! ! reloj! ! ! ! 0 1 2 3 4 5 6 7 8 9 10 11 ! 0 reloj=1'b0;! busA='hAAAABBBB;! 1 busA[7:4]=4'hC;! m=-1;! Registro de un bit */! Registro de 32 bits, sin signo */! Registro de 64 bits, con signo */! busA! … 30 31 reloj! 0 1 0 1 0 1 0 1 1 0 0 ...! 1 0 1 1 1 0 1 1 busA! ¡ Declarad los registros y asignadles los valores del apartado anterior. ¡ Imprimid sus valores a continuación, en hexadecimal, y tratad de adivinar el resultado que aparece por pantalla. ¡ A continuación dad respuesta a las siguientes preguntas relacionadas con la teoría, primero manualmente y luego con Verilog: § Almacenad en un registro de 16 bits el número 2323 e imprimidlo en binario y hexadecimal § Escribid en hexadedimal, binario y decimal el número mayor y más pequeño que se puede almacenar en un registro de 16 bits sin signo § ¿Qué expresión tiene en binario el número 6789 cuando se expresa en complemento a dos en un registro de 16 bits? § Expresad el -22 en un registro de 8 bits y pasadlo a uno de 16 bits extendiendo el signo EJERCICIO Ejercicio 12 REDES Y CABLES ¡ Hay un tipo especial de variables en Verilog llamadas nets (redes) de las que el tipo más frecuente es wire (cable) ¡ Se usan como los cables reales, para conectar elementos del circuito entre sí. ¡ Un cable puede contener información! § Dependiendo de si pasa voltaje (1) o no (0) à 1 bit de información ¡ Sin embargo, no pueden almacenar la información como los registros, si no que necesitan de otro elemento que se la proporcione (un registro, por ejemplo) VALORES ESPECIALES ¡ Un bit de un cable o registro puede tomar dos valores distintos a los normales (0 y 1) § Indefinido: se representa por x e indica que el valor puede ser 0 o 1 (no se sabe) § Cuando se declara un registro pero no se le da valor, todos sus bits son x § Alta impedancia: se representa por z y tiene el significado habitual en electrónica ¡ D efinid un registro de 16 bits que tenga sus cuatro bits más significativos a 0, los siguientes cuatro a 1, los siguientes cuatro a x y los últimos cuatro a z ¡ I mprimid en binario el valor del registro. ¿Qué pasa si lo imprimís en decimal? ¡ R ealizad operaciones con él y observad los cambios EJERCICIO Ejercicio 20