VHDL: ¿cómo realiza una transferencia de datos asíncrona entre entidades?

1

¿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?

    
pregunta WiegleyJ

0 respuestas

Lea otras preguntas en las etiquetas