Verilog Introducción Configuración del entorno Primer programa Elementos básicos Estructura Registros Cables Valores especiales GLSI
ULSI
VLSI
2
Introducción l
Hoy en día, es Imposible hacer el diseño de interconexión del circuito a mano (millones de transistores) l
Computer Aided Digital Design: diseño ayudado por computadores 3
Introducción l
l
Verilog: lenguaje de descripción de hardware HDL: Hardware DescripHon Language l
Lenguaje para describir un diseño al nivel de transferencia entre registros l
l
Los detalles (circuitería) se generan mediante herramientas automáHcas de síntesis a parHr 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 soNware 4
Entorno de trabajo l
Sistema operaHvo 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: hUp://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 5
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!
6
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!
con iverilog
“Hola, mundo”
con cver
7
Ejercicio • Compila y ejecuta el programa “Hola, mundo” 8
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!
9
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 – comenzar después una nueva línea (retorno de carro) \t – 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 \n para producir un salto a la línea siguiente 10
Constantes numéricas • Cualquier número que no esté entre comillas se interpreta como un número • Se usa el signo menos (-­‐) para los negaHvos • Se usa el punto decimal (.) para los decimales • Se usa la letra e (e) para notación ciengfica • Podemos expresar números en otras bases anteponiendo los prefijos • ‘b (binario) • ‘o (octal) • ‘h (hexadecimal) • Ejemplos • -‘hD1C!
• 7.237e6!
• ‘b11_1011_111_1000!
11
Variables • Elementos que conHenen valores (de momento numéricos) • Primero se declara su Hpo (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;!
• UHlización de su valor en disHntas operaciones • Por ejemplo en operaciones aritméHcas (+,-­‐,* y /) •
•
•
•
Exponenciación: ** Operación módulo: % a=b+2.88;!
a=a**2;!
12
función $display • Una función nos da un resultado a parHr 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, respecHvamente) 13
$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!
%e!
%g!
Real en formato decimal Real en formato ciengfico Real en el formato más corto de los dos anteriores 14
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;!
bloque initial
f=2.7172;!
$display("i vale %d y f vale %g",i,f);!
end!
15
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 16
Ejercicio • Modificar y ejecutar el programa “Hola, mundo”, de modo que ahora diga “Hola mundo, son las X”, donde X es la hora actual, que se debe almacenar en una variable de nombre h!
• NOTA: guardad el fichero con otro nombre, por ejemplo hello2.v • Así podréis ir teniendo vuestra propia biblioteca de programas, para consultar y reuHlizar • Es importante que los nombres y los comentarios sean explicaHvos de lo que hacen los programas 17
Ejercicio 11 • Responde a las siguientes preguntas de ejemplos vistos en teoría, uHlizando 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 18
• NOTA: los números de los ejercicios corresponden a los uHlizados en las sesiones en hUp://avellano.usal.es/~compi/ 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!
19
Ejercicio 12 • Almacenad en un registro de 16 bits el número 1025 en decimal e imprimidlo en binario, decimal y hexadecimal • Escribid en el registro de 16 bits el número más grande que se puede almacenar. ¿Cuál es en hexadedimal? ¿Y en decimal? 20
Redes y cables • Hay un Hpo especial de variables en Verilog llamadas nets (redes) de las que el Hpo 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 (p. ej. un registro o la salida de un circuito) 21
Valores especiales • Un bit de un cable o registro puede tomar dos valores disHntos a los normales (0 y 1) • Indefinido: se representa por x e indica que el valor puede ser 0 o 1 (no se sabe) • Si se declara un registro pero no se le da valor, todos sus bits son x!
• Alta impedancia: se representa por z y Hene el significado habitual en electrónica (~ un cable desconectado) 22
Ejercicio 20 • Definid un registro de 16 bits que tenga sus cuatro bits más significaHvos a 0, los siguientes cuatro a 1, los siguientes cuatro a x y los úlHmos 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 23
24