You are on page 1of 2

ESTILOS DE DESCRIPCION VHDL MICROCONTROLADOR, MICROPROCESADOR: short CONTADOR1=3; // contador del ciclo descendente de

controlador cto integrado programable es como un mini pc 3a0


COMPORTAMIENTO: Define los límites de un dominio que contiene memoria RAM, ROM, periféricos etc. Función ppl es
se ejecutara si y solo si alguna de las señales de su lista de automatizar procesos y procesar información. Está formado short orden = 0; // define si está en conteo ascendente o
sensbiidad se ha modificado en la anterior simulación. por un microprocesador y el conjunto de subsx q normal% descendente, 0 ascendente, 1 descendente
DESCRIPCION DE FLUJO DE DATOS(RTL): secuencia de requiere un microprocesador: memorias entradas y salidas.
ecuaciones, descripción estructural, puesto que están Microprocesador: dispositivo capaz de interpretar y ejecutar TRISB = 0b11111111; // Configura el puerto B como entrada
describiendo señales y sus componentes. un conjunto secuencial de instrucciones, necesita de todos TRISD = 0b00000000; // Configura el puerto D como salida
DESCRIPCION ESTRUCTURAL: Mapa circuital de entradas los periféricos para poder funcionar (control, motherboard etc) PORTD = 0b00000000;
y salidas y sus conexiones y relaciones. en cambio el micro ya tiene todo incluido. INTCON = 0b10010000;
EJEMPLOS. MUX 2 A 1 VENTAJAS VHDL: ahorro de tiempo a la hora de crear un
- Entity multiplexor2a1 is // port (ent1, ent2, control: IN bit; // cto funcional, mapas de karnaug, algebra booleana etc. while( 1 ) //Bucle infinito
salida: OUT bit;); // end multiplexor2a1 // Architecture QUE REGISTRO DEL SFR DE MEMORIA DE UN PIC {
muxproceso of multiplexor2a1 is // Begin // process (ent1, CONTROLA LA CONFIGURACION DE ENTRADAS Y
ent2, control) // Begin // if(control=’0’) then // salida <= ent1; // SALIDAS PARA LOS PUERTOS. // Tris A, B, C Trisa 0x00 if (PORTB.F7 == 0)
else // salida <=ent2; // end if; // end process; // end PERMITE CAMBIAR EL BANCO: status, banco0 a banco1 estado= 1;
muxproceso; bit5 o Rp0.
- Architecture muxproceso of multiplexor2a1 is // signal in1, if (estado == 1)
in2, in3 : bit; // begin / in1<= NOT control; // in2<=ent1 AND PREGUNTAS FAIL {
in1; // in3<=ent2 OR control; // salida <= in2 OR in3; // end 1.Para configurar las interrupciones en el pin RB0 del puerto PORTD = DIGITOS[CONTADOR]; //Se visualiza el digito
muxproceso; Rta D: Habilitar los pines GIE(bit7) e INTE(bit4) del registro correspondiente al número guardado en la variable
- Architecture muxproceso of multiplexor2a1 is // signal int1, INTCON, clarear bandera INTF(bit1) CONTADOR menos 1
int2, int3: bit; // component inversor // port (p: in bit; // o: out 2.Funciones en un lenguaje: Rta D: permite el llamado de un delay_ms(1000); //Se hace un retardo de 1 segundo.
bit); // end component; // component and2 // port (A, B ; in bit; código a partir de un parámetro y retornar un valor de
// Y: out bit); // end component; // component or2 // port ( C, D respuesta la cual reduce el tiempo de ejecución. if ((CONTADOR<9) && (CONTADOR>=3) && ( orden
; in bit; // X: out bit); // end component; // Begin // E1: inversor 3. 4. Para configurar el PuertoB como entrada en todos sus ==0))
PORT MAP (control, int1); // E2: and2 PORT MAP (ent1, int1, pines en mikroc: Rta D: Se asigna el registro TRISB en el CONTADOR++;
int2); // E3: and2 PORT MAP (ent2, control, int3); // E4: or2 valor 255. if ((CONTADOR<=9) && (CONTADOR>3) && (orden
PORT MAP (int2, int3, salida); // end muxproceso; 5.Para configurar las interrupciones en un PIC de 8 bits con ==1))
el timer0 de tal forma que cuenta 512 pulsos del reloj CONTADOR--;
MULTI 8A1 manejado por el mikroc se sigue el sigte. Rta D: Se configura if ((CONTADOR==3) && (orden ==1))
LIBRARY IEEE; / USE IEEE.STD_LOGIC_1164.ALL; / USE los bits GIE(bit7) y T0IE(bit5) el registro INTCON con 1, orden=0;
IEEE.STD_LOGIC_ARITH.ALL; / USE para habilitar las interrupciones por el timer. Se habilita if ((CONTADOR==9) && (orden ==0))
IEEE.STD_LOGIC_UNSIGNED.ALL; / ENTITY MUX8_a1 IS el preescaler a ½ se habilita el conteo de pulsos internos, orden = 1;
/ PORT ( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); / A, se tiene en cuenta que el registro timer0 inicia por defecto }
B, C, D, E, F, G, H :IN STD_LOGIC; / salida: OUT en 0x00.
STD_LOGIC ); / END MUX8_a1; / ARCHITECTURE 6.Al usar “Case-When” VHDL: Rta D: Las opciones deben if (estado == 2)
procesomux OF MUX8_a1 IS / BEGIN / PROCESS (SEL, A, ser excluyentes y se deben considerar todas las {
B, C, D, E, F, G, H) / BEGIN / CASE SEL IS / WHEN "000" => opciones posibles. for (CONTADOR1=3;CONTADOR1>=0;CONTADOR1-
salida <= A; / WHEN "001" => salida <= B; / WHEN "010" => 7.Registros de propósito especial, configurar el puertoA y -)
salida <= C; / WHEN "011" => salida <= D; / WHEN "100" => PuertoB como salidas y entradas serian. RtaC: trisa trisb {
salida <= E; / WHEN "101" => salida <= F; / WHEN "110" => 8.Las interrupciones en un programa para microcontroladores PORTD = DIGITOS[CONTADOR1]; //Se visualiza
salida <= G; / WHEN "111" => MUX_OUT <= H; / WHEN son importantes por las sgts razones excepto. Rta C: permite el digito correspondiente al número guardado en la variable
OTHERS => NULL; / END CASE; / END PROCESS; / END la ejecución de 2 tramos de codigo de forma simultánea. CONTADOR menos 1
procesomux; 9. Las unds de diseño mas importantes en VHDL, ent archi delay_ms(1000); //Se hace un retardo de 1
DEMUX 1 A 4 10. El uso de lenguaje de programación de alto nivel como C. segundo.
Entity demux1a4 is: // port (F:in std_logic; // s0, s1: in al programar microcontroladores es útil por las sgtes excepto }
std_logic: // A, B, C, D: out std_logic); // end demux1a4; Rta a; el uso de estos lenguajes evita a los compiladores el estado = 1;
Architecture procesodemux of demux1a4 is // begin // process traslado del código a ensamblador y genera un ejecutable de } }
(F, s0, s1) // begin // if(s0=’0’ and s1=’0’) then // A<=F; // elsif fácil grabación al pic. INTCON = 0b10001000;
(s0=’1’ and s1=’1’) then // B<=F; elsif (s0=’0’ and s1=’1’) then while(1) //Bucle infinito.
// C<=F; // else D<=F; end if; end process; end procesodemux; Codigo ensamblador MOVLW 0X1D / MOVWF VALOR / {
DEMUX 1 A 8 MOVLW 0X03 / MOVLWF PORTD / ETIQ1 DECF VALOR / if (Juego_Luces == 0)
Entity demux1a8 is: // port(Y:in std_logic; // s0, s1, s2: in MOVF VALOR / SUBWF PORTD,0 / BTFSS STATUS, 2 / {
std_logic: // A, B, C, D, E, F, G, H: out std_logic); // end GOTO ETIQ1 / AVANZA MOVLW 0XAA / MOVWF PORTB contador2=0; // para que al volver al otro juego de
demux1a8; // Architecture procesodemux of demux1a8 is // Void main () {int i=29; while (1) {i—if(i=3) portB=170;}} luces, inicie desde el comienzo.
signal (int1, int2, int3: std_logic); // begin // int1<=NOT s0; // PORTA = LEDS[contador];
int2<=NOT s1; // int3<=NOT s2; // A<= int1 AND int2 AND int3 DIFERENCIAS MIKROC Y VHDL: microcontrolador es contador++;
AND Y; // B<= s0 AND int2 AND int3 AND Y; // C<= int1 AND usado para programar los dispositivos llamados pic o delay_ms(1000);
s1 AND int3 AND Y; // D<= s0 AND s1 AND int3 AND Y; // microcontroladores y VHDL es usado para describe circuitos if (contador == 2)
E<= int1 AND int2 AND s2 AND Y; // F<= s0 AND int2 AND electrónicos digitales es decir descripción de hardware. contador = 0;
s2 AND Y; // G<= int1 AND s1 AND s2 AND Y; // H<= s0 AND }
s1 AND s2 AND Y; // end procesodemux Diferencia sintasis if-else y while: En Vhdl – if condición then if (Juego_Luces == 1)
sentencia end if; - if condición then sentencia else sentencia {
CODIFICADOR 4 A 2 end if; - if condición then sentencia elsif condición then contador = 0; // para que al volver al otro juego de
Entity codi4a2 is // port (a: in std_logic_vector(3 downto 0); b: sentencia end if; While condición loop sentencias end loop; luces, inicie desde el comienzo.
out vector (1 downto 0)); // end codi4a2; // Architecture PORTA = LEDS2[contador2];
procesocodi of codi4a2 is // begin // process (a) // begin // if Mikroc: if(condición) {sentencia;} – if(condición){if(condcion) contador2++;
(a=”1000’’) then // b<=”00”; // elsif (a=”0100”) then // b<=”01”; sentencia else sentencia} While(condición) {sentencias} delay_ms(1000);
// elsif (a=”0010”)then // b<=”10”; // elsif (a=”0001”)then // if (contador2 == 3)
b<=”11”; // else b<=”XX”; end if; end process; end short estado=0; contador2 = 0;
procesocodi; }
void interrupt (void)
CONTADOR 0 A 127 CRECE DECRECE { }
library IEEE; // use IEEE.STD_LOGIC_1164.ALL; // use if (estado == 1) // Cambia el estado a 2, solo si el estado }
IEEE.NUMERIC_STD.ALL; // entity Contador0a127 is // previo es 1 // estado=2; // INTCON.F1=0; }
PORT (clk: IN STD_LOGIC; // reset: IN STD_LOGIC; / void main(void) {
/cnt_up: IN STD_LOGIC; // cnt_dn: IN STD_LOGIC; / salida : const unsigned short DIGITOS[] = {
OUT STD_LOGIC_VECTOR(6 downto 0)); // end 0x3F, //Código del dígito 0
Contador0a127; 0x06, //Código del dígito 1
architecture Procesoconta of Contador0a127 is // signal 0x5B, //Código del dígito 2
contador: UNSIGNED (6 downto 0): = (OTHERS => '0'); // 0x4F, //Código del dígito 3
Begin / process (clk, reset, cnt_up, cnt_dn) begin // if (reset = 0x66, //Código del dígito 4
'1') then // contador <= (others => '0'); //elsif rising_edge(clk) 0x6D, //Código del dígito 5
then // if (cnt_up = '1' AND contador < 127) then / contador <= 0x7D, //Código del dígito 6
contador + 1; / elsif (cnt_dn = '1' AND contador > 0) then / 0x07, //Código del dígito 7
contador <= contador - 1; / end if; / end if; / end process; / -- 0x7F, //Código del dígito 8
salida <= STD_LOGIC_VECTOR(contador); / end 0x6F, //Código del dígito 9 };
Procesoconta;
short CONTADOR=3; // contador del ciclo ascendente y
descendente de 3 a 9 y de 9 a 3

You might also like