Está en la página 1de 16

1.

Mencione tres palabras reservadas que se utilizan en HDL, indicando su función, cada
una con un ejemplo explicado

PROCESS es una sentencia concurrente en el sentido de que todos los PROCESS y todas las demás
sentencias concurrentes se ejecutarán sin un orden establecido. No obstante las sentencias que
hay dentro del PROCESS se ejecutan de forma secuencial.

ENTITY ejemplo IS
PORT (c: IN std_logic;
d: OUT std_logic);
END ENTITY;

ARCHITECTURE ejemplo_arch OF ejemplo IS


SIGNAL a,b: std_logic;
BEGIN
PROCESS(c)
VARIABLE z: std_logic;
BEGIN
a<= c and b; --asignación de señales: después de
ejecutarse esta línea, "a" seguirá valiendo lo mismo, sólo se
actualiza al acabar el PROCESS
z:= a or c; --asignación de variables: en el momento de
ejecutarse esta línea z valdrá "a or c" (el valor que tenía a cuando
empezó el PROCESS)
END PROCESS;
END ARCHITECTURE;

LOOP es la forma de hacer bucles en VHDL. Sería el equivalente a un FOR o WHILE de un


lenguaje convencional.

bucle1: LOOP
a:=A+1;
b:=20;
bucle2: LOOP
IF b < (a*b) THEN
EXIT bucle2;
END IF;
b:=b+a;
END LOOP bucle2;
EXIT bucle1 WHEN a>10;
END LOOP bucle1;

IF ... THEN ... ELSE


Permite la ejecución de un bloque de código dependiendo de una o varias condiciones.
IF (reloj='1' AND enable='1') THEN
salida<=entrada;
ELSIF (enable='1') THEN
salida<=tmp;
ELSE
salida<='0';
END IF;

2. Muestre cómo se comporta una compuerta lógica en HDL, proporcione un ejemplo


del código y explíquelo.

-- Libreria estandar

library IEEE;

use IEEE.std_logic_1164.all;

-- Descripcion en caja negra

entity Compuerta_NAND is

port(

A, B : in std_logic; -- Entradas simples

F: out std_logic -- Salida simple

);

end Compuerta_NAND;

-- Descripcion del circuito

architecture simple of Compuerta_NAND is

begin

F <= A NAND B; -- Compuerta NAND

end simple;
3. Menciona las familias lógicas y sus características
Familia lógica RTL

Características de esta familia

- Puerta básica. NOR

- Frecuencia de utilización típica 8MHz

- Inmunidad al ruido BAJA

- Potencia típica disipada 12 mW

- Número de funciones realizables ALTO

- Intervalo de temperatura de funcionamiento -55ºC a 125ºC ó 0ºC a 75ºC

- Tensión de alimentación 3v

- Cargabilidad de salida (fan-out) BAJA

Familia lógica DTL

Características de esta familia

- Puerta básica. NAND

- Frecuencia de utilización típica Entre 12MHz y 30MHz

- Inmunidad al ruido BUENA

- Potencia típica disipada 8mW a 12mW

- Número de funciones realizables ALTO

- Intervalo de temperatura de funcionamiento -55ºC a 125ºC ó 0ºC a 75ºC

- Tensión de alimentación 5v

- Cargabilidad de salida (fan-out) Limitada a 8 por el fabricante

- la velocidad de conmutación, en el caso que estamos considerando viene fijada por: la velocidad
de los dispositivos que la componen y las constantes de tiempo de los circuitos.

Familia Lógica ECL

Características

- Los transistores nunca se saturan, esto hace que la velocidad de conmutación sea muy alta.

- El tiempo común de retardo es de 2ns.

- Los márgenes de ruido en el peor de los casos son de 250 mV.

- La disipación de potencia de una compuerta es de 40 mW.


- Su voltaje de alimentación negativo y niveles lógicos, que no son compatibles con las demás
familias y esto dificulta el uso de las ECL en conjunción con los circuitos TTL y MOS.

- El flujo de corriente total en el circuito ECL permanece constante, no importa su estado lógico.

Familia Lógica TTL

Características

- Su tensión de alimentación característica se halla comprendida entre los 4,75V y los 5,25V.
Normalmente TTL trabaja con 5V.

- Los niveles lógicos vienen definidos por el rango de tensión comprendida entre 0,0V y 0,8V para
el estado L (bajo) y los 2,2V y Vcc para el estado H (alto).

- La velocidad de transmisión entre los estados lógicos es su mejor base, si bien esta característica
le hace aumentar su consumo siendo su mayor enemigo. Motivo por el cual han aparecido
diferentes versiones de TTL como FAST, LS, S, etc. y últimamente los CMOS: HC, HCT y HCTLS.

- Las señales de salida TTL se degradan rápidamente si no se transmiten a través de circuitos


adicionales de transmisión.

Familia Lógica MOS

- Se utilizan como condensadores de precisión en electrónica analógica y microondas.

Familia Lógica CMOS

Características

- Extremado bajo consumo.

- Alta inmunidad al ruido.

- Alto Fan-out.

- Rango de tensiones de alimentación amplio (3 V a 18V).

- Principal desventaja: Velocidad.

Familia Lógica BiCMOS

- Son amplificadores con un alto ancho de banda y circuitos lógicos con alta velocidad de
conmutación.
Búsqueda lineal
Es el método que recorre el vector desde el primer elemento hasta el último para encontrar un
elemento.
#include <iostream>
using namespace std;

int main()
{
//Declarando variables.
int clave, encontrado, n, i, j;
//Pedir tamaño del arreglo.
cout << "Ingrese dimensión del arreglo: ";
cin >> n;

//Crear la variable para el arreglo dinámico.


int* arreglo = new int[n];
//LLenar el arreglo.
for (i = 0;i < n;i++)
{
cout << "Ingrese dato [" << i << "]: ";
cin >> arreglo[i];
}
//Pedir dato o clave a buscar.
cout << "Ingrese dato que desea buscar: " << endl;
cin >> clave;
//Declarar variable de éxito de búsqueda.
encontrado = 0;
//Buscar clave o dato en el arreglo.
for (j = 0;j < n;j++)
{
//Si el elemento de la posición actual del arreglo es similar a la
clave de búsqueda, despliega mensaje de encontrado.
if (arreglo[j] == clave)
{
cout << "Se encontro el " << clave << " en la posicion [" << j << "]"
<< endl;
encontrado = 1;
}
}
//Libera arreglo dinámico en memoria.
delete[] arreglo;
//Si no se encontró la clave despliega el mensaje de no encontrado.
if (encontrado != 1)
cout << "No se encontro el dato" << endl;
system("pause");
return 0;
}

Búsqueda binaria
En este método se examina primero el elemento central de la lista; si es el elemento buscado,
entonces termina la búsqueda y de no ser así se examina la primera mitad o la segunda mitad de
la lista repitiendo el mismo proceso anterior.
Es importante que el vector donde se va a buscar el elemento se encuentre en un orden
determinado.

//Busqueda binaria

#include <iostream>

#include <conio.h>

using namespace std;

int main()

int numeros [] = {1,2,3,4,5};

int inf, sup, mitad, dato;


char band = 'F';

cout<<"Ingrese el numero que quiere buscar: "<<endl;

cin>>dato;

//Algoritmo de la busqueda binaria

inf = 0;

sup = 5;

while (inf <= sup){

mitad = (inf + sup)/2;

if(numeros[mitad] == dato){

band = 'V';

break;

if(numeros[mitad] > dato){

sup = mitad;

mitad = (sup + inf)/2;

if(numeros[mitad] < dato){

inf = mitad;

mitad = (sup + inf)/2;

if(band == 'V'){

cout<<"El numero se ha encontrado en la posicion: "<<mitad<<endl;

getch();

return(0);

}
Pilas
Una pila es una estructura de datos, que consta de una serie de datos, en la cual las inserciones y
eliminaciones se hacen por un extremo, llamado cima (top), de la pila. La estructura pila se conoce
como LIFO (last-in, first-out, último en entrar, primero en salir), que significa “último elemento
introducido, primero sacado”.

//Insertar elemento en pila

#include<iostream>

#include<conio.h>

#include<stdlib.h>

using namespace std;

struct Nodo{

int dato;

Nodo *siguiente;

};

void agregarPila(Nodo *&,int);//Prototipo

int main(){

Nodo * pila = NULL;

int n1, n2;

cout<<"Digite un numero: ";

cin>>n1;

agregarPila(pila,n1);

cout<<"Digite otro numero: ";

cin>>n2;

agregarPila(pila,n2);

getch();

return 0;

}
void agregarPila(Nodo *&pila,int n){

Nodo *nuevo_nodo = new Nodo();

nuevo_nodo->dato = n;

nuevo_nodo->siguiente = pila;

pila = nuevo_nodo;

cout<<"\nElemento "<<n<<" agregado a PILA correctamente"<<endl;

Colas

En una cola hay dos extremos, uno es llamado la parte delantera y el otro extremo se llama la
parte trasera de la cola. En una cola, los elementos se retiran por la parte delantera y se agregan
por la parte trasera.

La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-first-out), lo que


quiere decir, que el primer elemento en entrar es el primer elemento en salir.

#include <iostream>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

using namespace std;

struct Nodo {

char dato;

Nodo *siguiente;

};

//Prototipo de funciones

void menu ();

void insertarCola(Nodo *&,Nodo *&,char);

bool cola_vacia(Nodo *);


void suprimirCola (Nodo *&,Nodo *&,char &);

int main() {

menu();

getch ();

return 0;

void menu(){

int opc;

char dato;

Nodo *inicio = NULL;

Nodo *fin = NULL;

do{

cout<<"\t **MENU**\n";

cout<<"1. Insertar un caracter a una cola"<<endl;

cout<<"2. Mostrar todos los elementos de la cola"<<endl;

cout<<"3. Salir"<<endl;

cout<<"Opcion seleccionada: ";

cin>>opc;

switch (opc) {
case 1: cout<<"Ingrese un caracter para agregar a la cola: ";

cin>>dato;

insertarCola(inicio,fin,dato);

break;

case 2: cout<<"\nLos elementos de la cola son: \n";

while(inicio != NULL){

suprimirCola(inicio,fin,dato);

if(inicio != NULL){

cout<<dato<<" , ";

else{

cout<<dato<<" . ";

cout<<"\n";

system ("pause");

break;

case 3: break;

system("cls");

}while(opc != 3);

//Función para insertar un elemento en la cola

void insertarCola(Nodo *&inicio,Nodo *&fin,char n){

Nodo *nuevo_nodo = new Nodo();

nuevo_nodo->dato = n;

nuevo_nodo->siguiente = NULL;
if(cola_vacia(inicio)){

inicio = nuevo_nodo;

else{

fin->siguiente = nuevo_nodo;

fin = nuevo_nodo;

//Función para determinar si la cola está vacia

bool cola_vacia(Nodo *inicio){

return (inicio == NULL)? true : false;

//Función para quitar elementos de la cola

void suprimirCola(Nodo *&inicio,Nodo *&fin,char &n){

n = inicio ->dato;

Nodo *aux = inicio;

if (inicio == fin){

inicio = NULL;

fin = NULL;

else {

inicio = inicio->siguiente;

delete aux;

}
Buen día Yerani, espero te encuentres bien.

Me parece que la definición de los algoritmos de búsqueda son correctos aunque es muy
breve la explicación. 
Por otro lado en los tipos de listas de hizo falta mencionar los tipos "pilas" y "colas";
además, olvidaste mencionar un ejemplo en lenguaje C++ de cómo funciona tanto los
algotimos de búsqueda como los tipos de listas. 

Te comparto un el ejemplo que hice de tipo de lista de cola. 

#include <iostream>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

using namespace std;

struct Nodo {

    char dato;

    Nodo *siguiente;

};

//Prototipo de funciones

void menu ();

void insertarCola(Nodo *&,Nodo *&,char);

bool cola_vacia(Nodo *);

void suprimirCola (Nodo *&,Nodo *&,char &);

int main() {

   

    menu();

   

   
   

   

   

    getch ();

    return 0;

void menu(){

    int opc;

    char dato;

   

    Nodo *inicio = NULL;

    Nodo *fin = NULL;

   

    do{

        cout<<"\t **MENU**\n";

        cout<<"1. Insertar un caracter a una cola"<<endl;

        cout<<"2. Mostrar todos los elementos de la cola"<<endl;

        cout<<"3. Salir"<<endl;

        cout<<"Opcion seleccionada: ";

        cin>>opc;

       

        switch (opc) {

            case 1: cout<<"Ingrese un caracter para agregar a la cola: ";

            cin>>dato;

            insertarCola(inicio,fin,dato);

            break;

            case 2: cout<<"\nLos elementos de la cola son: \n";

            while(inicio != NULL){


                suprimirCola(inicio,fin,dato);

                if(inicio != NULL){

                    cout<<dato<<" , ";

                }

                else{

                    cout<<dato<<" . ";

                }

            }

            cout<<"\n";

            system ("pause");

            break;

            case 3: break;

        }

        system("cls");

    }while(opc != 3);

//Función para insertar un elemento en la cola

void insertarCola(Nodo *&inicio,Nodo *&fin,char n){

    Nodo *nuevo_nodo = new Nodo();

   

    nuevo_nodo->dato = n;

    nuevo_nodo->siguiente = NULL;

   

    if(cola_vacia(inicio)){

        inicio = nuevo_nodo;

    }

    else{

        fin->siguiente = nuevo_nodo;


    }

    fin = nuevo_nodo;

//Función para determinar si la cola está vacia

bool cola_vacia(Nodo *inicio){

    return (inicio == NULL)? true : false;

//Función para quitar elementos de la cola

void suprimirCola(Nodo *&inicio,Nodo *&fin,char &n){

    n = inicio ->dato;

    Nodo *aux = inicio;

   

    if (inicio == fin){

        inicio = NULL;

        fin = NULL;

    }

    else {

        inicio = inicio->siguiente;

    }

    delete aux;

También podría gustarte