Autor Tema: REGISTRO DE CORRIMIENTO  (Leído 8701 veces)

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

Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
REGISTRO DE CORRIMIENTO
« en: 23 de Abril de 2009, 14:38:45 »
Código: VHDL
  1. LIBRARY ieee ;
  2. USE ieee.std_logic_1164.all ;
  3.  
  4. ENTITY pap IS
  5.         PORT(w, clk     :IN STD_LOGIC;
  6.                  Q              :OUT STD_LOGIC_VECTOR(1 TO 4));
  7.         END pap;
  8.        
  9. ARCHITECTURE secuencia OF pap IS
  10. BEGIN
  11.         PROCESS(clk)
  12.                 VARIABLE Sreg : STD_LOGIC_VECTOR(1 TO 4);
  13.         BEGIN
  14.                 IF Clk'EVENT AND Clk = '1' THEN        
  15.                         Sreg(4):= w;
  16.                         Sreg(3):= Sreg(4);
  17.                         Sreg(2):= Sreg(3);
  18.                         Sreg(1):= Sreg(2);
  19.                 END IF;
  20.                 Q<= Sreg;
  21.         END PROCESS;
  22. END secuencia;

Un cordial sludo a los participantes del foro.
quisiera pedir recomendaciones de como poder convertir  A  W  en una variable lo intente de las siguientes formas y quarus no me lo hacepta

                VARIABLE W : STD_LOGIC_VECTOR(1 TO 0);
                O
                VARIABLE W : BIT_VECTOR(1 TO 0);
.               O
                VARIABLE W : INTEGER RANGE 0 TO 3 := 0;
ENTODAS TRES ME SALE ERROR .
ya se me acabaron las ideas y por eso recurro a su ayuda.

Desconectado Spartana

  • PIC10
  • *
  • Mensajes: 9
Re: REGISTRO DE CORRIMIENTO
« Respuesta #1 en: 29 de Abril de 2009, 20:58:12 »
Hola hectdiaf,

Prueba con,

VARIABLE W : STD_LOGIC_VECTOR(0 TO 1);
VARIABLE W : STD_LOGIC_VECTOR(1 DOWNTO 0);

a ver que tal...
               
             

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: REGISTRO DE CORRIMIENTO
« Respuesta #2 en: 07 de Mayo de 2009, 04:34:54 »
Han pasado de esto algunos días, pero bueno, más vale tarde ...

No hace falta que definas ninguna variable, todo lo que necesitas lo tienes en tu definición de E/S.

Prueba así y cuenta como te ha ido:

En la entidad:

Q: BUFFER STD_LOGIC_VECTOR(1 TO 4);

En la arquitectura:

Q(4)<=w;
Q(3)<=Q(4);
Q(2)<=Q(3);
Q(1)<=Q(2);

Un saludo

Desconectado samfi33

  • PIC10
  • *
  • Mensajes: 6
Re: REGISTRO DE CORRIMIENTO
« Respuesta #3 en: 30 de Mayo de 2009, 16:38:58 »
Si es que todavia te sirve, el programa correcto sería cambiado el process al siguiente:


PROCESS(clk)
SIGNAL Sreg : STD_LOGIC_VECTOR(1 TO 4);
BEGIN
IF Clk'EVENT AND Clk = '1' THEN
Sreg(4)<= w;
Sreg(3)<= Sreg(4);
Sreg(2)<= Sreg(3);
Sreg(1)<= Sreg(2);
END IF;
Q<= Sreg;
END PROCESS;

solo cambiando el tipo de variable a señal

Desconectado samfi33

  • PIC10
  • *
  • Mensajes: 6
Re: REGISTRO DE CORRIMIENTO
« Respuesta #4 en: 30 de Mayo de 2009, 16:41:35 »
jajajaja hubo un lapsus , se tiene que cambiar la arquitecrura a la siguiente


ARCHITECTURE secuencia OF pap IS
SIGNAL Sreg : STD_LOGIC_VECTOR(1 TO 4);
BEGIN
PROCESS(clk)
BEGIN
IF Clk'EVENT AND Clk = '1' THEN
Sreg(4)<= w;
Sreg(3)<= Sreg(4);
Sreg(2)<= Sreg(3);
Sreg(1)<= Sreg(2);
END IF;
Q<= Sreg;
END PROCESS;
END secuencia;


alli si debe funcionar


Saludos de Lima - Perú.