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

📄 opcode_decoder.vhd

📁 用vhdl语用实现简单的16位cpu功能
💻 VHD
📖 第 1 页 / 共 3 页
字号:
				when "0001111" =>					OP_CAT  <= MOVE_R_dSP;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_SA    <= ADR_dSP;					D_WE_O  <= '1';					D_WE_SP <= SP_LOAD;				-- 11111111111111111111111111111111111111111111111111111111111111111111				when "0010000" =>					OP_CAT  <= AND_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_AND_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0010001" =>					OP_CAT  <= AND_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_AND_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0010010" =>					OP_CAT  <= OR_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0010011" =>					OP_CAT  <= OR_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0010100" =>					OP_CAT  <= XOR_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_XOR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0010101" =>					OP_CAT  <= XOR_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_XOR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0010110" =>					OP_CAT  <= SEQ_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_EQ_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0010111" =>					OP_CAT  <= SEQ_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_EQ_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0011000" =>					OP_CAT  <= SNE_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_NE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0011001" =>					OP_CAT  <= SNE_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_NE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0011010" =>					OP_CAT  <= SGE_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_GE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0011011" =>					OP_CAT  <= SGE_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_GE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SI8;					D_WE_RR <= IS_M1;				when "0011100" =>					OP_CAT  <= SGT_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_GT_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0011101" =>					OP_CAT  <= SGT_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_GT_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SI8;					D_WE_RR <= IS_M1;				when "0011110" =>					OP_CAT  <= SLE_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_LE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0011111" =>					OP_CAT  <= SLE_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_LE_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SI8;					D_WE_RR <= IS_M1;				-- 22222222222222222222222222222222222222222222222222222222222222222222				when "0100000" =>					OP_CAT  <= SLT_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_LT_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0100001" =>					OP_CAT  <= SLT_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_LT_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SI8;					D_WE_RR <= IS_M1;				when "0100010" =>					OP_CAT  <= SHS_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_HS_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0100011" =>					OP_CAT  <= SHS_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_HS_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0100100" =>					OP_CAT  <= SHI_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_HI_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0100101" =>					OP_CAT  <= SHI_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_HI_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0100110" =>					OP_CAT <= SLS_RR_i;					LAST    <= M3;		-- wait for ##					D_OP   <= ALU_X_LS_Y;					D_SX   <= SX_RR;					D_SY   <= SY_I16;					D_WE_RR <= IS_M2;				when "0100111" =>					OP_CAT  <= SLS_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_LS_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0101000" =>					OP_CAT  <= SLO_RR_i;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_X_LO_Y;					D_SX    <= SX_RR;					D_SY    <= SY_I16;					D_WE_RR <= IS_M2;				when "0101001" =>					OP_CAT  <= SLO_RR_i;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_X_LO_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UI8;					D_WE_RR <= IS_M1;				when "0101010" =>					OP_CAT  <= ADD_SP_I;					LAST    <= M3;		-- wait for ##					D_OP    <= ALU_ANY;					D_SX    <= SX_ANY;					D_SY    <= SY_ANY;					D_SA    <= ADR_16SP_L;					D_WE_SP <= sp(IS_M2, SP_LOAD);				when "0101011" =>					OP_CAT  <= ADD_SP_I;					LAST    <= M2;			-- wait for #					D_OP    <= ALU_ANY;					D_SX    <= SX_ANY;					D_SY    <= SY_ANY;					D_SA    <= ADR_8SP_L;					D_WE_SP <= sp(IS_M1, SP_LOAD);				when "0101100" =>					OP_CAT  <= CLRW_dSP;					LAST    <= M2;					D_OP    <= ALU_X_AND_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SY0;					D_SA    <= ADR_dSP;					D_WE_O  <= '1';					D_LOCK  <= IS_M1;					D_WE_SP <= SP_LOAD;					PC_OP   <= pc(IS_M1, PC_WAIT);				when "0101101" =>					OP_CAT  <= CLRB_dSP;					D_OP    <= ALU_X_AND_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SY0;					D_SA    <= ADR_dSP;					D_WE_O  <= IS_M1;					D_WE_SP <= SP_LOAD;				when "0101110" =>					OP_CAT  <= IN_ci_RU;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_UM;					D_SA    <= ADR_IO;					D_RD_O  <= IS_M1;					D_IO    <= IS_M1;					D_WE_RR <= IS_M2;				when "0101111" =>					OP_CAT  <= OUT_R_ci;					LAST    <= M2;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_SA    <= ADR_IO;					D_WE_O  <= IS_M1;					D_IO    <= IS_M1;				-- 33333333333333333333333333333333333333333333333333333333333333333333				when "0110000" =>					OP_CAT  <= AND_LL_RR;					D_OP    <= ALU_X_AND_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110001" =>					OP_CAT  <= OR_LL_RR;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110010" =>					OP_CAT  <= XOR_LL_RR;					D_OP    <= ALU_X_XOR_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110011" =>					OP_CAT  <= SEQ_LL_RR;					D_OP    <= ALU_X_EQ_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110100" =>					OP_CAT  <= SNE_LL_RR;					D_OP    <= ALU_X_NE_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110101" =>					OP_CAT  <= SGE_LL_RR;					D_OP    <= ALU_X_GE_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110110" =>					OP_CAT  <= SGT_LL_RR;					D_OP    <= ALU_X_GT_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0110111" =>					OP_CAT  <= SLE_LL_RR;					D_OP    <= ALU_X_LE_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111000" =>					OP_CAT  <= SLT_LL_RR;					D_OP    <= ALU_X_LT_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111001" =>					OP_CAT  <= SHS_LL_RR;					D_OP    <= ALU_X_HS_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111010" =>					OP_CAT  <= SHI_LL_RR;					D_OP    <= ALU_X_HI_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111011" =>					OP_CAT  <= SLS_LL_RR;					D_OP    <= ALU_X_LS_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111100" =>					OP_CAT  <= SLO_LL_RR;					D_OP    <= ALU_X_LO_Y;					D_SX    <= SX_LL;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111101" =>					OP_CAT  <= LNOT_RR;					D_OP    <= ALU_X_EQ_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_WE_RR <= IS_M1;				when "0111110" =>					OP_CAT  <= NEG_RR;					D_OP    <= ALU_NEG_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				when "0111111" =>					OP_CAT  <= NOT_RR;					D_OP    <= ALU_NOT_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_RR;					D_WE_RR <= IS_M1;				-- 44444444444444444444444444444444444444444444444444444444444444444444				when "1000000" =>					OP_CAT  <= MOVE_LL_RR;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_LL;					D_SY    <= SY_SY0;					D_WE_RR <= IS_M1;				when "1000001" =>					OP_CAT  <= MOVE_LL_cRR;					LAST    <= M2;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_LL;					D_SY    <= SY_SY0;					D_SA    <= hadr(IS_M2, ADR_cRR_H);					D_WE_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					D_SMQ   <= IS_M2;				when "1000010" =>					OP_CAT  <= MOVE_L_cRR;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_LL;					D_SY    <= SY_SY0;					D_SA    <= ADR_cRR_L;					D_WE_O  <= IS_M1;				when "1000011" =>					OP_CAT  <= MOVE_RR_LL;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_WE_LL <= IS_M1;				when "1000100" =>					OP_CAT  <= MOVE_RR_cLL;					LAST    <= M2;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_SA    <= hadr(IS_M2, ADR_cLL_H);					D_WE_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					D_SMQ   <= IS_M2;				when "1000101" =>					OP_CAT  <= MOVE_R_cLL;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_SA    <= ADR_cLL_L;					D_WE_O  <= IS_M1;				when "1000110" =>					OP_CAT  <= MOVE_cRR_RR;					LAST    <= M3;					D_SX    <= SX_ANY;					D_SY    <= SY_UM;					D_WE_RR <= not IS_M1;		-- M2 or M3					PC_OP   <= pc(IS_M1_M2, PC_WAIT);					D_OP    <= mix(IS_M3);					D_SA    <= hadr(IS_M2, ADR_cRR_H);					D_RD_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;				when "1000111" =>					OP_CAT  <= MOVE_cRR_RS;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SM;					D_SA    <= ADR_cRR_L;					D_RD_O  <= IS_M1;					D_WE_RR <= IS_M2;					PC_OP   <= pc(IS_M1, PC_WAIT);				when "1001000" =>

⌨️ 快捷键说明

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