library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx leaf cells in this code. --library UNISIM; --use UNISIM.VComponents.all; entity practica_3 is Port( Clk: in Std_Logic; --Activacion de Clock Dato: in Std_Logic; --PIN DE ENTRADA SS: out Std_Logic; sclk: out Std_Logic ); end practica_3; architecture Behavioral of practica_3 is type tipo_mem is array( 0 to 9) of std_logic_vector(7 downto 0); signal memoria : tipo_mem; type FSM is (bi4,bi3,bi2,bi1,bi0,bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7,guardar); --Maquina de estado signal Estado: FSM; signal contador: integer range 0 to 3; signal col: integer range 0 to 9; signal DATA: std_logic_vector(7 downto 0); signal DATA1: std_logic; begin process(clk) begin If Rising_Edge(clk) Then Case Estado is when bi4 => SS<='0'; sclk<='1'; contador <= contador+1; if contador = 1 then DATA1 <='1' ; end if; if contador = 2 then sclk<='0'; Estado <= bi3; contador<= 0; end if; when bi3 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA1 <='1' ; end if; if contador = 2 then sclk<='0'; Estado <= bi2; contador<= 0; end if; when bi2 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA1 <='1' ; end if; if contador = 2 then sclk<='0'; Estado <= bi1; contador<= 0; end if; when bi1 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA1 <='1' ; end if; if contador = 2 then sclk<='0'; Estado <= bi0; contador<= 0; end if; when bi0 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA1 <='0' ; end if; if contador = 2 then sclk<='0'; Estado <= bit0; contador<= 0; end if; when bit0 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(0) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit1; contador<= 0; end if; when bit1 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(1) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit2; contador<= 0; end if; when bit2 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(2) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit3; contador<= 0; end if; when bit3 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(3) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit4; contador<= 0; end if; when bit4 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(4) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit5; contador<= 0; end if; when bit5 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(5) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit6; contador<= 0; end if; when bit6 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(6) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= bit7; contador<= 0; end if; when bit7 => sclk<='1'; contador <= contador+1; if contador = 1 then DATA(7) <= Dato; end if; if contador = 2 then sclk<='0'; Estado <= guardar; contador<= 0; end if; when guardar => memoria(col)<=DATA; col<=col+1; sclk<='0'; Estado<=bi4; if col=9 then col<=0; end if; end case; end if; End Process; end Behavioral;