亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? opcode_decoder.vhd

?? 用vhdl語用實現簡單的16位cpu功能
?? VHD
?? 第 1 頁 / 共 3 頁
字號:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--  Uncomment the following lines to use the declarations that are--  provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all;use work.cpu_pack.ALL;entity opcode_decoder is	PORT(	CLK_I  : IN  std_logic;			T2     : IN  std_logic;			CLR    : IN  std_logic;			CE     : IN  std_logic;			OPCODE : IN  std_logic_vector(7 downto 0);			OP_CYC : IN  cycle;					-- current cycle (M1, M2, ...)			INT    : IN  std_logic;				-- interrupt			RRZ    : IN  std_logic;				-- RR is zero			OP_CAT : OUT op_category;			-- select signals			D_SX    : out std_logic_vector(1 downto 0);		-- ALU select X			D_SY    : out std_logic_vector(3 downto 0);		-- ALU select Y			D_OP    : out std_logic_vector(4 downto 0);		-- ALU operation			D_SA    : out std_logic_vector(4 downto 0);		-- select address			D_SMQ   : out std_logic;			-- write enable/select signal			D_WE_RR  : out std_logic;			D_WE_LL  : out std_logic;			D_WE_SP  : out SP_OP;			D_RD_O   : out std_logic;			D_WE_O   : out std_logic;			D_LOCK   : out std_logic;			-- input/output			D_IO     : out std_logic;			PC_OP  : out std_logic_vector(2 downto 0);			LAST_M : out std_logic;		-- last M cycle of an opcode			HLT    : out std_logic		);end opcode_decoder;architecture Behavioral of opcode_decoder is	function pc(A : std_logic;				OP : std_logic_vector(2 downto 0)) return std_logic_vector is	begin		if (A = '1') then	return OP;		else				return PC_NEXT;		end if;	end;	function hadr(	A   : std_logic;					ADR : std_logic_vector(4 downto 0)) return std_logic_vector is	begin		return ADR(4 downto 1) & A;	end;	function mix(A : std_logic) return std_logic_vector is	begin		if (A = '1') then	return ALU_X_MIX_Y;		else				return ALU_MOVE_Y;		end if;	end;	function sp(A : std_logic;				OP : SP_OP) return SP_OP is	begin		if (A = '1') then	return OP;		else				return SP_NOP;		end if;	end;	signal LAST         : cycle;	signal ENABLE_INT   : std_logic;	signal DISABLE_INT  : std_logic;	signal DISABLE_CNT  : std_logic_vector(3 downto 0);	signal HALT_REQ     : std_logic;	signal UNHALT_REQ   : std_logic;	signal HALTED       : std_logic;	signal INT_M1       : std_logic;	signal INT_M2       : std_logic;begin	LAST_M <= '1' when (OP_CYC = LAST) else '0';	HLT    <= HALTED;	-- show when CPU is halted	-- HLT    <= '1' when DISABLE_CNT = 0 else '0';	-- show when ints enabled	process(CLK_I, CLR)	begin		if (CLR = '1') then			DISABLE_CNT <= "0001";	-- 1 x disabled			INT_M2      <= '0';			HALTED      <= '0';		elsif ((rising_edge(CLK_I) and T2 = '1') and CE = '1' ) then			if (DISABLE_INT = '1') then				DISABLE_CNT <= DISABLE_CNT + 1;			elsif (ENABLE_INT  = '1' and DISABLE_CNT /= 0) then				DISABLE_CNT <= DISABLE_CNT - 1;			end if;			if (UNHALT_REQ = '1') then				HALTED <= '0';			elsif (HALT_REQ = '1') then				HALTED <= '1';			end if;			INT_M2 <= INT_M1;		end if;	end process;	process(OPCODE, OP_CYC, INT, RRZ, INT_M2, DISABLE_CNT, HALTED)		variable	IS_M1			: std_logic;		variable	IS_M2, IS_M1_M2	: std_logic;		variable	IS_M3, IS_M2_M3	: std_logic;		variable	IS_M4, IS_M3_M4	: std_logic;		variable	IS_M5			: std_logic;	begin		if (OP_CYC = M1) then	IS_M1 := '1';	else	IS_M1 := '0';	end if;		if (OP_CYC = M2) then	IS_M2 := '1';	else	IS_M2 := '0';	end if;		if (OP_CYC = M3) then	IS_M3 := '1';	else	IS_M3 := '0';	end if;		if (OP_CYC = M4) then	IS_M4 := '1';	else	IS_M4 := '0';	end if;		if (OP_CYC = M5) then	IS_M5 := '1';	else	IS_M5 := '0';	end if;		IS_M1_M2		:= IS_M1 or IS_M2;		IS_M2_M3		:=          IS_M2 or IS_M3;		IS_M3_M4		:=                   IS_M3 or IS_M4;		-- default: NOP		--		OP_CAT      <= undef;		D_SX        <= SX_ANY;		D_SY        <= SY_ANY;		D_OP        <= "00000";		D_SA        <= "00000";		D_SMQ       <= '0';		D_WE_RR     <= '0';		D_WE_LL     <= '0';		D_WE_SP     <= SP_NOP;		D_WE_O      <= '0';		D_RD_O      <= '0';		D_LOCK      <= '0';		D_IO        <= '0';		PC_OP       <= PC_NEXT;		LAST        <= M1;			-- default: single cycle opcode (M1 only)		ENABLE_INT  <= '0';		DISABLE_INT <= '0';		HALT_REQ    <= '0';		UNHALT_REQ  <= '0';		INT_M1      <= '0';		if ((IS_M1 = '1' and INT = '1' and DISABLE_CNT = "0000")	-- new INT or			or INT_M2 = '1' ) then							-- continue INT			OP_CAT      <= INTR;			LAST        <= M2;			INT_M1      <= IS_M1;			D_OP        <= ALU_X_ADD_Y;			D_SX        <= SX_PC;			D_SY        <= SY_SY0;		-- PC + 0 (current PC)			D_SA        <= ADR_dSP;			D_WE_O      <= IS_M1_M2;			D_LOCK      <= IS_M1;			PC_OP       <= pc(IS_M1, PC_INT);			D_SMQ       <= IS_M1;			D_WE_SP     <= sp(IS_M1_M2, SP_LOAD);			DISABLE_INT <= IS_M1;			UNHALT_REQ  <= '1';		elsif (HALTED = '1') then			OP_CAT      <= HALT_WAIT;			LAST        <= M2;			PC_OP       <= PC_WAIT;		elsif (OPCODE(7) = '1') then			case OPCODE(6 downto 4) is				when "010" =>					OP_CAT  <= ADD_RR_I;					D_OP    <= ALU_X_ADD_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UQ;					D_WE_RR <= IS_M1;				when "011" =>					OP_CAT  <= SUB_RR_I;					D_OP    <= ALU_X_SUB_Y;					D_SX    <= SX_RR;					D_SY    <= SY_UQ;					D_WE_RR <= IS_M1;				when "100" =>					OP_CAT  <= MOVE_I_RR;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SQ;					D_WE_RR <= IS_M1;				when "101" =>					OP_CAT  <= SEQ_LL_I;					D_OP    <= ALU_X_EQ_Y;					D_SX    <= SX_LL;					D_SY    <= SY_SQ;					D_WE_RR <= IS_M1;		-- !! RR				when "110" =>					OP_CAT  <= MOVE_I_LL;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_UQ;					D_WE_LL <= IS_M1;				when "111" =>					case OPCODE(3 downto 0) is						when "0100" =>							OP_CAT  <= ADD_RR_I;							D_OP    <= ALU_X_ADD_Y;							D_SX    <= SX_RR;							D_SY    <= SY_I16;							LAST    <= M3;							D_WE_RR <= IS_M3;							when "0101" =>							OP_CAT  <= ADD_RR_I;							D_OP    <= ALU_X_ADD_Y;							D_SX    <= SX_RR;							D_SY    <= SY_UI8;							LAST    <= M2;							D_WE_RR <= IS_M2;							when "0110" =>							OP_CAT  <= SUB_RR_I;							D_OP    <= ALU_X_SUB_Y;							D_SX    <= SX_RR;							D_SY    <= SY_I16;							LAST    <= M3;							D_WE_RR <= IS_M3;						when "0111" =>							OP_CAT  <= SUB_RR_I;							D_OP    <= ALU_X_SUB_Y;							D_SX    <= SX_RR;							D_SY    <= SY_UI8;							LAST    <= M2;							D_WE_RR <= IS_M2;						when "1000" =>							OP_CAT <= MOVE_I_RR;							D_OP   <= ALU_MOVE_Y;							D_SX   <= SX_ANY;							D_SY   <= SY_I16;							LAST    <= M3;							D_WE_RR <= IS_M3;						when "1001" =>							OP_CAT  <= MOVE_I_RR;							D_OP    <= ALU_MOVE_Y;							D_SX    <= SX_ANY;							D_SY    <= SY_SI8;							LAST    <= M2;							D_WE_RR <= IS_M2;						when "1010" =>							OP_CAT <= SEQ_LL_I;							D_OP   <= ALU_X_EQ_Y;							D_SX   <= SX_LL;							D_SY   <= SY_I16;							LAST    <= M3;							D_WE_RR <= IS_M3;			-- SEQ sets RR !						when "1011" =>							OP_CAT  <= SEQ_LL_I;							D_OP    <= ALU_X_EQ_Y;							D_SX    <= SX_LL;							D_SY    <= SY_SI8;							LAST    <= M2;							D_WE_RR <= IS_M2;			-- SEQ sets RR !						when "1100" =>							OP_CAT <= MOVE_I_LL;							D_OP   <= ALU_MOVE_Y;							D_SX   <= SX_ANY;							D_SY   <= SY_I16;							LAST    <= M3;							D_WE_LL <= IS_M3;						when "1101" =>							OP_CAT  <= MOVE_I_LL;							D_OP    <= ALU_MOVE_Y;							D_SX    <= SX_ANY;							D_SY    <= SY_SI8;							LAST    <= M2;							D_WE_LL <= IS_M2;					when others =>	-- undefined				end case;				when others =>	-- undefined			end case;		else			case OPCODE(6 downto 0) is				-- 00000000000000000000000000000000000000000000000000000000000000000000				when "0000000" =>					OP_CAT   <= HALT;					HALT_REQ <= '1';					PC_OP    <= PC_WAIT;				when "0000001" =>					OP_CAT <= NOP;				when "0000010" =>					OP_CAT <= JMP_i;					LAST   <= M3;					PC_OP  <= pc(IS_M2, PC_JMP);				when "0000011" =>					OP_CAT <= JMP_RRNZ_i;					LAST   <= M3;					PC_OP  <= pc(IS_M2 and not RRZ, PC_JMP);				when "0000100" =>					OP_CAT <= JMP_RRZ_i;					LAST   <= M3;					PC_OP  <= pc(IS_M2 and RRZ, PC_JMP);				when "0000101" =>					OP_CAT  <= CALL_i;					LAST    <= M3;					D_OP    <= ALU_X_ADD_Y;					D_SX    <= SX_PC;					D_SY    <= SY_SY3;		-- PC + 3					D_SA    <= ADR_dSP;					D_WE_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					PC_OP   <= pc(IS_M2, PC_JMP);					D_SMQ   <= IS_M1;					D_WE_SP <= sp(IS_M1_M2, SP_LOAD);				when "0000110" =>					OP_CAT  <= CALL_RR;					LAST    <= M2;					D_OP    <= ALU_X_ADD_Y;					D_SX    <= SX_PC;					D_SY    <= SY_SY1;		-- PC + 1					D_SA    <= ADR_dSP;					D_WE_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					PC_OP   <= pc(IS_M1, PC_JPRR);					D_SMQ   <= IS_M1;					D_WE_SP <= sp(IS_M1_M2, SP_LOAD);				when "0000111" | "1111000" =>					if (OPCODE(0) = '1') then						OP_CAT      <= RET;					else						OP_CAT      <= RETI;						ENABLE_INT  <= IS_M1;					end if;					LAST    <= M5;					D_SA    <= ADR_SPi;		-- read address: (SP)+					D_RD_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					D_WE_SP <= sp(IS_M1_M2, SP_INC);					case OP_CYC is						when M1 =>	PC_OP   <= PC_WAIT;						when M2 =>	PC_OP   <= PC_WAIT;						when M3 =>	PC_OP   <= PC_RETL;						when M4 =>	PC_OP   <= PC_RETH;						when others =>					end case;				when "0001000" =>					OP_CAT  <= MOVE_SPi_RR;					D_SX    <= SX_RR;					D_SY    <= SY_UM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					LAST    <= M3;					PC_OP   <= pc(IS_M1_M2, PC_WAIT);					D_WE_RR <= IS_M2_M3;					D_WE_SP <= sp(IS_M1_M2, SP_INC);					D_OP    <= mix(IS_M3);				when "0001001" =>					OP_CAT  <= MOVE_SPi_RS;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1;					D_WE_RR <= IS_M2;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_WE_SP <= sp(IS_M1, SP_INC);				when "0001010" =>					OP_CAT  <= MOVE_SPi_RU;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_UM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_WE_SP <= sp(IS_M1, SP_INC);					D_WE_RR <= IS_M2;				when "0001011" =>					OP_CAT  <= MOVE_SPi_LL;					LAST    <= M3;					D_SX    <= SX_LL;					D_SY    <= SY_UM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					PC_OP   <= pc(IS_M1_M2, PC_WAIT);					D_WE_SP <= sp(IS_M1_M2, SP_INC);					D_WE_LL <= IS_M2_M3;					D_OP    <= mix(IS_M3);				when "0001100" =>					OP_CAT  <= MOVE_SPi_LS;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_SM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_WE_SP <= sp(IS_M1, SP_INC);					D_WE_LL <= IS_M2;				when "0001101" =>					OP_CAT  <= MOVE_SPi_LU;					LAST    <= M2;					D_OP    <= ALU_MOVE_Y;					D_SX    <= SX_ANY;					D_SY    <= SY_UM;					D_SA    <= ADR_SPi;					D_RD_O  <= IS_M1;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_WE_SP <= sp(IS_M1, SP_INC);					D_WE_LL <= IS_M2;				when "0001110" =>					OP_CAT  <= MOVE_RR_dSP;					LAST    <= M2;					D_OP    <= ALU_X_OR_Y;					D_SX    <= SX_RR;					D_SY    <= SY_SY0;					D_SA    <= ADR_dSP;					D_WE_O  <= IS_M1_M2;					D_LOCK  <= IS_M1;					PC_OP   <= pc(IS_M1, PC_WAIT);					D_WE_SP <= sp(IS_M1_M2, SP_LOAD);					D_SMQ   <= IS_M1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产无套在线观| 国产日韩欧美精品在线| 波多野结衣在线一区| 国产伦精一区二区三区| 久久精品国内一区二区三区| 蜜臀av国产精品久久久久 | 国产盗摄一区二区三区| 韩日av一区二区| 国产成人亚洲综合a∨猫咪| 国产一区二区主播在线| 国产成人午夜高潮毛片| 成人免费视频一区二区| 色中色一区二区| 欧美日韩成人综合天天影院 | 国产精品女上位| 亚洲青青青在线视频| 亚洲自拍偷拍av| 日韩电影免费在线观看网站| 美女精品一区二区| 成人性生交大片| 91精彩视频在线| 日韩精品一区在线观看| 久久夜色精品一区| 综合激情成人伊人| 青草av.久久免费一区| 国产精品99久久久久久有的能看| 国产91在线看| 精品视频1区2区| 久久夜色精品一区| 亚洲国产一区二区三区| 另类调教123区| 91亚洲午夜精品久久久久久| 欧美主播一区二区三区| 精品成人一区二区| 亚洲精品中文在线观看| 毛片av一区二区| 91影视在线播放| 日韩一区二区三区高清免费看看| 国产调教视频一区| 婷婷亚洲久悠悠色悠在线播放| 久久精品国产久精国产| 色综合天天综合网天天狠天天 | 免费在线观看精品| www.日韩在线| 精品三级在线看| 玉米视频成人免费看| 黄色日韩网站视频| 欧美日韩久久一区| 亚洲欧洲国产日本综合| 国产毛片精品一区| 日韩午夜中文字幕| 亚洲综合成人在线视频| 国产不卡视频在线观看| 欧美一区二区三区视频免费播放 | 3atv一区二区三区| 中文字幕一区二区三区不卡| 久久国产综合精品| 制服.丝袜.亚洲.中文.综合| 最新欧美精品一区二区三区| 国产一区二区在线视频| 56国语精品自产拍在线观看| 亚洲欧美二区三区| 懂色av一区二区三区免费观看 | 国产91清纯白嫩初高中在线观看| 欧美日韩成人综合在线一区二区| 中文字幕电影一区| 黄色日韩三级电影| 欧美mv和日韩mv国产网站| 日本成人在线视频网站| 91麻豆精品国产无毒不卡在线观看| 亚洲免费观看视频| 色婷婷av一区二区三区大白胸| 国产精品人成在线观看免费 | 欧美伊人精品成人久久综合97 | 亚洲精品免费一二三区| 成人高清免费在线播放| 中文字幕高清一区| www..com久久爱| 国产精品久久久久影视| www.日本不卡| 洋洋av久久久久久久一区| 欧美影视一区二区三区| 亚洲va欧美va天堂v国产综合| 欧美日韩mp4| 裸体一区二区三区| 久久精品亚洲一区二区三区浴池| 粉嫩一区二区三区性色av| 国产亚洲一区二区三区在线观看| 粉嫩嫩av羞羞动漫久久久| 中文字幕日韩av资源站| 91久久人澡人人添人人爽欧美| 亚洲制服丝袜av| 欧美乱熟臀69xxxxxx| 精品一区二区三区久久久| 国产人久久人人人人爽| 成人高清伦理免费影院在线观看| 亚洲欧美区自拍先锋| 欧美三级视频在线播放| 蜜臀久久久99精品久久久久久| 26uuu欧美日本| 91在线云播放| 美女视频一区二区| 中文字幕av一区二区三区| 色婷婷精品久久二区二区蜜臂av| 午夜国产不卡在线观看视频| 国产丝袜欧美中文另类| 欧日韩精品视频| 韩国中文字幕2020精品| 亚洲区小说区图片区qvod| 555www色欧美视频| 99视频一区二区三区| 日韩综合在线视频| 一区免费观看视频| 精品粉嫩超白一线天av| 91福利国产成人精品照片| 激情久久五月天| 亚洲风情在线资源站| 国产日韩欧美高清在线| 欧美日韩综合不卡| 成人黄页毛片网站| 国内精品久久久久影院一蜜桃| 亚洲精品va在线观看| 国产亚洲精品超碰| 日韩一区和二区| 欧美午夜精品久久久久久孕妇 | 欧美区视频在线观看| 国产91精品免费| 久久国产免费看| 天天爽夜夜爽夜夜爽精品视频| 国产精品视频yy9299一区| 精品国产伦一区二区三区观看体验 | 久久精品亚洲一区二区三区浴池 | 精品一区二区在线看| 亚洲无线码一区二区三区| 国产精品久久午夜夜伦鲁鲁| 欧美一级高清大全免费观看| 91视频免费观看| 国产 欧美在线| 国产一区啦啦啦在线观看| 日韩成人一级大片| 一区二区三区在线视频播放| 中文成人av在线| 中文字幕成人av| 欧美经典一区二区| 国产色一区二区| 久久精品免视看| 国产亚洲欧美日韩日本| 精品国产免费人成电影在线观看四季| 欧美妇女性影城| 91.xcao| 日韩一区二区三区av| 欧美电影在哪看比较好| 欧美日本不卡视频| 欧美日韩久久久一区| 欧美日本乱大交xxxxx| 欧美区在线观看| 欧美一卡二卡在线观看| 日韩视频在线一区二区| 精品国产污网站| 久久久久成人黄色影片| 国产精品网站在线观看| 国产精品护士白丝一区av| 亚洲视频在线观看三级| 一区二区三区四区国产精品| 一区二区理论电影在线观看| 亚洲123区在线观看| 日韩电影网1区2区| 久久成人av少妇免费| 国产成人综合精品三级| 不卡av在线免费观看| 色美美综合视频| 91麻豆精品91久久久久同性| 日韩欧美一级二级| 欧美国产日产图区| 一区二区三区不卡在线观看 | 日韩免费看网站| 欧美国产一区在线| 亚洲高清在线精品| 久久成人18免费观看| av成人老司机| 91.com视频| 国产精品三级久久久久三级| 亚洲麻豆国产自偷在线| 午夜激情一区二区三区| 国产精品一线二线三线| 91久久精品日日躁夜夜躁欧美| 欧美日本韩国一区二区三区视频 | 国产精品激情偷乱一区二区∴| 亚洲欧美日韩中文字幕一区二区三区 | 99久久精品费精品国产一区二区| 欧美三电影在线| 欧美极品美女视频| 婷婷综合另类小说色区| av毛片久久久久**hd| 欧美一二三区精品| 一区二区三区四区av| 国产酒店精品激情| 6080午夜不卡| ...xxx性欧美| 国产精华液一区二区三区|