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

📄 m_table.vhd

📁 Intel微处理器8088的VHDL实现
💻 VHD
字号:
-------------------------------------------------------------------------------
--  CPU86 - VHDL CPU8088 IP core                                             --
--  Copyright (C) 2005-2008 HT-LAB                                           --
--                                                                           --
--  Contact/bugs : http://www.ht-lab.com/misc/feedback.html                  --
--  Web          : http://www.ht-lab.com                                     --
--                                                                           --
--  CPU86 is released as open-source under the Aladdin Free Public License.  --
--  Contact HT-Lab for commercial applications and/or support contracts.     --
--                                                                           --
--  Full details of the license can be found in the file "cpu86_license.txt" --
--  which is included in the distribution zip file.                          --
-------------------------------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;entity m_table is  port ( ireg  : in std_logic_vector(7 downto 0);         modrrm: in std_logic_vector(7 downto 0);         muxout: out std_logic_vector(7 downto 0));end m_table;architecture rtl of m_table is  signal lutout_s: std_logic_vector(1 downto 0);  signal ea_s    : std_logic;                                   -- Asserted if mod=00 and rm=110  signal m11_s   : std_logic;                                   -- Asserted if mod=11  signal mux_s   : std_logic_vector(3 downto 0);begin  ea_s <= '1' when (modrrm(7 downto 6)="00" and modrrm(2 downto 0)="110") else '0';  m11_s<= '1' when modrrm(7 downto 6)="11" else '0';  mux_s <= lutout_s & m11_s & ea_s;  process (mux_s,modrrm)  begin    case mux_s is       when "1000" => muxout <= modrrm(7 downto 6)&"000000";   -- only check mod value       when "1010" => muxout <= modrrm(7 downto 6)&"000000";   -- only check mod value       when "1001" => muxout <= "00000110";                    -- mod000rm       when "1011" => muxout <= "00000110";                    -- mod000rm       when "1100" => muxout <= modrrm(7 downto 3)&"000";      -- mod IST 000       when "1101" => muxout <= "00"&modrrm(5 downto 3)&"110"; -- 00 IST 110        when "1110" => muxout <= "11"&modrrm(5 downto 3)&"000"; -- 11 IST 000        when others => muxout <= (others => '0');               -- single instruction    end case;  end process;  process(ireg)  begin    case ireg is       when "11111111" => lutout_s <= "11";         when "10001000" => lutout_s <= "10";         when "10001001" => lutout_s <= "10";         when "10001010" => lutout_s <= "10";         when "10001011" => lutout_s <= "10";         when "11000110" => lutout_s <= "11";         when "11000111" => lutout_s <= "11";         when "10001110" => lutout_s <= "10";         when "10001100" => lutout_s <= "10";         when "10001111" => lutout_s <= "11";         when "10000110" => lutout_s <= "10";         when "10000111" => lutout_s <= "10";         when "10001101" => lutout_s <= "10";         when "11000101" => lutout_s <= "10";         when "11000100" => lutout_s <= "10";         when "00000000" => lutout_s <= "10";         when "00000001" => lutout_s <= "10";         when "00000010" => lutout_s <= "10";         when "00000011" => lutout_s <= "10";         when "10000000" => lutout_s <= "11";         when "10000001" => lutout_s <= "11";         when "10000011" => lutout_s <= "11";         when "00010000" => lutout_s <= "10";         when "00010001" => lutout_s <= "10";         when "00010010" => lutout_s <= "10";         when "00010011" => lutout_s <= "10";         when "00101000" => lutout_s <= "10";         when "00101001" => lutout_s <= "10";         when "00101010" => lutout_s <= "10";         when "00101011" => lutout_s <= "10";         when "00011000" => lutout_s <= "10";         when "00011001" => lutout_s <= "10";         when "00011010" => lutout_s <= "10";         when "00011011" => lutout_s <= "10";         when "11111110" => lutout_s <= "11";         when "00111010" => lutout_s <= "10";         when "00111011" => lutout_s <= "10";         when "00111000" => lutout_s <= "10";         when "00111001" => lutout_s <= "10";         when "11110110" => lutout_s <= "11";         when "11110111" => lutout_s <= "11";         when "11010000" => lutout_s <= "10";         when "11010001" => lutout_s <= "10";         when "11010010" => lutout_s <= "10";         when "11010011" => lutout_s <= "10";         when "00100000" => lutout_s <= "10";         when "00100001" => lutout_s <= "10";         when "00100010" => lutout_s <= "10";         when "00100011" => lutout_s <= "10";         when "00001000" => lutout_s <= "10";         when "00001001" => lutout_s <= "10";         when "00001010" => lutout_s <= "10";         when "00001011" => lutout_s <= "10";         when "10000100" => lutout_s <= "10";         when "10000101" => lutout_s <= "10";         when "00110000" => lutout_s <= "10";        when "00110001" => lutout_s <= "10";        when "00110010" => lutout_s <= "10";        when "00110011" => lutout_s <= "10";        when others     => lutout_s <= "00";     end case;  end process;end rtl;

⌨️ 快捷键说明

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