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

Subversion Repositories igor

[/] [igor/] [trunk/] [processor/] [mc/] [toplevel.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 work.leval_package.all;
4
 
5
entity toplevel is
6
        port(
7
                clk                     : in std_logic;
8
                rst_low         : in std_logic;
9
                fpga_data       : inout std_logic_vector(WORD_SIZE - 1 downto 0);
10
                fpga_addr       : out   std_logic_vector(ADDR_SIZE - 1 downto 0);
11
                avr_irq         : out std_logic;
12
                avr_rdy         : in  std_logic;
13
                sync                    : in std_logic;
14
                read                    : out std_logic;
15
                write                   : out std_logic;
16
                mem_ce          : out std_logic_vector(1 downto 0);
17
                led                     : out std_logic_vector(7 downto 0);
18
                err                     : in std_logic_vector(1 downto 0));
19
end entity;
20
 
21
architecture rtl of toplevel is
22
        -- Components:
23
        component leval is
24
        port (
25
                rst             : in std_logic;
26
                clk             : in std_logic;
27
                data_in : in std_logic_vector(BUS_SIZE - 1 downto 0);
28
                data_out        : out std_logic_vector(BUS_SIZE - 1 downto 0);
29
                addr_bus        : out std_logic_vector(ADDR_SIZE-1 downto 0);
30
                wait_s  : in std_logic;
31
                read            : out std_logic;
32
                write           : out std_logic;
33
                sync            : in std_logic;
34
                led             : out std_logic_vector(7 downto 0));
35
                -- DEBUG SIGNALS
36
--              pc_out : out std_logic_vector(MC_ADDR_SIZE-1 downto 0);
37
--              state_out : out std_logic_vector(3 downto 0);
38
--              status_out : out std_logic_vector(STATUS_REG_SIZE-1 downto 0);
39
--              pc_write_out : out std_logic);
40
        end component;
41
 
42
        component addr_decoder is
43
        port (
44
                clk                     : in std_logic;
45
                leval_addr      : in std_logic_vector(ADDR_SIZE - 1 downto 0);
46
                avr_irq         : out std_logic;
47
                mem_wait                : out std_logic;
48
                mem_ce          : out std_logic_vector(1 downto 0);
49
                read_s          : in std_logic;
50
                write_s         : in std_logic);
51
        end component;
52
 
53
        component synchronizer is
54
        port (
55
                clk     : in std_logic;
56
                ws              : in std_logic;
57
                wso     : out std_logic);
58
        end component;
59
 
60
        -- Tristate bus
61
        component bidirbus is
62
        port (
63
                bidir : inout std_logic_vector(WORD_SIZE - 1 downto 0);
64
                oe : in std_logic;
65
                clk : in std_logic;
66
                inp : in std_logic_vector(WORD_SIZE - 1 downto 0);
67
                outp : out std_logic_vector(WORD_SIZE - 1 downto 0));
68
        end component;
69
 
70
--      -- CHIPSCOPE MODULES:
71
--      component icon
72
--      port (
73
--              control0    :   out std_logic_vector(35 downto 0);
74
--              control1    :   out std_logic_vector(35 downto 0));
75
--      end component;
76
--
77
--      component ila
78
--      port (
79
--              control     : in    std_logic_vector(35 downto 0);
80
--              clk         : in    std_logic;
81
--              trig0       : in    std_logic_vector(47 downto 0));
82
--      end component;
83
--      
84
--      component vio
85
--      port (
86
--              control     : in    std_logic_vector(35 downto 0);
87
--              clk         : in    std_logic;
88
--              sync_in     : in    std_logic_vector(47 downto 0);
89
--              sync_out    :   out std_logic_vector(47 downto 0));
90
--      end component;
91
--
92
--      -- CHIPSCOPE SIGNALS:
93
--      signal trig0      : std_logic_vector(47 downto 0);
94
--      signal control1    : std_logic_vector(35 downto 0);
95
--      signal sync_in    : std_logic_vector(47 downto 0);
96
--      signal sync_out   : std_logic_vector(47 downto 0);
97
--      signal control0       : std_logic_vector(35 downto 0);
98
--      -- END OF CHIPSCOPE COMPONENTS
99
 
100
--      -- DEBUG SIGNALS:
101
-- signal pc_out : std_logic_vector(MC_ADDR_SIZE-1 downto 0);
102
--      signal state_out : std_logic_vector(3 downto 0);
103
--      signal pc_write_out : std_logic;
104
--      signal status_out : std_logic_vector(STATUS_REG_SIZE-1 downto 0);
105
--      signal op1, op2 : std_logic_vector(WORD_SIZE-1 downto 0);
106
 
107
        -- Tristatebus signals
108
        -- From bidirbus to synchro
109
        signal t_bus_data_out : std_logic_vector(BUS_SIZE - 1 downto 0);
110
 
111
        -- Synchronizer signals
112
        -- From synchronizer 
113
        signal sync_ws_out : std_logic;
114
 
115
        -- These give way for flip-flops
116
        signal read_s_delayed : std_logic;
117
        signal write_s_delayed : std_logic;
118
        signal avr_irq_s_delayed : std_logic;
119
        signal mem_ce_s_delayed : std_logic_vector(1 downto 0);
120
        signal addr_s_delayed : std_logic_vector(ADDR_SIZE - 1 downto 0);
121
 
122
        -- This is from leval out to the world
123
        signal leval_data_out : std_logic_vector(BUS_SIZE - 1 downto 0);
124
 
125
        -- Signals:
126
        signal addr_s : std_logic_vector(ADDR_SIZE - 1 downto 0);
127
        signal mem_wait_s : std_logic;
128
        signal mem_wait_and_avr_rdy : std_logic;
129
        signal write_s : std_logic;
130
        signal read_s : std_logic;
131
        signal rst : std_logic;
132
        signal avr_irq_s : std_logic;
133
        signal mem_ce_s : std_logic_vector(1 downto 0);
134
        -- Clock control signals:
135
        signal leval_clk : std_logic := '0';
136
 
137
begin
138
 
139
        rst <= not rst_low;
140
        fpga_addr <= addr_s_delayed;
141
        read <= not read_s_delayed;
142
        write <= not write_s_delayed;
143
        avr_irq <= avr_irq_s_delayed;
144
        mem_ce <= mem_ce_s_delayed;
145
        mem_wait_and_avr_rdy <= mem_wait_s and avr_rdy;
146
        leval_clk <= clk;
147
--      -- DEBUG SIGNALS
148
--      pc <= pc_out;
149
 
150
        synchronizer_inst : synchronizer
151
        port map(
152
                clk => leval_clk,
153
                ws =>  mem_wait_and_avr_rdy, --connect the RDY/WAIT signal directly to synchronizer
154
                wso => sync_ws_out); -- connect the synched RDY/WAIT to leval
155
 
156
        bidirbus_inst : bidirbus
157
        port map(
158
                clk => leval_clk,
159
                oe => write_s,
160
                bidir => fpga_data,
161
                inp => leval_data_out, -- from leval into bidirbus
162
                outp => t_bus_data_out); -- from bidirbus to leval
163
 
164
        leval_inst : leval
165
        port map(
166
                clk => leval_clk,
167
                rst => rst,
168
                sync => sync,
169
                data_out => leval_data_out,
170
                data_in => t_bus_data_out, --connect Tristatebus to data in
171
                addr_bus        => addr_s,
172
                wait_s  => sync_ws_out,
173
                read            => read_s,
174
                write           => write_s,
175
                led => led);
176
--              status_out => status_out,
177
--              pc_out => pc_out,
178
--              state_out => state_out,
179
--              pc_write_out => pc_write_out);
180
 
181
        addr_decoder_inst       : addr_decoder
182
        port map (
183
          clk => leval_clk,
184
          leval_addr => addr_s,
185
                avr_irq => avr_irq_s,
186
                mem_wait => mem_wait_s,
187
                mem_ce => mem_ce_s,
188
                read_s => read_s_delayed,
189
                write_s => write_s_delayed
190
        );
191
 
192
        flank_delay : process(clk)
193
        begin
194
                if rising_edge(clk) then
195
                        read_s_delayed <= read_s;
196
                        write_s_delayed <= write_s;
197
                        avr_irq_s_delayed <= avr_irq_s;
198
                        mem_ce_s_delayed <= mem_ce_s;
199
                        addr_s_delayed <= addr_s;
200
                end if;
201
        end process;
202
 
203
end architecture rtl;

powered by: WebSVN 2.1.0

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