📄 kernel.vhd
字号:
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 + -