22
Introducción Configuración del entorno Primer programa Elementos básicos Estructura Registros VERILOG

VERILOG - vis.usal.esvis.usal.es/.../computadores1/sesiones/antiguas/1-verilog.pdf · Verilog: lenguaje de descripción de hardware ! HDL: Hardware Description Language ! Lenguaje

  • Upload
    dothien

  • View
    232

  • Download
    8

Embed Size (px)

Citation preview

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!

¡ Compila y ejecuta el programa “Hola, mundo”

EJERCICIO

¡  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