📄 inverter.vhd
字号:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY rc5_enc_inv ISPORT( clr:IN STD_LOGIC; clk:IN STD_LOGIC; din:IN STD_LOGIC_VECTOR(63 DOWNTO 0); dout:OUT STD_LOGIC_VECTOR(63 DOWNTO 0); di_vld:IN STD_LOGIC; do_rdy:OUT STD_LOGIC);END rc5_enc_inv;ARCHITECTURE rtl OF rc5_enc_inv IS SIGNAL i_cnt:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ab_xor:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL a_rot:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL a:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL a_post:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL a_reg:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL ba_xor:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL b_rot:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL b:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL b_post:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL b_reg:STD_LOGIC_VECTOR(31 DOWNTO 0);TYPE rom IS ARRAY (0 TO 25) OF STD_LOGIC_VECTOR(31 DOWNTO 0);CONSTANT skey : rom:=rom'(X"9BBBD8C8", X"1A37F7FB", X"46F8E8C5", X"460C6085", X"70F83B8A", X"284B8303", X"513E1454", X"F621ED22", X"3125065D", X"11A83A5D", X"D427686B", X"713AD82D", X"4B792F99", X"2799A4DD", X"A7901C49", X"DEDE871A", X"36C03196", X"A7EFC249", X"61A78BB8", X"3B0A1D2B", X"4DBFCA76", X"AE162167", X"30D76B0A", X"43192304", X"F6CC1431", X"65046380");TYPE StateType IS (ST_IDLE,ST_ROUND,ST_POST_ROUND,ST_READY);SIGNAL state:StateType;BEGIN-- B = ((B - S[2i +1]) >>> A) xor A;; ab_xor <= b_reg - skey(CONV_INTEGER(i_cnt & '1')); ----b-S[2i+1] WITH a_reg(4 DOWNTO 0) SELECT b_rot<=ab_xor(0) & ab_xor(31 DOWNTO 1) WHEN "00001", ab_xor(1 DOWNTO 0) & ab_xor(31 DOWNTO 2) WHEN "00010", ab_xor(2 DOWNTO 0) & ab_xor(31 DOWNTO 3) WHEN "00011", ab_xor(3 DOWNTO 0) & ab_xor(31 DOWNTO 4) WHEN "00100", ab_xor(4 DOWNTO 0) & ab_xor(31 DOWNTO 5) WHEN "00101", ab_xor(5 DOWNTO 0) & ab_xor(31 DOWNTO 6) WHEN "00110", ab_xor(6 DOWNTO 0) & ab_xor(31 DOWNTO 7) WHEN "00111", ab_xor(7 DOWNTO 0) & ab_xor(31 DOWNTO 8) WHEN "01000", ab_xor(8 DOWNTO 0) & ab_xor(31 DOWNTO 9) WHEN "01001", ab_xor(9 DOWNTO 0) & ab_xor(31 DOWNTO 10) WHEN "01010", ab_xor(10 DOWNTO 0) & ab_xor(31 DOWNTO 11) WHEN "01011", ab_xor(11 DOWNTO 0) & ab_xor(31 DOWNTO 12) WHEN "01100", ab_xor(12 DOWNTO 0) & ab_xor(31 DOWNTO 13) WHEN "01101", ab_xor(13 DOWNTO 0) & ab_xor(31 DOWNTO 14) WHEN "01110", ab_xor(14 DOWNTO 0) & ab_xor(31 DOWNTO 15) WHEN "01111", ab_xor(15 DOWNTO 0) & ab_xor(31 DOWNTO 16) WHEN "10000", ab_xor(16 DOWNTO 0) & ab_xor(31 DOWNTO 17) WHEN "10001", ab_xor(17 DOWNTO 0) & ab_xor(31 DOWNTO 18) WHEN "10010", ab_xor(18 DOWNTO 0) & ab_xor(31 DOWNTO 19) WHEN "10011", ab_xor(19 DOWNTO 0) & ab_xor(31 DOWNTO 20) WHEN "10100", ab_xor(20 DOWNTO 0) & ab_xor(31 DOWNTO 21) WHEN "10101", ab_xor(21 DOWNTO 0) & ab_xor(31 DOWNTO 22) WHEN "10110", ab_xor(22 DOWNTO 0) & ab_xor(31 DOWNTO 23) WHEN "10111", ab_xor(23 DOWNTO 0) & ab_xor(31 DOWNTO 24) WHEN "11000", ab_xor(24 DOWNTO 0) & ab_xor(31 DOWNTO 25) WHEN "11001", ab_xor(25 DOWNTO 0) & ab_xor(31 DOWNTO 26) WHEN "11010", ab_xor(26 DOWNTO 0) & ab_xor(31 DOWNTO 27) WHEN "11011", ab_xor(27 DOWNTO 0) & ab_xor(31 DOWNTO 28) WHEN "11100", ab_xor(28 DOWNTO 0) & ab_xor(31 DOWNTO 29) WHEN "11101", ab_xor(29 DOWNTO 0) & ab_xor(31 DOWNTO 30) WHEN "11110", ab_xor(30 DOWNTO 0) & ab_xor(31) WHEN "11111", ab_xor WHEN OTHERS; b<=b_rot XOR a_reg;--A = ((A - S[2i]) >>> B) xor B; ba_xor <= a_reg - skey(CONV_INTEGER(i_cnt & '0'));---a-S[2i] WITH b(4 DOWNTO 0) SELECT a_rot<=ba_xor(0) & ba_xor(31 DOWNTO 1) WHEN "00001", ba_xor(1 DOWNTO 0) & ba_xor(31 DOWNTO 2) WHEN "00010", ba_xor(2 DOWNTO 0) & ba_xor(31 DOWNTO 3) WHEN "00011", ba_xor(3 DOWNTO 0) & ba_xor(31 DOWNTO 4) WHEN "00100", ba_xor(4 DOWNTO 0) & ba_xor(31 DOWNTO 5) WHEN "00101", ba_xor(5 DOWNTO 0) & ba_xor(31 DOWNTO 6) WHEN "00110", ba_xor(6 DOWNTO 0) & ba_xor(31 DOWNTO 7) WHEN "00111", ba_xor(7 DOWNTO 0) & ba_xor(31 DOWNTO 8) WHEN "01000", ba_xor(8 DOWNTO 0) & ba_xor(31 DOWNTO 9) WHEN "01001", ba_xor(9 DOWNTO 0) & ba_xor(31 DOWNTO 10) WHEN "01010", ba_xor(10 DOWNTO 0) & ba_xor(31 DOWNTO 11) WHEN "01011", ba_xor(11 DOWNTO 0) & ba_xor(31 DOWNTO 12) WHEN "01100", ba_xor(12 DOWNTO 0) & ba_xor(31 DOWNTO 13) WHEN "01101", ba_xor(13 DOWNTO 0) & ba_xor(31 DOWNTO 14) WHEN "01110", ba_xor(14 DOWNTO 0) & ba_xor(31 DOWNTO 15) WHEN "01111", ba_xor(15 DOWNTO 0) & ba_xor(31 DOWNTO 16) WHEN "10000", ba_xor(16 DOWNTO 0) & ba_xor(31 DOWNTO 17) WHEN "10001", ba_xor(17 DOWNTO 0) & ba_xor(31 DOWNTO 18) WHEN "10010", ba_xor(18 DOWNTO 0) & ba_xor(31 DOWNTO 19) WHEN "10011", ba_xor(19 DOWNTO 0) & ba_xor(31 DOWNTO 20) WHEN "10100", ba_xor(20 DOWNTO 0) & ba_xor(31 DOWNTO 21) WHEN "10101", ba_xor(21 DOWNTO 0) & ba_xor(31 DOWNTO 22) WHEN "10110", ba_xor(22 DOWNTO 0) & ba_xor(31 DOWNTO 23) WHEN "10111", ba_xor(23 DOWNTO 0) & ba_xor(31 DOWNTO 24) WHEN "11000", ba_xor(24 DOWNTO 0) & ba_xor(31 DOWNTO 25) WHEN "11001", ba_xor(25 DOWNTO 0) & ba_xor(31 DOWNTO 26) WHEN "11010", ba_xor(26 DOWNTO 0) & ba_xor(31 DOWNTO 27) WHEN "11011", ba_xor(27 DOWNTO 0) & ba_xor(31 DOWNTO 28) WHEN "11100", ba_xor(28 DOWNTO 0) & ba_xor(31 DOWNTO 29) WHEN "11101", ba_xor(29 DOWNTO 0) & ba_xor(31 DOWNTO 30) WHEN "11110", ba_xor(30 DOWNTO 0) & ba_xor(31) WHEN "11111", ba_xor WHEN OTHERS; a<=a_rot XOR b; a_post <= a_reg - skey(0); b_post<=b_reg - skey(1); -- b = b[0] - S[1] PROCESS(clr, clk) BEGIN IF(clr='0') THEN a_reg<= din(63 DOWNTO 32); b_reg<= din(31 DOWNTO 0); ELSIF(clk'EVENT AND clk='1') THEN IF(state=ST_POST_ROUND) THEN a_reg<=a_post;b_reg<=b_post; ELSIF(state=ST_ROUND) THEN a_reg<=a;b_reg<=b; END IF; END IF; END PROCESS; PROCESS(clr, clk) BEGIN IF(clr='0') THEN state<=ST_IDLE; ELSIF(clk'EVENT AND clk='1') THEN CASE state IS WHEN ST_IDLE=> IF(di_vld='1') THEN state<=ST_ROUND; END IF; WHEN ST_ROUND=> IF(i_cnt="0001") THEN state<=ST_POST_ROUND; END IF; WHEN ST_POST_ROUND=> state<=ST_READY; WHEN ST_READY=> state<=ST_IDLE; END CASE; END IF; END PROCESS;-- round counter PROCESS(clr, clk) BEGIN IF(clr='0') THEN i_cnt<="1100"; ELSIF(clk'EVENT AND clk='1') THEN IF(state=ST_ROUND) THEN IF(i_cnt="0001") THEN i_cnt<="1100"; ELSE i_cnt<=i_cnt-'1'; END IF; END IF; END IF; END PROCESS; dout<=a_reg & b_reg; WITH state SELECT do_rdy<='1' WHEN ST_READY, '0' WHEN OTHERS;END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -