Gracias suky.
te explico, estoy haciendo un robot para resolver laberinto
y primero leo los sensores y luego verifico en que condicion entran, esto con el case
ahi esta el codigo. (no se como ponerlo de colores)
-- Declaracion de librerias
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Declaracion de la entidad ---
entity sensors is
Port (
clk : in std_logic;
--Sen : in std_logic_vector(5 downto 0);--Variable para guardar la lectura de los sensores
Sen0 : in std_logic;--Variable para guardar la lectura del sensor
Sen1 : in std_logic;--Variable para guardar la lectura del sensor
Sen2 : in std_logic;--Variable para guardar la lectura del sensor
Sen3 : in std_logic;--Variable para guardar la lectura del sensor
Sen4 : in std_logic;--Variable para guardar la lectura del sensor
Sen5 : in std_logic;--Variable para guardar la lectura del sensor
-- S2
--S0 S1
--
--
--S4 S3
-- S5
enA : out std_logic;--enable del motor derecho
enB : out std_logic;--enable del motor izquierdo
D_mA: out std_logic_vector(1 downto 0);--direccion del motor A;10-->adelante,01-->atras
D_mB: out std_logic_vector(1 downto 0);--direccion del motor A;10-->adelante,01-->atras
Dir : out std_logic_vector(8 downto 0)--Vector para enviar el tipo de giro que se debe de realizar, Donde:
--Dir0 --> Alineacion a la derecha
--Dir1 --> Alineacion a la izquierda
--Dir2 --> Giro derecha
--Dir3 --> Giro izquieda
--Dir4 --> Derecho
--Dir5 --> Derecho | giro derecha
--Dir6 --> Derecho | giro izquierda
--Dir7 --> Derecho | giro izquierda | giro derecha
--Dir8 --> fin de camino
);
end sensors;
-- Declaracion de la arquitectura ---
architecture behavior of sensors is
constant A_der: std_logic_vector(5 downto 0):=B"001011";--Alineacion a la derecha
constant A_izq: std_logic_vector(5 downto 0):=B"010011";--Alineacion a la izquierda
constant G_der: std_logic_vector(5 downto 0):=B"010101";--Giro derecha
constant G_izq: std_logic_vector(5 downto 0):=B"001110";--Giro izquieda
constant Der : std_logic_vector(5 downto 0):=B"011011";--derecho
constant Der_d: std_logic_vector(5 downto 0):=B"010001";--derecho | derecha
constant Der_i: std_logic_vector(5 downto 0):=B"001010";--derecho | izquieda
constant Der_i_d: std_logic_vector(5 downto 0):=B"000000";--derecho | izquieda | derecho
constant Sin_c: std_logic_vector(5 downto 0):=B"011111";--sin camino
constant end_d: std_logic_vector(5 downto 0):=B"110001";--termino del giro a la derecha
constant end_i: std_logic_vector(5 downto 0):=B"101010";--termino del giro a la izquierda
constant end_g: std_logic_vector(5 downto 0):=B"100000";--termino del giro cuando no hay pared a los costados
signal Sen: std_logic_vector(5 downto 0):=B"000000";--variable para guardar todos los snesores leidos
variable flag: integer:=0
begin
process(Sen0,Sen1,Sen2,Sen3,Sen4,Sen5,clk)--leo los sensores
begin
Sen <= Sen5 & Sen4 & Sen3 & Sen2 & Sen1 & Sen0;
if rising_edge(clk)then
case Sen is
when A_der =>
--aqui quiero que se este leyendo un sensor para saber cuando debe terminar de girar
Dir <= B"000000001";
when A_izq =>
--
Dir <= B"000000010";
when G_der =>
Dir <= B"000000100";
when G_izq =>
Dir <= B"000001000";
when Der =>
Dir <= B"000010000";
when Der_d =>
Dir <= B"000100000";
when Der_i =>
Dir <= B"001000000";
when Der_i_d =>
Dir <= B"010000000";
when Sin_c =>
Dir <= B"100000000";
when end_d =>
Dir <= B"000000101";
when end_i =>
Dir <= B"000001001";
when end_g =>
Dir <= B"000001011";
when others =>
Dir <= B"000000000";
end case;
end if;
end process;
end behavior;
por ejemplo en la primera condicion el robot debe girar a la derecha y quiero que el VHDL active los motores para el giro mientras un sensor sea 0.
o alguna idea de como hacer esto
De antemano GRacias