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

📄 search.vhd

📁 破解des算法的程序
💻 VHD
📖 第 1 页 / 共 2 页
字号:
---------|---------|---------|---------|---------|---------|---------|---------|-- Author          :  Tom Vu                                     -- Date            :  09/07/97                                  -- Description	   :  Search Unit--------------------------------------------------------------------------------library ieee;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;--------------------------------------------------------------------------------entity SEARCH_UNIT isport(   CLK             : in     std_logic;        RST_N           : in     std_logic;        WRB             : in     std_logic;        RDB             : in     std_logic;        SEARCH          : in     std_logic;        EXTRA_XOR       : in     std_logic;        USE_CBC       	: in     std_logic;        ADDR_KEY        : in     std_logic_vector(6  downto 0);        DATAI       	: in  	 std_logic_vector(7 downto 0);        PT_BYTE_MASK   	: in  	 std_logic_vector(7 downto 0);        PT_XOR_MASK   	: in  	 std_logic_vector(63 downto 0);        PT_VECTOR       : in     std_logic_vector(255 downto 0);        C0              : in     std_logic_vector(63 downto 0);        C1              : in     std_logic_vector(63 downto 0);        KEY_OUT         : out     std_logic_vector(55 downto 0);        DES_OUTPUT      : out     std_logic_vector(63 downto 0);--       MATCH_OUT 	: out     std_logic;        SELECT_ONE 	: out     std_logic;        SEARCH_OUT 	: out     std_logic;        CLEAR_SEARCH 	: out     std_logic;        DATAO        	: out    std_logic_vector(7 downto 0)    );end SEARCH_UNIT;--------------------------------------------------------------------------------architecture beh of SEARCH_UNIT is--------------------------------------------------------------------------------type DATA8_ARRAY is array(7 downto 0) of std_logic_vector(7 downto 0);signal MESSAGE   	: std_logic_vector(63 downto 0);signal IP_KEY   	: std_logic_vector(63 downto 0);signal DES_OUT   	: std_logic_vector(63 downto 0);signal EXTRA_XOR_OUT   	: std_logic_vector(63 downto 0);signal SHIFT_REG   	: DATA8_ARRAY;signal KEY 		: std_logic_vector(55 downto 0);signal D_KEY 		: std_logic_vector(31 downto 0);signal MESG_LEFT 	: std_logic_vector(31 downto 0);signal CNT		: std_logic_vector(4 downto 0);signal BIT_SHIFT_REG 	: std_logic_vector(7  downto 0);signal TEMP_VECTOR 	: std_logic_vector(3  downto 0);signal WR1B 		: std_logic;signal WR_STROBEB	: std_logic;signal DONE 		: std_logic;signal STARTDES 	: std_logic;signal MATCH 		: std_logic;signal MATCH_DLY_CYCLE1	: std_logic;signal MATCH_DLY_CYCLE2	: std_logic;signal FALSE_MATCH	: std_logic;signal SEARCH_DLY1 	: std_logic;signal SEARCH_DLY2 	: std_logic;signal SEARCH_DLY3 	: std_logic;signal SEARCHING 	: std_logic;signal SEARCHING_DLY 	: std_logic;signal LOAD 		: std_logic;signal FIRST_TIME1 	: std_logic;signal FIRST_TIME2 	: std_logic;signal FIRST_LOAD 	: std_logic;signal SELECT1 		: std_logic;signal SELECT1_DLY	: std_logic;signal KEY_ODD_DLY1	: std_logic_vector(1  downto 0);signal KEY_ODD_DLY2	: std_logic_vector(1  downto 0);signal CHECK_SAME_KEY	: std_logic;signal KEY_INCR		: std_logic;signal KEY_DECR		: std_logic;signal PRE_DONE		: std_logic;signal CNT_EQ_1		: std_logic;signal CNT_GT_10	: std_logic;signal CNT_EQ_10	: std_logic;signal CNT_LE_10	: std_logic;signal FIRST_DES	: std_logic;signal RESET_SEARCHING	: std_logic;signal CLEAR_SEARCH_BAK     : std_logic;signal EXTRA_SELECT	: std_logic_vector(2 downto 0);signal BIT_MUX		: std_logic;component DESport(   CLK             : in     std_logic;        RST_N           : in     std_logic;        START           : in     std_logic;        MESSAGE         : in     std_logic_vector(63 downto 0);        KEY             : in     std_logic_vector(55 downto 0);        DONE            : out     std_logic;        CNT         	: out     std_logic_vector(4 downto 0);        DES_OUT         : out    std_logic_vector(63 downto 0)    );end component;component MUX256port(           SHIFT_OUT       : in     std_logic_vector(7 downto 0);        PT_VECTOR       : in     std_logic_vector(255 downto 0);        BIT_MUX         : out     std_logic    );end component;beginM256: MUX256port map(   	SHIFT_OUT   	=> SHIFT_REG(7),	        PT_VECTOR   	=> PT_VECTOR,      	 	BIT_MUX  	=> BIT_MUX    );DES1: DESport map(   	CLK             => CLK,        	RST_N           => RST_N,	        START           => STARTDES,      	 	MESSAGE         => MESSAGE,      		KEY             => KEY,        	DONE            => DONE,        	CNT         	=> CNT,        	DES_OUT         => DES_OUT    );MESSAGE 	<= C0 when (SELECT1 = '0') else C1;--------------------------------------------------------------------------------PCSETSEARCH_PR: process(RST_N,CLK)--------------------------------------------------------------------------------begin   if RST_N = '0' then        FIRST_TIME1 <= '0';        FIRST_TIME2 <= '0';        SEARCH_DLY1 <= '0';        SEARCH_DLY2 <= '0';        SEARCH_DLY3 <= '0';	for i in 0 to 7 loop        SHIFT_REG(i) <= (others => '0');	end loop;elsif CLK'event and CLK = '1' then	        FIRST_TIME2 <= FIRST_TIME1;	if (DONE = '1') then		if (SEARCH = '1') then       	 	FIRST_TIME1 <= '1';		end if;        SEARCH_DLY1 <= SEARCH;        SEARCH_DLY2 <= SEARCH_DLY1 ;        SEARCH_DLY3 <= SEARCH_DLY2 ;	end if;	if (CNT_EQ_1 = '1') then		SHIFT_REG(7) <= EXTRA_XOR_OUT(63 downto 56);		SHIFT_REG(6) <= EXTRA_XOR_OUT(55 downto 48);		SHIFT_REG(5) <= EXTRA_XOR_OUT(47 downto 40);		SHIFT_REG(4) <= EXTRA_XOR_OUT(39 downto 32);		SHIFT_REG(3) <= EXTRA_XOR_OUT(31 downto 24);		SHIFT_REG(2) <= EXTRA_XOR_OUT(23 downto 16);		SHIFT_REG(1) <= EXTRA_XOR_OUT(15 downto  8);		SHIFT_REG(0) <= EXTRA_XOR_OUT( 7 downto  0);	else		for i in 0 to 6 loop		SHIFT_REG(i+1) <= SHIFT_REG(i);				end loop;	end if;end if;   end process PCSETSEARCH_PR;------------------------------------------------------------------------------------ Use to clear away invalid matches before PC loads   -----------------------FIRST_LOAD <= FIRST_TIME1 and not(FIRST_TIME2);--------------------------------------------------------------------------------BIT_SHIFT_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then	BIT_SHIFT_REG <= (others => '1');elsif CLK'event and CLK = '1' then-------	 SHIFT --------------------------	if (CNT_LE_10 = '1') then		for i in 0 to 6 loop		BIT_SHIFT_REG(i+1) <= BIT_SHIFT_REG(i);				end loop;		BIT_SHIFT_REG(0) <= BIT_MUX;	end if;-------	end if;end process BIT_SHIFT_PR;--------------------------------------------------------------------------------MATCH_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then        MATCH <= '0'; 	MATCH_DLY_CYCLE1 <= '0'; 	MATCH_DLY_CYCLE2 <= '0'; 	KEY_ODD_DLY1     <= "00"; 	KEY_ODD_DLY2     <= "00";elsif CLK'event and CLK = '1' then	if (CNT = 10) then		if ((BIT_SHIFT_REG(0) = '1' or (PT_BYTE_MASK(0) = '1')) and		    (BIT_SHIFT_REG(1) = '1' or (PT_BYTE_MASK(1) = '1')) and		    (BIT_SHIFT_REG(2) = '1' or (PT_BYTE_MASK(2) = '1')) and		    (BIT_SHIFT_REG(3) = '1' or (PT_BYTE_MASK(3) = '1')) and		    (BIT_SHIFT_REG(4) = '1' or (PT_BYTE_MASK(4) = '1')) and		    (BIT_SHIFT_REG(5) = '1' or (PT_BYTE_MASK(5) = '1')) and		    (BIT_SHIFT_REG(6) = '1' or (PT_BYTE_MASK(6) = '1')) and		    (BIT_SHIFT_REG(7) = '1' or (PT_BYTE_MASK(7) = '1'))) then		MATCH <= '1';		else		MATCH <= '0';		end if;	end if;---------------------	if (FIRST_LOAD = '1') then		MATCH <= '0';	end if;---------------------	if (CNT = 10) then		MATCH_DLY_CYCLE2 <= MATCH_DLY_CYCLE1;		MATCH_DLY_CYCLE1 <= MATCH ;	end if;---------------------	if (PRE_DONE = '1') then	 	KEY_ODD_DLY2     <= KEY_ODD_DLY1; 		KEY_ODD_DLY1     <= KEY(1 downto 0);	end if;end if;end process MATCH_PR;--------------------------------------------------------------------------------WRITE_STROBE_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then

⌨️ 快捷键说明

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