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

📄 search.vhd

📁 破解des算法的程序
💻 VHD
📖 第 1 页 / 共 2 页
字号:
        WR1B <= '1';        WR_STROBEB <= '1';elsif CLK'event and CLK = '1' then        WR_STROBEB <= WR1B;        WR1B <= WRB;end if;end process WRITE_STROBE_PR;--------------------------------------------------------------------------------KEY_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif (RST_N = '0')then        KEY <= (others => '0');elsif CLK'event and CLK = '1' then        if (WR1B = '0'and ADDR_KEY(0) = '1') then                KEY(7  downto  0) <= DATAI;        elsif (PRE_DONE = '1') then                KEY(7  downto 0) <= D_KEY(7  downto 0);        end if;-----        if (WR1B = '0'and ADDR_KEY(1) = '1') then                KEY(15 downto  8) <= DATAI;        elsif (PRE_DONE = '1') then                KEY(15 downto  8) <= D_KEY(15 downto  8);        end if;-----        if (WR1B = '0'and ADDR_KEY(2) = '1') then                KEY(23 downto 16) <= DATAI;        elsif (PRE_DONE = '1') then                KEY(23 downto 16) <= D_KEY(23 downto 16);        end if;-----        if (WR1B = '0'and ADDR_KEY(3) = '1') then                KEY(31 downto 24) <= DATAI;        elsif (PRE_DONE = '1') then                KEY(31 downto 24) <= D_KEY(31 downto 24);        end if;-----        if (WR1B = '0'and ADDR_KEY(4) = '1') then                KEY(39 downto 32) <= DATAI;        end if;-----        if (WR1B = '0'and ADDR_KEY(5) = '1') then                KEY(47 downto 40) <= DATAI;        end if;-----        if (WR1B = '0'and ADDR_KEY(6) = '1') then                KEY(55 downto 48) <= DATAI;        end if;end if;end process KEY_PR;--------------------------------------------------------------------------------READ_KEY_PR: process(ADDR_KEY, RDB, KEY)--------------------------------------------------------------------------------beginif (RDB = '0') then	if (ADDR_KEY(0) = '1') then	DATAO <= KEY(7  downto  0) ;	elsif (ADDR_KEY(1) = '1') then	DATAO <= KEY(15 downto  8) ;	elsif (ADDR_KEY(2) = '1') then	DATAO <= KEY(23 downto 16) ;	elsif (ADDR_KEY(3) = '1') then	DATAO <= KEY(31 downto 24) ;	elsif (ADDR_KEY(4) = '1') then	DATAO <= KEY(39 downto 32) ;	elsif (ADDR_KEY(5) = '1') then	DATAO <= KEY(47 downto 40) ;	elsif (ADDR_KEY(6) = '1') then	DATAO <= KEY(55 downto 48) ;	else	DATAO <= (others  => 'Z');	end if;else	DATAO <= (others  => 'Z');end if;end process READ_KEY_PR;--------------------------------------------------------------------------------KEY_ALU_PR: process(KEY_DECR,KEY_INCR,KEY)--------------------------------------------------------------------------------beginif (KEY_INCR = '1') and (KEY_DECR = '0')then	D_KEY <= KEY(31 downto 0) + 1;elsif (KEY_DECR = '1')  and (KEY_INCR = '0') then	D_KEY <= KEY(31 downto 0) - 1;else	D_KEY <= KEY(31 downto 0);end if;end process KEY_ALU_PR;--------------------------------------------------------------------------------EXTRA_XOR_PR: process(PT_XOR_MASK,EXTRA_SELECT, DES_OUT, C0)--------------------------------------------------------------------------------begincase EXTRA_SELECT iswhen "000" =>         EXTRA_XOR_OUT <= DES_OUT xor PT_XOR_MASK;when "001" =>         EXTRA_XOR_OUT <= DES_OUT xor PT_XOR_MASK;when "010" =>         EXTRA_XOR_OUT <= ((DES_OUT(63 downto 56)  xor DES_OUT(31 downto 24)) &			  (DES_OUT(55 downto 48)  xor DES_OUT(23 downto 16)) &			  (DES_OUT(47 downto 40)  xor DES_OUT(15 downto  8)) &			  (DES_OUT(39 downto 32)  xor DES_OUT( 7 downto  0)) &			   DES_OUT(31 downto  0)) xor PT_XOR_MASK; -----------------------------when "101" =>         EXTRA_XOR_OUT <= DES_OUT xor C0;when "110" =>         EXTRA_XOR_OUT <= (DES_OUT(63 downto 56) xor DES_OUT(31 downto 24)) &			 (DES_OUT(55 downto 48) xor DES_OUT(23 downto 16)) &			 (DES_OUT(47 downto 40) xor DES_OUT(15 downto  8)) &			 (DES_OUT(39 downto 32) xor DES_OUT( 7 downto  0)) &			 DES_OUT(31 downto  0) ; when others => 	EXTRA_XOR_OUT <= DES_OUT;end case;end process EXTRA_XOR_PR;EXTRA_SELECT <= SELECT1_DLY & EXTRA_XOR & USE_CBC;--EXTRA_SELECT <= SELECT1 & EXTRA_XOR & USE_CBC;--------------------------------------------------------------------------------STARTDES_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then	STARTDES <= '0';elsif CLK'event and CLK = '1' then--	STARTDES <= DONE or LOAD;  --  17 clocks	STARTDES <= PRE_DONE or LOAD;  --  16 clocksend if;end process STARTDES_PR;--------------------------------------------------------------------------------KEY_INCR_DECR_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then	KEY_INCR <= '0';	KEY_DECR <= '0';elsif CLK'event and CLK = '1' then--KEY_INCR  <=  (CNT_GT_10 and not(DONE) and SEARCHING_DLY) and (	not(MATCH)  or  --- normal case	SELECT1 or  	--- false match	FIRST_DES);KEY_DECR <= 	(CNT_GT_10 and not(DONE) and SEARCHING_DLY) and  --timing		(MATCH and not(SELECT1))  -- only backup if match on C0		and not(FIRST_DES);  end if;end process KEY_INCR_DECR_PR;FALSE_MATCH  <= '1' when (MATCH_DLY_CYCLE2 = '1') and (MATCH = '0') and (SEARCHING_DLY = '1')			else '0';----------------------------------------------------- timing block, sensitive to START  -----------------------------------------------------------PRE_DONE <= '1' when (CNT = "01111") else '0';RESET_SEARCHING <= '1' when (CNT = "01100") else '0';CNT_EQ_1  <= '1' when (CNT = 1 ) else '0';CNT_LE_10 <= '1' when (CNT > 1 and CNT < 10) else '0';CNT_EQ_10 <= '1' when (CNT = 10) else '0';CNT_GT_10 <= '1' when (CNT > 10) else '0';--------------------------------------------------------------------------------SEARCHING_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then        SEARCHING <= '0';        SEARCHING_DLY <= '0';        CLEAR_SEARCH        <= '0';elsif CLK'event and CLK = '1' then        SEARCHING_DLY <= SEARCHING;--------------- search active -------------------	if ((LOAD = '1') or (SEARCHING = '1')) then		SEARCHING  <= '1';	end if;--------------- found C1 ------------------------	if (CLEAR_SEARCH_BAK = '1') then		SEARCHING  <= '0';	end if;---------------	CLEAR_SEARCH        <= CLEAR_SEARCH_BAK;end if; end process SEARCHING_PR;	CHECK_SAME_KEY <= '1' when (KEY(1 downto 0) = KEY_ODD_DLY2) else '0';--------------------------------------------------------------------------------SELECT1_PR: process(RST_N,CLK)--------------------------------------------------------------------------------beginif RST_N = '0' then        SELECT1 <= '1';elsif CLK'event and CLK = '1' then--------------- found C0, look for C1  ----------	if ((MATCH = '1') and (SELECT1 = '0') and (PRE_DONE = '1'))  then		SELECT1  <= '1';	end if;--------------- Restart by PC or C1 is not a match ----------	if  -- (LOAD = '1')  or  	((SELECT1 = '1') and (PRE_DONE = '1') and (SEARCHING_DLY = '1')) then		SELECT1  <= '0';	end if;---------------	if (PRE_DONE = '1') then		SELECT1_DLY <= SELECT1 ;	end if;end if; end process SELECT1_PR;--------------------------------------------------------------------------------SEARCH_OUT 	<= SEARCHING;LOAD 		<= SEARCH_DLY1 and PRE_DONE and not(SEARCH_DLY2); -- 17 clocksFIRST_DES 	<= SEARCH_DLY2 and not(SEARCH_DLY3); CLEAR_SEARCH_BAK 	<= 		'1' when ((MATCH = '1') and (SELECT1 = '0')                 and (SELECT1_DLY = '1') and (RESET_SEARCHING = '1') 		and (SEARCHING = '1')) else '0';SELECT_ONE	<= SELECT1; KEY_OUT 	<= KEY; DES_OUTPUT	<= DES_OUT;-- MATCH_OUT	<= MATCH;--------------------------------------------------------------------------------end beh;--------------------------------------------------------------------------------

⌨️ 快捷键说明

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