1
0
mirror of https://github.com/Klagarge/Cursor.git synced 2024-11-23 09:53:29 +00:00
Cursor/Libs/Memory/hdl/bram_dualport_writefirst.vhd
2021-11-24 10:50:51 +01:00

56 lines
1.6 KiB
VHDL

USE std.textio.all;
ARCHITECTURE bhv OF bramContentDualportWritefirst IS
-- Define ramContent type
type ramContentType is array(0 to (2**addr_bit_nb)-1) of bit_vector(data_bit_nb-1 DOWNTO 0);
-- Define function to create initvalue signal
impure function ReadRamContentFromFile(ramContentFilenAme : in string) return ramContentType is
FILE ramContentFile : text is in ramContentFilenAme;
variable ramContentFileLine : line;
variable ramContent : ramContentType;
begin
for i in ramContentType'range loop
readline(ramContentFile, ramContentFileLine);
read(ramContentFileLine, ramContent(i));
end loop;
return ramContent;
end function;
-- Declare ramContent signal
shared variable ramContent: ramContentType := ReadRamContentFromFile(init_file);
BEGIN
-- Port A
process(clockA)
begin
if clockA'event and clockA='1' then
if enA = '1' then
if writeEnA = '1' then
dataOutA <= dataInA;
ramContent(to_integer(unsigned(addressA))) := to_bitvector(dataInA,'0');
else
dataOutA <= to_stdulogicvector(ramContent(to_integer(unsigned(addressA))));
end if;
end if;
end if;
end process;
-- Port B
process(clockB)
begin
if clockB'event and clockB='1' then
if enB = '1' then
if writeEnB = '1' then
ramContent(to_integer(unsigned(addressB))) := to_bitvector(dataInB,'0');
dataOutB <= dataInB;
else
dataOutB <= to_stdulogicvector(ramContent(to_integer(unsigned(addressB))));
end if;
end if;
end if;
end process;
END ARCHITECTURE bhv;