verilog - vis.usal.esvis.usal.es/.../computadores1/sesiones/antiguas/1-verilog.pdf · verilog:...
Post on 16-Mar-2018
231 Views
Preview:
TRANSCRIPT
Introducción Configuración del entorno Primer programa Elementos básicos Estructura Registros
VERILOG
l Tecnología VLSI (Very Large Scale Integration) l Permite integrar 100.000+ transistores en un chip l ULSI (Ultra Large SI) à 106+ transistores l Intel Core 2 -> 291 · 106 transistores l Nos aproximamos a GLSI (Giga Large SI)
l A través de paralelismo, no de aumento de densidad l Core 2 Duo -> 410 · 106 transistores l Quad Core 2 Duo -> 820 · 106 transistores
l 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 Verilog: lenguaje de descripción de hardware l HDL: Hardware Description Language
l Lenguaje para describir un diseño al nivel de transferencia entre registros 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
l 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
INTRODUCCIÓN
l Sistema operativo GNU/Linux l Muchas versiones, en clase: Ubuntu l Recomendado: instalarse una versión en casa
l Verilog para Linux l GPL Cver: http://sourceforge.net/projects/gplcver/ l Otra opción: Icarus Verilog l Para instalar (ya están instalados en clase):
l sudo apt-get install glpcver!l sudo apt-get install iverilog!
l Editor de texto l Se recomienda gedit l Trae un resaltador de texto para Verilog
ENTORNO DE TRABAJO
¡ Queremos un programa que nos salude con la frase “Hola, mundo” ¡ Abrid un fichero de texto que se l lame 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
PRIMER PROGRAMA EN VERILOG
COMPILACIÓN Y EJECUCIÓN
hello.v hello
Queremos ver en pantalla “Hola, mundo”
programación
/* Programa de ejemplo: hello.v */ module hello; initial // Imprimimos el mensaje y un salto de lInea $display("Hola, mundo\n"); endmodule
compilación
ejecución
“Hola, mundo”
#! /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";!
iverilog hello.v –o hello!
./hello!
¡ 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!
COMENTARIOS
l Conjunto de letras, números o símbolos l En Verilog se encierran entre comillas dobles (“) l Algunos caracteres se marcan de modo especial
l \n – comenzar después una nueva línea (retorno de carro) l \t – tabulador l %% - % l \\ - \ l \” – “
l “Hola, mundo\n” es un ejemplo de cadena de 12 caracteres l 4 caracteres para hola l una coma y un espacio l 5 caracteres para mundo l un carácter especial para producir un salto a la línea siguiente
CADENAS DE CARACTERES
¡ 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!
CONSTANTES NUMÉRICAS
¡ 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;!
VARIABLES
¡ Una función nos da un resultado a partir de una entrada
¡ En $display , %d y %g nos dan el formato con el que imprimir el valor de las variables (como entero o como real, respectivamente)
FUNCIÓN $DISPLAY
función parámetros de entrada salida o resultado
$display cadena de texto variables 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
Formato Descripción %d! Entero en decimal %b! Entero en binario %o! Entero en octal %h! Entero en hexadecimal %c! Carácter %s! Cadena de caracteres %f!%e!%g!
Real en formato decimal Real en formato científico Real en el formato más corto de los dos anteriores
$DISPLAY
¡ 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:!
BLOQUES DE CÓDIGO
integer i;!real f;!!initial!begin! i=4;! f=2.7172;! $display("i vale %d y f vale %g",i,f);!end!
bloque initial
¡ 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
ESTRUCTURA DEL PROGRAMA
nombre del módulo
bloque “initial”
área de definición de variables
área de instrucciones
fin del módulo
¡ Responde 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 10001012
§ Ídem para el octal 1234 § Pasa a hexadecimal el binario
10100112
Ejerc ic io 11 EJERCICIO
l Un registro es un componente de almacenamiento dentro de la circuitería de un ordenador
l En verilog se simulan como vectores de uno o más bits
REGISTROS
reg reloj; /* Registro de un bit */!reg [31:0] busA; /* Registro de 32 bits, sin signo */!reg signed [63:0] m; /* Registro de 64 bits, con signo */!!!!!!!reloj=1'b0;!busA='hAAAABBBB;!busA[7:4]=4'hC;!m=-1;!
0 1 2 3 4 5 6 7 8 9 10 11 … 30 31
reloj!
busA!
0 reloj!
1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 busA!...!
1 1 0 0
¡ 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
Ejerc ic io 12 EJERCICIO
¡ 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)
REDES Y CABLES
¡ 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
VALORES ESPECIALES
¡ Definid 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
¡ Imprimid en binario el valor del registro. ¿Qué pasa si lo imprimís en decimal?
¡ Realizad operaciones con él y observad los cambios
Ejerc ic io 20 EJERCICIO
top related