23
Arquitectura de Computadores Informes de pr´ acticas Fecha: Curso 2011/2012 Primer Cuatrimestre Autores: David Mart´ ınez Mart´ ınez Lionel Jos´ e Hern´ andez Garc´ ıa

PRACTICA3-MULTIPLICADOR_SECUENCIAL

Embed Size (px)

Citation preview

Page 1: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Arquitectura de ComputadoresInformes de practicas

Fecha:

Curso 2011/2012Primer Cuatrimestre

Autores:

David Martınez MartınezLionel Jose Hernandez Garcıa

Page 2: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Indice general

3. Multiplicador secuencial de numeros sin signo codificados en binario utilizando elalgoritmo de “lapiz y papel” 23.1. Metodologıa del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2. Diseno a nivel de transferencia de registros . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3.2.1. Diseno del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33.2.2. Funcionamiento del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3.3. Diseno de la unidad de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.3.1. Funcion de la unidad de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.3.2. Maquina de estados finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.4. Codigo VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4.1. Implementacion del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.4.2. TestBench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.5. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2. Circuito generador de Codigos de Redundancia Cıclica (CRC) 112.1. Diseno del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2. Metodologıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2.1. Primera implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.2. Segunda Implementacion (alternativa) . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.3. Codigo VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.1. Implementacion del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.2. TestBench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.4. Codigo VHDL (alternativo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.5. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1. El Filtro MAC-FIR 181.1. Metodologıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.2. Diseno del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3. Codigo VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.3.1. Implementacion del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.3.2. TestBench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1

Page 3: PRACTICA3-MULTIPLICADOR_SECUENCIAL

3 Multiplicador secuencial de numeros sin signo codi-

ficados en binario utilizando el algoritmo de “lapiz

y papel”

3.1. Metodologıa del algoritmo

El algoritmo de “lapiz y papel”, que implementaremos para obtener el producto de dos numeros (mul-tiplicando (Q) y multiplidador(M)) codificados en binario, opera de la siguiente forma:

En cada iteracion se multiplica el correspondiente bit del multiplicador con el multiplicando obte-niendo un resultado parcial (pp) que sera: o bien ‘0’ o bien el multiplicando.

El resultado parcial (pp) se suma con el resultado acumulado (ca) anterior en la posicion queocupaba el bit del multiplicador para lo cual previamente se desplaza a la derecha el resultadoacumulado.

Se realizan tantas iteraciones como bits tenga el multiplicador.

3.2. Diseno a nivel de transferencia de registros

Para implementar el algoritmo dividimos el circuito en unidad de procesamiento (UP) y unidad decontrol (UC).

La unidad de procesamiento esta formada por: dos registros ‘Q’ y ‘M’ que almacenaran el multiplicandoy multiplicador respectivamente (ambos de 8 bits), un registro ‘A’ (de 8 bits) que contiene el resultadoacumulado (ra) en cada iteracion, un sumador de 8 bits que sumara el contenido de ‘M’ con el de ‘A’si Q(i)=1 (el correspondiente bit de Q sea un 1) y un contador encargado de identificar el numero deiteraciones realizadas.

NOTA

Modificaciones hechas con respecto al guion de esta practica:

Se ha eliminado el registro ‘C’ que almacenaba el acarreo de salida del sumador puesto que no esnecesario.

Se ha anadido un multiplexor controlado por Q(0) con entradas pp(0) y CA(0) y cuya salida secargara en la posicion mas significativa del registro ‘Q’ cuando este realize el desplazamiento a laderecha.

El contador se inicializa al valor “1000” en vez de “111” y por tanto su salida (cnt) es un bus de4 bits.

2

Page 4: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Diseno a nivel de transferencia de registros

3.2.1. Diseno del circuito

La estructura del circuito se corresponde con el siguiente esquema, donde aparecen detallados todoslos componentes y senales que forman parte del multiplicador.

Figura 3.1: Circuito “Multiplicador secuencial”

3.2.2. Funcionamiento del circuito

Explicaremos ahora como operan los componentes anteriores para realizar la multiplicacion:

Inicializacion

En primer lugar se inicializa el sistema poniendo a 0 todos los bits del acumulador ‘A’ y cargando enlos registros ‘Q’ y ‘M’ el multiplicando y el multiplicador respectivamente, para ello se activara la senalde inicializacion ‘init’ del registro ‘A’ y las senales de carga (init) de los registros ‘Q’ y ‘M’.

Resultado parcial y suma

En todo momento el sumador realizara la suma del multiplicando (m) con el resultado acumulado(ra) y en funcion del bit Q(0) se decidira si el nuevo resultado acumulado (ra) se almacena o no en elacumulador ‘A’, acto seguido se desplazan a la derecha los registros ‘A’ y ‘Q’ de forma que el bit menossignificativo de ‘ra’ pasa a ser el mas significativo de ‘q’ y se pierde el LSD de q, ya examinado.1

Para realizar este paso conectamos el LSD de ‘q’ a la senal de carga del registro ‘A’ de forma que siq(0)=1 se almacenan los 8 bits mas significativos2 de la salida del sumador en el registro ‘A’ y si q(0)=0el acumulador desplazara a la derecha su contenido sin tener en cuenta la salida del sumador. Habra queanadir un multiplexor controlado tambien por q(0) de forma que cuando se produce el desplazamientodel registro ‘Q’, si q(0)=1 se introducira por la izquierda el LSD de la salida del sumador (no almacenadoen el acumulador) y si q(0)=0 sera el LSD de ‘A’ (que sale de ‘A’ en el desplazamiento a la derecha deeste) quien pase a ser el MSD de ‘Q’

1Los bits de ‘q’ ya examinados se habran perdido al desplazar por lo que quedara en q(0) el siguiente bit a examinar,de esta forma se puede utilizar el espacio que queda libre a la dercha en el registro ‘Q’ para almacenar los bit menossignificativos del resultado final.

2La salida del sumador de numeros de 8 bits podra ser de 9 bits en el caso en que produzca acarreo, este acarreo pasarıaa ser el MSD de la suma siendo esta de 9 bits, puesto que el registro acumulador es de 8 bits solo se almacenan en el los 8bits mas significativos de la suma almacenandose el LSD de la suma en en bit mas significativo de ‘Q’ cuando se produzcael desplazamiento a la derecha de este.

3

Page 5: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Diseno de la unidad de control

Finalizacion

Cuando el contador tome el valor ”000”se habran realizado todas las iteraciones correspondientes acada bit de ”q”. Mediante un circuito de deteccion de cero (Z) se indica a la unidad de control que elcontador toma dicho valor.

La salida del sistema estara almacenada en los registros ‘A’ y ‘Q’. Los 8 bit mas significativos estaranen ‘A’ y los 8 menos significativos en ‘Q’ de forma que se obtiene el resultado de la multiplicacionconcatenando estos dos registros.

NOTA

Comentamos en este punto las modificaciones hechas en la estructura del multiplicador propuesta enel guion de esta practica.Segun el guion, para cada bit del multiplicando (Q), si dicho bit es igual a 1 se carga en el registroacumulador el resultado de sumar el mulplicador (M) con el contenido del registro acumulador; en elsiguiente flanco de reloj se desplaza a la derecha el contenido del acumulador. En esta solucion de lapractica la salida del sumador (pp) se carga ya desplazada en el registro acumulador ‘A’ de forma quecuando se produce la carga del registro ‘A’ CA(0) pasa a ser pp(1), CA(1) pp(2), CA(2) pp(3), ..., CA(7)pasa a ser pp(8). El bit menos significativo de pp (pp(0)) se guardara a la izquierda del registro ‘Q’ quehabra desplazado todo su contenido a la derecha. En caso de que el bit de ‘Q’ correspondiente sea un 0 nose almacena el resultado de la suma sino que los registros ‘A’ y ‘Q’ desplazan a la derecha su contenidoy el bit Q(7) pasa a ser CA(0). De esta forma se requiere un solo ciclo de reloj en vez de dos por cadabit de Q por lo que la multiplicacion de 2 numeros de 8 bits se realiza en 8 ciclos de reloj envez de 16 como indica el guion de la practica.

3.3. Diseno de la unidad de control

3.3.1. Funcion de la unidad de control

La unidad de control UC es la encargada de dar las senales de control a cada uno de los registros yal contador que componen el circuito, estas senales seran las siguientes:

Registro M

init: Senal de habilitacion de carga.

Registro Q

init: Senal de habilitacion de carga.

sh: Habilitacion de desplazamiento a la derecha.

Registro A

ldA: Habilitacion de carga del registro A.

shA: Desplazamiento a la derecha del registro A.

Contador C

init: Inicializa el contador al valor “1000”.

4

Page 6: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Diseno de la unidad de control

3.3.2. Maquina de estados finitos

Para asignar el valor correspondiente en cada instante a las senales de control utilizaremos una ma-quina de estados finitos de tipo Mealy, la cual, a partir de un conjunto de entradas (“I”,“Z”,“Q(0)”)y del estado actual (state) determinara el nuevo estado del sistema (nextstate) y las senales de control(“init”,“sh”,“shA”, y “ld”).

Estado del sistema

��

I, Z,Q(0) // Circuito

QQ

// init, sh, shA, ldA

Esta maquina de estados se encontrara inicialmente en el estado INICIO con salidas (init, sh, shA, ldA) =(0, 0, 0, 0) y permanecera en ese estado con dichas salidas hasta que la senal “I” se ponga a “1”, momentoen el que la maquina de estados pasara al estado SUMDESDEC dando la salida (init, sh, shA, ldA) =(1, 0, 0, 0).

En el estado SUMDESDEC las salidas tomaran los valores (init, sh, shA, ldA) = (0, 1, 1, 0) para lascombinaciones de entradas (I,Q(0), Z) = (X, 0, 0) y (init, sh, shA, ldA) = (0, 1, 0, 1) si las entradas valen(I,Q(0), Z) = (X, 1, 0). Por ultimo, ante las entradas (I,Q(0), Z) = (X,X, 1) la maquina de estadosvolvera al estado INICIO y dara la salida (init, sh, shA, ldA) = (0, 0, 0, 0).

Observar que el estado SUMDESDEC la senal “I” sera ignorada al igual que son ignoradas las senales“Q(0)” y “Z” en el estado INICIO.

La tabla de transiciones para esta maquina de estados segun la descripcion anterior es la siguiente:

ESTADO ACTUALENTRADAS

ESTADO SIGUIENTESALIDAS

I Q(0) Z init sh shA ldA

INICIO

0 0 0 INICIO 0 0 0 00 0 1 INICIO 0 0 0 00 1 0 INICIO 0 0 0 00 1 1 INICIO 0 0 0 01 0 0 SUMDESDEC 1 0 0 01 0 1 SUMDESDEC 1 0 0 01 1 0 SUMDESDEC 1 0 0 01 1 1 SUMDESDEC 1 0 0 0

SUMDESDEC

0 0 0 SUMDESDEC 0 1 1 00 0 1 INICIO 0 0 0 00 1 0 SUMDESDEC 0 1 0 10 1 1 INICIO 0 0 0 01 0 0 SUMDESDEC 0 1 1 01 0 1 INICIO 0 0 0 01 1 0 SUMDESDEC 0 1 0 11 1 1 INICIO 0 0 0 0

NOTA

Como puede apreciar en este apartado, las modificaciones hechas con respecto al guion de la practicareducen a 2 el numero de estados de la maquina de estados por lo que su implementacion sera massencilla.

5

Page 7: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Codigo VHDL

3.4. Codigo VHDL

3.4.1. Implementacion del circuito

1 l ibrary IEEE ;2 use IEEE . STD LOGIC 1164 .ALL;3 use IEEE .NUMERIC STD.ALL;4

5 entity mult sec i s6 Port ( inbusQ : in STD LOGIC VECTOR (7 downto 0 ) ;7 inbusM : in STD LOGIC VECTOR (7 downto 0 ) ;8 outbus : out STD LOGIC VECTOR (15 downto 0 ) ;9 I : in STD LOGIC;

10 r s t : in STD LOGIC;11 c l k : in STD LOGIC ) ;12 end mult sec ;13

14 architecture Behaviora l of mult sec i s15

16 type t y p e s t a t e i s ( INICIO , SUMDESDEC) ;17 signal s ta te , n ex t s t a t e : t y p e s t a t e ;18

19 signal pp : s t d l o g i c v e c t o r (8 downto 0 ) ;20 signal Q, M, CA : s t d l o g i c v e c t o r (7 downto 0 ) ;21 signal i n i t , ldA , shA , sh : s t d l o g i c ;22 signal CNT : unsigned (3 downto 0 ) ;23 signal Z : s t d l o g i c ;24

25 begin26

27 −−r e g i s t r o s C y A:28 process ( r s t , c l k )29 begin30 i f ( r s t = ’1 ’) then31 CA<=(others => ’0 ’);32 e l s i f r i s i n g e d g e ( c l k ) then33 i f ( i n i t = ’1 ’) then34 CA <= ( others => ’0 ’);35 e l s i f ( ldA = ’1 ’) then36 CA <= pp(8 downto 1 ) ;37 e l s i f ( shA= ’1 ’) then38 CA <= ’0 ’ & CA(7 downto 1 ) ;39 end i f ;40 end i f ;41 end process ;42

43 −−r e g i s t r o Q:44 process ( r s t , c l k )45 begin46 i f ( r s t = ’1 ’) then47 Q<=(others => ’0 ’);48 e l s i f r i s i n g e d g e ( c l k ) then49 i f ( i n i t = ’1 ’) then

6

Page 8: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Codigo VHDL

50 Q <= inbusQ ;51 e l s i f ( sh = ’1 ’) then52 i f (Q(0)= ’1 ’ ) then53 Q <= pp (0) & Q(7 downto 1 ) ;54 else55 Q <= CA(0) & Q(7 downto 1 ) ;56 end i f ;57 end i f ;58 end i f ;59 end process ;60

61 −−r e g i s t r o M:62 process ( r s t , c l k )63 begin64 i f ( r s t = ’1 ’) then65 M<=(others => ’0 ’);66 e l s i f r i s i n g e d g e ( c l k ) then67 i f ( i n i t = ’1 ’) then68 M <= inbusM ;69 end i f ;70 end i f ;71 end process ;72

73 −−sumador :74 pp<=s t d l o g i c v e c t o r ( unsigned ( ’0 ’&CA(7 downto 0))+ unsigned ( ’0 ’&M) ) ;75

76 −−s a l i d a :77 outbus<=CA(7 downto 0) & Q(7 downto 0 ) ;78

79 −−contador :80 process ( c lk , r s t )81 begin82 i f r s t = ’1 ’ then83 cnt<=(others => ’0 ’);84 e l s i f r i s i n g e d g e ( c l k ) then85 i f i n i t = ’1 ’ then86 cnt<=”1000” ;87 else cnt<=cnt −1;88 end i f ;89 end i f ;90 end process ;91

92 −−d e t e c t o r de cero93 process ( cnt )94 begin95 i f ( cnt=”0000” ) then96 z<= ’1 ’;97 else98 z<= ’0 ’;99 end i f ;

100 end process ;101

102 −−Unidad de c o n t r o l

7

Page 9: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Codigo VHDL

103 process ( c lk , r s t )104 begin105 i f ( r s t = ’1 ’) then106 s ta te<=INICIO ;107 e l s i f r i s i n g e d g e ( c l k ) then108 s ta te<=next s t a t e ;109 end i f ;110 end process ;111

112 process ( s ta te , I ,Q, z )113 begin114 i n i t<= ’ 0 ’ ;115 ldA<= ’0 ’;116 shA<= ’0 ’;117 sh <= ’0 ’;118

119 case s t a t e i s120 when INICIO =>121 i f ( I = ’1 ’) then122 nexts tate<=SUMDESDEC;123 i n i t <= ’1 ’;124 else125 nexts tate<=INICIO ;126 end i f ;127

128 when SUMDESDEC =>129 i f ( z = ’1 ’) then130 nexts tate<=INICIO ;131 else132 nexts tate<=SUMDESDEC;133 sh <= ’1 ’;134 i f (Q(0)= ’1 ’ ) then135 ldA<= ’1 ’;136 else137 shA<= ’1 ’;138 end i f ;139 end i f ;140 end case ;141 end process ;142 end Behaviora l ;

3.4.2. TestBench

1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 .ALL;3 USE i e e e . s t d l o g i c u n s i g n e d . a l l ;4 USE i e e e . numer ic std .ALL;5

6 ENTITY mult tb vhd IS7 END mult tb vhd ;8 ARCHITECTURE behavior OF mult tb vhd IS9

8

Page 10: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Codigo VHDL

10 −− Component Dec lara t ion f o r the Unit Under Test (UUT)11 COMPONENT mult sec12 PORT(13 inbusQ : IN s t d l o g i c v e c t o r (7 downto 0 ) ;14 inbusM : IN s t d l o g i c v e c t o r (7 downto 0 ) ;15 I : IN s t d l o g i c ;16 r s t : IN s t d l o g i c ;17 c l k : IN s t d l o g i c ;18 outbus : OUT s t d l o g i c v e c t o r (15 downto 0)19 ) ;20 END COMPONENT;21

22 −−Inputs23 SIGNAL I : s t d l o g i c := ’ 0 ’ ;24 SIGNAL r s t : s t d l o g i c := ’ 0 ’ ;25 SIGNAL c l k : s t d l o g i c := ’ 0 ’ ;26 SIGNAL inbusQ : s t d l o g i c v e c t o r (7 downto 0) := ( others => ’0 ’);27 SIGNAL inbusM : s t d l o g i c v e c t o r (7 downto 0) := ( others => ’0 ’);28

29 −−Outputs30 SIGNAL outbus : s t d l o g i c v e c t o r (15 downto 0 ) ;31 constant per : time := 20 ns ;32 BEGIN33

34 −− I n s t a n t i a t e the Unit Under Test (UUT)35 uut : mul t sec PORT MAP(36 inbusQ => inbusQ ,37 inbusM => inbusM ,38 outbus => outbus ,39 I => I ,40 r s t => r s t ,41 c l k => c l k42 ) ;43

44 tb : PROCESS45 BEGIN46 I <= ’0 ’;47 inbusM<=” 11111111 ” ;48 inbusQ<=” 11111111 ” ;49 −− Wait 3∗ per f o r g l o b a l r e s e t to f i n i s h50 wait for 5∗ per ;51 −− Place s t i m u l u s here52 I <= ’1 ’;53 wait for per ;54 I <= ’0 ’;55 wait ; −− w i l l wai t f o r e v e r56 END PROCESS;57

58 c lk<=not c l k after per /2 ; −−r e l o g con duty c i c l e d e l 50 %59 r s t<= ’1 ’ , ’ 0 ’ after 3∗ per ;60

61 END;

9

Page 11: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Multiplicador secuencial de numeros sin signo codificados en binario utilizando el algoritmo de “lapiz ypapel” Resultados

3.5

.R

esu

ltad

os

Rea

liza

mos

dos

sim

ula

cion

es,

un

aco

nlo

sdos

may

ore

sn

um

eros

de

8bit

s(2

55x255)

para

com

pro

bar

qu

en

oh

aya

pro

ble

mas

por

des

bord

am

iento

yot

raco

nd

osn

um

eros

cual

esqu

iera

(10x

21).

Vem

osad

emas

com

oal

imp

lem

enta

rel

mu

ltip

lica

dor

de

lafo

rma

det

all

ad

aen

esta

pra

ctic

ase

reali

zau

np

rod

uct

op

arci

alp

orca

da

cicl

od

ere

loj

de

form

aqu

eel

resu

ltad

od

em

ult

ipli

car

2n

um

eros

de

8b

its

seob

tien

ep

asa

dos

8ci

clos

de

relo

j.

Fig

ura

3.2:

Pri

mer

asi

mu

laci

onco

nin

buq=

inbu

sm=

255

(FF

enh

exad

ecim

al)

,ou

tbu

s=65025

(FE

01

enh

exad

ecim

al)

Fig

ura

3.3:

Seg

un

da

sim

ula

cion

con

inbu

q=10

(0A

enh

exad

ecim

al)

,in

busm

=21

(15

enh

exad

ecim

al)

,ou

tbu

s=210

(D2

enh

exad

ecim

al)

10

Page 12: PRACTICA3-MULTIPLICADOR_SECUENCIAL

2 Circuito generador de Codigos de Redundancia Cıcli-

ca (CRC)

2.1. Diseno del circuito

Esquema del generador de CRC tal como aparece en el guion de la practica:

Figura 2.1: Esquema de generador de CRC

2.2. Metodologıa

2.2.1. Primera implementacion

En primer lugar se instancia un componente del tipo registro, declarado en la entity registro, quedefine el funcionamiento de los biestables usados para construir el circuito CRC. Estos biestables constansimplemente de salida, entrada, senal de inicializacion que pone la salida a un valor predeterminado, senalde reset y reloj.

Mediante un “for-generate” se generan 12 biestables y comparando con distintos “if” el ındice de cadabiestable se conectan en el circuito de la forma apropiada:

En primer lugar, la entrada del registro 0 se conecta con la senal resultande de la operacion xorentre el dato de entrada y la salida del registro 11.

Los registros del 1 al 3 conectan su entrada con el resultado de la operacion xor entre la salida delregistro anterior y la entrada del registro 0.

Los registros del 4 al 10 conectan su entrada a la salida del registro anterior.

Por ultimo, la entrada del registro 11 se conecta con el resultado de la operacion xor entre la salidadel registro 10 y la entrada el registro 0.

11

Page 13: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Codigo VHDL

2.2.2. Segunda Implementacion (alternativa)

Se puede implementar el circuito anterior de forma mas comportamental definiendo la senal de salidacomo un bus de 12 bits e indicando las operaciones logicas que se deben realizar en cada ciclo de reloj ala senal de salida.

El sintetizador de VHDL se encargara de generar el circuito apropiado que realice dichas operaciones.

2.3. Codigo VHDL

2.3.1. Implementacion del circuito

1 l ibrary IEEE ;2 use IEEE . STD LOGIC 1164 .ALL;3

4 entity CRC i s5 Port ( c r c i n : in STD LOGIC;6 c r c o u t : out STD LOGIC VECTOR (0 to 1 1 ) ;7 c l k : in STD LOGIC;8 r s t : in STD LOGIC;9 i n i t : in STD LOGIC ) ;

10 end CRC;11

12 architecture Behaviora l of CRC i s13

14 signal r e g i n : s t d l o g i c v e c t o r (0 to 1 1 ) ;15 signal r eg out : s t d l o g i c v e c t o r (0 to 1 1 ) ;16

17 component r e g i s t r o i s18 port ( din : in STD LOGIC;19 dout : out STD LOGIC;20 r s t : in STD LOGIC;21 i n i t : in STD LOGIC;22 c l k : in STD LOGIC ) ;23 end component ;24

25 begin26 g e n e r a r e g i s t r o s : for i in 0 to 11 generate27 reg : r e g i s t r o port map ( r e g i n ( i ) , r eg out ( i ) , r s t , i n i t , c l k ) ;28

29 genera xor1 : i f ( i =0) generate30 r e g i n ( i ) <= reg out (11) xor c r c i n ;31 end generate ;32

33 genera xor : i f ( ( ( i >=1)and( i <=3))or ( i =11)) generate34 r e g i n ( i )<=reg out ( i −1) xor r e g i n ( 0 ) ;35 end generate ;36

37 c o n e c t a r e g i s t r o s : i f ( ( i >=4)and( i <=10)) generate38 r e g i n ( i )<=reg out ( i −1);39 end generate ;40

41 end generate ;

12

Page 14: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Codigo VHDL

42

43 crc out<=reg out ;44 end Behaviora l ;

Entity registro

El siguiente codigo corresponde a la entity “registro” utilizada en el diseno anterior:

1 l ibrary IEEE ;2 use IEEE . STD LOGIC 1164 .ALL;3

4 entity r e g i s t r o i s5 Port ( din : in STD LOGIC;6 dout : out STD LOGIC;7 r s t : in STD LOGIC;8 i n i t : in STD LOGIC;9 c l k : in STD LOGIC ) ;

10 end r e g i s t r o ;11

12 architecture Behaviora l of r e g i s t r o i s13 begin14

15 process ( r s t , c lk , i n i t )16 begin17

18 i f ( r s t = ’1 ’) then19 dout <= ’0 ’;20 e l s i f r i s i n g e d g e ( c l k ) then21 i f ( i n i t = ’1 ’) then22 dout <= ’0 ’;23 else24 dout<=din ;25 end i f ;26 end i f ;27 end process ;28 end Behaviora l ;

2.3.2. TestBench

Para introducir la secuencia de bits a generador de crc utilizamos un registro de desplazamientoconectando su bit menos significativo a la entrada del circuito de forma que que al activarse la senal initse carga con el dato a introducir al circuito y en cada flanco de reloj desplaza su contenido. De esta formase introducen bit a bit los datos deseados en el generador de crc.

1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 .ALL;3 USE i e e e . numer ic std .ALL;4

5 ENTITY CRC TB IS6 END CRC TB;7

8 ARCHITECTURE behavior OF CRC TB IS9 −− Component Dec lara t ion

13

Page 15: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Codigo VHDL

10 COMPONENT CRC11 PORT(12 c r c i n : in STD LOGIC;13 c r c o u t : out STD LOGIC VECTOR (0 to 1 1 ) ;14 c l k : in STD LOGIC;15 r s t : in STD LOGIC;16 i n i t : in STD LOGIC ) ;17 END COMPONENT;18

19 −−Inputs20 SIGNAL c r c i n : s t d l o g i c := ’0 ’ ;21 SIGNAL datos : s t d l o g i c v e c t o r (0 to 11) := ” 100100000001 ” ;22

23 SIGNAL i n i t : s t d l o g i c := ’ 0 ’ ;24 SIGNAL r s t : s t d l o g i c := ’ 0 ’ ;25 SIGNAL c l k : s t d l o g i c := ’ 0 ’ ;26

27 −−Outputs28 SIGNAL c r c o u t : s t d l o g i c v e c t o r (0 to 1 1 ) ;29

30 −−Constantes31 constant per : time := 20 ns ;32

33 BEGIN34 −− Component I n s t a n t i a t i o n35 uut : CRC PORT MAP(36 c r c i n => c r c i n ,37 c r c o u t => crc out ,38 c l k => c lk ,39 r s t => r s t ,40 i n i t => i n i t ) ;41

42 −− Test Bench Statements43 tb : PROCESS44 BEGIN45 i n i t <= ’ 0 ’ ;46 wait for 5∗ per ;47 i n i t <= ’1 ’;48 wait for per ;49 i n i t <= ’0 ’;50 wait ; −− w i l l wai t f o r e v e r51 END PROCESS tb ;52

53 −− R e g i s t r o de entrada con e l numero a t r a n s m i t i r54 r eg ent rada : process ( c l k )55 begin56

57 i f r i s i n g e d g e ( c l k ) then58 i f ( i n i t = ’1 ’) then59 datos <= ” 100100000001 ” ;60 else61 datos <= datos (1 to 11) & ’0 ’ ;62 end i f ;

14

Page 16: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Codigo VHDL (alternativo)

63 end i f ;64 end process r eg ent rada ;65

66 −− Relo j67 c lk<=not c l k after per /2 ; −−r e l o g con duty c i c l e d e l 50 %68

69 −− Reset70 r s t<= ’1 ’ , ’ 0 ’ after 3∗ per ;71

72 −− Entrada a l c i r c u i t o73 c r c i n <= datos ( 0 ) ;74 END;

2.4. Codigo VHDL (alternativo)

1 l ibrary IEEE ;2 use IEEE . STD LOGIC 1164 .ALL;3

4 entity CRC i s5 Port ( c r c i n : in STD LOGIC;6 c r c o u t : out STD LOGIC VECTOR (0 to 1 1 ) ;7 c l k : in STD LOGIC;8 r s t : in STD LOGIC;9 i n i t : in STD LOGIC ) ;

10 end CRC;11

12 architecture Behaviora l of CRC i s13

14 signal reg : s t d l o g i c v e c t o r (0 to 1 1 ) ;15 signal a : s t d l o g i c ;16

17 begin18 a<= reg (11) xor c r c i n ;19

20 process ( r s t , c l k )21 begin22 i f ( r s t = ’1 ’) then23 reg<=(others => ’0 ’);24 e l s i f r i s i n g e d g e ( c l k ) then25 i f ( i n i t = ’1 ’) then26 reg<=(others => ’0 ’);27 else28 reg<=a&(reg (0 ) xor a)&( reg (1 ) xor a)&( reg (2 ) xor a)&( reg (3 to9 )&( reg (11) xor a ) ) ;29 end i f ;30 end i f ;31 end process ;32

33 crc out<=reg ;34 end Behaviora l ;

15

Page 17: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Resultados

2.5

.R

esu

ltad

os

Las

imag

enes

sigu

iente

sm

ues

tran

elre

sult

ado

de

lasi

mu

laci

on

del

circ

uit

ogen

erad

or

de

cod

igos

de

red

un

dan

cia

cıcl

ica

(CR

C).

Para

com

pro

bar

sufu

nci

onam

iento

har

emos

pas

arp

orel

tanto

los

dato

squ

ese

des

ean

tran

smit

irco

mo

elsı

nd

rom

eob

ten

ido,

sies

tees

corr

ecto

ob

ten

dre

mos

un

nu

evo

sin

dro

me

con

tod

oslo

sb

ita

‘0’.

En

laF

igu

ra2.

2ap

arec

eel

inte

rval

od

eti

emp

oen

elqu

ese

reali

zael

rese

td

elci

rcu

ito

yp

ost

erio

rmen

tese

act

iva

lase

nal

de

“in

it”

com

enza

ndo

ain

trod

uci

rlo

sd

atos

alci

rcuit

o,ap

arec

enla

sp

rim

eras

sali

das.

En

laF

figu

ra2.

3se

obse

rva

com

ou

nci

clo

de

relo

jd

esp

ues

de

intr

od

uci

rel

ult

imo

bit

de

los

dato

squ

ese

qu

iere

ntr

ansm

itir

(350

ns)

ap

are

ceel

sın

dro

me

“101

101

0001

00”

ala

sali

da

del

circ

uit

o.

Un

ave

zob

ten

ido

elsi

nd

rom

eim

agin

amos

qu

ese

tran

smit

enlo

sd

ato

sin

icia

les

segu

idos

del

sin

dro

me

por

loqu

ed

eber

iare

cib

irse

lase

cuen

cia

“100

100

0000

0110

1101

0001

00”.

Par

aco

mp

rob

arel

fun

cion

am

iento

del

circ

uit

oh

ace

mos

pasa

res

tase

cuen

cia

(dato

s+

sin

dro

me)

por

elgen

erad

or

de

crc

(al

igu

alqu

eh

aria

mos

enre

cep

cion

par

ave

rifi

car

qu

ese

ha

reali

zad

oco

rrec

tam

ente

latr

an

smis

ion)

yob

ten

emos

elnu

evo

sın

dro

me

“0000

0000

0000

”(F

igu

ra2.

4)p

orlo

qu

eel

circ

uit

oge

ner

ad

or

de

crc

fun

cion

aco

rrec

tam

ente

.

Fig

ura

2.2:

Res

etd

elci

rcu

ito

ein

icia

liza

cion

,in

trod

ucc

ion

de

los

pri

mer

os

bit

al

gen

erad

or

de

crc

16

Page 18: PRACTICA3-MULTIPLICADOR_SECUENCIAL

Circuito generador de Codigos de Redundancia Cıclica (CRC) Resultados

Fig

ura

2.3

:O

bte

nci

on

del

sin

dro

me

Fig

ura

2.4:

Res

ult

ado

de

laco

mp

rob

aci

on

intr

od

uci

end

oel

sin

dro

me

tras

los

dato

s

17

Page 19: PRACTICA3-MULTIPLICADOR_SECUENCIAL

1 El Filtro MAC-FIR

1.1. Metodologıa

El filtro FIR que hemos implementado consiste principalmente en realizar una convolucion entre lassenales de entrada y unos coeficientes que introduciremos en una memoria ROM.

El circuito realiza el producto entre un dato de entrada y uno de los coeficientes que hemos guardadoen una memoria ROM, el cual sera sumado con el producto entre este mismo dato de entrada y el coe-ficiente de orden inferior. Esta suma sera retrasada un ciclo de reloj mediante el registro acumulador yesta salida se sumara al producto ente el dato de entrada y el coeficiente de orden superior. Este procesose realizara sucesivamente hasta que lleguemos al octavo ciclo de reloj, a partir del cual tendremos ya elresultado y lo sacaremos mediante el registro de salida. Una vez calculado el dato de salida, tendremosque inicializar el registro de acumulador para calcular la siguiente salida y anadiremos un nuevo dato deentrada en el primer registro de entrada desplazando los demas y perdiendo por tanto el dato que habıaen el ultimo registro.

1.2. Diseno del circuito

Figura 1.1: Esquema del Filtro FIR

Esta implementacion consigue disminuir el numero de recursos necesarios para la implementacion de

18

Page 20: PRACTICA3-MULTIPLICADOR_SECUENCIAL

El Filtro MAC-FIR Codigo VHDL

un filtro FIR, en comparacion con otras estrategias de diseno como la “Implementacion con EstructuraDirecta” a costa de una reduccion de la velocidad de procesamiento del filtro debido a que en cada ciclo dereloj solo se realiza el producto de uno de los coeficientes con el correspondiente dato de entrada a diferen-cia de como actuarıa la estructura directa que realiza el producto de toda la senal de entrada con todos loscoeficientes en cada ciclo de reloj requiriendo un mayor numero de multiplicadores, registros y sumadores.

1.3. Codigo VHDL

1.3.1. Implementacion del circuito

Para implementar el filtro definiremos dos tipos de datos en VHDL, un tipo “rom type” que repre-sentara a la rom donde se almacenan los coeficientes y un tipo “buff” que hara de buffer de entradadesplazando su contenido cada vez que se introduce un nuevo dato de entrada.

Tambien usaremos un multiplicador, un sumador y dos registros, uno para almacenar el resultadoacumulado de multiplicar cada coeficiente por la senal de entrada y otro para guardar el resultado decada muestra y[n] mientras se calcula la siguiente.

1 l ibrary IEEE ;2 use IEEE . STD LOGIC 1164 .ALL;3 use IEEE . numer ic std . a l l ;4

5 entity MAC FIR i s6 Port ( X IN : in STD LOGIC VECTOR (7 downto 0 ) ;7 Y OUT : out STD LOGIC VECTOR (15 downto 0 ) ;8 c l k : in STD LOGIC;9 r s t : in STD LOGIC ) ;

10 end MAC FIR;11

12 architecture Behaviora l of MAC FIR i s13

14 signal s a l : s i gned (15 downto 0 ) ;15 signal sum acu : s igned (15 downto 0 ) ;16 signal sum : s igned (15 downto 0 ) ;17 signal prod : s igned (15 downto 0 ) ;18 signal cnt : unsigned (2 downto 0 ) ;19

20 −−ROM CON LOS COEFICIENTES21 Type rom type i s array (7 downto 0) of s igned (7 downto 0 ) ;22 constant a : rom type :=(23 ” 10000000 ” , ” 01000000 ” , ”00100000 ” , ” 00010000 ” ,24 ” 00001000 ” , ” 00000100 ” , ”00000010 ” , ” 00000001 ” ) ;25

26 −−GRUPO DE REGISTRO DE ENTRADA27 Type bu f f i s array (7 downto 0) of s igned (7 downto 0 ) ;28 signal databuf f : bu f f ;29

30 begin31

32 −−GRUPO DE REGISTROS33 process ( r s t , c l k )34 begin

19

Page 21: PRACTICA3-MULTIPLICADOR_SECUENCIAL

El Filtro MAC-FIR Codigo VHDL

35 i f ( r s t = ’1 ’) then36 databuf f<=(others=>(others => ’0 ’));37 e l s i f ( r i s i n g e d g e ( c l k ) ) then38 i f ( cnt=”111” ) then39 databuf f (7 downto 0)<=databuf f (6 downto 0) & s igned ( X IN ) ;40 end i f ;41 end i f ;42 end process ;43

44 −−MULTIPLICADOR45 prod<=databuf f ( t o i n t e g e r ( cnt ) )∗ a ( t o i n t e g e r ( cnt ) ) ;46

47 −−SUMADOR48 sum<=sum acu+prod ;49

50 −−REGISTRO ACUMULADOR51 process ( r s t , c l k )52 begin53 i f ( r s t = ’1 ’) then54 sum acu<=(others => ’ 0 ’ ) ;55 e l s i f ( r i s i n g e d g e ( c l k ) ) then56 i f ( cnt = 7) then57 sum acu <= ( others => ’ 0 ’ ) ;58 else59 sum acu<=sum ;60 end i f ;61 end i f ;62 end process ;63

64 −−REGISTRO SALIDA65 process ( r s t , c l k )66 begin67 i f ( r s t = ’1 ’) then68 sa l <=(others => ’0 ’);69 e l s i f ( r i s i n g e d g e ( c l k ) ) then70 i f ( cnt=7) then71 sa l<=sum ;72 end i f ;73 end i f ;74 end process ;75

76 −−CONTADOR77 process ( r s t , c l k )78 begin79 i f ( r s t = ’1 ’) then80 cnt<=(others => ’0 ’);81 e l s i f ( r i s i n g e d g e ( c l k ) ) then82 cnt<=cnt +1;83 end i f ;84 end process ;85

86 −−SALIDA87 Y OUT<=s t d l o g i c v e c t o r ( s a l ) ;

20

Page 22: PRACTICA3-MULTIPLICADOR_SECUENCIAL

El Filtro MAC-FIR Codigo VHDL

88

89 end Behaviora l ;

1.3.2. TestBench

1 LIBRARY i e e e ;2 USE i e e e . s t d l o g i c 1 1 6 4 .ALL;3 USE i e e e . s t d l o g i c u n s i g n e d . a l l ;4 USE i e e e . numer ic std .ALL;5 ENTITY tESTbENCH vhd IS6 END tESTbENCH vhd ;7

8 ARCHITECTURE behavior OF tESTbENCH vhd IS9

10 −− Component Dec lara t ion f o r the Unit Under Test (UUT)11 COMPONENT MAC FIR12 PORT(13 X IN : IN s t d l o g i c v e c t o r (7 downto 0 ) ;14 c l k : IN s t d l o g i c ;15 r s t : IN s t d l o g i c ;16 Y OUT : OUT s t d l o g i c v e c t o r (15 downto 0 ) ) ;17 END COMPONENT;18

19 −−Inputs20 SIGNAL c l k : s t d l o g i c := ’ 0 ’ ;21 SIGNAL r s t : s t d l o g i c := ’ 0 ’ ;22 SIGNAL X IN : s t d l o g i c v e c t o r (7 downto 0) := ( others => ’0 ’);23

24 −−Outputs25 SIGNAL Y OUT : s t d l o g i c v e c t o r (15 downto 0 ) ;26

27 −−Constantes28 constant per : time := 20 ns ;29

30 BEGIN31 −− I n s t a n t i a t e the Unit Under Test (UUT)32 uut : MAC FIR PORT MAP(33 X IN => X IN ,34 Y OUT => Y OUT,35 c l k => c lk ,36 r s t => r s t ) ;37

38 −− Relo j39 c lk<=not c l k after per /2 ; −−r e l o g con duty c i c l e d e l 50 %40

41 −− Reset42 r s t<= ’1 ’ , ’ 0 ’ after 3∗ per ;43

44 −− Entrada a l c i r c u i t o45 X IN <= ” 00000000 ” , ” 00000001 ” after 20∗per , ” 00000000 ” after 28∗ per ;46 END;

21

Page 23: PRACTICA3-MULTIPLICADOR_SECUENCIAL

El Filtro MAC-FIR Resultados

1.4

.R

esu

ltad

os

Par

asi

mu

lar

elfi

ltro

MA

CF

IRh

emos

intr

od

uci

do

un

ad

elta

com

ose

nal

de

test

para

com

pro

bar

qu

eob

ten

emos

ala

sali

da

los

coefi

cien

tes

intr

od

uci

dos

.

Com

oob

serv

amos

,in

trod

uci

mos

laD

elta

du

rante

8p

erio

dos

de

relo

jp

ara

qu

ees

tap

ued

am

ult

ipli

cars

eco

nto

dos

los

coefi

cien

tes

de

laro

m.

Ya

lasa

lid

aob

ten

emos

un

icam

ente

los

coefi

cien

tes

de

laR

OM

.

Fig

ura

1.2:

Obte

nci

on

de

lare

spu

esta

al

imp

uls

od

elfi

ltro

22