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

📄 blowfish.vhdl

📁 blowfish vhdl version
💻 VHDL
📖 第 1 页 / 共 2 页
字号:
            if key_r_empty = '0' then              next_state <= S_KEY;            elsif i_data_r_empty = '0' and o_data_w_full = '0' then              next_state <= S_CIPHER;            end if;          end if;        when S_CIPHER =>          P_enc <= i_data_r_enc;          if cipher_en_o = '1' then            i_data_r_en <= '1';            o_data_w_en <= '1';            next_state  <= S_IDLE;          elsif cipher_busy = '0' then            cipher_en_i <= '1';          end if;        when S_KEY =>          next_state <= S_KEY_PARRAY_INIT;          next_count <= (others => '0');        when S_KEY_PARRAY_INIT =>          p_w_en     <= '1';          pcount     := to_integer(count(4 downto 0));          next_count <= count + 1;          case pcount is            when 0      => p_w_data_i <= x"243f6a88" xor key_r_data(447 downto 416);            when 1      => p_w_data_i <= x"85a308d3" xor key_r_data(415 downto 384);            when 2      => p_w_data_i <= x"13198a2e" xor key_r_data(383 downto 352);            when 3      => p_w_data_i <= x"03707344" xor key_r_data(351 downto 320);            when 4      => p_w_data_i <= x"a4093822" xor key_r_data(319 downto 288);            when 5      => p_w_data_i <= x"299f31d0" xor key_r_data(287 downto 256);            when 6      => p_w_data_i <= x"082efa98" xor key_r_data(255 downto 224);            when 7      => p_w_data_i <= x"ec4e6c89" xor key_r_data(223 downto 192);            when 8      => p_w_data_i <= x"452821e6" xor key_r_data(191 downto 160);            when 9      => p_w_data_i <= x"38d01377" xor key_r_data(159 downto 128);            when 10     => p_w_data_i <= x"be5466cf" xor key_r_data(127 downto 96);            when 11     => p_w_data_i <= x"34e90c6c" xor key_r_data(95 downto 64);            when 12     => p_w_data_i <= x"c0ac29b7" xor key_r_data(63 downto 32);            when 13     => p_w_data_i <= x"c97c50dd" xor key_r_data(31 downto 0);            when 14     => p_w_data_i <= x"3f84d5b5" xor key_r_data(447 downto 416);            when 15     => p_w_data_i <= x"b5470917" xor key_r_data(415 downto 384);            when 16     => p_w_data_i <= x"9216d5d9" xor key_r_data(383 downto 352);            when others => p_w_data_i <= x"8979fb1b" xor key_r_data(351 downto 320);                           cipher_p_init <= '1';                           next_state    <= S_KEY_SBOX_INIT;                           next_count    <= (others => '0');          end case;                  when S_KEY_SBOX_INIT =>          S1_w_en <= not count(9) and not count(8);          S2_w_en <= not count(9) and count(8);          S3_w_en <= count(9) and not count(8);          S4_w_en <= count(9) and count(8);          if count = 1023 then            next_state <= S_KEY_PARRAY_CIPHER;          end if;          next_count <= count + 1;        when S_KEY_PARRAY_CIPHER =>          if cipher_busy = '0' then            cipher_en_i <= '1';            if count = 0 then              cipher_data_i <= (others => '0');            else              cipher_data_i <= cipher_data_o;            end if;            next_state <= S_KEY_PARRAY_WRITE_HIGH;          end if;        when S_KEY_PARRAY_WRITE_HIGH =>          if cipher_en_o = '1' then            p_w_en     <= '1';            p_w_data_i <= cipher_data_o(63 downto 32);            next_state <= S_KEY_PARRAY_WRITE_LOW;            next_count <= count + 1;          end if;        when S_KEY_PARRAY_WRITE_LOW =>          p_w_en        <= '1';          p_w_data_i    <= cipher_data_o(31 downto 0);          next_state    <= S_KEY_PARRAY_CIPHER;          next_count    <= count + 1;          cipher_p_init <= '1';          if count = 17 then            next_state <= S_KEY_SBOX_CIPHER;            next_count <= (others => '0');          end if;        when S_KEY_SBOX_CIPHER =>          if cipher_busy = '0' then            cipher_en_i   <= '1';            cipher_data_i <= cipher_data_o;            next_state    <= S_KEY_SBOX_WRITE_HIGH;          end if;                  when S_KEY_SBOX_WRITE_HIGH =>          if cipher_en_o = '1' then            S1_w_en     <= not count(9) and not count(8);            S2_w_en     <= not count(9) and count(8);            S3_w_en     <= count(9) and not count(8);            S4_w_en     <= count(9) and count(8);            S1_w_data_i <= cipher_data_o(63 downto 32);            S2_w_data_i <= cipher_data_o(63 downto 32);            S3_w_data_i <= cipher_data_o(63 downto 32);            S4_w_data_i <= cipher_data_o(63 downto 32);            next_state  <= S_KEY_SBOX_WRITE_LOW;            next_count  <= count + 1;          end if;        when S_KEY_SBOX_WRITE_LOW =>          S1_w_en     <= not count(9) and not count(8);          S2_w_en     <= not count(9) and count(8);          S3_w_en     <= count(9) and not count(8);          S4_w_en     <= count(9) and count(8);          S1_w_data_i <= cipher_data_o(31 downto 0);          S2_w_data_i <= cipher_data_o(31 downto 0);          S3_w_data_i <= cipher_data_o(31 downto 0);          S4_w_data_i <= cipher_data_o(31 downto 0);          next_state  <= S_KEY_SBOX_CIPHER;          next_count  <= count + 1;          if count = 1023 then            key_r_en   <= '1';            P_enc      <= i_data_r_enc;            next_state <= S_IDLE;          end if;                  when others =>          next_state <= S_IDLE;                end case;    end process;    proc_state : process (CLK_I) is    begin      if rising_edge(CLK_I) then        state      <= next_state;        count      <= next_count;        prev_P_enc <= P_enc;        if RST_I = '1' then          state <= S_IDLE;        end if;      end if;    end process;      end block;  u_BlowfishPiROM : entity work.BlowfishPiROM    port map (      CLK_I  => CLK_I,      ADDR_I => Pi_addr,      DATA_O => Pi_data      );  u_BlowfishPArray : entity work.BlowfishPArray    port map (      CLK_I    => CLK_I,      ENC_I    => P_enc,      R_EN_I   => P_r_en,      R_ADDR_I => P_r_addr,      R_DATA_O => P_r_data,      W_EN_I   => p_w_en,      W_ADDR_I => p_w_addr,      W_DATA_I => p_w_data_i      );  u_BlowfishSBox1 : entity work.BlowfishSBox    port map (      CLK_I    => CLK_I,      R_EN_I   => S1_r_en,      R_ADDR_I => S1_r_addr,      R_DATA_O => S1_r_data,      W_EN_I   => S1_w_en,      W_ADDR_I => S1_w_addr,      W_DATA_I => S1_w_data_i      );  u_BlowfishSBox2 : entity work.BlowfishSBox    port map (      CLK_I    => CLK_I,      R_EN_I   => S2_r_en,      R_ADDR_I => S2_r_addr,      R_DATA_O => S2_r_data,      W_EN_I   => S2_w_en,      W_ADDR_I => S2_w_addr,      W_DATA_I => S2_w_data_i      );  u_BlowfishSBox3 : entity work.BlowfishSBox    port map (      CLK_I    => CLK_I,      R_EN_I   => S3_r_en,      R_ADDR_I => S3_r_addr,      R_DATA_O => S3_r_data,      W_EN_I   => S3_w_en,      W_ADDR_I => S3_w_addr,      W_DATA_I => S3_w_data_i      );  u_BlowfishSBox4 : entity work.BlowfishSBox    port map (      CLK_I    => CLK_I,      R_EN_I   => S4_r_en,      R_ADDR_I => S4_r_addr,      R_DATA_O => S4_r_data,      W_EN_I   => S4_w_en,      W_ADDR_I => S4_w_addr,      W_DATA_I => S4_w_data_i      );  u_BlowfishCipher : entity work.BlowfishCipher    port map (      RST_I     => RST_I,      CLK_I     => CLK_I,      EN_I      => cipher_en_i,      DATA_I    => cipher_data_i,      BUSY_O    => cipher_busy,      EN_O      => cipher_en_o,      DATA_O    => cipher_data_o,      P_INIT_I  => cipher_p_init,      P_EN_O    => P_r_en,      P_ADDR_O  => P_r_addr,      P_DATA_I  => P_r_data,      S1_EN_O   => S1_r_en,      S1_ADDR_O => S1_r_addr,      S1_DATA_I => S1_r_data,      S2_EN_O   => S2_r_en,      S2_ADDR_O => S2_r_addr,      S2_DATA_I => S2_r_data,      S3_EN_O   => S3_r_en,      S3_ADDR_O => S3_r_addr,      S3_DATA_I => S3_r_data,      S4_EN_O   => S4_r_en,      S4_ADDR_O => S4_r_addr,      S4_DATA_I => S4_r_data      );end architecture rtl;

⌨️ 快捷键说明

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