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

📄 kernel.vhd

📁 用VHDL语言开发的一个16位的具有5级流水线的CPU设计
💻 VHD
📖 第 1 页 / 共 2 页
字号:
	if(RESET = '0') then MEMWB_LMD <= "0000000000000000";	else if(MCLK'event and MCLK = '0') then		if(T(3) = '1') then 			if(AB = "1000000000000100") then				MEMWB_LMD <= "000000000000000" & KRIX; 			elsif(AB = "1000000000001000") then				MEMWB_LMD <= "000000000000000" & PRIX;			else				MEMWB_LMD <= DB;			end if;		end if;	end if;	end if;	end process;	DB <= MEMWB_LMD when T(3) = '1' and CONTROL_MEMORY = '0' else 		 EXMEM_B when T(3) = '1' and EXMEM_IR(15 downto 11) = ST and CONTROL_MEMORY = '1' else		 "ZZZZZZZZZZZZZZZZ";---------------------------------------T(4)-------------------------------------- --RIN	RIN <= MEMWB_IR(7 downto 5) when MEMWB_IR(15 downto 11) = MOV 							or MEMWB_IR(15 downto 11) = ADD 							or MEMWB_IR(15 downto 11) = SUB 							or MEMWB_IR(15 downto 11) = LD else		MEMWB_IR(10 downto 8) when MEMWB_IR(15 downto 11) = ADDI 							or MEMWB_IR(15 downto 11) = SUBI 							or MEMWB_IR(15 downto 11) = MOVI 							or MEMWB_IR(15 downto 11) = MOVHI 							or MEMWB_IR(15 downto 11) = MOVLI else		"ZZZ";--MUX_R	MUX_R <= MEMWB_OUT when MEMWB_IR(15 downto 11) = MOV 					or MEMWB_IR(15 downto 11) = ADD 					or MEMWB_IR(15 downto 11) = SUB 					or MEMWB_IR(15 downto 11) = ADDI 					or MEMWB_IR(15 downto 11) = SUBI 					or MEMWB_IR(15 downto 11) = MOVI 					or MEMWB_IR(15 downto 11) = MOVHI 					or MEMWB_IR(15 downto 11) = MOVLI else		    MEMWB_LMD when MEMWB_IR(15 downto 11) = LD else		    "ZZZZZZZZZZZZZZZZ";--WRE	WRE <= '1' when MEMWB_IR(15 downto 11) = MOV 				or MEMWB_IR(15 downto 11) = ADD 				or MEMWB_IR(15 downto 11) = SUB 				or MEMWB_IR(15 downto 11) = ADDI 				or MEMWB_IR(15 downto 11) = SUBI 				or MEMWB_IR(15 downto 11) = LD 				or MEMWB_IR(15 downto 11) = MOVI 				or MEMWB_IR(15 downto 11) = MOVHI 				or MEMWB_IR(15 downto 11) = MOVLI else		'0';--WRITEBACK	process(RIN, MUX_R, MCLK, T(4), WRE)		begin	   	 if (MCLK'event and MCLK = '0') then			if (T(4) = '1' and WRE = '1') then			case RIN is				when "000" => R0 <= MUX_R;				when "001" => R1 <= MUX_R;				when "010" => R2 <= MUX_R;				when "011" => R3 <= MUX_R;				when "100" => R4 <= MUX_R;				when "101" => R5 <= MUX_R;				when "110" => R6 <= MUX_R;				when others => R7 <= MUX_R;			end case;			end if;		end if;	end process;------------------------------------------CONTROL-----------------------------------------------------CONTROL_RWRITE_EXMEM	CONTROL_RWRITE_EXMEM <= EXMEM_IR(7 downto 5) when EXMEM_IR(15 downto 11) = MOV 										or EXMEM_IR(15 downto 11) = ADD 										or EXMEM_IR(15 downto 11) = SUB else						EXMEM_IR(10 downto 8) when EXMEM_IR(15 downto 11) = ADDI 										or EXMEM_IR(15 downto 11) = SUBI 										or EXMEM_IR(15 downto 11) = MOVI 										or EXMEM_IR(15 downto 11) = MOVHI 										or EXMEM_IR(15 downto 11) = MOVLI else						"ZZZ";--CONTROL_RWRITE_MEMWB	CONTROL_RWRITE_MEMWB <= MEMWB_IR(7 downto 5) when MEMWB_IR(15 downto 11) = MOV 										or MEMWB_IR(15 downto 11) = ADD 										or MEMWB_IR(15 downto 11) = SUB 										or MEMWB_IR(15 downto 11) = LD else						MEMWB_IR(10 downto 8) when MEMWB_IR(15 downto 11) = ADDI 										or MEMWB_IR(15 downto 11) = SUBI 										or MEMWB_IR(15 downto 11) = MOVI 										or MEMWB_IR(15 downto 11) = MOVHI 										or MEMWB_IR(15 downto 11) = MOVLI else						"ZZZ";--CONTROL_RREADA_EX	CONTROL_RREADA_EX <= IDEX_IR(10 downto 8);--CONTROL_RREADB_EX	CONTROL_RREADB_EX <= IDEX_IR(4 downto 2);--CONTROL_RREAD_MEM	CONTROL_RREAD_MEM <= EXMEM_IR(7 downto 5); --only LD--CONTROL_A_EXMEM	CONTROL_A_EXMEM <= '0' when CONTROL_RWRITE_EXMEM = CONTROL_RREADA_EX and						(						EXMEM_IR(15 downto 11) = MOV or						EXMEM_IR(15 downto 11) = ADD or						EXMEM_IR(15 downto 11) = SUB or						EXMEM_IR(15 downto 11) = ADDI or						EXMEM_IR(15 downto 11) = SUBI or						EXMEM_IR(15 downto 11) = MOVI or						EXMEM_IR(15 downto 11) = MOVHI or						EXMEM_IR(15 downto 11) = MOVLI						) and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB or						IDEX_IR(15 downto 11) = ADDI or						IDEX_IR(15 downto 11) = SUBI or						IDEX_IR(15 downto 11) = ST or						IDEX_IR(15 downto 11) = MOVI or						IDEX_IR(15 downto 11) = MOVHI or						IDEX_IR(15 downto 11) = MOVLI or						IDEX_IR(15 downto 11) = LD						)					else '1'; --CONTROL_A_MEMWB	CONTROL_A_MEMWB <= '0' when CONTROL_RWRITE_MEMWB = CONTROL_RREADA_EX and						(						MEMWB_IR(15 downto 11) = MOV or						MEMWB_IR(15 downto 11) = ADD or						MEMWB_IR(15 downto 11) = SUB or						MEMWB_IR(15 downto 11) = ADDI or						MEMWB_IR(15 downto 11) = SUBI or						MEMWB_IR(15 downto 11) = MOVI or						MEMWB_IR(15 downto 11) = MOVHI or						MEMWB_IR(15 downto 11) = MOVLI or						MEMWB_IR(15 downto 11) = LD						) and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB or						IDEX_IR(15 downto 11) = ADDI or						IDEX_IR(15 downto 11) = SUBI or						IDEX_IR(15 downto 11) = ST or						IDEX_IR(15 downto 11) = MOVI or						IDEX_IR(15 downto 11) = MOVHI or						IDEX_IR(15 downto 11) = MOVLI or						IDEX_IR(15 downto 11) = LD						)					else '1';--CONTROL_B_EXMEM	CONTROL_B_EXMEM <= '0' when CONTROL_RWRITE_EXMEM = CONTROL_RREADB_EX and						(						EXMEM_IR(15 downto 11) = MOV or						EXMEM_IR(15 downto 11) = ADD or						EXMEM_IR(15 downto 11) = SUB or						EXMEM_IR(15 downto 11) = ADDI or						EXMEM_IR(15 downto 11) = SUBI or						EXMEM_IR(15 downto 11) = MOVI or						EXMEM_IR(15 downto 11) = MOVHI or						EXMEM_IR(15 downto 11) = MOVLI						) and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB						)					else '1';--CONTROL_B_MEMWB	CONTROL_B_MEMWB <= '0' when CONTROL_RWRITE_MEMWB = CONTROL_RREADB_EX and						(						MEMWB_IR(15 downto 11) = MOV or						MEMWB_IR(15 downto 11) = ADD or						MEMWB_IR(15 downto 11) = SUB or						MEMWB_IR(15 downto 11) = ADDI or						MEMWB_IR(15 downto 11) = SUBI or						MEMWB_IR(15 downto 11) = MOVI or						MEMWB_IR(15 downto 11) = MOVHI or						MEMWB_IR(15 downto 11) = MOVLI or						MEMWB_IR(15 downto 11) = LD						) and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB						)					else '1';--CONTROL_TEMP_A	CONTROL_TEMP_A <= '0' when CONTROL_RWRITE_MEMWB = IFID_IR(10 downto 8) and						(				 		MEMWB_IR(15 downto 11) = MOV or						MEMWB_IR(15 downto 11) = ADD or						MEMWB_IR(15 downto 11) = SUB or						MEMWB_IR(15 downto 11) = ADDI or						MEMWB_IR(15 downto 11) = SUBI or						MEMWB_IR(15 downto 11) = MOVI or						MEMWB_IR(15 downto 11) = MOVHI or						MEMWB_IR(15 downto 11) = MOVLI or						MEMWB_IR(15 downto 11) = LD						)						and (						IFID_IR(15 downto 11) = MOV or						IFID_IR(15 downto 11) = ADD or						IFID_IR(15 downto 11) = SUB or						IFID_IR(15 downto 11) = ADDI or						IFID_IR(15 downto 11) = SUBI or						IFID_IR(15 downto 11) = ST or						IFID_IR(15 downto 11) = MOVI or						IFID_IR(15 downto 11) = MOVHI or						IFID_IR(15 downto 11) = MOVLI						)					else '1';--CONTROL_TEMP_B	CONTROL_TEMP_B <= '0' when CONTROL_RWRITE_MEMWB = IFID_IR(4 downto 2) and						(						MEMWB_IR(15 downto 11) = MOV or						MEMWB_IR(15 downto 11) = ADD or						MEMWB_IR(15 downto 11) = SUB or						MEMWB_IR(15 downto 11) = ADDI or						MEMWB_IR(15 downto 11) = SUBI or						MEMWB_IR(15 downto 11) = MOVI or						MEMWB_IR(15 downto 11) = MOVHI or						MEMWB_IR(15 downto 11) = MOVLI or						MEMWB_IR(15 downto 11) = LD						)and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB						)					else '1';--CONTROL_MEMORY	CONTROL_MEMORY <= '0' when CONTROL_RWRITE_MEMWB = CONTROL_RREAD_MEM and						MEMWB_IR(15 downto 11) = LD and						EXMEM_IR(15 downto 11) = ST					else '1';--CONTROL_COND_WRITE_IDEX	CONTROL_COND_WRITE_IDEX <= IDEX_IR(7 downto 5) when IDEX_IR(15 downto 11) = MOV 										or IDEX_IR(15 downto 11) = ADD 										or IDEX_IR(15 downto 11) = SUB else						IDEX_IR(10 downto 8) when IDEX_IR(15 downto 11) = ADDI 										or IDEX_IR(15 downto 11) = SUBI 										or IDEX_IR(15 downto 11) = MOVI 										or IDEX_IR(15 downto 11) = MOVHI 										or IDEX_IR(15 downto 11) = MOVLI else						"ZZZ";--CONTROL_COND_WRITE_EXMEM	CONTROL_COND_WRITE_EXMEM <= EXMEM_IR(7 downto 5) when EXMEM_IR(15 downto 11) = MOV 										or EXMEM_IR(15 downto 11) = ADD 										or EXMEM_IR(15 downto 11) = SUB										or EXMEM_IR(15 downto 11) = LD else						EXMEM_IR(10 downto 8) when EXMEM_IR(15 downto 11) = ADDI 										or EXMEM_IR(15 downto 11) = SUBI 										or EXMEM_IR(15 downto 11) = MOVI 										or EXMEM_IR(15 downto 11) = MOVHI 										or EXMEM_IR(15 downto 11) = MOVLI else						"ZZZ";--CONTROL_COND_WRITE_MEMWB	CONTROL_COND_WRITE_MEMWB <= MEMWB_IR(7 downto 5) when MEMWB_IR(15 downto 11) = MOV										or MEMWB_IR(15 downto 11) = ADD										or MEMWB_IR(15 downto 11) = SUB										or MEMWB_IR(15 downto 11) = LD else						MEMWB_IR(10 downto 8) when MEMWB_IR(15 downto 11) = ADDI 										or MEMWB_IR(15 downto 11) = SUBI 										or MEMWB_IR(15 downto 11) = MOVI 										or MEMWB_IR(15 downto 11) = MOVHI 										or MEMWB_IR(15 downto 11) = MOVLI else						"ZZZ";--CONTROL_A_COND_EX	CONTROL_A_COND_EX <= '0' when CONTROL_COND_WRITE_IDEX = IFID_IR(10 downto 8) and						(						IDEX_IR(15 downto 11) = MOV or						IDEX_IR(15 downto 11) = ADD or						IDEX_IR(15 downto 11) = SUB or						IDEX_IR(15 downto 11) = ADDI or						IDEX_IR(15 downto 11) = SUBI or						IDEX_IR(15 downto 11) = MOVI or						IDEX_IR(15 downto 11) = MOVHI or						IDEX_IR(15 downto 11) = MOVLI						) and						(						IFID_IR(15 downto 11) = BEQZ or						IFID_IR(15 downto 11) = JC 						)					else '1';						--CONTROL_A_COND_MEM	CONTROL_A_COND_MEM <= '0' when CONTROL_COND_WRITE_EXMEM = IFID_IR(10 downto 8) and						(						EXMEM_IR(15 downto 11) = MOV or						EXMEM_IR(15 downto 11) = ADD or						EXMEM_IR(15 downto 11) = SUB or						EXMEM_IR(15 downto 11) = ADDI or						EXMEM_IR(15 downto 11) = SUBI or						EXMEM_IR(15 downto 11) = MOVI or						EXMEM_IR(15 downto 11) = MOVHI or						EXMEM_IR(15 downto 11) = MOVLI or						EXMEM_IR(15 downto 11) = LD						) and						(						IFID_IR(15 downto 11) = BEQZ or						IFID_IR(15 downto 11) = JC 						)					else '1';--CONTROL_A_COND_WB	CONTROL_A_COND_WB <= '0' when CONTROL_COND_WRITE_MEMWB = IFID_IR(10 downto 8) and						(						MEMWB_IR(15 downto 11) = MOV or						MEMWB_IR(15 downto 11) = ADD or						MEMWB_IR(15 downto 11) = SUB or						MEMWB_IR(15 downto 11) = ADDI or						MEMWB_IR(15 downto 11) = SUBI or						MEMWB_IR(15 downto 11) = MOVI or						MEMWB_IR(15 downto 11) = MOVHI or						MEMWB_IR(15 downto 11) = MOVLI or						MEMWB_IR(15 downto 11) = LD						) and						(						IFID_IR(15 downto 11) = BEQZ or						IFID_IR(15 downto 11) = JC 						)					else '1';--CONTROL_BUBBLE_LD	CONTROL_BUBBLE_LD <= '0' when (IDEX_IR(7 downto 5) = IFID_IR(10 downto 8) and							IDEX_IR(15 downto 11) = LD and							(													IFID_IR(15 downto 11) = MOV or							IFID_IR(15 downto 11) = ADD or							IFID_IR(15 downto 11) = SUB or							IFID_IR(15 downto 11) = ADDI or							IFID_IR(15 downto 11) = SUBI or							IFID_IR(15 downto 11) = ST or							IFID_IR(15 downto 11) = MOVI or							IFID_IR(15 downto 11) = MOVHI or							IFID_IR(15 downto 11) = MOVLI							)) 							or							(IDEX_IR(7 downto 5) = IFID_IR(4 downto 2) and							IDEX_IR(15 downto 11) = LD and 							(							IFID_IR(15 downto 11) = MOV or							IFID_IR(15 downto 11) = ADD or							IFID_IR(15 downto 11) = SUB							))					else '1';--CONTROL_ST_B_EXMEM	CONTROL_ST_B_EXMEM <= '0' when (CONTROL_RWRITE_EXMEM = IDEX_IR(7 downto 5) and							(							EXMEM_IR(15 downto 11) = MOV or							EXMEM_IR(15 downto 11) = ADD or							EXMEM_IR(15 downto 11) = SUB or							EXMEM_IR(15 downto 11) = ADDI or							EXMEM_IR(15 downto 11) = SUBI or							EXMEM_IR(15 downto 11) = MOVI or							EXMEM_IR(15 downto 11) = MOVHI or							EXMEM_IR(15 downto 11) = MOVLI							)							and IDEX_IR(15 downto 11) = ST) 													else '1';--CONTROL_ST_B_MEMWB	CONTROL_ST_B_MEMWB <= '0' when (CONTROL_RWRITE_MEMWB = IDEX_IR(7 downto 5) and							(							MEMWB_IR(15 downto 11) = MOV or							MEMWB_IR(15 downto 11) = ADD or							MEMWB_IR(15 downto 11) = SUB or							MEMWB_IR(15 downto 11) = ADDI or							MEMWB_IR(15 downto 11) = SUBI or							MEMWB_IR(15 downto 11) = MOVI or							MEMWB_IR(15 downto 11) = MOVHI or							MEMWB_IR(15 downto 11) = MOVLI or							MEMWB_IR(15 downto 11) = LD							)							and							(							IDEX_IR(15 downto 11) = ST							))							else '1';--CONTROL_BUBBLE_LD_COND	CONTROL_BUBBLE_LD_COND <= '0' when IFID_IR(15 downto 11) = LD and IFID_IR(7 downto 5) = DB(10 downto 8)										and (DB(15 downto 11) = JC or DB(15 downto 11) = BEQZ)										else '1';--CONTROL_LD_COND	CONTROL_LD_COND <= '0' when(EXMEM_IR(15 downto 11) = LD and (IFID_IR(15 downto 11) = JC or IFID_IR(15 downto 11) = BEQZ)							and EXMEM_IR(7 downto 5) = IFID_IR(10 downto 8))							else '1';-------------------------------------------OBSERVER----------------------------------------------	CI(31 downto 16) <= PC when MUX = "000" else					IDEX_IR when MUX = "001" else					IDEX_B when MUX = "010" else					ADD_OUT	when MUX = "011" else					EXMEM_OUT	when MUX = "100" else					R0	when MUX = "101" else					R2	when MUX = "110" else					R4; 		     		CI(15 downto 0) <=	IFID_IR	when MUX = "000" else					IDEX_A	when MUX = "001" else					IDEX_IMM	when MUX = "010" else					EXMEM_IR	when MUX = "011" else					MEMWB_IR	when MUX = "100" else					R1	when MUX = "101" else	 				R3	when MUX = "110" else					KRIX & PRIX & "11111111111111";	CTRL1 <= T(0);	CTRL2 <= T(1);	CTRL3 <= T(2);	CTRL4 <= COND;end Behavioral;

⌨️ 快捷键说明

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