VERILOG

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