Está en la página 1de 29

CURSO:

DISEÑO DE SISTEMAS COMPUTACIONALES PARA LA


APLICACIÓN ESPECÍFICA

TITULO DE LA EXPERIENCIA:

LABORATORIO CALIFICADO 2

N° DE PREGUNTAS:

FECHA: 10-10-21

NOMBRE DEL PROFESOR:

Miguel Ángel Torres Lázaro

Código Apellido y Nombres completos

U17101665
LABORATORIO CALIFICADO 02

En este laboratorio calificado se hará uso de diversos circuitos vistos en clase, tales como:
divisor de frecuencia, contador, circuito anti-rebote, entre otros. Además, se aplicará el estilo de
código estructural para obtener un código más ordenado y legible.

El objetivo principal de este laboratorio es el diseño de un sistema generador de señales,


basado en modulación por ancho de pulso (PWM). Para facilitar el diseño, se ha organizado el
sistema en 05 sub-bloques o componentes:

• Circuito de entrada
• Circuito pre-escalador
• Divisor de frecuencia
• Contador
• Banco de señales
• Generador de señal PWM
Algunos de los componentes, necesarios para el diseño del sistema, le serán proporcionados
en una carpeta llamada “componentes_basicos_LC2”. Específicamente, los componentes
que encontrará son:

➢ Divisor de frecuencia reconfigurable (frequency_divider.vhd)


➢ Generador de señal PWM reconfigurable (pwm_generator.vhd)
➢ Contador de ‘n’ bits (counter.vhd)
➢ Memoria ROM (my_rom.vhd)

Para obtener el puntaje completo, en cada una de las preguntas debe proporcionar lo siguiente:

✓ Diagrama jerárquico
✓ Todos los archivos fuente (,vhd)
✓ Una captura de pantalla del diagrama RTL obtenido.
PARTE 01 – DISEÑO DEL CIRCUITO DE ENTRADA (05 PUNTOS)

Para la primera parte de este laboratorio calificado, se requiere diseñar un sub-bloque de


nombre “INPUT_CIRCUIT”, el cual cuenta con 03 entradas: CLK, BUTTON_01 y BUTTON_02,
todas ellas de un bit. Asimismo, este circuito cuenta con una salida COUNT_01, de 03 bits, y
con una salida COUNT_02, de 02 bits. Este circuito se encuentra conformado por los
componentes que se muestra en la siguiente imagen:

Para esta parte del diseño, se requiere que usted construya el componente correspondiente al
ciruito anti-rebote (explicado en la sesión 08), y lo guarde en un archivo “debouncer.vhd”.
Posteriormente, debe crear un archivo llamado “input_circuit.vhd”, en donde tiene que
instanciar los componentes “frecuency_divider”, “debouncer” y “counter”, e interconectarlos
para obtener como resultado el circuito deseado.

No olvide que algunos componentes tienen parámetros genéricos, los cuales deben ser
configurados en la instanciación. Asimismo, debe tomar en cuenta que la salida del
componente “contador” es de tipo UNSIGNED, por lo cual las salidas COUNT_01 y COUNT_02
también deben ser de tipo UNSIGNED o, de lo contrario, utilizar una conversión del tipo de dato
(type cast).

Desarrollo

En esta primera pregunta nos pide diseñar un divisor de frecuencia de 500 000, 2 circuitos anti-
rebote, el primero para el button_01 y el segundo para el button_02, y por último dos contadores,
el primero con una salida de 3 bits(COUNT_01) y el segundo una salida de 2 bits(COUNT_02).
Para el divisor de frecuencia utilice el código genérico brindado por el profesor, cambiando el
número de bits a 20, y al hacer el código estructural del input_circuit le damos el valor 500 000 al
divider, expresado en sexagesimal. En el caso del circuito anti-rebote, tuve que diseñarlo con las
entradas de sw_in, clk y la salida sw_in_clean, además de las señales que se usaron para el
diseño, en este caso para el input_circuit tuvo que ser llamado dos veces como se ve en el
código del circuito. Y, por último, usamos el circuito genérico del contador cambiándole el n_bits
a 3 ya que nos piden que sea salida la salida de 3 bits en el count_01, pero podemos ver que en
el count_02 la salida es de 2 bits, esto lo modificamos en el código del input_circuit poniendo
GENERIC MAP (n_bits=>2).
Código VHDL del divisor de frecuencia

RTL del divisor de frecuencia


Código VHDL de circuito anti-rebote

RTL de circuito anti-rebote


Código VHDL de contador

RTL de circuito contador


Código VHDL de input_circuit
RTL de input_circuit

freq_div

debouncer

counter
Diagrama jerárquico de input_circuit
PARTE 02 – DISEÑO DEL PRE-ESCALADOR (05 PUNTOS)

Para la segunda parte de este laboratorio calificado, se requiere diseñar el circuito pre-
escalador, el cual hará posible variar la frecuencia de la señal generada.

El primer paso será diseñar un multiplexor de 8 entradas a 1 salida, el cual debe guardarse en
el archivo “mux_8_to_1.vhd”. El selector de este multiplexor tiene 03 bits, sus entradas tienen
08 bits y su salida tiene 08 bits.

Luego de crear el multiplexor, se debe crear un archivo llamado “pre_scaler.vhd”, en donde


tiene que instanciar los componentes “mux_8_to_1” y “frequency_divider”, e interconectarlos de
tal manera que se obtenga el circuito mostrado en la siguiente imagen:

No olvide tomar en cuenta que, el tipo de dato de la salida del multiplexor debe coincidir con el
tipo de dato de la entrada “divider” del divisor de frecuencia.

Desarrollo

En esta segunda pregunta nos piden diseñar el pre_scaler, ya que tenemos el divisor de
frecuencia genérico, tenemos que diseñar solo el mux de 8, empezamos asignando como
entrada un selector(3 bits) y como salida un div_in(8 bits) usamos el case para el diseño. Ya que
tenemos todos los bloques, diseñamos el pre_scaler. Empezamos asignando como entradas el
sel, clk_in y como salida el clk_div, en el código estructural llamamos a las entidades del divisor
de frecuencia y la del mux_8_to_1, también creamos una señal entre la salida del mux y la
entrada del divisor de frecuencia. Finalmente como el divisor de frecuencia ahora es de 8 bits y
ya no de 20, lo cambiamos con el GENERIC MAP (n_bits=>8).
Código VHDL mux8

RTL de mux8
Código VHDL de pre_scaler

RTL de pre_scaler
Diagrama jerárquico de pre_scaler
PARTE 03 – DISEÑO DEL BANCO DE SEÑALES (05 PUNTOS)

Para el generador de señales propuesto, se desea generar las siguientes formas de onda:
cuadrada, diente de sierra, triangular y sinusoidal. Cada forma de onda cuenta con 32 puntos
en un periodo y el valor de cada punto se representa como un número binario de 05 bits.

Dicho de otro modo, para la tercera parte de este laboratorio calificado, se requiere diseñar 04
memorias ROM, cada una con una capacidad de 32 x 5 bits. Estas memorias pueden
construirse empleando el archivo “my_rom.vhd” como plantilla.

Las memorias creadas deben guardarse en los archivos “ROM_A”, “ROM_B”, “ROM_C” y
“ROM_D”. Estas memorias almacenan la señal cuadrada, diente de sierra, triangular y
sinusoidal, respectivamente. Para tener una idea de los valores que deben almacenarse en
cada ROM, se muestran las siguientes gráficas.

Una vez que las memorias han sido diseñadas, debe construirse un nuevo componente: un
multiplexor de 4 a 1. Este componente debe guardarse en el archivo “mux_4_to_1”. El selector
de este multiplexor tiene 02 bits, sus entradas tienen 05 bits y su salida tiene 05 bits.

Luego de construir el multiplexor, se debe crear un archivo llamado “signal_bank.vhd”, en


donde tiene que instanciar el multiplexor y las memorias, e interconectarlos de tal manera que
se obtenga el circuito mostrado en la siguiente imagen:
No olvide tomar en cuenta que, el tipo de dato de la salida de las memorias debe coincidir con
el tipo de dato de las entradas del multiplexor.

Desarrollo

Para esta pregunta 3 piden diseñar 4 rom’s y un mux de 4, lo primero que hice en esta pregunta
fue hallar los valores de la posición como se observa en la tabla insertada en la parte inferior, ya
que tenemos los valores de posición de cada rom, empecé a diseñar la rom A de 5 bits que
produce una señal cuadrada, ya teniendo el código genérico lo que se tuvo que hacer fue
cambiar el numero de bits y poner los valores en cada posición, lo mismo con las demás rom’s
asignando los valores de posición de acuerdo a que rom sea. En segundo lugar, se diseño u mux
de 4, asignándole 5 entradas, 4 de las salidas de la rom que después se unirán con una señal,
una del selector de 2 bits que se unirá con el waveform_index y como salida el div_out de 5 bits.

Ya teniendo diseñado todos los bloques, hacemos el código estructural de signal_ bank, tenemos
como entradas el time_index(5 bits), clk, waveform_index(2 bits) y como salida el sig_val(5 bits).
Ya que todas las rom’s son de 5 bits se asignaran al time_index sin problemas por ser de 5 bits
también, luego a todos los enable le asignamos 1 y a todos los clocks de las rom’s se le asignan
el clk del signal_bank, usamos 4 señales que unen las salidas de cada rom con las entradas del
mux, como dijimos anteriormente el sel se le asigna con el waveform_index y por último el
div_out del mux se le asigna el sig_val ambos de 5 bits.
Tabla de valores para las rom’s

POSICION ROM A ROM B ROM C ROM D

0 11111 11111 00000 01111

1 11111 11110 00011 10001

2 11111 11101 00101 10011

3 11111 11100 00111 10101

4 11111 11011 01001 10111

5 11111 11010 01011 11001

6 11111 11001 01101 11011

7 11111 11000 01111 11101

8 11111 10111 10001 11111

9 11111 10110 10011 11101

10 11111 10101 10101 11011

11 11111 10100 10111 11001

12 11111 10011 11001 10111

13 11111 10010 11011 10101

14 11111 10001 11101 10011

15 11111 10000 11111 01111

16 00000 01111 11101 01101

17 00000 01110 11011 01011

18 00000 01101 11001 01001

19 00000 01100 10111 00111

20 00000 01011 10101 00101

21 00000 01010 10011 00011

22 00000 01001 10001 00000

23 00000 01000 01111 00000

24 00000 00111 01101 00011

25 00000 00110 01011 00101

26 00000 00101 01001 00111

27 00000 00101 00111 01001

28 00000 00011 00101 01011

29 00000 00010 00011 01101

30 00000 00001 00000 01110

31 00000 00000 00000 01111


Circuito VHDL de ROM A
RTL de ROM A

Código VHDL de ROM B


RTL de ROM B

Código VHDL de ROM C


RTL de ROM C

Código VHDL de ROM D


RTL de ROM D

Código VHDL de MUX4


RTL de MUX4
Código VHDL de signal_bank
RTL de sgnal_bank

Diagrama jerárquico de signal_bank

DISEÑO 04 – GENERADOR DE SEÑALES (05 PUNTOS)

Para la última parte de este laboratorio calificado, se requiere interconectar los sub-bloques
creados anteriormente (“input_circuit”, “pre_scaler” y “signal_bank”) con un contador de 06 bits
y un generador de señal PWM, tal y como se muestra en el siguiente diagrama:

La entidad TOP, desde donde se instanciarán los componentes mencionados anteriormente,


recibe el nombre de “signal_generator”. No olvide tomar en cuenta la compatibilidad entre los
tipos de datos de las entradas y salidas de los bloques interconectados.

El funcionamiento del sistema completo es como se describe a continuación: la entrada CLK se


encuentra conectada a una señal de 50 MHz; las entradas FREQUENCY y WAVEFORM se
encuentran conectadas a dos botones, los cuales el usuario pulsa cuando desea cambiar de
frecuencia y forma de onda, respectivamente; la salida GEN_OUT entrega una señal PWM con
ciclo de trabajo variable, la cual será conectada a un filtro RC, de donde se obtendrá la señal
analógica deseada.

Desarrollo

Para esta cuarta pregunta se desea diseñar la entidad TOP, teniendo bloques hechos
anteriormente, teniendo el input_circuit, pre_scaler, un divisor de frecuencia de 32, un contador
de 5 bits, signal_bank y el generador de pwm. Teniendo como entradas frequency, waveform, clk
y como salida el gen_out. Empezaremos diseñando el generador de pwm, teniendo el código
genérico tenemos que cambiar el n_bits a 5 bits. Luego empezamos a diseñar la entidad top, ya
llamados todos los bloques, yo use 5 señales count_sel, count2, s_clkdiv, s_freq, s_counter y
e_pwm. La señal de count_sel es la unión de la salida del input circuit (count_01) con la entrada
sel del pre_scaler, la señal de count2 es la salida del input circuit(count_01) con la entrada
waveform index del signal_ bank, la señal de s_clkdiv es el de la salida del clk_div del pre scaler
y la entrada de clock del generador de pwm, la señal s_freq es la salida del divisor de frecuencia
con la entrada clk del contador y el clk del signal_bank, la señal s_counter une la salida del
contador con el time index del signal_bank y por último la señal e_pwm es la que une la salida
signal bank con la entrada del generador de pwm. Cabe resaltar que en el divisor de frecuencia
tenemos que cambiar el número de bits a 5 y asignar al divider “11111” , el contador también
cambiarle el n_bits a 5 y al period del generador del pwm asignarle “00000”.

Código VHDL de pwm_generator


RTL de pwm_generator

Código VHDL de signal_generator


RTL de signal_generator

- Imput_circuit

- Pre_scaler

- Signal_bank
- Pwm_generator

Diagrama jerárquico entidad top signal_generator

También podría gustarte