📄 mem.vhd
字号:
------------------------------------------------------------------------------------ Company: -- Engineer: -- -- Create Date: 15:41:09 12/18/2007 -- Design Name: -- Module Name: MEM - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: ---- Dependencies: ---- Revision: -- Revision 0.01 - File Created-- Additional Comments: ------------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.NUMERIC_STD.ALL;use IEEE.STD_LOGIC_SIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity MEM is Port ( DI : in SIGNED (31 downto 0); DO : out SIGNED (31 downto 0); A : in SIGNED (31 downto 0); clk : in STD_LOGIC; reset : in STD_LOGIC; Ww : in STD_LOGIC; Wb : in STD_LOGIC; R : in STD_LOGIC);end entity MEM;architecture Behavioral of MEM is
TYPE mem_table IS ARRAY (natural RANGE<>) OF SIGNED(7 DOWNTO 0);
CONSTANT main:mem_table:=(
X"27",X"BD",X"FF",X"A8",X"AF",X"BF",X"00",X"54",X"AF",X"BE",X"00",X"50",X"00",
X"00",X"00",X"00",X"03",X"A0",X"F0",X"21",X"24",X"02",X"00",X"0A",X"AF",X"C2",
X"00",X"10",X"27",X"C2",X"00",X"18",X"3C",X"03",X"80",X"02",X"24",X"63",X"6A",X"10",
X"00",X"40",X"20",X"21",X"00",X"60",X"28",X"21",X"24",X"06",X"00",X"28",X"0C",X"00",
X"87",X"3A",X"AF",X"C0",X"00",X"40",X"8F",X"C3",X"00",X"10",X"00",X"00",X"00",
X"00",X"24",X"62",X"FF",X"FF",X"8F",X"C3",X"00",X"40",X"00",X"00",X"00",X"00",X"00",
X"62",X"10",X"2A",X"14",X"40",X"00",X"03",X"00",X"00",X"00",X"00",X"08",X"00",X"80",
X"68",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"AF",X"C0",X"00",X"44",X"8F",
X"C3",X"00",X"40",X"00",X"00",X"00",X"00",X"24",X"62",X"00",X"01",X"8F",X"C3",X"00",
X"10",X"00",X"00",X"00",X"00",X"00",X"62",X"10",X"23",X"8F",X"C3",X"00",X"44",X"00",
X"00",X"00",X"00",X"00",X"62",X"10",X"2A",X"14",X"40",X"00",X"03",X"00",X"00",X"00",
X"00",X"08",X"00",X"80",X"63",X"00",X"00",X"00",X"00",X"8F",X"C2",X"00",X"44",X"00",
X"00",X"00",X"00",X"00",X"40",X"18",X"21",X"00",X"03",X"10",X"80",X"27",X"C4",X"00",
X"10",X"00",X"44",X"18",X"21",X"24",X"62",X"00",X"08",X"27",X"C3",X"00",X"1C",X"8F",
X"C4",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"80",X"28",X"21",X"00",X"05",X"20",
X"80",X"00",X"64",X"18",X"21",X"8C",X"42",X"00",X"00",X"8C",X"63",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"62",X"10",X"2A",X"10",X"40",X"00",X"24",X"00",X"00",X"00",
X"00",X"8F",X"C2",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"40",X"18",X"21",X"00",
X"03",X"10",X"80",X"27",X"C3",X"00",X"10",X"00",X"43",X"10",X"21",X"24",X"43",X"00",
X"08",X"8C",X"62",X"00",X"00",X"00",X"00",X"00",X"00",X"AF",X"C2",X"00",X"48",
X"8F",X"C2",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"40",X"18",X"21",X"00",X"03",
X"10",X"80",X"27",X"C4",X"00",X"10",X"00",X"44",X"18",X"21",X"24",X"62",X"00",X"08",
X"27",X"C3",X"00",X"1C",X"8F",X"C4",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"80",
X"28",X"21",X"00",X"05",X"20",X"80",X"00",X"64",X"18",X"21",X"8C",X"64",X"00",X"00",
X"00",X"00",X"00",X"00",X"AC",X"44",X"00",X"00",X"27",X"C2",X"00",X"1C",X"8F",
X"C3",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"60",X"20",X"21",X"00",X"04",X"18",
X"80",X"00",X"43",X"10",X"21",X"8F",X"C3",X"00",X"48",X"00",X"00",X"00",X"00",
X"AC",X"43",X"00",X"00",X"8F",X"C2",X"00",X"44",X"00",X"00",X"00",X"00",X"24",
X"43",X"00",X"01",X"AF",X"C3",X"00",X"44",X"08",X"00",X"80",X"1B",X"8F",X"C2",
X"00",X"40",X"00",X"00",X"00",X"00",X"24",X"43",X"00",X"01",X"AF",X"C3",X"00",X"40",
X"08",X"00",X"80",X"0F",X"03",X"C0",X"E8",X"21",X"8F",X"BF",X"00",X"54",X"8F",
X"BE",X"00",X"50",X"27",X"BD",X"00",X"58",X"03",X"E0",X"00",X"80",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
CONSTANT memcpy:mem_table:=(
X"00",X"04",X"10",X"20",X"10",X"C0",X"00",X"09",X"00",X"00",X"00",X"00",X"90",X"A8",
X"00",X"00",X"00",X"00",X"00",X"00",X"A0",X"88",X"00",X"00",X"20",X"84",X"00",X"01",
X"20",X"A5",X"00",X"01",X"20",X"C6",X"FF",X"FF",X"08",X"00",X"87",X"3B",X"00",
X"00",X"00",X"00",X"03",X"E0",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00");
CONSTANT data:mem_table:=(
X"00",X"00",X"00",X"3A",X"00",X"00",X"00",X"2A",X"00",X"00",X"00",X"33",X"00",X"00",
X"00",X"21",X"00",X"00",X"00",X"2B",X"00",X"00",X"00",X"16",X"00",X"00",X"00",X"21",
X"00",X"00",X"00",X"4C",X"00",X"00",X"00",X"34",X"00",X"00",X"00",X"40");
BEGIN
PROCESS(clk,R,reset)
VARIABLE memory:mem_table(0 TO 196608);
VARIABLE rd_num,wr_num:natural;
BEGIN
IF(reset='1') THEN
memory(131072 TO 131519):=main;
memory(138472 TO 138527):=memcpy;
memory(158224 TO 158263):=data;
DO<=memory(131072)&memory(131073) & memory(131074) & memory(131075);
rd_num:=0;
wr_num:=0;
ELSE
IF(R='1') THEN
rd_num:=to_integer("000000000000" & A(19 DOWNTO 0));
DO<=memory(rd_num)&memory(rd_num+1) & memory(rd_num+2) & memory(rd_num+3);
END IF;
IF(rising_edge(clk)) THEN
wr_num:=to_integer("000000000000" & A(19 DOWNTO 0));
IF(Wb='1') THEN
memory(wr_num):=DI(7 DOWNTO 0);
END IF;
IF(Ww='1') THEN memory(wr_num):=DI(31 DOWNTO 24);
memory(wr_num+1):=DI(23 DOWNTO 16);
memory(wr_num+2):=DI(15 DOWNTO 8);
memory(wr_num+3):=DI(7 DOWNTO 0);
END IF;
END IF;
END IF;
END PROCESS;end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -