⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem.vhd

📁 32位微处理器的设计
💻 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 + -