Estructura Registros+ Cables+...

24
Verilog Introducción Configuración del entorno Primer programa Elementos básicos Estructura Registros Cables Valores especiales

Transcript of Estructura Registros+ Cables+...

Page 1: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

Verilog  

Introducción    Configuración  del  entorno    Primer  programa    Elementos  básicos    Estructura    Registros    Cables    Valores  especiales    

Page 2: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

ULSI

VLSI

GLSI

2

Page 3: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 4: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 5: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 6: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 7: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 8: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

Ejercicio  •  Compila  y  ejecuta  el  programa  “Hola,  mundo”  

8

Page 9: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 10: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 11: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 12: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 13: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 14: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

$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

Page 15: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 16: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 17: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 18: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 19: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 20: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 21: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 22: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 23: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

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

Page 24: Estructura Registros+ Cables+ Valores+especiales+carpex.usal.es/.../computadores1/.../1-verilog.pdf · compilaciónyejecución hello.v+ hello+ Queremos ver en pantalla “Hola, mundo”

24