1
0
SEm-Labos/Libs/Memory/hdl/fifo_rtl_minimal.vhd

98 lines
2.3 KiB
VHDL
Raw Permalink Normal View History

2024-02-23 13:01:05 +00:00
--
-- VHDL Architecture Memory.fifo_minimal
--
-- Created:
-- by - uadmin.UNKNOWN (WE3877)
-- at - 13:54:33 11.07.2012
--
-- using Mentor Graphics HDL Designer(TM) 2009.2 (Build 10)
--
library Common;
use Common.CommonLib.all;
architecture RTL_minimal of FIFO is
subtype register_type is std_ulogic_vector(dataIn'high downto 0);
type memory_type is array (0 to depth-1) of register_type;
signal writeCounter: unsigned(requiredBitNb(depth)-1 downto 0);
signal readCounter: unsigned(writeCounter'range);
signal memoryArray : memory_type;
begin
updateWriteCounter: process(reset, clock)
begin
if reset = '1' then
writeCounter <= (others => '0');
elsif rising_edge(clock) then
if write = '1' then
writeCounter <= writeCounter + 1;
end if;
end if;
end process updateWriteCounter;
updateReadCounter: process(reset, clock)
begin
if reset = '1' then
readCounter <= (others => '0');
elsif rising_edge(clock) then
if read = '1' then
readCounter <= readCounter + 1;
end if;
end if;
end process updateReadCounter;
writeMem: process(clock)
begin
if rising_edge(clock) then
if write = '1' then
memoryArray(to_integer(writeCounter)) <= dataIn;
end if;
end if;
end process writeMem;
dataOut <= memoryArray(to_integer(readCounter));
-- checkStatus: process(reset, clock)
-- begin
-- if reset = '1' then
-- empty <= '1';
-- full <= '0';
-- elsif rising_edge(clock) then
-- if readCounter+1 = writeCounter then
-- if read = '1' then
-- empty <= '1';
-- end if;
-- elsif writeCounter = readCounter then
-- if write = '1' then
-- empty <= '0';
-- end if;
-- if read = '1' then
-- full <= '0';
-- end if;
-- elsif writeCounter+1 = readCounter then
-- if write = '1' then
-- full <= '1';
-- end if;
-- end if;
-- end if;
-- end process checkStatus;
checkStatus: process(readCounter, writeCounter)
begin
if readCounter = writeCounter then
empty <= '1';
else
empty <= '0';
end if;
if writeCounter+1 = readCounter then
full <= '1';
else
full <= '0';
end if;
end process checkStatus;
END ARCHITECTURE RTL_minimal;