Introducción Configuración del entorno Primer programa Elementos

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