TODOPIC

Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: pocher en 22 de Enero de 2009, 04:25:44

Título: Asignacion de valores a elementos de una matriz
Publicado por: pocher en 22 de Enero de 2009, 04:25:44
Estoy poniendo cuernos a los PICs y aprendiendo VHDL, pero que no se entere nadie.  :mrgreen:

Tengo una matriz definida asi:

type byte is array (0 to 2) of std_logic_vector(7 downto 0);
signal codigos: byte;

Hay alguna forma más corta de asignar valores a los elementos de la matriz que no sea a lo bruto, tal que así:

codigo(0)<=x"81";
codigo(1)<=x"42";
codigo(2)<=x"24";


Un saludete
Título: Re: Asignacion de valores a elementos de una matriz
Publicado por: migsantiago en 22 de Enero de 2009, 13:24:44
Según este tutorial...

http://www.seas.upenn.edu/~ese201/vhdl/vhdl_primer.html

... puedes usar algo así:

Código: [Seleccionar]
type VAR is array (0 to 7) of integer;
constant SETTING: VAR := (2,4,6,8,10,12,14,16);
Título: Re: Asignacion de valores a elementos de una matriz
Publicado por: pocher en 22 de Enero de 2009, 15:16:59
Ole, ole... voy a probarlo y te cuento.
Título: Re: Asignacion de valores a elementos de una matriz
Publicado por: pocher en 22 de Enero de 2009, 15:33:02
joer mig ¡eres una máquineta! funciona que te ...  :-/ :-/

No te vayas muy lejos, que este pueblo del VHDL no tiene mucha gente.

Gracias.
Título: Re: Asignacion de valores a elementos de una matriz
Publicado por: migsantiago en 22 de Enero de 2009, 17:20:20
jejeje

pero no seas malo, dinos cómo lo escribiste  :D
Título: Re: Asignacion de valores a elementos de una matriz
Publicado por: pocher en 22 de Enero de 2009, 17:50:46
Este el programita probado y funcionando en PROTEUS:

---------------------------------------P15: JUEGOS LUCES -----------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity leds is port(
   CK:      in std_logic;
   reset:   in std_logic;
   leds:    out std_logic_vector (7 downto 0));

   attribute LOC: string;
   --attribute LOC of CK: signal is "P1";   --obligatorio CK en P1 (lo toma por omision)
   attribute LOC of reset: signal is "P2";
   attribute LOC of leds: signal is "P23:P22:P21:P20:P19:P18:P17:P16";
   
end leds;

architecture archi_leds of leds is
   type byte is array (0 to 2) of std_logic_vector(7 downto 0);
   --signal codigos: byte;
   constant codigos: byte:=(x"81",x"42",x"24");   
begin
      process(reset,CK)
           variable i: integer range 0 to 2;
       begin
      --codigos(0)<=x"81";
      --codigos(1)<=x"42";
      --codigos(2)<=x"24";
      --codigos(3)<=x"18";               --ya no le cabe a la GAL22V10

      if (reset='0') then                --Reset asíncrono a nivel activo bajo
         leds <= x"00";
                        i:=0;
      elsif (CK'event and CK='1') then
                     leds <= codigos(i);
                     i:=i+1;
                     if (i>2) then
                         i:=0;                  
               end if;
           end if;
   end process;
end archi_leds;   

Si ves alguna cosa que se pueda mejorar, avisa.

Un saludo