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

📄 sbox.vhd

📁 DES加密算法的VHDL实现,采用流水线技术实现
💻 VHD
📖 第 1 页 / 共 2 页
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sbox is
port( rs : in  		std_logic_vector( 47 downto 0 ) ;
		so : out	std_logic_vector( 31 downto 0 )
	);
end entity sbox ;
architecture arch_sbox of sbox is
begin 
 
	--s-box1
with rs(47) & rs(42) & rs(46 downto 43) select
	--s-box1,line 0
	so(31 downto 28) <= "1110"	when "000000" ,--14
						"0100"		when "000001" ,--4
						"1101"		when "000010" ,--13
						"0001"		when "000011" ,--1
						"0010"		when "000100" ,--2
						"1111"		when "000101" ,--15
						"1011"		when "000110" ,--11
						"1000"		when "000111" ,--8
						"0011"		when "001000" ,--3
						"1010"		when "001001" ,--10
						"0110"		when "001010" ,--6
						"1100"		when "001011" ,--12
						"0101"		when "001100" ,--5
						"1001"		when "001101" ,--9
						"0000"		when "001110" ,--0
						"0111"		when "001111" ,--7
								
	--s-box1,line 1
						"0000"		when "010000" ,--0
						"1111"		when "010001" ,--15
						"0111"		when "010010" ,--7
						"0100"		when "010011" ,--4
						"1110"		when "010100" ,--14
						"0010"		when "010101" ,--2
						"1101"		when "010110" ,--13
						"0001"		when "010111" ,--1
						"1010"		when "011000" ,--10
						"0110"		when "011001" ,--6
						"1100"		when "011010" ,--12
						"1011"		when "011011" ,--11
						"1001"		when "011100" ,--9
						"0101"		when "011101" ,--5
						"0011"		when "011110" ,--3
						"1000"		when "011111" ,--8
								
	--s-box1,line 2
						"0100"		when "100000" ,--4
						"0001"		when "100001" ,--1
						"1110"		when "100010" ,--14
						"1000"		when "100011" ,--8
						"1101"		when "100100" ,--13
						"0110"		when "100101" ,--6
						"0010"		when "100110" ,--2
						"1011"		when "100111" ,--11
						"1111"		when "101000" ,--15
						"1100"		when "101001" ,--12
						"1001"		when "101010" ,--9
						"0111"		when "101011" ,--7
						"0011"		when "101100" ,--3
						"1010"		when "101101" ,--10
						"0101"		when "101110" ,--5
						"0000"		when "101111" ,--0
	--s-box1,line 3
						"1111"		when "110000" ,--15
						"1100"		when "110001" ,--12
						"1000"		when "110010" ,--8
						"0010"		when "110011" ,--2
						"0100"		when "110100" ,--4
						"1001"		when "110101" ,--9
						"0001"		when "110110" ,--1
						"0111"		when "110111" ,--7
						"0101"		when "111000" ,--5
						"1011"		when "111001" ,--11
						"0011"		when "111010" ,--3
						"1110"		when "111011" ,--14
						"1010"		when "111100" ,--10
						"0000"		when "111101" ,--0
						"0110"		when "111110" ,--6
						"1101"		when "111111" ,--13
						null		when others ;
							
--s-box2
with rs( 41 ) & rs( 36 ) & rs( 40 downto 37 ) select
	--s-box2,line 0
	so(27 downto 24) <= "1111"		when "000000" ,--15
						"0001"		when "000001" ,--1
						"1000"		when "000010" ,--8
						"1110"		when "000011" ,--14
						"0110"		when "000100" ,--6
						"1011"		when "000101" ,--11
						"0011"		when "000110" ,--3
						"0100"		when "000111" ,--4
						"1001"		when "001000" ,--9
						"0111"		when "001001" ,--7
						"0010"		when "001010" ,--2
						"1101"		when "001011" ,--13
						"1100"		when "001100" ,--12
						"0000"		when "001101" ,--0
						"0101"		when "001110" ,--5
						"1010"		when "001111" ,--10
	--s-box2,line 1
						"0011"		when "010000" ,--3
						"1101"		when "010001" ,--13
						"0100"		when "010010" ,--4
						"0111"		when "010011" ,--7
						"1111"		when "010100" ,--15
						"0010"		when "010101" ,--2
						"1000"		when "010110" ,--8
						"1110"		when "010111" ,--14
						"1100"		when "011000" ,--12
						"0000"		when "011001" ,--0
						"0001"		when "011010" ,--1
						"1010"		when "011011" ,--10
						"0110"		when "011100" ,--6
						"1001"		when "011101" ,--9
						"1011"		when "011110" ,--11
						"0101"		when "011111" ,--5
	--s-box2,line 2
						"0000"		when "100000" ,--0
						"1110"		when "100001" ,--14
						"0111"		when "100010" ,--7
	                    "1011"      when "100011" ,--11
	                    "1010"      when "100100" ,--10
	                    "0100"      when "100101" ,--4
	                    "1101"      when "100110" ,--13
	                    "0001"      when "100111" ,--1
	                    "0101"      when "101000" ,--5
	                    "1000"      when "101001" ,--8
	                    "1100"      when "101010" ,--12
	                    "0110"      when "101011" ,--6
	                    "1001"      when "101100" ,--9
	                    "0011"      when "101101" ,--3
	                    "0010"      when "101110" ,--2
	                    "1111"      when "101111" ,--15
	--s-box2,line 3
	                    "1101"        when "110000" ,--13
	                    "1000"        when "110001" ,--8
	                    "1010"        when "110010" ,--10
	                    "0001"        when "110011" ,--1
	                    "0011"        when "110100" ,--3
	                    "1111"        when "110101" ,--15
	                    "0100"        when "110110" ,--4
	                    "0010"        when "110111" ,--2
	                    "1011"        when "111000" ,--11
	                    "0110"        when "111001" ,--6
	                    "0111"        when "111010" ,--7
	                    "1100"        when "111011" ,--12
	                    "0000"        when "111100" ,--0
	                    "0101"        when "111101" ,--5
	                    "1110"        when "111110" ,--14
	                    "1001"        when "111111" ,--9
	                     null         when others ;

--s-box3
with rs( 35 ) & rs( 30 ) & rs( 34 downto 31 ) select
	--s-box3,line 0
	so(23 downto 20) <= "1010"        when "000000" ,--10
	                    "0000"        when "000001" ,--0
	                    "1001"        when "000010" ,--9
	                    "1110"        when "000011" ,--14
	                    "0110"        when "000100" ,--6
	                    "0011"        when "000101" ,--3
	                    "1111"        when "000110" ,--15
	                    "0101"        when "000111" ,--5
	                    "0001"        when "001000" ,--1
	                    "1101"        when "001001" ,--13
	                    "1100"        when "001010" ,--12
	                    "0111"        when "001011" ,--7
	                    "1011"        when "001100" ,--11
	                    "0100"        when "001101" ,--4
	                    "0010"        when "001110" ,--2
	                    "1000"        when "001111" ,--8
	--s-box3,line 1
	                    "1101"        when "010000" ,--13
	                    "0111"        when "010001" ,--7
	                    "0000"        when "010010" ,--0
	                    "1001"        when "010011" ,--9
	                    "0011"        when "010100" ,--3
	                    "0100"        when "010101" ,--4
	                    "0110"        when "010110" ,--6
	                    "1010"        when "010111" ,--10
	                    "0010"        when "011000" ,--2
	                    "1000"        when "011001" ,--8
	                    "0101"        when "011010" ,--5
	                    "1110"        when "011011" ,--14
						"1100"		  when "011100" ,--12
						"1011"		  when "011101" ,--11
						"1111"		  when "011110" ,--15
						"0001"		  when "011111" ,--1
	--s-box3,line 2
						"1101"		when "100000" ,--13
						"0110"		when "100001" ,--6
						"0100"		when "100010" ,--4
						"1001"		when "100011" ,--9
						"1000"		when "100100" ,--8
						"1111"		when "100101" ,--15
						"0011"		when "100110" ,--3
						"0000"		when "100111" ,--0
						"1011"		when "101000" ,--11
						"0001"		when "101001" ,--1
						"0010"		when "101010" ,--2
						"1100"		when "101011" ,--12
						"0101"		when "101100" ,--5
						"1010"		when "101101" ,--10
						"1110"		when "101110" ,--14
						"0111"		when "101111" ,--7
	--s-box3,line 3
						"0001"		when "110000" ,--1
						"1010"		when "110001" ,--10
						"1101"		when "110010" ,--13
						"0000"		when "110011" ,--0
						"0110"		when "110100" ,--6
						"1001"		when "110101" ,--9
						"1000"		when "110110" ,--8
						"0111"		when "110111" ,--7
						"0100"		when "111000" ,--4
						"1111"		when "111001" ,--15
						"1110"		when "111010" ,--14
						"0011"		when "111011" ,--3
						"1011"		when "111100" ,--11
						"0101"		when "111101" ,--5
						"0010"		when "111110" ,--2
						"1100"		when "111111" ,--12
						null		when others ;
						
--s-box4
with rs( 29 ) & rs( 24 ) & rs( 28 downto 25 ) select
	--s-box4,line 0
	so(19 downto 16) <= "0111"		when "000000" ,--7
						"1101"		when "000001" ,--13
						"1110"		when "000010" ,--14
						"0011"		when "000011" ,--3
						"0000"		when "000100" ,--0
						"0110"		when "000101" ,--6
						"1001"		when "000110" ,--9
						"1010"		when "000111" ,--10
						"0001"		when "001000" ,--1
						"0010"		when "001001" ,--2
						"1000"		when "001010" ,--8
						"0101"		when "001011" ,--5
						"1011"		when "001100" ,--11
						"1100"		when "001101" ,--12
						"0100"		when "001110" ,--4
						"1111"		when "001111" ,--15
	--s-box4,line 1
						"1101"		when "010000" ,--13
						"1000"		when "010001" ,--8
						"1011"		when "010010" ,--11
						"0101"		when "010011" ,--5
						"0110"		when "010100" ,--6
						"1111"		when "010101" ,--15
						"0000"		when "010110" ,--0
						"0011"		when "010111" ,--3
						"0100"		when "011000" ,--4
						"0111"		when "011001" ,--7
						"0010"		when "011010" ,--2
						"1100"		when "011011" ,--12
						"0001"		when "011100" ,--1
						"1010"		when "011101" ,--10
						"1110"		when "011110" ,--14
						"1001"		when "011111" ,--9
	--s-box4,line 2
						"1010"		when "100000" ,--10
						"0110"		when "100001" ,--6
						"1001"		when "100010" ,--9
						"0000"		when "100011" ,--0
						"1100"		when "100100" ,--12
						"1011"		when "100101" ,--11
						"0111"		when "100110" ,--7
						"1101"		when "100111" ,--13
						"1111"		when "101000" ,--15
						"0001"		when "101001" ,--1
						"0011"		when "101010" ,--3
						"1110"		when "101011" ,--14
						"0101"		when "101100" ,--5
						"0010"		when "101101" ,--2
						"1000"		when "101110" ,--8
						"0100"		when "101111" ,--4
	--s-box4,line 3
						"0011"		when "110000" ,--3
						"1111"		when "110001" ,--15
						"0000"		when "110010" ,--0
						"0110"		when "110011" ,--6
						"1010"		when "110100" ,--10
						"0001"		when "110101" ,--1
						"1101"		when "110110" ,--13
						"1000"		when "110111" ,--8
						"1001"		when "111000" ,--9
						"0100"		when "111001" ,--4
						"0101"		when "111010" ,--5
						"1011"		when "111011" ,--11
						"1100"		when "111100" ,--12

⌨️ 快捷键说明

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