# Duda en una secuencia en vhdl



## teufel (Abr 5, 2012)

Buenas noches a todos los electronicos y programadores del foro antes que nada reciban un caluroso saludo.
Ahora bien soy nuevo en temas de lenguaje vhdl y el problema que tengo es que hice un contador de 3 bits y un secuencia a seguir a partir de cada combinacion de bits del contador,todo funciona apropiadamente pero lo que estoy buscando es que no necesite hacer conexiones físicas de las salidas del contador a las entradas de las combinaciones de bits en el mismo dispositivo(que en este caso es una GAL16v8) anexo el programa realizado.Espero me puedan apoyar de antemano muchas gracias


----------



## chclau (Abr 6, 2012)

Hola, varias preguntas y observaciones.

Para qué sirve "a"? 
"conteo" no afecta a ninguna salida, por lo tanto el sintetizador te lo va a borrar.
no conviene, en un when, que las salidas no estén definidas para ciertas combinaciones. Eso te podría crear un latch no deseado. Tanto s1 como s2 no están definidos para todos los valores de "a".
La simulaste a la lógica? Qué secuencia querías lograr?

Y por último, no entiendo tu pregunta con respecto a conectar el contador a las entradas de las combinaciones de bits.


----------



## teufel (Abr 10, 2012)

chclau dijo:


> Hola, varias preguntas y observaciones.
> 
> Para qué sirve "a"?
> "conteo" no afecta a ninguna salida, por lo tanto el sintetizador te lo va a borrar.
> ...



Poes bien respondamos dudas a es la entrada de las salidas del contador esto es en a entra la combinacion de bits 000,001,etc hasta el 7.Conteo es la salida del contador la que da la combinacion de bits 000,001,etc ignorando por ultimo el 7 en binario y regresando a 000,en when si defini la salida para combinaciones fuera de ese rango con others para s2,y si lo simule con nova e hizo lo que queria ahora mi duda en ese programa que anexe vienen dos "circuitos"por decirlo asi uno que es un contador de tres bits y el otro que apartir de lo que de el contador en su salida que en este caso es "conteo" de sera la salida en s1 y en caso de que salga del rango sera por s2;
entonces del contador tiene una entrada y 3 salidas fisicas y la otra parte una entrada de 3 bits y tres salidas que es s1 de dos bits y s2 de uno tambien fisicas lo que que quiero hacer es que las salidas fisicas de el contador("conteo") se elimine junto con las entradas(a) de manera fisica y sea un proceso dentro del dispositivo si me explico?


----------



## fms (Abr 11, 2012)

Hola Teufel,

No estoy seguro de entenderte bien. Pero lo siguiente te puede ayudar.

Incluye una sentencia concurrente que conecte los dos procesos:


```
a <= conteo;
```

Esta sentencia es concurrente y por lo tanto va fuera de los procesos.

Pusiste _a_ como puerto de entrada, pero en verdad, creo que quieres conectar la salida del contador (_conteo_) a la señal _a_. Si haces esto, deberás quitar _a_ como puerto de entrada y _conteo _como puerto de salida, y declararlas como señales.

Otra opcion es quitar la señal _a_, y sustituirla por _conteo _(es decir, es la misma señal).

Por otro lado, chclau tiene razón, para evitar latches en el case tienes que asignar en todas las posibilidades. Así que tendrías que hacer algo así:


```
process(a)
begin
  case a is
    when"000"=>
      s1<="00";
      s2<="0";
    when"001"=>
      s1<="01";
      s2<="0";
....
```

O bien poner un valor por defecto al principio del proceso:


```
process(a)
begin
  s1<="00"; -- valor por defecto
  s2<="0";  -- valor por defecto
  case a is
    when"000"=>   s1<="00";
....
```

Y otra cosilla, ya que el puerto _s2_ es de un solo bit, yo lo declararía como std_logic, pero no es que esté mal declararla como lo has hecho.

Espero que te sirva, 

Saludos


----------

