?? mode_control.vhd
字號(hào):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MODE_CONTROL IS
PORT(
FZ,FC:IN STD_LOGIC;
Q,T1,T2,T3,T4,CLR:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --IR
CS_B:OUT STD_LOGIC;
LOAD,LDPC:OUT STD_LOGIC; --PC
LDAR:OUT STD_LOGIC; --AR
LDIR:OUT STD_LOGIC; --IR
LDR0,LDR1,LDR2,LDR3,R0_B,R1_B,R2_B,R3_B:OUT STD_LOGIC; --RO,R1,R2,R3
S1,S0,ALU_B,LDAC,LDDR:OUT STD_LOGIC; --ALU
WR,BS_B,CS_I,CS_D:OUT STD_LOGIC; --WR輸出顯示
SW_B,LED_B:OUT STD_LOGIC;
LDFR:OUT STD_LOGIC ; --LS74
PC_B,RM:OUT STD_LOGIC -- ROM
);
END MODE_CONTROL;
ARCHITECTURE A OF MODE_CONTROL IS
SIGNAL YIMA:STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL IN1,MOV,MOV1,MOV2,CMP,JB,DEC,INC,JMP,OUT1:STD_LOGIC;
SIGNAL LDRi,RS_B,RD_B:STD_LOGIC;
SIGNAL M:STD_LOGIC:='0';
BEGIN
P1:PROCESS(CLR,T4) --進(jìn)程
BEGIN
IF (CLR='0') THEN
M<='0';
ELSIF(T4'EVENT AND T4='0') THEN
M<=NOT M;
END IF;
END PROCESS P1;
P2:PROCESS(Q)
BEGIN
CASE DIN(7 DOWNTO 4) IS --CASE語句完成對(duì)指令操作碼的譯碼功能 WHEN
WHEN "1000"=>YIMA<="0000000001"; --IN1
WHEN "1111"=>YIMA<="0000000010"; --OUT1
WHEN "1010"=>YIMA<="0000000100"; --CMP
WHEN "1101"=>YIMA<="0000001000"; --INC
WHEN "0011"=>YIMA<="0000010000"; --DEC
WHEN "1001"=>YIMA<="0000100000"; --MOV
WHEN "0001"=>YIMA<="0001000000"; --MOV1
WHEN "0010"=>YIMA<="0010000000"; --MOV2
WHEN "1110"=>YIMA<="0100000000"; --JMP
WHEN "1011"=>YIMA<="1000000000"; --JB
WHEN OTHERS=>YIMA<="0000000000";
END CASE;
LDAC<=(CMP OR INC OR DEC)AND T3 AND(NOT Q)AND(NOT M);
LDDR<=CMP AND T4 AND (NOT Q)AND(NOT M);
ALU_B<=NOT((INC AND T4 AND(NOT M))OR (DEC AND T4 AND(NOT M)));
LOAD<=NOT((JMP AND T4 AND (NOT M))OR(JB AND T4 AND(NOT M)AND(FC AND(NOT FZ))));
LDPC<=(T1 AND (NOT Q)AND (NOT M))OR((MOV OR JB OR JMP) AND T3 AND(NOT Q)AND(NOT M))OR(JB AND T4 AND (NOT Q)AND(NOT M)AND FC AND(NOT FZ))OR(JMP AND T4 AND(NOT Q) AND(NOT M));
LDIR<=T2 AND(NOT Q)AND(NOT M);
LDFR<=CMP AND T1 AND(NOT Q)AND M;
RS_B<=NOT(((CMP OR MOV2 OR OUT1)AND T3 AND(NOT M)) OR (MOV1 AND T4 AND (NOT M)));
RD_B<=NOT((CMP AND T4 AND(NOT M))OR((INC OR MOV1 OR DEC) AND T3 AND(NOT M)));
R0_B<=(RS_B OR DIN(3) OR DIN(2))AND(RD_B OR DIN(1) OR DIN(0));
R1_B<=(RS_B OR DIN(3) OR (NOT DIN(2)))AND(RD_B OR DIN(1) OR (NOT DIN(0)));
R2_B<=(RS_B OR(NOT DIN(3))OR DIN(2))AND(RD_B OR(NOT DIN(1))OR DIN(0));
R3_B<=(RS_B OR(NOT DIN(3))OR (NOT DIN(2)))AND(RD_B OR(NOT DIN(1))OR (NOT DIN(0)));
LDRi<=(IN1 AND T3 AND(NOT Q) AND(NOT M)) OR ((MOV OR INC OR DEC OR MOV2) AND T4 AND(NOT Q)AND(NOT M));
LDR0<=LDRi AND (NOT DIN(1))AND (NOT DIN(0));
LDR1<=LDRi AND (NOT DIN(1))AND DIN(0);
LDR2<=LDRi AND DIN(1)AND (NOT DIN(0));
LDR3<=LDRi AND DIN(1)AND DIN(0);
S1<=(INC OR DEC) AND T4 AND(NOT M);
S0<=(CMP AND T1 AND M) OR (DEC AND T4 AND (NOT M));
CS_I<=NOT((T2 AND(NOT M))OR(MOV AND T4 AND(NOT M)) OR (JMP AND T4 AND (NOT M))OR(JB AND T4 AND (NOT M)AND FC AND (NOT FZ)));
CS_D<=NOT((MOV1 AND T4 AND(NOT Q)AND (NOT M))OR(MOV2 AND T4 AND (NOT M)));
CS_B<=NOT((T2 AND(NOT M))OR ((MOV2 OR MOV OR JMP )AND T4 AND (NOT M))OR(JB AND T4 AND (NOT M)AND FC AND (NOT FZ))) ;
WR<=NOT(MOV1 AND T4 AND Q AND (NOT M));
LDAR<=(T1 OR((MOV OR JB OR JMP OR MOV1 OR MOV2) AND T3))AND(NOT Q)AND(NOT M);
SW_B<=NOT(IN1 AND T3 AND(NOT M));
LED_B<=NOT(OUT1 AND T3 AND(NOT M));
BS_B<=NOT((OUT1 AND T3 AND (NOT M)));--NOT((OUT1 AND T3 AND (NOT Q) AND (NOT M)))
RM<=NOT((T2 AND(NOT M))OR(MOV AND T4 AND(NOT M)) OR (JMP AND T4 AND(NOT M)) OR (JB AND T4 AND (NOT M)AND FC AND(NOT FZ)));
PC_B<=NOT((MOV1 OR MOV2) AND T3 AND(NOT M)) ;
END PROCESS P2;
--以下10條語句用來將指令操作碼的譯碼信息轉(zhuǎn)換成對(duì)應(yīng)的指令助記符
JB<=YIMA(9);
JMP<=YIMA(8);
MOV2<=YIMA(7);
MOV1<=YIMA(6);
MOV<=YIMA(5);
DEC<=YIMA(4);
INC<=YIMA(3);
CMP<=YIMA(2);
OUT1<=YIMA(1);
IN1<=YIMA(0);
END A;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -