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

📄 mode_control.vhd

📁 在软件MAX+plus II环境中
💻 VHD
字号:
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)         --进程
    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语句完成对指令操作码的译码功能          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条语句用来将指令操作码的译码信息转换成对应的指令助记符
    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;     
       


⌨️ 快捷键说明

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