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

📄 cpu_16.vhdl

📁 vhdl语言的16b cpu代码 全部的代码我会依次上传 另有说明txt文本
💻 VHDL
字号:
library IEEE;
library UNISIM;
use ieee.std_logic_1164.all;
use UNISIM.VComponents.all;

entity CPU_16 is
	port(
		CLK: in std_logic;
		RST: in std_logic;
		Dbus: inout std_logic_vector(15 downto 0);
		Abus: out std_logic_vector(15 downto 0);
		nWR: out std_logic;
		nRD: out std_logic;
		nBLE: out std_logic;
		nBHE: out std_logic;
		nMREQ: out std_logic;
		DBUSOUT: out std_logic_vector(15 downto 0);
		ABUSOUT: out std_logic_vector(15 downto 0);
		IROUT: out std_logic_vector(15 downto 0);
		TOUT: out std_logic_vector(4 downto 0);
		FLAG: out std_logic_vector(3 downto 0));
end CPU_16;

architecture Behavioral of CPU_16 is
	component bufgp
		port(I: in std_logic; O: out std_logic);
	end component;
	component alu
		port(
		 	T2: in std_logic;
			CLK: in std_logic;
			RST: in std_logic;
			Rupdate: in std_logic;
			Radd: in std_logic_vector(2 downto 0);
			Rdata: in std_logic_vector(7 downto 0);
			IRout: in std_logic_vector(15 downto 0);
			MRD_C: out std_logic;
			MWR_C: out std_logic;
			Addr: out std_logic_vector(15 downto 0);
			ALUout: out std_logic_vector(7 downto 0));
	end component;

	component clock_control
		port(
			clk: in std_logic;
			RST: in std_logic;
			T: out std_logic_vector(4 downto 0));
	end component;

	component code_control
		port(
			RST: in std_logic;
			T0: in std_logic;
			T1: in std_logic;
			clk: in std_logic;
			PCupdate: in std_logic;
			PCnew: in std_logic_vector(15 downto 0);
			IRnew: in std_logic_vector(15 downto 0);
			PCload: out std_logic;
			IRout: out std_logic_vector(15 downto 0);
			PCout: out std_logic_vector(15 downto 0));
	end component;

	component memery_control
		port(
			T3: in std_logic;
			clk: in std_logic;
			MRD_C: in std_logic;
			MWR_C: in std_logic;
			Rtemp: out std_logic_vector(7 downto 0);
			data: in std_logic_vector(7 downto 0);
			nMRD: out std_logic;
			nMWR: out std_logic);
	end component;

	component visit_memery_control
		port(
			PCload: in std_logic;
			PCout: in std_logic_vector(15 downto 0);
			IRnew: out std_logic_vector(15 downto 0);
			nMRD: in std_logic;
			nMWR: in std_logic;
			Addr: in std_logic_vector(15 downto 0);
			ALUout: in std_logic_vector(7 downto 0);
			data: out std_logic_vector(7 downto 0);
			Dbus: inout std_logic_vector(15 downto 0);
			Abus: out std_logic_vector(15 downto 0);
			nWR: out std_logic;
			nRD: out std_logic;
			nBLE: out std_logic;
			nBHE: out std_logic;
			nMREQ: out std_logic);
	end component;

	component write_back_control
		port(
			T4: in std_logic;
			Rtemp: in std_logic_vector(7 downto 0);
			ALUout: in std_logic_vector(7 downto 0);
			Addr: in std_logic_vector(15 downto 0);
			IRout: in std_logic_vector(15 downto 0);
			Rupdate: out std_logic;
			PCupdate: out std_logic;
			Radd: out std_logic_vector(2 downto 0);
			Rdata: out std_logic_vector(7 downto 0);
			PCnew: out std_logic_vector(15 downto 0));
	end component;
	signal clkgp: std_logic;
	signal nWR_C: std_logic;
	signal nRD_C: std_logic;
	signal nBLE_C: std_logic;
	signal nBHE_C: std_logic;
	signal nMREQ_C: std_logic;
	signal T_C: std_logic_vector(4 downto 0);
	signal Rupdate_C, PCload_C, PCupdate_C, nMRD_C, nMWR_C, MRD_C_C, MWR_C_C: std_logic;
	signal PCnew_C, IRnew_C, PCout_C, Addr_C, IRout_C, Abus_C: std_logic_vector(15 downto 0);
	signal Rdata_C, Rtemp_C, ALUout_C, data_C: std_logic_vector(7 downto 0);
	signal Radd_C: std_logic_vector(2 downto 0);
begin
	u1: bufgp port map(I => clk, O => clkgp);
	u2: alu port map(
		T2 => T_C(2), 
		RST => RST, 
		clk => clkgp, 
		Rupdate => Rupdate_C, 
		Radd => Radd_C, 
		Rdata => Rdata_C, 
		IRout => IRout_C, 
		MRD_C => MRD_C_C, 
		MWR_C => MWR_C_C, 
		Addr => Addr_C, 
		ALUout => ALUout_C);
	u3: clock_control port map(
		clk => clkgp, 
		RST => RST, 
		T => T_C);
	u4: code_control port map(
		T0 => T_C(0),
		T1 => T_C(1),   
		clk => clkgp, 
		RST => RST, 
		PCupdate => PCupdate_C, 
		PCnew => PCnew_C, 
		IRnew => IRnew_C, 
		PCload => PCload_C, 
		IRout => IRout_C, 
		PCout => PCout_C);
	u5: memery_control port map(
		T3 => T_C(3),
		clk => clkgp, 
		MRD_C => MRD_C_C, 
		MWR_C => MWR_C_C, 
		Rtemp => Rtemp_C, 
		data => data_C, 
		nMRD => nMRD_C, 
		nMWR => nMWR_C);
	u6: visit_memery_control port map(
		PCload => PCload_C, 
		PCout => PCout_C, 
		IRnew => IRnew_C, 
		nMRD => nMRD_C, 
		nMWR => nMWR_C, 
		Addr => Addr_C, 
		ALUout => ALUout_C, 
		data => data_C, 
		Dbus => Dbus, 
		Abus => Abus_C, 
		nWR => nWR_C, 
		nRD => nRD_C, 
		nBLE => nBLE_C, 
		nBHE => nBHE_C, 
		nMREQ => nMREQ_C);
	u7: write_back_control port map(
		T4 => T_C(4), 
		Rtemp => Rtemp_C, 
		ALUout => ALUout_C, 
		Addr => Addr_C, 
		IRout => IRout_C,
		Rupdate => Rupdate_C, 
		PCupdate => PCupdate_C, 
		Radd => Radd_C, 
		Rdata => Rdata_C, 
		PCnew => PCnew_C);

		nWR <= nWR_C;
		nRD <= nRD_C;
		nBLE <= nBLE_C;
		nBHE <= nBHE_C;
		nMREQ <= nMREQ_C;
		ABUS <= Abus_C;
		DBUSOUT <= Dbus;
		ABUSOUT <= Abus_C;
		IROUT <= IRout_C;
		TOUT	<= T_C;
		FLAG(3 downto 0) <= not nMREQ_C & not nRD_C & not nBHE_C & not nBLE_C;
end Behavioral;

⌨️ 快捷键说明

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