|
RAM
Ich schreibe gerade an einer Pulserzeugung für einen Wechselrichter. Das PLD soll von einem MC Informationen erhalten die ich in einem Speicher ablegen will.
Beim Schreiben dieses Speichers bin ich auf ein Problem gestoßen, von dem ich nicht weiß, was es so richtig ist. Ich wil also den Speicher als Datentyp Array anlegen. In jedem Element des Array soll dann wieder ein 10bit-Vektor stehen. Als Startwert soll in jedem Element eine Null stehen.
Nun bekomme ich folgende Fehler:
Wenn ich versuche, den Startwert noch vor dem process-begin zuzuweisen:
Warning: VHDL Variable Declaration warning at ram.vhd(24): ignored initial value expression for variable mem
Um das zu umgehen, habe ich versucht eine Schleife einzubauen, die nur beim allerersten ausführen von process alle Elemente mit 0 initialisiert, das hat aber auch nicht funktioniert.
Beim Versuch der Simulation habe ich dann folgende Fehlermeldung bekommen:
Error: Semantic error encountered in vector source file C:/cr/alteraproj/ram/db/ram.sim.vwf, line 237, width of signal cannot be zero or less (das bezieht sich auf mem)
Ich habe mal den Quelltext angehängt, wenn jemand eine Idee hat woran das liegt, wäre ich für eine Antwort sehr dankbar
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity RAM is
Port ( CS : in X01Z;
RD : in X01Z;
WR : in X01Z;
ADDR : in X01Z_vector(3 downto 0);
DATA : inout X01Z_vector(9 downto 0):="ZZZZZZZZZZ");
end RAM;
architecture behavioral of RAM is
begin
process (RD, WR, CS)
type MEMORY is array(0 to 15) of X01Z_vector(9 downto 0);
variable MEM : MEMORY := (others => (others => '0'));
begin
if (CS = '0') then
if (RD = '0') then
MEM(INTVAL(ADDR)) := DATA;
elsif (WR = '0') then
DATA <= MEM(INTVAL(ADDR));
end if;
else
DATA <= "ZZZZZZZZZZ";
end if;
end process;
end behavioral;
|
Toastmaster Christiane Riedel |
05.10.04, 11:49 |