Autor Tema: pregunta sobre declaraciones  (Leído 3716 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado qb_1

  • PIC10
  • *
  • Mensajes: 14
pregunta sobre declaraciones
« en: 17 de Febrero de 2004, 16:51:00 »
hola a todos.
tengo un par de consultas  en las que a ver si alguien me podria ayudar por favor. Cual es la diferenia entre declarar una señal o variable como " std_logic_vector" a declararla como "bit_vector" y si hay una diferencia como convierto de un formato a otro.
una ultima consulta, estoy trabajando en el entorno maxpluII y estoy utilizando el operador exponencial " ** " de la siguiente forma:

for i in 0 to 7 loop
   if  binword8(i) = "1" then
      outputnum := outputnum + 2**i ;
   end if;
end loop;
 pero al compilarlo me da un error que este operador no es soportado, sera que maxplus no lo soporta o no estoy utilizando el paquete o la libreria adecuada; las librerias que utilizo son :
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;



Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: pregunta sobre declaraciones
« Respuesta #1 en: 20 de Febrero de 2004, 03:19:00 »
Hola qb_1!!

A tu primera pregunta: a la hora de declarar las variables o constantes que utilices en tu diseño, las variables de tipo "simple" que implementan las entidades ENTITY, es decir, las que están implementadas en el package o librería standard, ieee.std_logic_1164.all, esas variables deben ser de tipo std_logic. En el caso de arrays o vectores, debes declararlas std_logic_vector, y dar un rango natural que indique la posición del bit inicial del vector y la posición del bit final. Por ejemplo:

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DECODER2X4 is
port(A, B, ENABLE: in STD_LOGIC;
        Z: out STD_LOGIC_VECTOR(0 to 3));

Las variables de entrada son de tipo bit (A, B y ENABLE); mientras que la salida es un vector, Z, de cuatro bits.

Vale. Ahora vamos con los tipos de de variables "complejos" o que declaras tú a partir de tipos simples, y que debes incluir en un paquete que luego llamas como si fuera una librería más.

En el caso de std_vector, esto se suele usar para implementar SEÑALES, SIGNALS, que se obtienen a partir de operaciones lógicas o aritméticas entre señales o variables simples y standard. Por ejemplo:

Signal DBUS: std_vector(0 to 7);
signal CTRL: std_logic_vector(0 downto 7);
signal enable, RW: signal std_logic;
signal count: std_logic_vector(0 to 3);
DBUS <= Ctrl & Enable & RW & count;

La señal DBUS, que es un vector de 8 bits, se obtiene a partir de la concatenación (& de las señales CTRL, Enable, RW y count.

Bueno, sigo en el siguiente mensaje para que no se forme un "chorizo" y te aburras.

Besotes
Elena



Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: pregunta sobre declaraciones
« Respuesta #2 en: 20 de Febrero de 2004, 08:02:00 »
Aquí estoy de nuevo.

En cuanto al operador **, efectivamente el paquete que estas usando, los estándares, no soportane el operador exponencial.
Debes buscar algún truco, implementar una función iterativa que haga los productos simples, por ejemplo...

Lo pienso y te cuento, que ahora estoy con mucha prisa.
Saludos!
Elena

Desconectado qb_1

  • PIC10
  • *
  • Mensajes: 14
RE: pregunta sobre declaraciones
« Respuesta #3 en: 20 de Febrero de 2004, 16:14:00 »
te agradesco un montonazo elena, se que siempre estas al pendiente de un nesecitado, solo una duda que me quedo:
cuando te refieres a std_vector es lo mismo que decir bit_vector;
y entonces el operador  ** no se puede utilizar en ningun entorno?

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: pregunta sobre declaraciones
« Respuesta #4 en: 23 de Febrero de 2004, 09:00:00 »
Hola hola y encantada de poder ayudarte,

Bit_vector se usa para definir buses; y es una variable genérica para cualquier librería de VHDL, es como un tipo de variable stadard, como lo es bit. Sin embargo, std_logic_vector es básicamente lo mismo pero sólo las "entiende" la librería IEEE.std_logic_1164 package, as que tienen el prefijo std_logic y std_ulogic.

En cuanto al operador exponencial, VHDL define y soporta este  operador, tal cual, SOLAMENTE para computar el valor 2, o sea que si quieres obtener otro tipo de exponenciales debes apañártelas con una función hecho por ti mismo. Es lo que hay.... pero así es más divertido,

Dime si te puedo ayudar en algo más, pliss..

Saludos!
Elena

Desconectado jose_armando

  • PIC10
  • *
  • Mensajes: 4
RE: pregunta sobre declaraciones
« Respuesta #5 en: 15 de Septiembre de 2004, 18:32:00 »
Hola !

La diferencia básica entre la declaración bit_vector y std_logic es la que:

la sentencia bit -> Solo puede tener dos posibles valores 0 y 1 lógico.

la sentencia std -> Puede tener cuatro valores 0, 1, alta impedancia "Z" e indeterminación "X".

Que sean _vector tiene que ver solamante con el tamano del bus (o señales) que ud esta utilizando.

Chao !

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: pregunta sobre declaraciones
« Respuesta #6 en: 16 de Septiembre de 2004, 02:43:00 »
Muy bien!! y muchas gracias por tu aportación!!

Desconectado jose_armando

  • PIC10
  • *
  • Mensajes: 4
RE: pregunta sobre declaraciones
« Respuesta #7 en: 20 de Septiembre de 2004, 01:20:00 »


Es con mucho gusto Elena !

Que esté muy bien, Jose Armando.