Sei sulla pagina 1di 9

HS W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

Prctica 3: Contador de unos: sistema y unidad a de control


Laboratorio de Tecnolog de Computadores a Curso 2009/2010

1.

Especicacin o

El objetivo de esta prctica es el diseo de una unidad espec a n ca que sea capaz de recibir una entrada de ancho de n bits y calcular el nmero de unos u que contiene dicho dato. Para realizar la unidad ser necesario hacer uso de la ALU y el banco de a registros previamente diseados y adicionalmente se requerir disear un sisn a n tema de control que se encargue de acondicionar las seales de control de los n componentes en la secuencia correcta para que se complete todo el proceso y un desplazador de n bits. Una vez diseado el control y el desplazador se pron ceder a integracin de los componentes para conformar la unidad completa. a o Se pide la descripcin en VHDL de la unidad de control para una arquiteco tura funcional y otra estructural, una descripcin para el desplazador y otra o de integracin. Finalmente, se deber comprobar el funcionamiento del sistema o a mediante la elaboracin de un testbench para una una determinada anchura a o elegir.

1.1.

Algoritmo para ejecutar.

En el diseo de la unidad de control es necesario determinar los pasos en n los que se van a calcular el nmero de unos del dato, teniendo en cuenta las u especicaciones de los componentes disponibles. En general, podemos decir que los pasos que se requieren son: 1. cuenta = 0; 2. mascara = 1; 3. dato = din_i; while (not_zero_o) { 4. temp = dato && mascara; 5. cuenta = cuenta + Temp; 6. dato >> 1; }; 1

HS W
W
7.

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

dout_o = cuenta;

Todas las variables que se manejan en el algoritmo (dato, mascara, cuenta y temp) han de estar almacenadas en registros. Se propone que estos registros se asignen a posiciones concretas situadas en un banco de registros de doble puerto de propsito general con 8 registros de n bits localizado en la ruta de o datos. Adems de estos, tambin se han de reservar otros registros para almacea e nar constantes signicativas que, mediante movimiento de datos u operaciones cticias.o que no hacen nada, permiten generar valores importantes para el algoritmo. En el caso de la prctica bastar con tener la constante 0. a a Registro R0 R1 R2 R3 R4 se almacena: (0 ... 0) dato mascara cuenta temp

1.2.

Ruta de datos.

La arquitectura del sistema se basa en la estructura clsica de ruta de datos a y unidad de control espec ca:

Se observan: - Una entrada de control que inicia el proceso. - Entradas genricas de control (clock y reset). e - La entrada de datos (de ancho n). 2

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

- Una salida de control para especica el nal del proceso. - Una salida de datos que indica el nmero de unos encontrado. u

En la gura se observa la ruta de datos para el caso de la unidad contador de unos. Lo primero en destacar es el orden de los componentes, dispuesto para operar datos que se encuentran almacenados en el banco de registros. Tambin e se observa la posibilidad de almacenar datos que provienen del exterior (din i) 3

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

o que han sido operados por la alu, mediante la incorporacin de un mux a la o entrada del banco de registros. As mismo se ha aadido la posibilidad de hacer n un desplazamiento (para el paso 6 del algoritmo), mediante un bloque desplaza a la salida de la alu. Finalmente, se ha agregado un bloque N oCero que se encargar de detectar cuando no quede ningn uno en el dato que se acaba de a u operar. Estos bloques aadirn como seales de control: n a n Para NoCero: not zero o Indica si el dato que entra contiene ningn uno u 0 Hay al menos un uno. 1 No hay unos. . Para Multiplexor: enable in i Selecciona la entrada al banco de registros. 0 Selecciona la salida del desplazador. 1 Selecciona la entrada din i. . Para el Desplazador: Shift i Determina el tipo de desplazamiento. 000 Pasar. 001 Desplazar un bit a la derecha. 010 Desplazar un bit a la izquierda. 011 Rotar un bit a la derecha. 100 Rotar un bit a la izquierda. 101 Intercambiar los 4 bits superiores con los 4 inferiores. 110 Desplazar dos bits a la derecha. 111 Desplazar dos bits a la izquierda. . Para TriEst enable out i Habilita la salida del dato resultante. 0 Alta impedancia a la salida. 1 Salida habilitada. i.

1.3.

Unidad de control.

La unidad de control ser la encargada de generar las seales de control de los a n componentes teniendo en cuenta la secuencia requerida para calcular el nmero u de unos. La secuencia se encuentra determinada por el algoritmo enunciado y este a su vez puede ser representado mediante un diagrama de estados de una FSM Moore:

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

Antes de comenzar a utilizar el sistema diseado se activar una seal de n a n reset i de forma que el estado inicial sea S0, es decir un estado conocido. Desde ese estado y mientras no se active la seal que marca el inicio de n operacin (not(start i)) se permanece en S0. Activada (start i) el sistema o pasa incondicionalmente al estado S1. En el estado S1 se pone la variable cuenta a su valor inicial constante igual a 0, es decir, se hace la operacin R3 = R0 (=0) + R0 (=0) = 0 + 0 = 0. o Desde este estado se pasa incondicionalmente al siguiente estado S2 en el siguiente ciclo de reloj. En el estado S2 se pone la variable mscara a su valor inicial constante igual a a 1, es decir, se hace la operacin R2 = R0 (=0) + 1 = 0 + 1 = 1. Desde este o estado se pasa incondicionalmente al siguiente estado S3 en el siguiente ciclo de reloj. En el estado S3 se captura el valor del puerto din i y se almacena en el registro dato, es decir se hace la operacin R1 = palabra sin ms que habilitar el o a camino entre el puerto y el registro 1 del banco de registros activando la seal enable in i. n En S3 se comprueba el valor de la seal not zero o que genera combinacionaln mente la ruta de datos y que indica si el valor de palabra es cero o no. Si el dato es cero (not(not zero o) es cierto) no hay que contar 1s porque no hay, luego se salta al estado S7 y en el siguiente ciclo de reloj se salta incondicionalmente al estado inicial S0. 5

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

Durante el tiempo de transicin entre S7 y S0 se genera combinacionalmente la o seal de control directa stop o, que por tanto dura un ciclo de reloj. Si el n dato no es cero (not zero o es cierto, es decir es 1) hay algn 1, luego hay u que contar el nmero de ellos que hay, entrando en el bucle while (salto u al estado de inicio del bucle S4). Dentro del bucle se pasa incondicionalmente por tres estados (S4, S5 y S6) donde se ejecutan las tres operaciones de manera consecutiva (and, suma y desplazamiento, respectivamente). Estas operaciones duran 1 ciclo de reloj cada una y, desde el punto de vista RTL son una operacin lgica (R4 = R1andR2), una operacin aritmtica o o o e (R3 = R3 + R4) y una operacin de desplazamiento a la derecha (R1 = o (R1 + R0(= 0)) >> 1). a En el estado S6 del bucle se verica el valor de la seal not zero o que har que n se vuelva a comenzar el bucle saltando al estado S4 si not zero o es cierta (todav faltan 1s por contar) o que har que se termine la ejecucin del a a o bucle saltando al estado S7 si not zero o es falsa (dato tiene todos sus bits a cero). Como se ha comentado antes, desde el estado S7 se salta incondicionalmente al estado inicial S0 en un ciclo de reloj. En el diagrama de estados se observa claramente que las entradas de la mquina son start i y not zero o por lo que podemos establecer el diagrama de a estados:

En este punto, es posible codicar los estados de la mquina para calcular a la lgica de estado siguiente (funciones de cambio de estado) y tener la FSM o funcionando sin salidas. A continuacin se determinar la lgica de salida que ser la encargada de o a o a generar las seales de control para los componentes a partir del estado actual n (recordar mquina Moore). Teniendo en cuenta el algoritmo a realizar, podemos a asociar cada uno de los pasos a los registros y operaciones a realizar en la unidad: 6

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

0. reset; -- Reset 1. cuenta = 0; -- R3 = R0 + R0 = 0 + 0 = 0 2. mascara = 1; -- R2 = R0 + 1 = 0 + 1 = 1 3. dato = din_i; -- Habilitar el multiplexor capturando din_i while (not_zero_o) { 4. temp = dato && mascara; -- R4 = R1 and R2 5. cuenta = cuenta + Temp; -- R3 = R3 + R4 6. dato >> 1; -- R1 = ( (R1 + R0 = R1 + 0 = R1) >>1 ) }; dout_o = cuenta; -- Habilitar el triestado pasando R3 + R0 = R3 + 0 = R3 Ahora bien, a medida que la mquina va cambiando de estado, va generando a las seales de control para el resto de los componentes como se especican en n la siguiente gura:

Ahora el trabajo se limita a realizar la simplicacin booleana de cada una de o las funciones de salida de la mquina, usando la codicacin que se emple para a o o cada uno de los estados.

1.4.

Entidades y arquitecturas.

La entidad y nombre de puertos que se deben utilizar en los distintos componentes son: Multiplexor 2 a 1: ENTITY MUX_2_1 IS port( din_1_i, din_0_i: IN std_logic_vector(n-1 DOWNTO 0); enable_i: IN std_logic; dout_o: OUT std_logic_vector(n-1 DOWNTO 0) 7

HS W
W
);

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

NoCero: ENTITY NoCero IS port ( din_i: IN std_logic_vector(n-1 DOWNTO 0); not_cero_o: OUT std_logic ); Desplazador: ENTITY Desplazador IS port( din_i: IN std_logic_vector(n-1 DOWNTO 0); shift_i: IN std_logic_vector(2 DOWNTO 0); dout_o: OUT std_logic_vector(n-1 DOWNTO 0) ); Buffer triestado: ENTITY TriEst IS port( din_i: IN std_logic_vector(n-1 DOWNTO 0); enable_i: IN std_logic; dout_o: OUT std_logic_vector(n-1 DOWNTO 0) ); Unidad de control: ENTITY ControlUnit IS port( clk_i : IN std_logic; reset_i : IN std_logic; start_i : IN std_logic; not_zero_i : IN std_logic; enable_in_o : OUT std_logic; enable_w_o : OUT std_logic; enable_ra_o : OUT std_logic; enable_rb_o : OUT std_logic; address_w_o : OUT std_logic_vector (2 DOWNTO 0); address_ra_o : OUT std_logic_vector (2 DOWNTO 0); address_rb_o : OUT std_logic_vector (2 DOWNTO 0); opcode_o : OUT std_logic_vector (2 DOWNTO 0); shift_o : OUT std_logic_vector (2 DOWNTO 0); enable_out_o : OUT std_logic; stop_o : OUT std_logic ); END ControlUnit ; ARCHITECTURE functional OF ControlUnit IS Y ARCHITECTURE structural OF ControlUnit IS

HS W
W

Grupo de Diseo Hardware Software n


DAC - DATCCCIA - ETSII

Sistema completo: ENTITY LTC_one_counter IS generic ( n : natural := 8); -- data width. port( clk_i: IN std_logic; reset_i: IN std_logic; start_i: IN std_logic; din_i: IN std_logic_vector (n-1 DOWNTO 0); stop_o: OUT std_logic; dout_o: OUT std_logic_vector (n-1 DOWNTO 0) ); END LTC_one_counter ; ARCHITECTURE structural OF LTC_one_counter IS

2.

Evaluacin. o

La nota numrica de la prctica depender de las operaciones que operen e a a correctamente en cada arquitectura y el testbech. La prctica deber ser presena a tada en la clase de la fecha indicada, as como una copia por correo electrnico o al profesor correspondiente. Se entregar una breve memoria, que deber contener: a a 1. Arquitectura estructural: Tipo de arquitectura utilizada para cada bloque (decodicadores y RFC). Justicacin de la eleccin anterior. o o 2. Arquitectura funcional: Problemas encontrados durante la realizacin del modelo. o 3. Testbench Casos comprobados. Estimacin de completitud (casos comprobados sobre casos posibles). o adems de cualquier otra informacin que se considere apropiado incorporar. a o NOTA: No se debe incluir copia del cdigo fuente en la memoria. o

Potrebbero piacerti anche