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

📄 reg_rdwr.vhd

📁 破解des算法的程序
💻 VHD
字号:
---------|---------|---------|---------|---------|---------|---------|---------|-- Author          :  Tom Vu                                     -- Date            :  09/19/97                                  -- Description	   :  UProcessor interface--------------------------------------------------------------------------------library ieee;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;--------------------------------------------------------------------------------entity REG_RDWR isport(   RST_N           : in     std_logic;        BOARD_EN       	: in     std_logic;        ALE          	: in     std_logic;        ADDSEL1        	: in     std_logic;        WRB          	: in     std_logic;        RDB          	: in     std_logic;        ADDSEL2        	: in     std_logic;        AA_IN         	: in     std_logic;        ADDR       	: in     std_logic_vector(7 downto 0);        CHIP_ID       	: in     std_logic_vector(7 downto 0);        SEARCH_OUT     	: in     std_logic_vector(23 downto 0);        SELECT_ONE  	: in     std_logic_vector(23 downto 0);        SEARCH_IN    	: in      std_logic_vector(23 downto 0);        CHIP_EN       	: out    std_logic;        AA_OUT       	: out    std_logic;        CHIP_AA_OUT   	: out    std_logic;        EXTRA_XOR       : out    std_logic;        USE_CBC         : out    std_logic;        PT_XOR_MASK    	: out    std_logic_vector(63 downto 0);        PT_BYTE_MASK  	: out    std_logic_vector(7 downto 0);        PT_VECTOR      	: out    std_logic_vector(255 downto 0);        C0      	: out    std_logic_vector(63 downto 0);        C1      	: out    std_logic_vector(63 downto 0);        DATAI       	: in     std_logic_vector(7 downto 0);        DATAO       	: out    std_logic_vector(7 downto 0)    );end REG_RDWR;--------------------------------------------------------------------------------architecture beh of REG_RDWR is--------------------------------------------------------------------------------type DATA32_ARRAY is array(31 downto 0) of std_logic_vector(7 downto 0);type DATA8_ARRAY  is array(7  downto 0) of std_logic_vector(7 downto 0);signal PT_VECTOR_REG        	: DATA32_ARRAY;signal PT_XOR_MASK_REG       	: DATA8_ARRAY;signal CIPHER0        		: DATA8_ARRAY;signal CIPHER1        		: DATA8_ARRAY;signal SEARCH_INFO_REG 	: std_logic_vector(7  downto 0);signal PT_BYTE_MASK_REG	: std_logic_vector(7  downto 0);signal CHIP_REG 	: std_logic_vector(7  downto 0);signal CHIP_EN_BAK	: std_logic;signal ALL_ACTIVE 	: std_logic;signal BAA_EN 	: std_logic;signal AA_OUT_BAK 	: std_logic;beginCHIP_EN_BAK <= '1' when ((CHIP_ID = CHIP_REG) and BOARD_EN = '1') else '0';--------------------------------------------------------------------------------CHIP_ID_REG_PR: process(RST_N, ALE)--------------------------------------------------------------------------------begin   if (RST_N = '0') then	CHIP_REG <= (others => '0');elsif (ALE'event and ALE= '1') thenif ((BOARD_EN = '1') and (ADDSEL1 = '1')) then        CHIP_REG <= ADDR;end if;  end if;   end process CHIP_ID_REG_PR;--------------------------------------------------------------------------------READ_PR: process(PT_VECTOR_REG, PT_XOR_MASK_REG,		PT_BYTE_MASK_REG, SEARCH_INFO_REG, CIPHER0, CIPHER1,		SEARCH_IN, SELECT_ONE, ALL_ACTIVE, AA_OUT_BAK,		CHIP_EN_BAK, ADDSEL2, RDB, ADDR,BAA_EN)--------------------------------------------------------------------------------begin   if ((CHIP_EN_BAK = '1') and (ADDSEL2 = '0') and (RDB = '0')) then	case ADDR is	when "00000000" => DATAO <= PT_VECTOR_REG(0);	when "00000001" => DATAO <= PT_VECTOR_REG(1);	when "00000010" => DATAO <= PT_VECTOR_REG(2);	when "00000011" => DATAO <= PT_VECTOR_REG(3);	when "00000100" => DATAO <= PT_VECTOR_REG(4);	when "00000101" => DATAO <= PT_VECTOR_REG(5);	when "00000110" => DATAO <= PT_VECTOR_REG(6);	when "00000111" => DATAO <= PT_VECTOR_REG(7);	when "00001000" => DATAO <= PT_VECTOR_REG(8);	when "00001001" => DATAO <= PT_VECTOR_REG(9);	when "00001010" => DATAO <= PT_VECTOR_REG(10);	when "00001011" => DATAO <= PT_VECTOR_REG(11);	when "00001100" => DATAO <= PT_VECTOR_REG(12);	when "00001101" => DATAO <= PT_VECTOR_REG(13);	when "00001110" => DATAO <= PT_VECTOR_REG(14);	when "00001111" => DATAO <= PT_VECTOR_REG(15);	when "00010000" => DATAO <= PT_VECTOR_REG(16);	when "00010001" => DATAO <= PT_VECTOR_REG(17);	when "00010010" => DATAO <= PT_VECTOR_REG(18);	when "00010011" => DATAO <= PT_VECTOR_REG(19);	when "00010100" => DATAO <= PT_VECTOR_REG(20);	when "00010101" => DATAO <= PT_VECTOR_REG(21);	when "00010110" => DATAO <= PT_VECTOR_REG(22);	when "00010111" => DATAO <= PT_VECTOR_REG(23);	when "00011000" => DATAO <= PT_VECTOR_REG(24);	when "00011001" => DATAO <= PT_VECTOR_REG(25);	when "00011010" => DATAO <= PT_VECTOR_REG(26);	when "00011011" => DATAO <= PT_VECTOR_REG(27);	when "00011100" => DATAO <= PT_VECTOR_REG(28);	when "00011101" => DATAO <= PT_VECTOR_REG(29);	when "00011110" => DATAO <= PT_VECTOR_REG(30);	when "00011111" => DATAO <= PT_VECTOR_REG(31);	when "00100000" => DATAO <= PT_XOR_MASK_REG(0);	when "00100001" => DATAO <= PT_XOR_MASK_REG(1);	when "00100010" => DATAO <= PT_XOR_MASK_REG(2);	when "00100011" => DATAO <= PT_XOR_MASK_REG(3);	when "00100100" => DATAO <= PT_XOR_MASK_REG(4);	when "00100101" => DATAO <= PT_XOR_MASK_REG(5);	when "00100110" => DATAO <= PT_XOR_MASK_REG(6);	when "00100111" => DATAO <= PT_XOR_MASK_REG(7);	when "00101000" => DATAO <= CIPHER0(0);	when "00101001" => DATAO <= CIPHER0(1);	when "00101010" => DATAO <= CIPHER0(2);	when "00101011" => DATAO <= CIPHER0(3);	when "00101100" => DATAO <= CIPHER0(4);	when "00101101" => DATAO <= CIPHER0(5);	when "00101110" => DATAO <= CIPHER0(6);	when "00101111" => DATAO <= CIPHER0(7);	when "00110000" => DATAO <= CIPHER1(0);	when "00110001" => DATAO <= CIPHER1(1);	when "00110010" => DATAO <= CIPHER1(2);	when "00110011" => DATAO <= CIPHER1(3);	when "00110100" => DATAO <= CIPHER1(4);	when "00110101" => DATAO <= CIPHER1(5);	when "00110110" => DATAO <= CIPHER1(6);	when "00110111" => DATAO <= CIPHER1(7);	when "00111000" => DATAO <= PT_BYTE_MASK_REG;	when "00111111" => DATAO <= "000" & BAA_EN & 		AA_OUT_BAK & ALL_ACTIVE & SEARCH_INFO_REG(1 downto 0) ;	when "01000111" => DATAO  <= "000000" & SELECT_ONE(0)  & SEARCH_IN(0);	when "01001111" => DATAO  <= "000000" & SELECT_ONE(1)  & SEARCH_IN(1);	when "01010111" => DATAO  <= "000000" & SELECT_ONE(2)  & SEARCH_IN(2);	when "01011111" => DATAO  <= "000000" & SELECT_ONE(3)  & SEARCH_IN(3);	when "01100111" => DATAO  <= "000000" & SELECT_ONE(4)  & SEARCH_IN(4);	when "01101111" => DATAO  <= "000000" & SELECT_ONE(5)  & SEARCH_IN(5);	when "01110111" => DATAO  <= "000000" & SELECT_ONE(6)  & SEARCH_IN(6);	when "01111111" => DATAO  <= "000000" & SELECT_ONE(7)  & SEARCH_IN(7);	when "10000111" => DATAO  <= "000000" & SELECT_ONE(8)  & SEARCH_IN(8);	when "10001111" => DATAO  <= "000000" & SELECT_ONE(9)  & SEARCH_IN(9);	when "10010111" => DATAO  <= "000000" & SELECT_ONE(10) & SEARCH_IN(10);	when "10011111" => DATAO  <= "000000" & SELECT_ONE(11) & SEARCH_IN(11);	when "10100111" => DATAO  <= "000000" & SELECT_ONE(12) & SEARCH_IN(12);	when "10101111" => DATAO  <= "000000" & SELECT_ONE(13) & SEARCH_IN(13);	when "10110111" => DATAO  <= "000000" & SELECT_ONE(14) & SEARCH_IN(14);	when "10111111" => DATAO  <= "000000" & SELECT_ONE(15) & SEARCH_IN(15);	when "11000111" => DATAO  <= "000000" & SELECT_ONE(16) & SEARCH_IN(16);	when "11001111" => DATAO  <= "000000" & SELECT_ONE(17) & SEARCH_IN(17);	when "11010111" => DATAO  <= "000000" & SELECT_ONE(18) & SEARCH_IN(18);	when "11011111" => DATAO  <= "000000" & SELECT_ONE(19) & SEARCH_IN(19);	when "11100111" => DATAO  <= "000000" & SELECT_ONE(20) & SEARCH_IN(20);	when "11101111" => DATAO  <= "000000" & SELECT_ONE(21) & SEARCH_IN(21);	when "11110111" => DATAO  <= "000000" & SELECT_ONE(22) & SEARCH_IN(22);	when "11111111" => DATAO  <= "000000" & SELECT_ONE(23) & SEARCH_IN(23);	when others     => DATAO <= (others => 'Z');end case;else	DATAO <= (others => 'Z');end if;end process READ_PR;--------------------------------------------------------------------------------PT_VECTOR_PR: process(RST_N, WRB)--------------------------------------------------------------------------------begin   if (RST_N = '0') then	for i in 0 to 31 loop	PT_VECTOR_REG(i) <= (others => '0');	end loop;	for i in 0 to 7 loop	PT_XOR_MASK_REG(i) <= (others => '0');	CIPHER0(i) <= (others => '0');	CIPHER1(i) <= (others => '0');	end loop;	PT_BYTE_MASK_REG <= (others => '0');	SEARCH_INFO_REG <= (others => '0');elsif (WRB'event and WRB= '1') thenif ((CHIP_EN_BAK = '1') and (ADDSEL2 = '0')) then	case ADDR is	when "00000000" => PT_VECTOR_REG(0) <= DATAI;	when "00000001" => PT_VECTOR_REG(1) <= DATAI;	when "00000010" => PT_VECTOR_REG(2) <= DATAI;	when "00000011" => PT_VECTOR_REG(3) <= DATAI;	when "00000100" => PT_VECTOR_REG(4) <= DATAI;	when "00000101" => PT_VECTOR_REG(5) <= DATAI;	when "00000110" => PT_VECTOR_REG(6) <= DATAI;	when "00000111" => PT_VECTOR_REG(7) <= DATAI;	when "00001000" => PT_VECTOR_REG(8) <= DATAI;	when "00001001" => PT_VECTOR_REG(9) <= DATAI;	when "00001010" => PT_VECTOR_REG(10) <= DATAI;	when "00001011" => PT_VECTOR_REG(11) <= DATAI;	when "00001100" => PT_VECTOR_REG(12) <= DATAI;	when "00001101" => PT_VECTOR_REG(13) <= DATAI;	when "00001110" => PT_VECTOR_REG(14) <= DATAI;	when "00001111" => PT_VECTOR_REG(15) <= DATAI;	when "00010000" => PT_VECTOR_REG(16) <= DATAI;	when "00010001" => PT_VECTOR_REG(17) <= DATAI;	when "00010010" => PT_VECTOR_REG(18) <= DATAI;	when "00010011" => PT_VECTOR_REG(19) <= DATAI;	when "00010100" => PT_VECTOR_REG(20) <= DATAI;	when "00010101" => PT_VECTOR_REG(21) <= DATAI;	when "00010110" => PT_VECTOR_REG(22) <= DATAI;	when "00010111" => PT_VECTOR_REG(23) <= DATAI;	when "00011000" => PT_VECTOR_REG(24) <= DATAI;	when "00011001" => PT_VECTOR_REG(25) <= DATAI;	when "00011010" => PT_VECTOR_REG(26) <= DATAI;	when "00011011" => PT_VECTOR_REG(27) <= DATAI;	when "00011100" => PT_VECTOR_REG(28) <= DATAI;	when "00011101" => PT_VECTOR_REG(29) <= DATAI;	when "00011110" => PT_VECTOR_REG(30) <= DATAI;	when "00011111" => PT_VECTOR_REG(31) <= DATAI;	when "00100000" => PT_XOR_MASK_REG(0) <= DATAI;	when "00100001" => PT_XOR_MASK_REG(1) <= DATAI;	when "00100010" => PT_XOR_MASK_REG(2) <= DATAI;	when "00100011" => PT_XOR_MASK_REG(3) <= DATAI;	when "00100100" => PT_XOR_MASK_REG(4) <= DATAI;	when "00100101" => PT_XOR_MASK_REG(5) <= DATAI;	when "00100110" => PT_XOR_MASK_REG(6) <= DATAI;	when "00100111" => PT_XOR_MASK_REG(7) <= DATAI;	when "00101000" => CIPHER0(0) <= DATAI;	when "00101001" => CIPHER0(1) <= DATAI;	when "00101010" => CIPHER0(2) <= DATAI;	when "00101011" => CIPHER0(3) <= DATAI;	when "00101100" => CIPHER0(4) <= DATAI;	when "00101101" => CIPHER0(5) <= DATAI;	when "00101110" => CIPHER0(6) <= DATAI;	when "00101111" => CIPHER0(7) <= DATAI;	when "00110000" => CIPHER1(0) <= DATAI;	when "00110001" => CIPHER1(1) <= DATAI;	when "00110010" => CIPHER1(2) <= DATAI;	when "00110011" => CIPHER1(3) <= DATAI;	when "00110100" => CIPHER1(4) <= DATAI;	when "00110101" => CIPHER1(5) <= DATAI;	when "00110110" => CIPHER1(6) <= DATAI;	when "00110111" => CIPHER1(7) <= DATAI;	when "00111000" => PT_BYTE_MASK_REG <= DATAI;	when "00111111" => SEARCH_INFO_REG  <= DATAI;	 when others => null;        end case;end if;  end if;   end process PT_VECTOR_PR; PT_VECTOR <=    PT_VECTOR_REG(31) & PT_VECTOR_REG(30) & PT_VECTOR_REG(29) & PT_VECTOR_REG(28) &		PT_VECTOR_REG(27) & PT_VECTOR_REG(26) & PT_VECTOR_REG(25) & PT_VECTOR_REG(24) &		PT_VECTOR_REG(23) & PT_VECTOR_REG(22) & PT_VECTOR_REG(21) & PT_VECTOR_REG(20) &		PT_VECTOR_REG(19) & PT_VECTOR_REG(18) & PT_VECTOR_REG(17) & PT_VECTOR_REG(16) &		PT_VECTOR_REG(15) & PT_VECTOR_REG(14) & PT_VECTOR_REG(13) & PT_VECTOR_REG(12) &		PT_VECTOR_REG(11) & PT_VECTOR_REG(10) & PT_VECTOR_REG(9)  & PT_VECTOR_REG(8) &		PT_VECTOR_REG(7)  & PT_VECTOR_REG(6)  & PT_VECTOR_REG(5)  & PT_VECTOR_REG(4) &		PT_VECTOR_REG(3)  & PT_VECTOR_REG(2)  & PT_VECTOR_REG(1)  & PT_VECTOR_REG(0) ;PT_XOR_MASK  <=  PT_XOR_MASK_REG(7) & PT_XOR_MASK_REG(6) & PT_XOR_MASK_REG(5) & PT_XOR_MASK_REG(4) &                  PT_XOR_MASK_REG(3) & PT_XOR_MASK_REG(2) & PT_XOR_MASK_REG(1) & PT_XOR_MASK_REG(0) ;C1  <=  CIPHER1(7) & CIPHER1(6) & CIPHER1(5) & CIPHER1(4) &         CIPHER1(3) & CIPHER1(2) & CIPHER1(1) & CIPHER1(0) ;C0  <=  CIPHER0(7) & CIPHER0(6) & CIPHER0(5) & CIPHER0(4) &         CIPHER0(3) & CIPHER0(2) & CIPHER0(1) & CIPHER0(0) ;-------------------------------------------------------------------------------- --------------------------------------------------------------------------------PT_BYTE_MASK 	<= PT_BYTE_MASK_REG;USE_CBC 	<= SEARCH_INFO_REG(0);EXTRA_XOR 	<= SEARCH_INFO_REG(1);BAA_EN 		<= SEARCH_INFO_REG(4);AA_OUT_BAK	<= AA_IN and ALL_ACTIVE when (BAA_EN = '1') else AA_IN;AA_OUT 		<= AA_OUT_BAK ;ALL_ACTIVE	<= ( SEARCH_OUT(23) and SEARCH_OUT(22) and SEARCH_OUT(21) and SEARCH_OUT(20) and                     SEARCH_OUT(19) and SEARCH_OUT(18) and SEARCH_OUT(17) and SEARCH_OUT(16) and                     SEARCH_OUT(15) and SEARCH_OUT(14) and SEARCH_OUT(13) and SEARCH_OUT(12) and                     SEARCH_OUT(11) and SEARCH_OUT(10) and SEARCH_OUT(9)  and  SEARCH_OUT(8) and                     SEARCH_OUT(7)  and SEARCH_OUT(6)  and SEARCH_OUT(5)  and  SEARCH_OUT(4) and                     SEARCH_OUT(3)  and SEARCH_OUT(2)  and SEARCH_OUT(1)  and  SEARCH_OUT(0));CHIP_AA_OUT 	<=  ALL_ACTIVE;CHIP_EN 	<= CHIP_EN_BAK;--------------------------------------------------------------------------------end beh;--------------------------------------------------------------------------------

⌨️ 快捷键说明

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