Hola, estoy escribiendo un código para el procesamiento de imágenes que incluye una memoria RAM a / desde la cual se escribirán y leerán los datos. Sin embargo, estoy recibiendo 15 errores como el que se muestra a continuación.
[DRC MDRV-1] Multiple Driver Nets: Net address_ram[10] has multiple drivers:
address_ram_reg[10]/Q, and address_ram_reg[10]__0/Q.
Creé este ram utilizando el generador block ram en Vivado 2017.2. Es un ram de puerto único y se inicializa con algún archivo .coe. Mi conocimiento sobre los carneros es limitado. Lo que sé o lo que asumo firmemente que es verdad es que cuando write_enable es 1, los datos se escribirán en la ubicación descrita por address_ram. No importa si write_enable es 1, los datos se leerán desde la ubicación descrita por address_ram. Por cierto, el ram está siempre habilitado.
Aquí lo que tengo
Leo en el flanco ascendente del reloj y escribo en el flanco descendente del reloj para evitar algunos choques.
Reading_from_Ram: process(clk) is
begin
if rising_edge(clk) then
if (pos_x < PICTURE_WIDTH_HEIGHT) and (pos_y <PICTURE_WIDTH_HEIGHT) and
(pos_x >= 0) and (pos_y >= 0) then
address_ram <= (conv_std_logic_vector((pos_x +
pos_y*PICTURE_WIDTH_HEIGHT),16));
end if;
end if;
end process;
Writing_to_Ram: process(clk) is
begin
if falling_edge(clk) then
if (pos_x < PICTURE_WIDTH_HEIGHT) and (pos_y <PICTURE_WIDTH_HEIGHT) and
(pos_x
>= 0) and (pos_y >= 0) then
write_enable <= '1';
address_ram <= (conv_std_logic_vector((pos_x +
pos_y*PICTURE_WIDTH_HEIGHT),16));
end if;
write_enable <= '0';
end if;
end process;
U4: Block_Ram port map(addra => address_ram,
clka => clk,
dina => data_in_ram,
douta => data_out_ram,
wea => write_enable);
data_out_ram y data_in_ram se utilizan para cambiar el brillo y el contraste.
U5: Brightness_Contrast port map(clk_in => clk,
operation => operation,
pos_x => pos_x,
pos_y => pos_y,
data_in => data_out_ram,
cursor_pos_x => cursor_pos_x,
cursor_pos_y => cursor_pos_y,
length => length,
output_of_operation => data_in_ram,
mode => mode);
Esto es todo lo que puedo decir. ¿Cómo puedo deshacerme de estos errores?
editar:
Reading_Writing_Ram: process(clk) is
begin
if rising_edge(clk) then
if (pos_x < PICTURE_WIDTH_HEIGHT) and (pos_y <PICTURE_WIDTH_HEIGHT) and
(pos_x >= 0) and (pos_y >= 0) then -- if within picture
address_ram <=(conv_std_logic_vector((pos_x +
pos_y*PICTURE_WIDTH_HEIGHT),16));
if ( pos_x > cursor_pos_x - 1) and (pos_x < cursor_pos_x + length) and (
pos_y > cursor_pos_y - 1) and (pos_y < cursor_pos_y + length) then --if
within cursor
write_enable <= '1';
else
write_enable <= '0';
end if;
end if;
end if;
end process;
Lo reescribí de nuevo (código anterior) y resolví el problema. Gracias a todos los que ayudaron