Conexión entre std_logic y std_logic_vector (de 0 a 0)

2

Estoy intentando conectar uno de mis bloques VHDL a un bloque generado por Xilinx (una memoria RAM de doble puerto).

El problema es que la habilitación de escritura de la RAM se define como un std_logic_vector (de 0 a 0) en lugar de un std_logic y no sé cómo conectarlos.

El bloque RAM:

component bloque_4
    port(
        ...
        wea : in  std_logic_vector(0 downto 0);
        ...
        );
    end component;

Mientras que el componente que intenta escribir en esa memoria es:

component bloque_3
    port(
        ...
        write_en_b3 : out std_logic;
        ...
        );
    end component;

En el banco de pruebas que escribí para probar la conexión, definí una señal para establecer la comunicación entre los dos:

signal write_en_b34 : std_logic;

Hasta ahora, las cosas están muy bien, el problema viene cuando trato de asignar la señal write_en_b34 al puerto wea.

uut: bloque_4 
    port map (
        ...
        wea => write_en_b34,
        ..
        );

Entiendo que hay una falta de coincidencia de tipos, pero no sé cómo resolverlo. Entonces, ¿cómo se podría asignar un std_logic_vector (0 downto 0) a un std_logic?

    
pregunta JVGD

2 respuestas

2

Hazlo así.

uut: bloque_4 
    port map (
        ...
        wea(0) => write_en_b34,
        ..
        );

Es perfectamente correcto asociar segmentos o elementos de puerto con una mezcla de señales y constantes. La única restricción es que si asocia cualquiera de los bits de puerto, debe asociarlos a todos.

Este es un ejemplo de entidad foo con un port_a de 8 bits.

signal s_1 : std_logic;
signal s_2 : std_logic_vector(3 downto 0);
...
x:  foo
port map(
  port_a(0)          => signal_1,
  port_a(4 downto 1) => signal_2,
  port_a(7 downto 5) => "000"
);

En el ejemplo anterior, sería un error si solo algunos de los bits en port_a no estuvieran vinculados a una señal o un valor constante. No sería un error si ninguno de los bits en port_a se adjuntara, siempre que el puerto tuviera un valor predeterminado en la definición de la entidad.

    
respondido por el user4574
0

Puedes usar otra señal write_en_b34_v y asignarle write_en_b34. Luego, puede asignar write_en_b34_v a la entrada del bloque de Xilinx:

signal write_en_b34_v : std_logic_vector(0 downto 0);

(...)

write_en_b34_v(0) <= write_en_b34

(...)

uut: bloque_4 
    port map (
        ...
        wea => write_en_b34_v,
        ..
        );

Probablemente hay albo otra forma más fácil de hacerlo. Puede intentar asignar write_en_b34_v a su bloque de esta manera:

uut: bloque_3 
    port map (
        ...
        wea => write_en_b34_v(0),
        ..
        );

y luego usarlo como arriba. Pero estoy seguro de que funcionará.

    
respondido por el Staszek

Lea otras preguntas en las etiquetas