Documente Academic
Documente Profesional
Documente Cultură
HDL
Lenguajes de descripcin de
h d
hardware
Verilog
Contenidos del tema
2
Proceso de diseo digital mediante HDL
http://www.sutherland-hdl.com/online_verilog_ref_guide/vlog_ref_top.html
http://sutherland-hdl.com/online_verilog_ref_guide/verilog_2001_ref_guide.pdf
3
Proceso de diseo digital mediante HDL
de vectores en macros
Optimizacin
Netlists
Monitor
Mapeo
Implementacin
FPGA ASIC PAL
4
Contenidos del tema
Proceso de diseo digital
g mediante HDL:
descripcin, simulacin y sntesis.
Descripcin usando Verilog.
Niveles y metodologa de descripcin.
Normas del lenguaje y tipos de datos
datos.
Descripcin de circuitos combinacionales. Ejemplos.
Descripcin de circuitos secuenciales.
secuenciales Ejemplos.
Ejemplos
Descripcin Verilog de un ejemplo de sistema
digital.
digital
Unidad de datos y de control.
5
Niveles de descripcin digital en Verilog
Algorithm Level
Lenguaje de
procedimientos
(behavior)
RT Level
Switch Level
6
Metodologas de diseo
Algorithm Level
RT Level
Metodologa Metodologa
d l
Top-Down Bottom-Up
G t Level
Gate L l
Switch Level
7
Module: Bloque bsico en Verilog
Diseo Verilog: Varios bloques interconectados
Estructura general de bloque: module
module nombre(listapuertos);
Puertos: Entradas y salidas
Declaraciones: puertos;
tipo de datos; S d
Se declaran
l las propiedades de
las seales y de las variables
//Comentario (hasta fin de lnea)
/*Comentario hasta que se encuentre
los siguientes caracteres*/
8
Ejemplo: Votador
a
Votador o circuito Mayora: b z
c
Funcin: z = ab + ac + bc
Procedimiento: z=1 si {a y (b o c) son 1}; tambin si (b y c) son 1
Estructura: Expresin sp 3 puertas AND y 1 OR
module votador (input a, b, c, output Funcional
z);
assign z = (a&b)|(a&c)|(b&c);
endmodule
module votador (input a, b, c, output reg
z);
always @ (a,b,c); Estructural
if (a==1)
( 1)
module votador (input a, b, c, output
if (b==1||c==1)
z);
z=1;
wire out1, out2, out3;
else z=0;
and and1 (out1, a, b);
else
and and2 (out2, a, c);
Procedimental if (b==1&&c==1)
and and3 (out3, b, c);
z=1;
or or1(z, out1, out2, out3);
else z=0;
endmodule
endmodule
9
Normas del lenguaje 1
Identificadores: Empiezan con letra <= 1024 caracteres. Ej. r2d2
Distinguen maysculas y minsculas. Ej r2d2 r2D2
minsculas Ej.
Permiten arrays: . Ej. r2d[2]
Hay palabras reservadas. Ej. assign
V l
Valores lgicos:
l i 0,
0 1,
1 z/Z
/Z (alta impedancia) , x/X
/X (desconocido)
Nmeros enteros: TBV Ej. 12ha14 es 1010 0001 0100
T: Tamao en nmero de bits; por defecto 32
B: Base binaria b/B, octal o/O; hexadecimal h/H; decimal d/D (por defecto)
V: Valor en dgitos de la base; z/Z; desconocido x/X; ?; _
Si no coinciden el Tam y el Valor:
T<V:
T<V se truncan
t MSB sobrantes.
b t Ej 10ha14
Ej. 10h 14 es 10 0001 0100
T>V: se expande 0 o Z o X si es el MSB.
Ej. 80 es 0000 0000; Ej. 4bx es xxxx. Ej. 6hf es 00 1111
10
Normas del lenguaje 2
Puertos:
Entrada: input. Salida: output. Entrada/Salida: inout
Ti
Tipos principales
i i l de d datos:
d t
Nets: representan conexiones. Ms comn: wire
Los valores en wire se propagan instantneamente, sin memoria.
Registers: representan elementos de memoria. Ms comn: reg
El ltimo valor en reg se guarda hasta nueva asignacin
Parmetros: representan constantes. Usan parameter
Dimensin: escalares (1 bit) o vectoriales [MSB,LSB]
11
Normas del lenguaje 3
Sintaxis: TipoDato [MSB:LSB] nombre1,
nombre1 nombre2,;
nombre2 ;
Ejemplo:
wire ba, bb, bc;
De tipo wire,
wire wire [7:0] vw1, vw2;
tres bits (ba, bb y bc), reg [31:16] vra;
parameter [2:0] cte1=3b011,
dos vectores (vw1 y vw2) de 8 bits cte2=3b101;
de tipo reg otro vector (vr) de los16 bits
ms significativos entre 32
De tipo parameter , dos constantes cuyo valor decimal es: cte1 = 3 y cte2 = 5.
12
Normas del lenguaje 4
Tipos de puertos: Se pueden especificar en el cuerpo del mdulo o en la
propia declaracin del mdulo, en cuyo caso por defecto es wire.
en
module
d l circ
i (input
(i en, input
i [3:0]
[3 0] a, b,
b output reg
[2:0] z); a3:a0
module circ (en, a, b, z); circ z2:z0
input en;
input [3:0] a, b; b3:b0
output reg [2:0] z;
13
Descripcin estructural
Basada en interconectar mdulos previamente
definidos: primitivas, bloques diseados, macroceldas y
bloques IP.
Conforma la jerarqua del sistema y facilita los diseos
(tanto en la metodologa
g bottom-up como top-down).
Se dice que se instancia el bloque a usar. Para las
conexiones internas se usan variables tipo
p wire.
Principales primitivas a nivel de puertas:
and, or, xor, buf, nand, nor, xnor, not
Sintaxis de esas primitivas:
nombre ((salida,, entrada1,, entrada2,)
, )
14
Descripcin estructural: Nivel de puertas
a b
xor1
xor2
a =1 cab1 s
=1
b s module fulladder (input a, b, cin, output s, cout);
cin
and1 wire cab1, cab2, cab3, cab4;
a & cab2
b xor xor1(cab1, a, b);
or1 xor xor2(s, cab1, cin);
a & cab3 >1
cout and and1(cab2, a, b);
cin and2 and and2(cab3, a, cin);
and and3(cab4, b, cin);
b & cab4
cin or or1(cout, cab2, cab3, cab4);
and3 endmodule
15
Descripcin estructural: instancia a un bloque
16
Ejemplo: Sumador paralelo de 4 bits
a3 a2 a1 a0 b3 b2 b1 b0
s3 s2 s1 s0
a3 b3 a2 b2 a1 b1 a0 b0
s3 s2 s1 s0
17
Sumador 4 bits 1: Conexin posicional
a3 b3 a2 b2 a1 b1 a0 b0
wire cout1,cout2,cout3;
endmodule
18
Sumador 4 bits 2: Conexin nombrada
a3 b3 a2 b2 a1 b1 a0 b0
module fulladder4(
input [3:0] a, s3 s2 s1 s0
input [3:0] b,
p
input cin,
,
output [3:0] s,
output cout4);
wire cout1,cout2,cout3;
endmodule
19
Normas del lenguaje 5: Operadores
Tipos de operadores 1:
Bitwise: Operacin(Dato1(n-1):0, Dato2(n-1):0) = Res(n-1):0
Ejemplo: (& es AND) (0011)&(0101) = (0001)
Reduccin unaria: Operacin(Dato1(n-1):0) = Bit
Ejemplos: (& es AND) &(0111) = 0 ; &(1111) = 1
Lgicos: Operacin(Bit1, Bit2) = Bit
Ejemplos: (& es AND) 0&&1 = 0 ; 1&&1 = 1
Relacionales y de identidad: Compara(Dato1, Dato2) Bit
Ejemplos: (Igualdad) (0001) == (0000) 0 (False)
(Igualdad) (0001) == (000x) 1 (True)
(Identidad) (0001) === (000x) 0 (False)
20
Normas del lenguaje 6: Operadores
Tipos de operadores 2:
Aritmticos: Operacin(Dato1(n-1):0, Dato2(n-1):0) = Res(n-1):0
Ejemplo: (+ es suma) (0011) + (0010) = (0101)
Miscelnea:
Condicional (? :): sel ? Valor_si_sel=1
Valor si sel=1 : Valor_si_sel=0
Valor si sel=0
Similar al MUX(2:1) o al control ifthenelse
Ejemplo: assign z = x ? c1:c0; //z es salida MUX(2:1) con canales c0 y c1 y seleccin x
Concatenar ({ }):
}) concatena variables
ariables formando un n vector
ector ms grande
Ejemplo, si vec4 es de 4 bits, vec2 de 2 bits y vbit es de 1 bit:
{vec4, vec2, vbit} es un vector de 7 bits (4+2+1)
21
Normas del lenguaje 7: Lista de operadores 1
22
Normas del lenguaje 8: Lista de operadores 2
23
Normas del lenguaje 9: Lista de operadores 3
Unarios {} () ** [*,/,
[ %]] [+,-
[ b ] [<<,
binarias] [ >>, <<<, >>>]]
[<,<=, >,>=] [==,!=, ===,!==] [&,~&] [^,~^] [|,~|] && ||
?:
24
Normas del lenguaje 10: assign y always
C
Concurrencia:
i Todas
T d las
l asignaciones
i i i
(assign
( y always
l ) que h
haya en un
bloque se aplican concurrentemente (= todas a la vez).
25
Concurrencia: ejemplo con assign
Las tres formas siguientes asignan el mismo valor a f:
f :
module
d l ejemploconc
j l ( module
d l ejemploconc
j l ( module
d l ejemploconc
j l (
input x, y, z, input x, y, z, input x, y, z,
output f); output f); output f);
endmodule endmodule
26
MUX mediante asignacin continua
Cada suceso de entrada actualiza el valor asignado
asignado.
Descripcin de MUX usando operador condicional:
module
d l mux4 (input
i c0,c1,c2,c3,s1,s0, c0
output z, zcom); c1 z
assign z = s1 ? (s0 ? c3 : c2) : (s0 ? c1 : c0) ; c2 zcom
assign zcom = ~z;
c3
endmodule
s1 s0
Otra posibilidad es mediante la expresin sp de z:
module mux4 (input c0,c1,c2,c3,s1,s0,
output z, zcom);
assign z = (s1&s0&c3) | (s1 & ~s0&c2) | (~s1 &s0&c1) | (~s1 & ~ s0&c3); //Parntesis eliminables
assign zcom = ~z;
endmodule
27
Descripcin procedimental: Sentencia always
28
Ejemplos de listas de sensibilidad
always @ (a or b) o bien@
bien @ (a,
(a b)
Se ejecuta si hay un cambio en a, en b o en ambas
29
Ms tipos de sentencias
Para agrupar
g p 2 o ms sentencias: Para mltiples
p casos:
begin case (variable)
valor1: sentencia1;
end valor2: sentencia2;
valork: sentenciak;
Para bifurcacin condicional: [ default: sentencia; ]
if (condicin lgica/relacional)
sentencia si true;
else Conviene usar default para incluir
sentencia si false; todos los casos restantes
todos restantes
30
Uso de begin
begin-end
end
Para poner ms de una sentencia (en if,
if en cada valor
de case,) siempre hay que usar begin-end.
always @(a)
always @(a)
if ( a > 0 )
if ( a > 0 ) begin
f1 = 1; f1 = 1;
f2 = 1; ERROR Correcto
f2 = 1;
else end
f1 = 0; else
f1 = 0;
31
Asignacin de valores en always
Bloqueante: vreg = valor No bloqueante: vreg <
<= valor
En general se usan para Modela operacin en registros (es
asignaciones combinacionales similar a del lenguaje RT).
(
(parecido
id all =
del
d l lenguaje
l j RT),
RT)
aunque no siempre es as.
Se aplican
p secuencialmente, p
por lo Se aplican concurrentemente, por
que importa el orden. lo que no importa el orden.
El proceso de asignacin de valores es: Se calcula el El proceso de asignacin de valores es: Se calcula el
valor de la primera vreg y se le asigna. Despus, se valor de todas las vreg. Despus, se asignan todos los
calcula el valor de la segunda vreg (en su caso, se usa valores calculados a todas las vreg a la vez..
ell valor
l actualizado
t li d de d la
l primera
i vreg)) y se le
l asigna.
i
Y as con todas.
32
Ejemplo: Bloqueante frente a No
No-bloqueante
bloqueante
module bloqueante (input a,clk, output reg zb); module nobloqueante (input a,clk, output reg znb);
reg q; reg q;
always @ (posedge clk) always @ (posedge clk)
begin begin
q = a; q <= a;
zb = q; znb <= q;
end
d endd
endmodule endmodule
clk
a
q
zb
znb
q q
a D q a D q D q znb
zb
clk clk
33
Sobre parameter 1
Ej
Ejemplo
l de
d sumador
d ded N bits,
bit para N=6:
N 6
34
Sobre parameter 2
Se p
puede modificar el valor de los p
parmetros declarados en el mdulo
cuando se instancie ese mdulo desde otra descripcin. Se puede usar
conexin posicional o posicin nombrada.
Ejemplo para usar el sumador de N bits anterior en uno de 12 bits
bits, compuesto
por uno (LSB) de 8 y otro (MSB) de 4 bits:
35
Ejemplo combinacional: Otra vez MUX
Descripcin
p de MUX usando vectores,, always
y yy:
sentencia case: c0
c1 z
c2 zcom
c3
module mux4 (input [3:0] c, input [1:0] s,
output reg z, output zcom);
//z se declara reg pues se asigna en always; zcom es wire
always @ *
case (s)
s1
1 s0
0
2h0: z = c[0];
2h1: z = c[1];
2h2: z = c[2];
default: z = c[3];
[ ];
endcase
assign zcom = ~z;
endmodule
36
Ejemplo combinacional: Comparador
a3:a0
compa- g (a>b)
rador e (a=b)
l (a<b)
b3:b0
37
Ejemplos secuenciales: Biestables D
q q
d D q d D q
clk clk
//petdff: positive edge triggered d flip- //netdff: negative edge triggered d flip-
flop flop
module petdff (input d, clk, module netdff (input d, clk,
output reg q); output reg q);
always @ (posedge clk) always @ (negedge clk)
q <= d; q <= d;
endmodule endmodule
38
Ejemplos secuenciales: CLA y CLS
cla cls
q q
d D q d D q
clk clk
//petdff con reset asncrono cla //petdff con reset sncrono cls
module petdff (input d, clk, cla, module petdff (input d, clk, cls,
output reg q); output reg q);
always @ (posedge clk or posedge cla) always @ (posedge clk)
if (reset)
( t) if (reset)
( t)
q <= 1b0; q <= 1b0;
else Principal diferencia else
q <= d; q <= d;
endmodule endmodule
39
Ejemplos secuenciales: Biestables
Ejercicio:
Describa en Verilog los cuatro tipos de biestables (D, T, RS y JK).
Los biestables
L bi t bl tienen
ti seales
l ded clear
l y presett activas
ti en baja
b j y son
disparados por el flanco positivo de reloj (nCL, nPR y CLK).
40
CSS desde FSM (Finite State Machine)
La descripcin Verilog objetivo es la de una FSM con:
Reset asncrono (reset: S 0) Ejemplo
Punto d
P de partida:
id 0/0 1/0
grafo o tabla de estados/salidas. 1/0
A B
Partes de la descripcin FSM:
1/1
Definicin y asignacin de estados 0/0 1/0 0/0
Se usar parameter. 0/0
D C
Declaracin de variables estado, q y Q
Sern tipo reg y tantas como las usadas en
la asignacin.
Proceso de cambio de estado: q Q . Siempre es el mismo proceso
Clculo de funciones de prximo estado y salida. Depende del caso FSM.
41
Plantilla de descripcin de FSM
module nombre(
input LISTA_DE_ENTRADAS, //Incluir reset y reloj
output reg LISTA_DE_SALIDAS);
endmodule
42
Descripcin del ejemplo de FSM - 1
module ejemplo (input x, clk, reset, reset Ejemplo
output
t t reg z);) 0/0 1/0
x
// Definimos y asignamos los estados (A:00,D:11) 1/0 z
parameter a = 2b00; A B
b = 2b01;
2b01 1/1
c = 2b10; clk 0/0 1/0 0/0
d = 2b11; 0/0
D C
// V
Variables
i bl ded estado,
t d en este t caso hay
h 2
reg [1:0] current_state, next_state;
43
Descripcin del ejemplo de FSM - 2
/* Viene de la anterior. Ahora se describen las funciones de
prximo estado y de salida */ Ejemplo
always
l @ (current_state,
( t t t x)) 0/0 1/0
begin
next_state = a; // Inicializacin conveniente para simular 1/0
z = 0; // Conviene para no repetir z=0 en lo que sigue A B
case (current_state)
( t t t ) 1/1
0/0 1/0 0/0
a: if (x==1) next_state=b;
else next_state=a; 0/0
b: if (x==1) next_state=b; D C
else
l next_state=c;
t t t
c: if (x==1) next_state=b;
else next_state=d;
d: if (x==1)
begin
next_state=b;
z=1;
end
else next_state=a;
next state=a;
endcase
end
endmodule
44
Ejemplos secuenciales: registro - 1
45
Ejemplos secuenciales: registro - 2
46
Ejemplos secuenciales: contador - 1
47
Ejemplos secuenciales: contador - 2
48
Contenidos del tema
Proceso de diseo digital
g mediante HDL:
descripcin, simulacin y sntesis.
Descripcin usando Verilog.
Niveles y metodologa de descripcin.
Normas del lenguaje y tipos de datos
datos.
Descripcin de circuitos combinacionales. Ejemplos.
Descripcin de circuitos secuenciales
secuenciales. Ejemplos
Ejemplos.
Descripcin Verilog de un ejemplo de sistema
digital.
digital
Unidad de datos y de control.
49
Calculadora Unidad de Datos
Calculadora.
IN
Diseo Bottom-
Up: RT
OUT
W WRT
1. Registros
Ra
IA IB DAT A R
W Wa 1 1 RT
1.1
P1 C1 Rb
P0 C0 DAT B R
W Wb 1.2 AC
1.3 A / B
OUT
2. ALU
WAC IN 3. Unidad de
RAC W
AC
R
OUT Datos
50
Calculadora Unidad de Datos 1
Calculadora.
//declaracin del tipo mdulo correspondiente a RT
52
Calculadora. Unidad de Datos 3
//declaracin de la unidad de p
procesado de datos
wire [width
[width-1:0]
1:0] common_bus,
common bus, ALU_out,
ALU out, RT_out;
RT out;
type1 #(.width(width)) RT(WRT,ck,common_bus,RT_out);
type2 #(.width(width)) AC(WAC,RAC,ck,ALU_out,common_bus);
type3 #(.width(width),.initial_value(initial_A)) A(Wa,Ra,ck,common_bus);
type3 #(.width(width),.initial_value(initial_B)) B(Wb,Rb,ck,common_bus);
ALU type #(width) ALU(P1,P0,common_bus,RT_out,ALU_out);
ALU_type ALU(P1 P0 common bus RT out ALU out);
endmodule
type1 IN
type3
RT W WRT
Se han utilizado instancias de los OUT
modulos definidos anteriormente:
type1, type2, type3 y alu_type RT_out
Ra
IA IB DAT A R
W Wa
Se han nombrado los buses P1 C1 Rb
internos de la unidad: P0 C0 ALU_type DAT B R
W Wb
RT_out, ALU_out y common_bus
OUT
ALU_out
WAC
W
IN type2 common_bus
RAC AC
R OUT
53
Calculadora Unidad de Control 1
Calculadora.
Realizacin con la estructura general de FSM
module
d l carta_asm1(
t 1( iinputt LISTA_DE_ENTRADAS,
LISTA DE ENTRADAS
output reg LISTA_DE_SALIDAS);
reg [N:0] current_state, next_state; // Aqu se definen las variables de estado prsente y
prximo
endmodule
d d l
54
S0
Unidad de Control 2
0 Xs
module carta_asm1( 1
input clk, XS, I0, I1, reset,
output reg RAC, Rb, Ra, WRT, WAC, Wa, Wb, P1, P0, FIN S1 WRT,Rb
);
parameter
t S0 = 3'b000,
3'b000 S2 WAC ,Ra
S1 = 3'b001, Asignacin
S2 = 3'b010,
S3 = 3'b011, de estados 0 1
SF = 3'b100; I1
P1
reg [2:0] current_state,next_state;
SIGUE ->
SF FIN
55
U id d de
Unidad d Control
C l3 S0
0 Xs
1
always @(current_state,I0,I1,Xs) S1
begin WRT,Rb
RAC = 0;
RA = 0; S2 WAC ,Ra
Rb = 0;
P0 = 0;
Valor por defecto de las salidas
P1 = 0; establecido a cero 0
I1 1
WRT = 0;;
Wa = 0; P1
Wb = 0;
FIN = 0;
next_state = S0;
case(current state)
case(current_state) S3 RAC
S0: E
Estado
d S0
if(XS) next_state = S1; 0 1
S1: I0
begin
WRT = 1;
Wa Wb
Rb = 1;
next_state = S2;
Estado S1
SF FIN
end
56
U id d de
Unidad d Control
C l4 S0
0 Xs
S2:
begin
1
WAC = 1; Estado S2 S1 WRT,Rb
Ra = 1;
if(I1)
P1 = 1; S2 WAC ,Ra
next_state = S3;
end 0 1
S3: I1
begin
RAC = 1; P1
if(I0)
Estado S3
Wa = 1;
else S3 RAC
Wb b = 1;
next_state = SF;
end 0 1
I0
SF: Estado SF
FIN = 1; Wa Wb
endcase
end
endmodule SF FIN
57