Anda di halaman 1dari 22

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  Permite integrar 100.000+ transistores en un chip
l  ULSI (Ultra Large SI) à 10 6 + transistores
l  Intel Core 2 -> 291 · 10 6 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
ENTORNO DE TRABAJO

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
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

#! /usr/bin/vvp!
:ivl_version "0.9.2 " "(v0_9_2)";!
:vpi_time_precision + 0;!
Queremos ver en pantalla :vpi_module "system";!
:vpi_module "v2005_math";!
“Hola, mundo” :vpi_module "va_math";!
S_0x9010aa0 .scope module, "hello"
"hello" 2 2;!
.timescale 0 0;!
.scope S_0x9010aa0;!
T_0 ;!
programación %vpi_call 2 5 "$display",
"Hola, mundo\012";!
%end;!
.thread T_0;!
compilación # The file index is used to find
the file name in the following
iverilog hello.v –o hello!
hello.v hello table.!
:file_names 3;!
"N/A";!
"<interactive>";!
/* Programa de ejemplo: hello.v */ "hello.v";!
module hello;
initial
// Imprimimos el mensaje y un salto de lInea ejecución
$display("Hola, mundo\n");
./hello!
endmodule

“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  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
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 función salida o resultado

cadena de texto
variables $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 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! Real en formato decimal
%e! Real en formato científico
%g! 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 bloque initial
%g",i,f);!
end!
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 EJERCICIO
cálculo manualmente y luego Ejercicio 11

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
REGISTROS

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

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!
! busA!
!
! 0 1 2 3 4 5 6 7 8 9 10 11 … 30 31
!
0 reloj!
reloj=1'b0;!
busA='hAAAABBBB;! 1 0 1 0 1 0 1 0 ...! 1 0 1 1 1 0 1 1 busA!
busA[7:4]=4'hC;! 1 1 0 0
m=-1;!
¡ Declarad los registros y asignadles los
valores del apartado anterior.
¡ Imprimid sus valores a continuación,
en hexadecimal, y tratad de adivinar
EJERCICIO
el resultado que aparece por pantalla. Ejercicio 12
¡ 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
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 EJERCICIO
siguientes cuatro a 1, los Ejercicio 20

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

Anda mungkin juga menyukai