16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16....

16
16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación: •Instanciación de un componente (por defecto) •Requiere la previa declaración del componente •No se indica la arquitectura, se usa la última compilada. Si hay varias arquitecturas se puede especificar la arquitectura con una configuración, además del “binging” instancia: entity librería.entidad[(arquitectura)] [generic map(lista_genéricos)] [port map(lista_señales)]; instancia:[component] componente [generic map(lista_genéricos] [port map(lista_señales)]; instancia: configuration librería.configuración [generic map(lista_genéricos] [port map(lista_señales)]; •Instanciación de una entidad (y arquitectura) •No requiere la previa declaración del componente •Se puede especificar la arquitectura. Si no se especifica la arquitectura, se usa la última compilada •Instanciación de una configuración •Generalmente los sintetizadres no admiten configuraciones •Igual que instanciación a entidad (y arquitectura) 16. Descripción Estructural •Asignaciones de señales a los puertos (y genéricos). Dos tipos de asociación: •Asociación ordenada •Asociación nombrada •La palabra open indica puerto (o genérico) no asociado. Los puertos (o genéricos) no asociados toman open ...port map(señal1, open, señal3, ...); ...port map(actm=>señalm, actn=>open, actp=>señalp, ...); ...port map(señal1, señal2, ...); ...port map(actm=>señalm, actn=>señaln, ...);

Transcript of 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16....

Page 1: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

16. Descripción Estructural•Instancias interconectadas por señales. Tres tipos instanciación:

•Instanciación de un componente (por defecto)•Requiere la previa declaración del componente•No se indica la arquitectura, se usa la última compilada. Si hay varias arquitecturas se puede especificar la arquitectura con una configuración, además del “binging”

instancia: entity librería.entidad[(arquitectura)] [generic map(lista_genéricos)] [port map(lista_señales)];

instancia:[component] componente [generic map(lista_genéricos] [port map(lista_señales)];

instancia: configuration librería.configuración [generic map(lista_genéricos] [port map(lista_señales)];

•Instanciación de una entidad (y arquitectura) •No requiere la previa declaración del componente•Se puede especificar la arquitectura. Si no se especifica la arquitectura, se usa la última compilada

•Instanciación de una configuración•Generalmente los sintetizadres no admiten configuraciones•Igual que instanciación a entidad (y arquitectura)

16. Descripción Estructural•Asignaciones de señales a los puertos (y genéricos). Dos tipos de asociación:

•Asociación ordenada•Asociación nombrada

•La palabra open indica puerto (o genérico) no asociado. Los puertos (o genéricos) no asociados toman open

...port map(señal1, open, señal3, ...);

...port map(actm=>señalm, actn=>open, actp=>señalp, ...);

...port map(señal1, señal2, ...);

...port map(actm=>señalm, actn=>señaln, ...);

Page 2: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

myMUX21a

bo

n

nn

s

mNOR(RTL)

a

bo

n

nn mNOT

(RTL)a on n

mAND(RTL)

a

bo

n

nn mAND

(beh)

a

bo

n

nn

16. Descripción Estructural•Ejemplo: Descripción estructural de myMUX21, a partir de:

•Entidad myNOT con una arquitectura RTL•Entidad myOR con una arquitectura RTL•Entidad myAND con dos arquitecturas: RTL, beh. Ambas usan declaraciones dentro del paquete myPACK

entity myNOT isgeneric(

n: integer:=8;t: time:=10 ns);

port(a: in bit_vector(n-1 downto 0);o: out bit_vector(n-1 downto 0));

end entity myNOT;

architecture RTL of myNOT isbegin

o<=not a after t;end architecture RTL;

entity myOR isgeneric(

n: integer:=8;t: time:=10 ns);

port(a,b: in bit_vector(n-1 downto 0);o: out bit_vector(n-1 downto 0));

end entity myOR;

architecture RTL of myOR isbegin

o<=a or b after t;end architecture RTL;

mOR(RTL)

a

bo

n

nnmNOT

(RTL)a on n

16. Descripción Estructural

Page 3: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

mAND(RTL)

a

bo

n

nn

16. Descripción Estructural

library work;use work.myPACK.all;

entity myAND isport(a,b: in DATABUS;o: out DATABUS);

end entity myAND;

architecture RTL of myAND isbegin

o<=a and b after DELAY/3;end architecture RTL;

architecture BEH of myAND isbegin

o<=funAND(a,b) after DELAY/3; end architecture BEH;

mAND(beh)

a

bo

n

nn

package body myPACK isfunction funAND(a,b: DATABUS) return DATABUS is

...end function funAND;constant DELAY: time:=20 ns;

end package body myPACK;

package myPACK isconstant DELAY: time;constant WIDTH: integer:=16;subtype DATABUS is bit_vector(WIDTH-1 downto 0)function funAND(a,b: DATABUS) return DATABUS;component myAND

port(a,b: in DATABUS; o: out DATABUS);end component myAND;

end package myPACK;

myPACK:•DELAY•WIDTH•DATABUS•funAND•myAND

u1:mNOT(RTL)

n

16. Descripción Estructural

use work.myPACK.all;entity myMUX21 is

generic(n: integer:=WIDTH; t: time:=DELAY);port( a,b: in DATABUS; s: in bit; o: out DATABUS);

end entity myMUX21;

architecture STR of myMUX21 iscomponent myNOT generic(n:integer:=8; t:time:=10 ns);

port(a: in bit_vector(n-1 downto 0); o: out bit_vector(n-1 downto 0));

end component myNOT;signal x,y,sx,sn: bit_vector(n-1 downto 0); begin

sx<=(others=>s);u1: myNOT generic map(WIDTH,open) port map(sx,zx);

u2: component myAND port map(o=>x,a=>a,b=>zx);

u3: entity work.myAND(beh) port map(b,sx,y);

u4: entity work.myOR generic map(WIDTH) port map(x,y,o);end architecture STR;

Instanciación de componente myNOTdeclarado en la zona de declaracionesde la arquitectura. El genérico t esasociado a open y tomará el valor por defecto

Instanciación a componente myAND:declarado el paquete myPACKUsa asignación nombrada¿Qúe arquitectura usará: RTL o beh?Usara la última compilada

Instanciación de entidad myOR: no requiere declaración. La arquitectura es RTL por tener sólo una

u4:mOR(RTL)

n

u2:mAND(???)

n

nn

u3:mAND(beh)

n

nns

a

b

o

sxx

y

sn

Instanciación de entidad myAND, y arquitectura beh. No requiere declaración

myMUX21a

bo

n

nn

s

Page 4: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

16. Descripción Estructural

use work.myPACK.all;configuration CFG of myMUX21 is

for STRfor u1: myNOT

use entity work.myNOT(RTL) generic map(WIDTH,DELAY/3); end for;for all: myAND

use entity work.myAND(RTL); end for;

end for;end configuration CFG;

u1:mNOT(RTL)

n

DUT:CFGb1

b2b3

n

nn

s

u4:mOR(RTL)

n

u2:mAND(RTL)

n

nn

u3:mAND(beh)

n

nns

a

b

o

sxx

y

sn

La configuración define arquitecturas parainstancias a componentes. Tambiénpermite asociar puertos y genéricos sobreescribiendo la asociación que sehabía descrito en la arquitectura STR

architecture test1 of test_myMUX21 is...begin

DUT: configuration work.CFG port map(o=>b3,s=>s,a=>b1,b=>b2);...

end architecture;

CFGa

bo

n

nn

s

Instanciación a configuración CFG:No hay que declarar la configuración.Muchos sintetizadores no admitenconfiguraciones

a

b s

o

16. Descripción Estructural•La sentencia generate se usa para generar arquitecturas con estructuras regulares de instancias (asignaciones y procesos)

•for...in...generate: genera instancias con un bucleetiqueta: for parámetro in rango generate [--declaraciones; begin]

--instancias;--asignaciones concurrentes y procesos;

end generate [etiqueta];

etiqueta: if condición generate [--declaraciones; begin]

--instancias; --asignaciones concurrentes y procesos;

end generate [etiqueta];

•if...generate: genera instancias condicionalmente

Page 5: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

16. Descripción Estructural•Ejemplo: Descripción estructural de contador BCD ascendente genérico de n-bits y entrada de habilitación, usando generate para instanciar componentes TFF

contBCD one

clk

rst

rst T Q Qn 1 X 0 1 0 0 Q- !Q- 0 1 !Q- Q-

Qnclk

T QT Q

Qnrst

TFF

r

library ieee;use ieee.std_logic_1164.all;

entity TFF is port(clk: in std_logic;rst: in std_logic;T: in std_logic;Q,Qn: out std_logic);

end entity;

architecture beh of TFF issignal q_int: std_logic;begin

process(clk) variable s: std_logic;begin

if rising_edge(clk) thenif rst='1' then

s:='0';elsif T='1' then

s:=not s;end if;

end if;Q<=s;Qn<=not s; --No es lo mismo que

end process; --Qn<=not Q;end architecture;

clk

o(2)

rst

a(1)o(1)

o(3) o(2) o(1) o(0) 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 ... ... ... ... 1 1 1 1 0 0 0 0 ... ... ... ...

o(0)

rst

clk

e o(1)

rst

o(0)

16. Descripción Estructural

clk

a(2)

clk

o(i)

rst

a(i-1)o(i-1)

a(i)

a(1)a(0)T Q

Qnrst

TFFT Q

Qnrst

TFF

T Q

Qnrst

TFF

T Q

Qnrst

TFF

Page 6: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

16. Descripción Estructural

library ieee;use ieee.std_logic_1164.all;

entity contBCD is generic(n: integer:=4);port(

clk: in std_logic;rst,e:in std_logic;o: out std_logic_vector

(n-1 downto 0));end entity;

contBCD one

clk

rst

library ieee;use ieee.std_logic_1164.all;

architecture str of contBCD issignal o_int: std_logic_vector(o'range);signal a: std_logic_vector(o'range);begin

o<=o_int;gen0: for i in 0 to n-1 generate

begingen1: if i=0 generate

a(0)<=e;end generate; gen2: if i>=1 generate

a(i)<=o_int(i-1) and a(i-1); end generate;Ui: entity work.TFF port map(clk,rst,

a(i),o_int(i),open);end generate;

end architecture;

rstclk

o(0)a(0)

o(n-1)a(n-1)

e

o(1)a(1)

T Q

Qnrst

TFF

o(2)a(2)

T Q

Qnrst

TFF

o(3)a(3)

T Q

Qnrst

TFFT Q

Qnrst

TFFT Q

Qnrst

TFF

17. Descripción RTL•Asignaciones concurrentes de señales. Tipos de asignaciones:

•Asignaciones simples (no condicional)[etiqueta:] señal<=[mecanismo retardo] expresión;

•Asignaciones condicional when...else. Codificador prioridad[etiqueta:] señal<=[mecanismo retardo1] expresión1 when condición1 else [[mecanismo retardo2] expresión2 when condición2 else] [...] [mecanismo retardoN] expresiónN;

•Asignaciones selectiva with...select. Multiplexor[etiqueta:] with selección select señal<=[mecanismo retardo1] expresión1 when selección1, [[mecanismo retardo2] expresión2 when selección2,] ... [mecanismo retardoN] expresiónN when others;

•Asignaciones compuesta (no condicional). No sintetizable, usado para benchtest rst<=’0’, ’1’ after 10 ns, ’0’ after 50 ns;

[etiqueta:] señal<=[mecanismo retardo1] expresión1, [[mecanismo retardo2] expresión2,] [...]

[mecanismo retardoN] expresiónN;

•La expresión unaffected no varía el valor de la señal

Page 7: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

17. Descripción RTL•Ejemplo: Descripción RTL de SEL3 usando los tipos de asignaciones simple, condicional when...else y case...select

library ieee; use ieee.std_logic_1164.all;entity SEL3 is port(

s: in std_logic_vector(1 downto 0);a,b,c:in std_logic; o: out std_logic);

end entity;

architecture RTL1a of SEL3 isbegin

o<=(a and (not s(1)) and (not s(0))) or(b and (not s(1)) and s(0)) or(c and s(1));

end architecture;

architecture RTL3a of SEL3 isbegin

with s selecto<=a when "00",

b when "01",c when others;

end architecture;

architecture RTL2a of SEL3 isbegin

o<=a when s="00" elseb when s="01" elsec;

end architecture;

El sintetizador genera para la arquitecturas un circuito equivalente aldel multiplexor

El sintetizador genera para la arquitecturas un codificador de prioridad,que equivale al multiplexorsi se simplifican lasecuaciones

Ecuaciones booleanasequivalentes a la delmultiplexor

s(1)s(0)

cba

o

ab

c

s2

o

00

01

10

11

1

0

s(0)

ab

s(1)

o1

0

c

SEL3

ao

s

bc

2

17. Descripción RTLarchitecture RTL1b of SEL3 issignal ox: std_logic;begin

o<=ox;ox<=(a and (not s(1)) and (not s(0))) or

(b and (not s(1)) and s(0)) or (c and s(1) and (not s(0)));

end architecture; architecture RTL1bx of SEL3 issignal ox: std_logic;begin

o<=ox;ox<=(a and (not s(1)) and (not s(0))) or

(b and (not s(1)) and s(0)) or (c and s(1) and (not s(0))) or ('X' and s(1) and s(0));

end architecture;

architecture RTL3b of SEL3 isbegin

with s selecto<=a when "00",

b when "01",c when "10",'X' when others;

end architecture;

architecture RTL2b of SEL3 isbegin

o<=a when s="00" elseb when s="01" elsec when s="10" else'X';

end architecture;

El simulador simula la entrada ‘X’. El sintetizador simplifica y genera circuito con X como ‘0’,’1’,u otra señal

abc

s2

00

01

10

110

o

1

0

s(0)

ab

s(1)

o1

0

c

La síntesis genera el primer circuito, que puede sersimplicado y genera circuito con X como ‘0’,’1’ u otra señal

s(1)s(0)

cba

o

s(1)s(0)

cba

oabc

s2

00

01

10

11X

oa

bc

s2

00

01

10

11

o

1

0

s(0)

a

s(1)

o1

0

1

0c b

X

ab

c

s2

o

00

01

10

11

Page 8: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

17. Descripción RTLabc

s2

00

01

10

11X

D QDLatch

e(0)(1)

o

architecture RTL3c of SEL3 isbegin

with s selecto<= a when "00",

b when "01", c when "10", unaffected when others;

end architecture;

architecture RTL2c of SEL3 isbegin

o<= a when s="00" else b when s="01" else c when s="10"; --else unaffected es opcional;

end architecture;

1

0

s(0)

a

s(1)

o1

0

1

0c b D QDLatch

eX

Las combinaciones no asignadas infieren latchesSi se desea lógica combinacional es necesario quetodas las combinaciones de señales de entrada tenganun valor asignado a ‘0’ ‘1’ ‘X’ ‘Z’ y otra señal

•Ejemplo: Descripción RTL de bus 8-bits bidireccional triestado17. Descripción RTL

library ieee;use ieee.std_logic_1164.all;

package packBiZ is constant WIDTH: integer:=8;subtype \Bus I/O/Z\ is

std_logic_vector(WIDTH-1 downto 0);end package;

library ieee;use ieee.std_logic_1164.all;use work.packBiZ.\Bus I/O/Z\;

entity BiZ is port(s: in std_logic;O: in \Bus I/O/Z\;I: out \Bus I/O/Z\;B: inout \Bus I/O/Z\);

end entity;

architecture RTLb of BiZ isbegin

I<=B;B<=O when s='1' else (others=>'Z');

end architecture;

architecture RTLc of BiZ isbegin

I<=B;with s select

B<=O when '1',(others=>'Z') when others;end architecture;

architecture RTLa of BiZ issignal Zx,sx: \Bus I/O/Z\;begin

I<=B;B<=(O and sx) or (Zx and not sx);sx<=(others=>s);Zx<=(others=>'Z');

end architecture;

‘Z’ and ‘0’=‘0’ ‘Z’ or ‘1’=‘1’‘Z’ and ‘1’=‘X’ ‘Z’ or ‘1’=‘X’

Error: Resultado de síntesis no deseado!B queda a ‘X’ si e=‘1’

Ok: Resultado de síntesis es el deseado

s OB

0

XI

BO

I

e8 8

8BiZ

O8

I8 B

8

e

Page 9: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

17. Descripción RTL•Es posible asignaciones de elementos en señales compuestas. El rango debe ser ascendente o descendente, según la señal compuesta haya sido declarada como ascendente o descendente

•Los agregados permiten definir el valor de cada elemento en un tipo compuesto. El agregado others=> da un valor al resto de elementos no asignados. Se permiten rangos de agregados.

...señal(elemento)<=...

...señal(left to|downto max)<=......<=expresión(elemento)......<=expresión(left to|downto right)...

...señal(elemento0=>valor0, elemento1=>valor1, ..., elementoN=>valorN);

...señal(elemento0=>valor0, elemento1=>valor1, ..., others=>valor);

...señal(elementoleft to|downto elementoright=>valor1,...);

architecture arquitectura of entidad is...signal a: std_logic_vector(7 downto 0);signal b: std_logic_vector(0 to 7);begin

...a(7)<=b(0); a(6)<=b(1); a(5)<=b(2); a(4)<=b(3);

a(7 downto 4)<=b(0 to 3);

a(7 downto 4)<=(5=>b(2), 7=>b(0), 4=>b(3), others=>b(1));...

end architecture;

Copia el nibble alto de b al nibble alto de a. Asignaciones equivalentes entresi, para los elementos de la señal compuesta:•Elemento a elemento•Rango de elementos•Usando agregados

17. Descripción RTL•La sentencia block...end block permite la agrupación de varias asignaciones concurrentes (procesos e instancias) para mejorar legibilidad con la partición de la arquitectura

•Es posible anidar de bloques•La condición de guarda es opcional. Si no se usa, las asignaciones se realizan siempre que exista un evento sobre alguna de las señales que se leen•Si existe condición de guarda, se realiza la asignación de forma condicional como señal<=guarded asignación; La señal debe ser de tipo resuelta (std_logic o std_logic_vector)•Hay sintetizadores que no admiten bloques con guarda

etiqueta: block [condición_guarda] --declaraciones;begin

--asignaciones concurrentes;--instancias y procesos;

end block etiqueta;

Page 10: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

17. Descripción RTL

library ieee;use ieee.std_logic_1164.all;

architecture RTL of entidad is--declaracionessignal R,S,Q,Qn,e: std_logic;begin

--procesos;--asignaciones concurrentes;--instancias;

Latch_RS: block(e='1')signal \Q\: std_logic;signal RS: std_logic_vector(0 to 1);begin

Q<=guarded \Q\;Qn<=guarded not \Q\; with RS select

\Q\<= unaffected when "00", '1' when "01", '0' when "10", 'X' when others;

RS<=(1=>S, 0=>R);end block;

--procesos;--asignaciones concurrentes;--instancias;

end architecture;

•Ejemplo: Descripción RTL de un Latch RS, dentro de un bloque

Partición del diseño con bloque con guarda para descripción RTL de un Latch RS

El orden de las asignaciones de señales dentrodel bloque no afecta su funcionalidad, por serasignaciones concurrentes. No confundir conun proceso, donde las asignaciones sonsecuenciales

Las señales con guarda se actualizancuando se cumple la condición de guarda, que es e=‘1’ en este ejemplo

Señales locales al bloque: RS, \Q\Señales globales a la arquitecutura: R,S,Q,Qn,e,...

RS_LatchRSe

Q

Qn

entidadAsignacionesconcurrentes

procesos

instancias

18. Descripción Comportamiento•Asignaciones secuenciales de señales y variables, dentro de un proceso

•Variable: Actualización inmediata. Son locales al proceso (excepto tipo shared)•Señal: Actualización al suspenderse el proceso. No pueden ser locales al proceso

•Los procesos se ejecutan concurrentemente entre sí y con las asignaciones concurrentes•Un proceso permite la descripción de algorítmica de un sistema o parte de un sistema (nivel de comportamiento)•Los procesos se comunican entre si con señales

[proceso:] process [(lista_sensibilidad)] [is]variable vble : tipo [:= valor_inicial];... begin

vble:=expresión1;señal<=[mecanismo retardo] expresión2;[wait [on...|until...|for...]...; --si no existe lista_sensibilidad]...

end process [proceso];

Page 11: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

•Una asignación concurrente de señal es en realidad un proceso, y puede ser descrito como tal•Un proceso pueden incluir una lista de sensibilidad, activando el proceso cuando exista un evento sobre una o varias de las señales de la lista•Si no existe lista de sensibilidad, es necesario el uso de wait [on...|until...|for...];

18. Descripción Comportamiento

p: a<=b and c;

p: process(b,c) begin

a<=b and c;end process;

p: process(b,c)variable o: std_logic;begin

o:='0';if b='1' then

if c='1' theno:='1';

end if;end if;a<=o;

end process;

Asignación concurrente

Proceso equivalenteLista de sensibilidadson las señales leidas

Descripción de comportamientoequivalente

p: processvariable o: std_logic;begin

wait on b,c;o:='0';if b='1' then

if c='1' theno:='1';

end if;end if;a<=o;

end process;

Descripción de comportamientoequivalente sinlista de sensibilidady sentencia wait on

18. Descripción Comportamiento•wait [on...|until...|for...]; suspende el proceso bajo unas determinadas condiciones:

•wait; suspende el proceso indefinidamente•wait on señal1,señal2,...; suspende el proceso hasta el próximo evento en la/s señal/es de la lista•wait until condición; suspende el proceso hasta que se cumpla la condición booleana por un evento de la/s señal/es que forman parte de la condición•wait for tiempo; suspende el proceso durante un tiempo

•Normalmente son sintetizables wait on... y wait until..., si existe uno por proceso, y como primera sentencia•wait y wait for... se suelen usar en testbench b<='0', '1' after 10 ns, '0' after 20 ns, '1' after 35 ns; c<='0', '1' after 10 ns, '0' after 35 ns, '1' after 40 ns;

process beginb<='0'; c<='0'; wait for 10 ns;b<='1'; c<='1'; wait for 10 ns;b<='0'; wait for 15 ns;c<='0'; b<='1'; wait for 5 ns;c<='1'; wait;

end process;

process(clk) beginclk<=not clk after 5 ns;

end process;

process beginwait for 5 ns;clk<=not clk;

end process;

Ejemplo del usode wait… para generación deltestbench a,b

Ejemplo del usode wait… para generación deltestbench de un reloj clk

Page 12: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

18. Descripción Comportamiento•Asignaciones Secuenciales de señales y variables. Tipos:

•Asignaciones simples (no condicional)señal<=[mecanismo retardo] expresión; variable:=expresión;

•Asignaciones compuesta (no condicional). No sintetizableseñal<=[mecanismo retardo1] expresión1, [...] [mecanismo retardoN] expresiónN;

if condición1 then --sentencias secuenciales 1;

[elsif condición2 then --sentencias secuenciales 2;]

[...][else

--asignaciones secuenciales defecto;]end if;

•Selectivo case...is. Multiplexor. Es posible usar en las condiciones rangos y varias condiciones con |case expresión is

when condición1 => --sentencias secuenciales 1;[when condición2 => --sentencias secuenciales 2;][...]when others => --sentencias secuenciales defecto;

end case;

•Control Secuencial. Tipos:•Condicional if...then. Codificador prioridad

18. Descripción Comportamiento

•Bucles. Tipos:•for...loop. Se especifica un rango

•while...loop. Se especifica una condición[etiqueta]: while condición loop

--sentencias secuenciales;end loop [etiqueta];

[etiqueta]: for rango loop --sentencias secuenciales;

end loop [etiqueta];

•La asignación null no cambia/n la/s señal/es

function reverse_bits(a: std_logic_vector) return std_logic_vector isvariable i: integer;variable b: std_logic_vector(a'high downto a'low);begin

for i in a'low to a'high loopb(a'high-i):=a(i);

end loop; return b;end function;

function reverse_bits(a: std_logic_vector) return std_logic_vector isvariable i: integer:= a'low;variable b: std_logic_vector(a'high downto a'low);begin

while i<=a'high loopb(a'high-i):=a(i); i:=i+1;

end loop; return b;end function;

Funciones equivalentesusando bucle for…loopy bucle while…loop

Page 13: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

18. Descripción Comportamiento•Ejemplo: Sistema de medida de periodo T y nivel alto D de una señal digital i.

•Diseño síncrono con un solo reloj•Obtención de la lectura del anterior D/T con sel=0/1. •Ovflw si hubo overflow en D/T con sel=0/1

1 2 D 1 2

1 2 1 2TT-1T-2

D-1

D,Te_regs

clr_cnts

clr_cnts

clr_cnts

clr_cnts

/e_cntDe_cntD e_cntD

D=D(t)/TCLK

T=T(t)/TCLK

clk

rst

i

Meter_D

Meter_T

Reg_D,Reg_T /e_regs

•Metodología Top-Down:•Unidad de proceso (UP):

•cntT: Contador ascendente, reset a X”01”, detección overflow•cntD: Contador ascendente con habilitación, reset a X”01”, detección overflow•regs: Conjunto de registros para almacenamiento de la últimas medidas de Meter_T/D y Overflow_T/D•mux: Multiplexor con sel=0/1 para lectura de D/T y overflow D/T

•Unidad de control (UC): generación señales de control clr_cnt, e_cntD, e_regs

18. Descripción Comportamiento

UC

clk

i

rst

cntTclk

cntDclk

8 Meter_T

Ovflw_T

8 Meter_D

Ovflw_D

clr_cnt

e_cntD regs

clk

e_regs

8 reg_T

reg_Ovflw_T

8 reg_D

reg_Ovflw_D

mux

sel

8 meterovflw

Page 14: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

TDmeter

8

clk

i

rst

sel

18. Descripción Comportamientolibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;

entity TDmeter is port(

clk: in std_logic;rst: in std_logic;i,sel: in std_logic;meter: out std_logic_vector(3 downto 0);ovflw: out std_logic);

end entity;

architecture beh1 of TDmeter issignal Meter_D,Meter_T: unsigned(meter'range);signal Ovflw_T,Ovflw_D: boolean;signal reg_T,reg_D: unsigned(meter'range);signal reg_Ovflw_T,reg_Ovflw_D: boolean;signal clr_cnt,e_regs,e_cntD: boolean;begin

UC: process...end process;cntT: process...end process;cntD: process...end process;regs: process...end process;mux: process...end process;

end architecture;

UC

clk

i

rst

cntTclk

cntDclk

8 Meter_T

Ovflw_T

8 Meter_D

Ovflw_D

clr_cnt

e_cntD regs

clk

e_regs

8 reg_T

reg_Ovflw_T

8 reg_D

reg_Ovflw_D

mux

sel

8 meterovflw

•Cada unidad se ha implementado usando un procesoDeclaración de señales de comunicación entre los procesos•Meter_T/D, y reg_T/D son tipo unsigned(meter’range)•Ovflw_T/D, y reg_Ovflw_T/D son tipo boolean•Señales control son tipo boolean

Conjunto de procesos

•cntT: Contador ascendente, reset a X=“01”, detección overflow18. Descripción Comportamiento

cntT: processvariable var_T: unsigned(meter'range);begin

wait until clk'event and clk='1';if clr_cnt then

var_T:=(0=>'1',others=>'0');Ovflw_T<=false;

elsevar_T:=var_T+1;if var_T=0 then

Ovflw_T<=true;end if;

end if;Meter_T<=var_T;

end process;

Se activa el proceso con de clk(el proceso no tiene lista de sensibilidad)

Reset síncrono a X”01” usando agregadosOvflw_T a false

Cuenta +1 usando la variable (asignación inmediata)Detección de overflow cuando variable=X”00”

Asignación de la variable a la señal

Declaración de una variable usada para contar

•cntD: Contador ascendente, reset a X=“01”, detección overflowcntD: process(clk)

constant MAX: unsigned(meter'range):=(others=>'1');begin

if clk'event and clk='1' thenif clr_cnt then

Meter_D<=conv_unsigned(1,meter'length);Ovflw_D<=false;

elsif e_cntD thenMeter_D<=Meter_D+1;if Meter_D=MAX then

Ovflw_D<=true;end if;

end if;end if;

end process;

Lista de sensibilidad del proceso. Se activa por evento en clk

Detección del de clk

Si e_cntD es true (habilitación del contador D):Cuenta +1 usando la señal (asignación no inmediata)Detección de overflow cuando la señal=MAX=X”FF”

Declaración de constante local MAX=X”FF”

Reset síncrono a X”00” usando conv_unsigned(…);Ovflw_D a false

Page 15: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

18. Descripción Comportamiento•regs: Conjunto de registros para almacenamiento de las últimas medidas de Meter_T/D y Ovrflw_T/D

regs: process beginwait until rising_edge(clk) and e_regs;--if e_regs thenreg_T<=Meter_T;reg_D<=Meter_D;reg_Ovflw_T<=Ovflw_T;reg_Ovflw_D<=Ovflw_D;--end if;

end process;

Escritura síncrona de los registrosNo existe valor inicial por reset, (valor inicial indeterminado)

Se activa el proceso por de clk y e_regs=true (habilitación de los registros)(Proceso sin lista de sensibilidad)

•mux: Multiplexor con sel=0/1 para lectura de D/T y overflow D/T

Puede ser no sintetizable. Se puede colocara condición de habilitación fuera del wait until...

mux: process--(sel,reg_T,reg_D,reg_Ovflw_T,reg_Ovflw_D)function convierte(a: boolean) return std_logic isbegin

if a then return '1';else return '0'; end if;

end function;begin

wait on sel,reg_T,reg_D,reg_Ovflw_T,reg_Ovflw_D;if sel='1' then

ovflw<=convierte(reg_Ovflw_T);meter<=std_logic_vector(reg_T);

elseovflw<=convierte(reg_Ovflw_D);meter<=std_logic_vector(reg_D);

end if;end process;

end architecture;

Declaración local de una función de conversión de boolean a std_logic

Señales de activación del procesoSi no es sintetizable, se puede usarlista de sensibilidad en el procesoSi se modela un combinacional, esnecesario que estén todas las señalesque son leídas en el proceso

Todas las opciones están cubiertas:no se infiere ‘latch’

18. Descripción Comportamiento•Unidad de control (UC): generación señales de control clr_cnt, e_cntD, e_regs

S0 S1 S2

S3 S4

S5

0 1

01

1

11

1

0

0

S0 S1 S2 S4S3 S5 S3

1 2 D 1 2

1 2 1 2TT-1T-2

D-1

D,Te_regs

clr_cnts

clr_cnts

clr_cnts

clr_cnts

/e_cntDe_cntD e_cntD

D=D(t)/TCLK

T=T(t)/TCLK

clk

rst

i

Meter_D

Meter_T

Reg_D,Reg_T /e_regs

0

0

FSM Moore

Page 16: 16. Descripción Estructuraldeeea.urv.cat/DEEEA/ecanto/WWW/SED/vhdl_5.pdf · 2007-10-08 · 16. Descripción Estructural •Instancias interconectadas por señales. Tres tipos instanciación:

18. Descripción Comportamiento•Unidad de control (UC): generación señales de control clr_cnt, e_cntD, e_regs

S0 S1 S2

S3 S4

S5

0 1

01

1

11

1

0

0

0

0

UC: process(clk,rst)type estados is (S0,S1,S2,S3,S4,S5);variable s: estados;begin

if rst='1' thens:=S0;

elsif rising_edge(clk) then case s is

when S1=> if i='1' then s:=S2; end if;when S2|S5=> if i='1' then s:=S3; else s:=s4; end if;when S3=> if i='0' then s:=S4; end if;when S4=> if i='1' then s:=S5; end if;when others=> if i='0' then s:=S1; end if;

end case;case s is

when S2 downto S0=> clr_cnt<=true; e_cntD<=false; e_regs<=false; when S3=> clr_cnt<=false; e_cntD<=true; e_regs<=false; when S4=> clr_cnt<=false; e_cntD<=false; e_regs<=false; when S5=> clr_cnt<=true; e_cntD<=false; e_regs<=true; when others=> clr_cnt<=true; e_cntD<=false; e_regs<=false;

end case;end if;

end process;

FSM Moore

Reset asíncrono

Control del cambio entre estados

Sel

ecci

ón

ltip

leS

elec

ció

nco

n r

ang

o

Señales de salidason función sólodel estado (no delas entradas)FSM Moore