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

Subversion Repositories cpu65c02_true_cycle

[/] [cpu65c02_true_cycle/] [trunk/] [released/] [rtl/] [v2_00/] [vhdl/] [fsm_intnmi.vhd] - Blame information for rev 24

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 fpga_is_fu
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
USE ieee.std_logic_arith.all;
4
 
5
entity fsm_intnmi is
6
   port(
7
      clk_clk_i   : in     std_logic;
8
      nmi_n_i     : in     std_logic;
9
      rst_nmi_i   : in     std_logic;
10
      rst_rst_n_i : in     std_logic;
11
      nmi_o       : out    std_logic
12
   );
13
 
14
-- Declarations
15
 
16
end fsm_intnmi ;
17
-- (C) 2008 - 2021 Jens Gutschmidt
18
-- (email: opencores@vivare-services.com)
19
-- 
20
-- Versions:
21
-- Revision 1.8  2018/09/01 18:07:00  jens
22
-- - NMI = '0' need at least 1 cycles for correct
23
--   operation now (2 cycles in the past)
24
-- 
25
-- Revision 1.7  2013/07/21 11:11:00  jens
26
-- - Changing the title block and internal revision history
27
-- 
28
-- Revision 1.6  2009/01/04 10:20:47  eda
29
-- Changes for cosmetic issues only
30
-- 
31
-- Revision 1.5  2009/01/04 09:23:10  eda
32
-- - Delete unused nets and blocks (same as R6502_TC)
33
-- - Rename blocks
34
-- 
35
-- Revision 1.4  2009/01/03 16:53:02  eda
36
-- - Unused nets and blocks deleted
37
-- - Renamed blocks
38
-- 
39
-- Revision 1.3  2009/01/03 16:42:02  eda
40
-- - Unused nets and blocks deleted
41
-- - Renamed blocks
42
-- 
43
-- Revision 1.2  2008/12/31 19:31:24  eda
44
-- Production Release
45
--  
46
-- 
47
--
48
-- r65c02_tc.fsm_intnmi.fsm
49
--
50
-- Date:    06.01.2021
51
-- Time:    22:57:33
52
-- By:        VIVARE GmbH, Switzerland
53
--
54
-- COPYRIGHT (C) 2008 - 2021 by Jens Gutschmidt
55
-- 
56
-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
57
-- 
58
-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
59
-- 
60
-- You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.
61
-- 
62
-- 
63
LIBRARY ieee;
64
USE ieee.std_logic_1164.all;
65
USE ieee.std_logic_arith.all;
66
 
67
architecture fsm of fsm_intnmi is
68
 
69
   type state_type is (
70
      idle,
71
      idle1,
72
      IMP
73
   );
74
 
75
   -- State vector declaration
76
   attribute state_vector : string;
77
   attribute state_vector of fsm : architecture is "current_state";
78
 
79
   -- Declare current and next state signals
80
   signal current_state : state_type;
81
   signal next_state : state_type;
82
 
83
   -- Declare any pre-registered internal signals
84
   signal nmi_o_cld : std_logic ;
85
 
86
begin
87
 
88
   -----------------------------------------------------------------
89
   clocked_proc : process (
90
      clk_clk_i,
91
      rst_rst_n_i
92
   )
93
   -----------------------------------------------------------------
94
   begin
95
      if (rst_rst_n_i = '0') then
96
         current_state <= idle;
97
         -- Default Reset Values
98
         nmi_o_cld <= '0';
99
      elsif (clk_clk_i'event and clk_clk_i = '1') then
100
         current_state <= next_state;
101
         -- Default Assignment To Internals
102
         nmi_o_cld <= '0';
103
 
104
         -- Combined Actions
105
         case current_state is
106
            when idle1 =>
107
               if (nmi_n_i = '0') then
108
                  nmi_o_cld <= '1';
109
               end if;
110
            when IMP =>
111
               nmi_o_cld <= '1';
112
               if (rst_nmi_i = '1') then
113
                  nmi_o_cld <= '0';
114
               end if;
115
            when others =>
116
               null;
117
         end case;
118
      end if;
119
   end process clocked_proc;
120
 
121
   -----------------------------------------------------------------
122
   nextstate_proc : process (
123
      current_state,
124
      nmi_n_i,
125
      rst_nmi_i
126
   )
127
   -----------------------------------------------------------------
128
   begin
129
      case current_state is
130
         when idle =>
131
            if (nmi_n_i = '1') then
132
               next_state <= idle1;
133
            else
134
               next_state <= idle;
135
            end if;
136
         when idle1 =>
137
            if (nmi_n_i = '0') then
138
               next_state <= IMP;
139
            else
140
               next_state <= idle1;
141
            end if;
142
         when IMP =>
143
            if (rst_nmi_i = '1') then
144
               next_state <= idle;
145
            else
146
               next_state <= IMP;
147
            end if;
148
         when others =>
149
            next_state <= idle;
150
      end case;
151
   end process nextstate_proc;
152
 
153
   -- Concurrent Statements
154
   -- Clocked output assignments
155
   nmi_o <= nmi_o_cld;
156
end fsm;

powered by: WebSVN 2.1.0

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