Está en la página 1de 4

ISSN: 1692-7257

Revista Colombiana de Tecnologas de Avanzada

DIGITAL LOGIC CIRCUIT DESIGN DISEO DE CIRCUITO LGICOS DGITALES Jeison Gabriel Martinez Bustos. German Arley Portilla. Universidad de Pamplona Comit Editorial Revista Colombiana de Tecnologas de Avanzada Ciudadela Universitaria. Pamplona, Norte de Santander, Colombia. Tel.: 57-7-5685303, Fax: 57-7-5685303, Ext. 144 E-mail: {jei_sum41,arportilla}@hotmail.com Abstract: The article is made based on the different ways of designing digital logic circuit, either from a schematic or a description of code. From these design forms also may find that the operation is the same regardless of how you perform. Keywords: Programmable logic devices, VHDL, logic gates. Resumen: El artculo realizado se basa en las diferentes formas de disear un circuito lgico digital, ya sea a partir de un diagrama esquemtico o una descripcin de cdigo. A partir de estas formas de diseo tambin se podr dar cuenta que el funcionamiento es el mismo independientemente de cmo se realice. Palabras clave: Dispositivos lgicos programables, VHDL, Compuertas lgicas.

Universidad de Pamplona

ISSN: 1692-7257

Revista Colombiana de Tecnologas de Avanzada

1. INTRODUCIN
Cuando nos referimos a circuitos lgico programables, tenemos que remitirnos al manejo del cdigo concurrente el cual nos indica que un conjunto de instrucciones se realizan al tiempo que las entradas estn presentes, podemos decir que este tipo de cdigo las salidas dependen directamente de la entrada y los tiempos de ejecucin son bastante cortos podremos decir que en el orden de los nano segundos o microsegundos dependiendo el caso, cuando trabajamos cdigo de tipo secuencial los retardos hacen que la toma de datos posea discrepancias o errores que pueden causar prdidas, al manejar un cdigo en VHDL lo que obtenemos es el conjunto de instrucciones que se ejecutaran en tiempo real sin perdidas de momentos con una eficacia optima y de este modo los procesos sern exactos y en el menor tiempo.

cual simularemos ingresando la forma de onda) es el siguiente: Enva Primero la informacin a desplegar por la salida OUT_1. Como son 12 bits se envan primero los 8 bits menos significativos empezando por el LSB. Despus del bit de stop se mantiene la lnea en alto durante dos ciclos de reloj, luego se envan los 4 bits de ms peso empezando por el menos significativo de ellos, los otros 4 vienen en cero (observe la figura). La lnea se mantiene en alto durante dos ciclos de reloj para luego proceder a enviar la informacin a desplegar en OUT_2 con el mismo formato y de forma idntica la informacin a desplegar en OUT_3.

2.1. CDIGO
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY SERIAL IS PORT(CLK_IN,RX:IN STD_LOGIC; OUT_1,OUT_2,OUT_3:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); END SERIAL; ARCHITECTURE RTL OF SERIAL IS BEGIN PROCESS(CLK_IN) VARIABLE AUX:STD_LOGIC_VECTOR(70 DOWNTO 0); VARIABLE OUT1,OUT2,OUT3:STD_LOGIC_VECTOR(11 DOWNTO 0); VARIABLE CONTA,ACUMULADOR:INTEGER RANGE 0 TO 255:=0; BEGIN IF(CLK_IN'EVENT AND CLK_IN='1') THEN IF CONTA<70 THEN AUX(CONTA):=RX; END IF; CONTA:= CONTA+1; IF CONTA>69 THEN OUT1(0):= AUX(1); OUT1(1):= AUX(2); OUT1(2):= AUX(3); OUT1(3):= AUX(4); OUT1(4):= AUX(5); OUT1(5):= AUX(6); OUT1(6):= AUX(7); OUT1(7):= AUX(8); OUT1(8):= AUX(13); OUT1(9):= AUX(14); OUT1(10):= AUX(15); OUT1(11):= AUX(16); OUT2(0):= AUX(25); OUT2(1):= AUX(26); OUT2(2):= AUX(27); OUT2(3):= AUX(28); OUT2(4):= AUX(29); OUT2(5):= AUX(30); OUT2(6):= AUX(31); OUT2(7):= AUX(32); OUT2(8):= AUX(37); OUT2(9):= AUX(38); OUT2(10):= AUX(39); OUT2(11):= AUX(40); OUT3(0):= AUX(49); OUT3(1):= AUX(50); OUT3(2):= AUX(51); OUT3(3):= AUX(52); OUT3(4):= AUX(53); OUT3(5):= AUX(54); OUT3(6):= AUX(55); OUT3(7):= AUX(56); OUT3(8):= AUX(61); OUT3(9):= AUX(62); OUT3(10):= AUX(63); OUT3(11):= AUX(64); OUT_1<= OUT1; OUT_2<= OUT2; OUT_3<= OUT3; END IF; END IF; END PROCESS; END RTL;

2. OBJETIVOS
Disear un circuito lgico programable a partir de un problema propuesto verificando el resultado obtenido, por medio de las grficas de tiempos Verificar que las seales entregadas por los diagramas de tiempos correspondan con el problema minimizando el margen de error en las mismas. Comprobar que el cdigo secuencial y el manejo de procesos dentro del cdigo concurrente entreguen los datos esperados dependiendo de las seales de entrada.

3.PROBLEMA 1

Fig.1 representacion problema 1


Una compaa de televisores LCD requiere un nuevo circuito digital para su lnea de alta definicin. Este chip deber recibir una trama serial en formato RS232, la informacin que viene en la trama se explica en la siguiente figura:

3.PROBLEMA 2

Fig.2 representacion de tiempos


Un circuito de transmisin enviar la informacin a nuestro chip a travs de la lnea RX (Para probar nuestro chip debemos ingresar los datos en la simulacin a travs del pin RX). El circuito de transmisin (Que nosotros no diseamos) enva la informacin as: Se envan los tres datos para las salidas paralelas en una trama. La trama debe ser compatible con RS232. El protocolo que maneja el transmisor (el 1

Universidad de Pamplona

ISSN: 1692-7257

Revista Colombiana de Tecnologas de Avanzada


CONTA1:=0; FOR I IN 8 TO 11 LOOP IF(TRAMA2(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; ELSIF(CONTEO>21 AND CONTEO<24) THEN TX<='1'; ELSIF(CONTEO=24) THEN TX<='0'; ELSIF(CONTEO>24 AND CONTEO <33) THEN TX<=TRAMA3(CONTEO-25); ELSIF (CONTEO=33) THEN CONTA1:=0; FOR I IN 0 TO 7 LOOP IF(TRAMA3(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; ELSIF(CONTEO>33 AND CONTEO <36) THEN TX<='1'; ELSIF CONTEO=36 THEN TX<='0'; ELSIF(CONTEO>36 AND CONTEO <41) THEN TX<=TRAMA4(CONTEO-29); ELSIF(CONTEO >40 AND CONTEO <45) THEN TX<='0'; ELSIF (CONTEO=45) THEN CONTA1:=0; FOR I IN 8 TO 11 LOOP IF(TRAMA4(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; ELSIF(CONTEO >45 AND CONTEO <48) THEN TX<='1'; ELSIF CONTEO=48 THEN TX<='0'; ELSIF( CONTEO >48 AND CONTEO < 57) THEN TX<=TRAMA5(CONTEO-49); ELSIF CONTEO=57 THEN CONTA1:=0; FOR I IN 0 TO 7 LOOP IF(TRAMA5(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; ELSIF( CONTEO>57 AND CONTEO <60) THEN TX<='1'; ELSIF CONTEO=60 THEN TX<='0'; ELSIF(CONTEO>60 AND CONTEO<65) THEN TX<=TRAMA6(CONTEO -53); ELSIF( CONTEO>64 AND CONTEO<69) THEN TX<= '0'; ELSIF CONTEO=69 THEN CONTA1:=0; FOR I IN 8 TO 11 LOOP IF(TRAMA6(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; BUSY<='0'; END IF; CONTEO:=CONTEO+1; END IF; END PROCESS COUNT; CARGA:PROCESS(LOAD) BEGIN IF(LOAD='1') THEN PROCESO<='1';

Fig.3 Diagrama problema 2


Una compaa fabricante de dispositivos de adquisicin de datos necesita un circuito digital que tome 3entradas de 12 bits cada una (IN_1, IN_2 e IN_3) y las transmita en forma serial bajo el protocolo RS232 por la lnea TX cada vez que se enve un pulso por la lnea LOAD de duracin de un ciclo de reloj. El circuito debe tener una salida BUSY que se mantenga a nivel lgico alto mientras se est realizando la transmisin para avisarle al controlador que no puede enviar pulsos de LOAD durante este tiempo. Recuerde que bajo el protocolo RS232 el nivel lgico inactivo de la lnea TX es de 1, adems solo puede transmitirse 8 bits por trama, empezando por el LSB. La transmisin deber contar con un BIT DE PARIDAD PAR, es decir, este bit que debe enviarse antes del bit de STOP debe estar a 0 si el nmero de 1s del byte que est siendo transmitido es PAR y debe estar a 1 si el nmero de 1s del byte que est siendo transmitido es impar. RECUERDE QUE LA TRAMA COMPLETA SE COMPONE DEL BIT DE INICIO, SEGUIDO DEL DATO, EL BIT DE PARIDAD Y POR LTIMO EL BIT DE PARADA. ADEMS COMO CADA DATO A TRANSMITIR TIENE 12 BITS, DEBER TRANSMITIRSE PRIMERO LOS 8 BITS DE MENOS PESO Y LUEGO LOS 4 BITS DE MAS PESO LLENANDO LOS OTROS BITS CON CERO. SE TRANSMITIR PRIMERO LA ENTRADA IN_1, LUEGO LA IN_2 Y POR LTIMO LA IN_3. 4.1 CDIGO
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY PARALELO IS PORT( CLK,LOAD: IN STD_LOGIC; IN_1,IN_2,IN_3:IN STD_LOGIC_VECTOR(11 DOWNTO 0); UNOS_TRAMA:BUFFER STD_LOGIC_VECTOR(11 DOWNTO 0); BUSY,TX: OUT STD_LOGIC:='0'); END PARALELO; ARCHITECTURE COUNTER OF PARALELO IS SIGNAL PROCESO:STD_LOGIC:='0'; SIGNAL SALE:STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN COUNT:PROCESS(CLK,PROCESO) VARIABLE TEMP:STD_LOGIC:='0'; VARIABLE CONTEO,CONTA1,CONTA2,CONTA3: INTEGER RANGE 0 TO 80:=0; VARIABLE TRAMA1,TRAMA2,TRAMA3,TRAMA4,TRAMA5,TRAMA6: STD_LOGIC_VECTOR(11 DOWNTO 0); VARIABLE PARIDAD:STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN IF(CLK'EVENT AND CLK='1' AND PROCESO='1') THEN BUSY<='1'; TRAMA1:=IN_1 AND "000011111111"; TRAMA2:=(IN_1 AND "111100000000") ; TRAMA3:=IN_2 AND "000011111111"; TRAMA4:=(IN_2 AND "111100000000") ; TRAMA5:=IN_3 AND "000011111111"; TRAMA6:=(IN_3 AND "111100000000") ; IF(CONTEO=0) THEN TX<='0'; ELSIF(CONTEO>0 AND CONTEO <9) THEN TX<=TRAMA1(CONTEO-1); ELSIF(CONTEO=9) THEN FOR I IN 0 TO 7 LOOP IF(TRAMA1(I)='1') THEN CONTA1:=CONTA1+1; END IF; END LOOP; PARIDAD:=CONV_STD_LOGIC_VECTOR(CONTA1,12); UNOS_TRAMA<=CONV_STD_LOGIC_VECTOR(CONTA1,12); IF PARIDAD(0) ='0' THEN TX<='0'; ELSIF PARIDAD(0)='1' THEN TX<='1'; END IF; ELSIF(CONTEO >9 AND CONTEO <12) THEN TX<='1'; ELSIF CONTEO= 12 THEN TX<='0'; ELSIF(CONTEO>12 AND CONTEO <17) THEN TX<=TRAMA2(CONTEO-5); ELSIF(CONTEO>16 AND CONTEO <21) THEN TX<='0'; ELSIF(CONTEO=21) THEN

ELSE

Universidad de Pamplona

ISSN: 1692-7257

Revista Colombiana de Tecnologas de Avanzada


END IF; OUTPUT: OUT STD_LOGIC); END PWM; ARCHITECTURE RTL OF PWM IS BEGIN PROCESS(CLK) VARIABLE CONTA:INTEGER:=0; BEGIN IF (CLK'EVENT AND CLK='1') THEN CONTA:=CONTA+1; IF FREC = "00" THEN IF CONTA<DUTY THEN OUTPUT<='1'; ELSIF CONTA >DUTY AND CONTA<255 THEN OUTPUT<='0'; ELSIF CONTA=255 THEN CONTA:=0; END IF;

END PROCESS CARGA; END;

4.2 SIMULACIN

Fig.4 simulacion problema 2


5 PROBLEMA 3

ELSIF FREC = "01" THEN IF CONTA<DUTY THEN OUTPUT<='1'; ELSIF CONTA >(2*DUTY) AND CONTA<512 THEN OUTPUT<='0'; ELSIF CONTA=512 THEN CONTA:=0; END IF; ELSIF FREC = "10" THEN IF CONTA<DUTY THEN OUTPUT<='1'; ELSIF CONTA >(4*DUTY) AND CONTA<1024 THEN OUTPUT<='0'; ELSIF CONTA=1024 THEN

La Modulacin por ancho de pulso PWM es muy empleada en convertidores de corriente directa para la regulacin de voltaje en fuentes conmutadas, control de motores dc, lmparas entre otras aplicaciones. Ahora, usted debe disear un chip PWM en tiempo record, que permita controlar el ancho de pulso dela seal de salida a travs del puerto de entrada duty que determinar el ancho de pulso con una resolucin de 8 bits (256 posibles anchos de pulso), por ejemplo, si duty=01000000 (que en decimal es 64) corresponder a un ancho de pulso del 25%, es decir, la cuarta parte del periodo de la seal de salida estar en nivel lgico alto. Si duty=10000000 (d 128) entonces la salida tendr un ciclo de trabajo del 50%. El mximo ancho de pulso ser cuando duty sea = 11111111 que ser del 100% y el mnimo cuando duty sea=00000000 que ser del 0%.

CONTA:=0; END IF; ELSIF FREC = "11" THEN IF CONTA<DUTY THEN OUTPUT<='1'; ELSIF CONTA >(8*DUTY) AND CONTA<2048 THEN OUTPUT<='0'; ELSIF CONTA=2048 THEN CONTA:=0; END IF; END IF; END IF; END PROCESS; END RTL;

5.2. SIMULACIN

Fig.6 simulacion problema 3

Adems, la entrada FREQ permitir configurar la frecuencia de salida de la seal PWM, ya que dependiendo de la aplicacin es necesario variar dicho parmetro, as:

6. CONCLUSIONES Apartir de las simulaciones entregadas por el programa notamos que el codigo aplicado al prblema entrega una solucion, limitando los tiempos de simulacion podemos observar de mejor manera los resultados arrojads por el software trabajado. verificamos que el codigo secuencial trabajara de forma idonea, dentro de un codigo concurrente gracias a este tipo de codigo el problema no da compeljidad a jna solucion. Obtuvimos graficas similares alas obtenidas por el docente en cada una de las simulaciones dadas en el rpoble del parcial, con esto se corrobora la eficiencia del software impementado.

Tabla 1 cuadro de divison de frecuencia

5.1 CDIGO
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY PWM IS PORT ( FREC: IN STD_LOGIC_VECTOR(1 DOWNTO 0); DUTY: IN INTEGER RANGE 0 TO 255; CLK: IN STD_LOGIC;

Universidad de Pamplona