OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [processor/] [mc/] [addr_decoder.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 atypic
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_unsigned.all;
4
use work.whisk_constants.all;
5
--use work.leval_package.all;
6
 
7
entity addr_decoder is
8
        port(
9
                clk                     : in std_logic;
10
                leval_addr      : in std_logic_vector(ADDR_BITS - 1 downto 0);
11
                avr_irq         : out std_logic;
12
                mem_wait                : out std_logic;
13
                mem_ce          : out std_logic_vector(1 downto 0);
14
                read_s          : in std_logic;
15
                write_s         : in std_logic);
16
end entity;
17
 
18
-- PERIOD = 32.25 ns
19
-- MEMORY ACCESS LATENCY = 55 ns
20
-- WAIT 8 clock cycles
21
 
22
architecture rtl of addr_decoder is
23
        signal t_count : integer := 0;
24
begin
25
        timer : process(clk)
26
        begin
27
                if rising_edge(clk) then
28
                        -- increment timer while communicating with memory
29
                        if ((leval_addr < X"3FFFF00") and ((write_s or read_s) = '1')) then
30
                                if t_count < 8 then
31
                                        t_count <= t_count + 1;
32
                                end if;
33
                        else -- reset timer otherwise
34
                                t_count <= 0;
35
                        end if;
36
                end if;
37
        end process timer;
38
 
39
        -- set RDY flag low after 8 cycles
40
        mem_wait <= '0' when t_count = 8 else '1';
41
 
42
        -- set CE flag for memory based on address we're reading
43
        mem_ce <= "10" when ((leval_addr < X"0080000") and ((write_s or read_s) = '1')) else
44
                                "01" when ((leval_addr < X"0100000") and ((write_s or read_s) = '1')) else "11";
45
        --mem_ce <= '0' when ((leval_addr < X"3FFFF00") and ((write_s or read_s) = '1')) else '1';
46
 
47
        -- set IRQ flag for AVR
48
        avr_irq <= '0' when ((leval_addr >= X"3FFFF00") and ((write_s or read_s) = '1')) else '1';
49
 
50
end architecture;

powered by: WebSVN 2.1.0

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