Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Verilog
Introducción Configuración del entorno Primer programa Elementos básicos Estructura Registros Cables Valores especiales
ULSI
VLSI
GLSI
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 Verilog: lenguaje de descripción de hardware l HDL: Hardware DescripHon Language
l Lenguaje para describir un diseño al nivel de transferencia entre registros l Los detalles (circuitería) se generan mediante herramientas automáHcas de síntesis a parHr 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 soNware
4
Entorno de trabajo
l Sistema operaHvo GNU/Linux l Muchas versiones, en clase: Ubuntu l Recomendado: instalarse una versión en casa
l Verilog para Linux l GPL Cver: hUp://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
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
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!
con iverilog 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 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 \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
• En $display, %d y %g nos dan el formato con el que imprimir el valor de las variables (como entero o como real, respecHvamente)
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
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;! f=2.7172;! $display("i vale %d y f vale %g",i,f);!end!
bloque initial
15
estructura del programa
• 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
nombre del módulo
bloque “initial”
área de definición de variables
área de instrucciones
fin del módulo
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
• NOTA: los números de los ejercicios corresponden a los uHlizados en las sesiones en hUp://avellano.usal.es/~compi/
18
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=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 019
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