Upload
david-martinez
View
165
Download
3
Embed Size (px)
Citation preview
Arquitectura de ComputadoresInformes de practicas
Fecha:
Curso 2011/2012Primer Cuatrimestre
Autores:
David Martınez MartınezLionel Jose Hernandez Garcıa
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
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
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
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
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
// 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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