OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [hf-risc/] [platform/] [spartan3e_nexys2/] [spartan3e_nexys2_xtea.vhd] - Diff between revs 13 and 18

Show entire file | Details | Blame | View Log

Rev 13 Rev 18
Line 1... Line 1...
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_unsigned.all;
 
 
entity hellfire_cpu_if is
entity hfrisc_soc is
        generic(
        generic(
                address_width: integer := 14;
                address_width: integer := 14;
                memory_file : string := "code.txt";
                memory_file : string := "code.txt";
                uart_support : string := "yes"
                uart_support : string := "yes"
        );
        );
Line 12... Line 12...
                reset_in:       in std_logic;
                reset_in:       in std_logic;
                int_in:         in std_logic;
                int_in:         in std_logic;
                uart_read:      in std_logic;
                uart_read:      in std_logic;
                uart_write:     out std_logic
                uart_write:     out std_logic
        );
        );
end hellfire_cpu_if;
end hfrisc_soc;
 
 
architecture interface of hellfire_cpu_if is
architecture top_level of hfrisc_soc is
        signal clock, boot_enable, ram_enable_n, stall, stall_cpu, busy_cpu, irq_cpu, irq_ack_cpu, data_access_cpu, ram_dly, rff1, reset: std_logic;
        signal clock, boot_enable, ram_enable_n, stall, stall_cpu, busy_cpu, irq_cpu, irq_ack_cpu, data_access_cpu, ram_dly, rff1, reset: std_logic;
        signal address, data_read, data_write, data_read_boot, data_read_ram, irq_vector_cpu, inst_addr_cpu, inst_in_cpu, data_addr_cpu, data_in_cpu, data_out_cpu: std_logic_vector(31 downto 0);
        signal address, data_read, data_write, data_read_boot, data_read_ram, irq_vector_cpu, address_cpu, data_in_cpu, data_out_cpu: std_logic_vector(31 downto 0);
        signal ext_irq: std_logic_vector(7 downto 0);
        signal ext_irq: std_logic_vector(7 downto 0);
        signal data_we, data_w_n_ram, data_w_cpu: std_logic_vector(3 downto 0);
        signal data_we, data_w_n_ram, data_w_cpu: std_logic_vector(3 downto 0);
 
 
        signal ext_periph, ext_periph_dly, ready: std_logic;
        signal ext_periph, ext_periph_dly, ready: std_logic;
        signal key: std_logic_vector(127 downto 0);
        signal key: std_logic_vector(127 downto 0);
Line 66... Line 66...
                end if;
                end if;
        end process;
        end process;
 
 
 
 
 
 
        process (data_addr_cpu, key, input, output)
        process (clock, reset, address_cpu, key, input, output)
        begin
        begin
                case data_addr_cpu(7 downto 4) is
                if reset = '1' then
 
                        data_read_xtea <= (others => '0');
 
                elsif clock'event and clock = '1' then
 
                        if (ext_periph = '1') then      -- XTEA is at 0xfa000000
 
                                case address_cpu(7 downto 4) is
                        when "0000" =>          -- control      0xfa000000      (bit2 - ready (R), bit1 - encrypt (RW), bit0 - start (RW)
                        when "0000" =>          -- control      0xfa000000      (bit2 - ready (R), bit1 - encrypt (RW), bit0 - start (RW)
                                data_read_xtea <= x"000000" & "00000" & ready & control;
                                data_read_xtea <= x"000000" & "00000" & ready & control;
                        when "0001" =>          -- key[0]       0xfa000010
                        when "0001" =>          -- key[0]       0xfa000010
                                data_read_xtea <= key(127 downto 96);
                                data_read_xtea <= key(127 downto 96);
                        when "0010" =>          -- key[1]       0xfa000020
                        when "0010" =>          -- key[1]       0xfa000020
Line 90... Line 94...
                        when "1000" =>          -- output[1]    0xfa000080
                        when "1000" =>          -- output[1]    0xfa000080
                                data_read_xtea <= output(31 downto 0);
                                data_read_xtea <= output(31 downto 0);
                        when others =>
                        when others =>
                                data_read_xtea <= (others => '0');
                                data_read_xtea <= (others => '0');
                end case;
                end case;
 
                        end if;
 
                end if;
        end process;
        end process;
 
 
        process (clock, reset, data_addr_cpu, control, key, input, output)
        process (clock, reset, address_cpu, control, key, input, output)
        begin
        begin
                if reset = '1' then
                if reset = '1' then
                        key <= (others => '0');
                        key <= (others => '0');
                        input <= (others => '0');
                        input <= (others => '0');
                        control <= "00";
                        control <= "00";
                elsif clock'event and clock = '1' then
                elsif clock'event and clock = '1' then
                        if (ext_periph = '1' and data_we /= "0000") then        -- XTEA is at 0xfa000000
                        if (ext_periph = '1' and data_we /= "0000") then        -- XTEA is at 0xfa000000
                                case data_addr_cpu(7 downto 4) is
                                case address_cpu(7 downto 4) is
                                        when "0000" =>          -- control      0xfa000000      (bit2 - ready (R), bit1 - encrypt (RW), bit0 - start (RW)
                                        when "0000" =>          -- control      0xfa000000      (bit2 - ready (R), bit1 - encrypt (RW), bit0 - start (RW)
                                                control <= data_write(1 downto 0);
                                                control <= data_write(1 downto 0);
                                        when "0001" =>          -- key[0]       0xfa000010
                                        when "0001" =>          -- key[0]       0xfa000010
                                                key(127 downto 96) <= data_write;
                                                key(127 downto 96) <= data_write;
                                        when "0010" =>          -- key[1]       0xfa000020
                                        when "0010" =>          -- key[1]       0xfa000020
Line 121... Line 127...
                                end case;
                                end case;
                        end if;
                        end if;
                end if;
                end if;
        end process;
        end process;
 
 
 
 
 
 
        stall <= '0';
        stall <= '0';
        boot_enable <= '1' when address(31 downto 28) = "0000" else '0';
        boot_enable <= '1' when address(31 downto 28) = "0000" else '0';
        ram_enable_n <= '0' when address(31 downto 28) = "0100" else '1';
        ram_enable_n <= '0' when address(31 downto 28) = "0100" else '1';
        ext_periph <= '1' when address(31 downto 24) = x"fa" else '0';
        ext_periph <= '1' when address(31 downto 24) = x"fa" else '0';
        data_read <= data_read_xtea when ext_periph = '1' or ext_periph_dly = '1' else data_read_boot when address(31 downto 28) = "0000" and ram_dly = '0' else data_read_ram;
        data_read <= data_read_xtea when ext_periph = '1' or ext_periph_dly = '1' else data_read_boot when address(31 downto 28) = "0000" and ram_dly = '0' else data_read_ram;
Line 135... Line 139...
        -- HF-RISC core
        -- HF-RISC core
        core: entity work.datapath
        core: entity work.datapath
        port map(       clock => clock,
        port map(       clock => clock,
                        reset => reset,
                        reset => reset,
                        stall => stall_cpu,
                        stall => stall_cpu,
                        busy => busy_cpu,
 
                        irq_vector => irq_vector_cpu,
                        irq_vector => irq_vector_cpu,
                        irq => irq_cpu,
                        irq => irq_cpu,
                        irq_ack => irq_ack_cpu,
                        irq_ack => irq_ack_cpu,
                        inst_addr => inst_addr_cpu,
                        address => address_cpu,
                        inst_in => inst_in_cpu,
 
                        data_addr => data_addr_cpu,
 
                        data_in => data_in_cpu,
                        data_in => data_in_cpu,
                        data_out => data_out_cpu,
                        data_out => data_out_cpu,
                        data_w => data_w_cpu,
                        data_w => data_w_cpu,
                        data_access => data_access_cpu
                        data_access => data_access_cpu
        );
        );
Line 160... Line 161...
                reset => reset,
                reset => reset,
 
 
                stall => stall,
                stall => stall,
 
 
                stall_cpu => stall_cpu,
                stall_cpu => stall_cpu,
                busy_cpu => busy_cpu,
 
                irq_vector_cpu => irq_vector_cpu,
                irq_vector_cpu => irq_vector_cpu,
                irq_cpu => irq_cpu,
                irq_cpu => irq_cpu,
                irq_ack_cpu => irq_ack_cpu,
                irq_ack_cpu => irq_ack_cpu,
                inst_addr_cpu => inst_addr_cpu,
                address_cpu => address_cpu,
                inst_in_cpu => inst_in_cpu,
 
                data_addr_cpu => data_addr_cpu,
 
                data_in_cpu => data_in_cpu,
                data_in_cpu => data_in_cpu,
                data_out_cpu => data_out_cpu,
                data_out_cpu => data_out_cpu,
                data_w_cpu => data_w_cpu,
                data_w_cpu => data_w_cpu,
                data_access_cpu => data_access_cpu,
                data_access_cpu => data_access_cpu,
 
 
Line 263... Line 261...
                we_n    => data_w_n_ram(3),
                we_n    => data_w_n_ram(3),
                data_i  => data_write(31 downto 24),
                data_i  => data_write(31 downto 24),
                data_o  => data_read_ram(31 downto 24)
                data_o  => data_read_ram(31 downto 24)
        );
        );
 
 
end interface;
end top_level;
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.