memory_unit.vhd

来自「CPU代码-VHDL语言」· VHDL 代码 · 共 54 行

VHD
54
字号
--存储器部分memory_unit
library ieee;
use ieee.std_logic_1164.all;


entity memory_unit is
	port(
		reset:		in std_logic;
		clk,t3:		in std_logic;
		Mem_addr:	in  std_logic_vector(15 downto 0);
		Mem_Write:	in std_logic;
		sel_memdata:in std_logic;  --为1时,存储器的读出数据作为写入DR的数据
		SR_data: 	in std_logic_vector(15 downto 0); --写入存储器的数据
		result: 	in std_logic_vector(15 downto 0); --运算结果
		rw: 		out std_logic;  -----读写信号(wr )
		ob: 		inout std_logic_vector(15 downto 0);
		ar: 		out std_logic_vector(15 downto 0);
		data_read: 	buffer  std_logic_vector(15 downto 0); --从存储器读出的指令
														   --或者数据
		DR_data_out:out std_logic_vector(15 downto 0) --写入DR的数据
		);
end memory_unit;
		
architecture behav of memory_unit is
begin
ar <= Mem_addr;
R_W_Memory_proc: process(reset,ob,SR_data,clk,t3,Mem_Write) --读写存储器处理
begin
	if reset = '0' then
		rw <= '1';
		ob <= "ZZZZZZZZZZZZZZZZ";  --将存储器数据总线置为高阻,即读存储器。
	else
	    if Mem_Write = '1' and t3 = '1' then   
			ob <= SR_DATA;  --写存储器,来自源R
			rw <= clk;
		else
			ob <= "ZZZZZZZZZZZZZZZZ";  --将存储器数据总线置为高阻,读存储器
			rw <= '1';
			data_read <= ob;           --从存储器读出的指令或者数据由

		end if;
	end if;
end process;

sele_DR_proc:  process(sel_memdata,data_read,result)
begin
	if sel_memdata = '1' then
		DR_data_out <= data_read; --存储器数据作为写DR的数据
	else
		DR_data_out <= result;    --运算结果作为写DR的数据
	end if;
end process;

end behav;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?