¿Cómo implementa el siguiente tipo de funcionalidad en VHDL que se puede sintetizar?
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITY memory IS
PORT (
data : INOUT STD_LOGIC_VECTOR (23 DOWNTO 0) := (OTHERS => 'Z');
write : IN STD_LOGIC;
trigger: IN STD_LOGIC;
ack: OUT STD_LOGIC := '0'
);
END memory;
ARCHITECTURE logic OF memory IS
SIGNAL memory: STD_LOGIC_VECTOR (23 DOWNTO 0) := (OTHERS => '0');
BEGIN
PROCESS (trigger)
BEGIN
IF rising_edge(trigger) THEN
IF write='0' THEN
memory <= data;
else
data <= memory;
END IF;
ack <= '1';
ELSIF falling_edge(trigger) THEN
data <= (OTHERS => 'Z');
ack <= '0';
END IF;
END PROCESS;
END logic;
pero eso no funciona debido a:
ERROR - memory.vhd(28): statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition. VHDL-1242
Done: error code 2
(Algunos arreglos que he intentado sintetizar pero producen el "registro ack_NN atascado en CERO" tipo de errores que supongo que tampoco funcionarán como se esperaba).
básicamente, quiero crear entidades que puedan conectarse a otra entidad y pasar datos de forma asíncrona entre ellas. Parece que deberías poder hacer esto con un simple apretón de manos como "A tiene datos para mí" - > "copiar datos de A" - > "Dile a A que he terminado de copiar" - > "Espera a que aparezca" A "para ver que he terminado".
Tiene que haber una forma de transferir los datos de una entidad a otra fuera de forma asíncrona, pero estoy perdido para descubrir cómo hacerlo. Y parece que deberías poder hacer esto sin un reloj que parece convertir esto en una solución síncrona. ¿Cómo lograr este objetivo de forma asíncrona?