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

Subversion Repositories System09

[/] [System09/] [tags/] [V10/] [rtl/] [vhdl/] [datram.vhd] - Blame information for rev 66

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dilbert57
--===========================================================================--
2
--
3
--  S Y N T H E Z I A B L E    Dynamic Address Translation Registers
4
--
5
--  www.OpenCores.Org - December 2002
6
--  This core adheres to the GNU public license  
7
--
8
-- File name      : datram.vhd
9
--
10
-- entity name    : dat_ram
11
--
12
-- Purpose        : Implements a Dynamic Address Translation RAM module
13
--                  Maps the high order 4 address bits to 8 address lines
14
--                  extending the memory addressing range to 1 Mbytes
15
--                  Memory segments are mapped on 4 KByte boundaries
16
--                  The DAT registers map to the top of memory 
17
--                  ($FFF0 - $FFFF) and are write only so can map over ROM.
18
--                  Since the DAT is not supported by SWTBUG for the 6800,
19
--                  the resgisters reset state map the bottom 64K of RAM. 
20
--                  
21
-- Dependencies   : ieee.Std_Logic_1164
22
--                  ieee.std_logic_unsigned
23
--
24
-- Author         : John E. Kent      
25
--
26
--===========================================================================----
27
--
28
-- Revision History:
29
--
30
-- Date          Revision  Author 
31
-- 10 Nov 2002   0.1       John Kent
32
--
33
 
34
library ieee;
35
use ieee.std_logic_1164.all;
36
use ieee.std_logic_unsigned.all;
37
 
38
entity dat_ram is
39
        port (
40
         clk       : in  std_logic;
41
    rst       : in  std_logic;
42
    cs        : in  std_logic;
43
    rw        : in  std_logic;
44
    addr_hi   : in  std_logic_vector(3 downto 0);
45
    addr_lo   : in  std_logic_vector(3 downto 0);
46
    data_in   : in  std_logic_vector(7 downto 0);
47
         data_out  : out std_logic_vector(7 downto 0));
48
end;
49
 
50
architecture datram_arch of dat_ram is
51
signal dat_reg0 : std_logic_vector(7 downto 0);
52
signal dat_reg1 : std_logic_vector(7 downto 0);
53
signal dat_reg2 : std_logic_vector(7 downto 0);
54
signal dat_reg3 : std_logic_vector(7 downto 0);
55
signal dat_reg4 : std_logic_vector(7 downto 0);
56
signal dat_reg5 : std_logic_vector(7 downto 0);
57
signal dat_reg6 : std_logic_vector(7 downto 0);
58
signal dat_reg7 : std_logic_vector(7 downto 0);
59
signal dat_reg8 : std_logic_vector(7 downto 0);
60
signal dat_reg9 : std_logic_vector(7 downto 0);
61
signal dat_reg10 : std_logic_vector(7 downto 0);
62
signal dat_reg11 : std_logic_vector(7 downto 0);
63
signal dat_reg12 : std_logic_vector(7 downto 0);
64
signal dat_reg13 : std_logic_vector(7 downto 0);
65
signal dat_reg14 : std_logic_vector(7 downto 0);
66
signal dat_reg15 : std_logic_vector(7 downto 0);
67
 
68
begin
69
 
70
---------------------------------
71
--
72
-- Write DAT RAM
73
--
74
---------------------------------
75
 
76
dat_write : process( clk, rst, addr_lo, cs, rw, data_in )
77
begin
78
  if clk'event and clk = '0' then
79
    if rst = '1' then
80
      dat_reg0 <= "00000000";
81
      dat_reg1 <= "00000001";
82
      dat_reg2 <= "00000010";
83
      dat_reg3 <= "00000011";
84
      dat_reg4 <= "00000100";
85
      dat_reg5 <= "00000101";
86
      dat_reg6 <= "00000110";
87
      dat_reg7 <= "00000111";
88
      dat_reg8 <= "00001000";
89
      dat_reg9 <= "00001001";
90
      dat_reg10 <= "00001010";
91
      dat_reg11 <= "00001011";
92
      dat_reg12 <= "00001100";
93
      dat_reg13 <= "00001101";
94
      dat_reg14 <= "00001110";
95
      dat_reg15 <= "00001111";
96
    else
97
           if cs = '1' and rw = '0' then
98
        case addr_lo is
99
             when "0000" =>
100
                    dat_reg0 <= data_in;
101
             when "0001" =>
102
                    dat_reg1 <= data_in;
103
             when "0010" =>
104
                    dat_reg2 <= data_in;
105
             when "0011" =>
106
                    dat_reg3 <= data_in;
107
             when "0100" =>
108
                    dat_reg4 <= data_in;
109
             when "0101" =>
110
                    dat_reg5 <= data_in;
111
             when "0110" =>
112
                    dat_reg6 <= data_in;
113
             when "0111" =>
114
                    dat_reg7 <= data_in;
115
             when "1000" =>
116
                    dat_reg8 <= data_in;
117
             when "1001" =>
118
                    dat_reg9 <= data_in;
119
             when "1010" =>
120
                    dat_reg10 <= data_in;
121
             when "1011" =>
122
                    dat_reg11 <= data_in;
123
             when "1100" =>
124
                    dat_reg12 <= data_in;
125
             when "1101" =>
126
                    dat_reg13 <= data_in;
127
             when "1110" =>
128
                    dat_reg14 <= data_in;
129
             when "1111" =>
130
                    dat_reg15 <= data_in;
131
        when others =>
132
                    null;
133
                  end case;
134
           end if;
135
         end if;
136
  end if;
137
end process;
138
 
139
dat_read : process(  addr_hi,
140
                     dat_reg0, dat_reg1, dat_reg2, dat_reg3,
141
                     dat_reg4, dat_reg5, dat_reg6, dat_reg7,
142
                     dat_reg8, dat_reg9, dat_reg10, dat_reg11,
143
                     dat_reg12, dat_reg13, dat_reg14, dat_reg15 )
144
begin
145
      case addr_hi is
146
             when "0000" =>
147
                    data_out <= dat_reg0;
148
             when "0001" =>
149
                    data_out <= dat_reg1;
150
             when "0010" =>
151
                    data_out <= dat_reg2;
152
             when "0011" =>
153
                    data_out <= dat_reg3;
154
             when "0100" =>
155
                    data_out <= dat_reg4;
156
             when "0101" =>
157
                    data_out <= dat_reg5;
158
             when "0110" =>
159
                    data_out <= dat_reg6;
160
             when "0111" =>
161
                    data_out <= dat_reg7;
162
             when "1000" =>
163
                    data_out <= dat_reg8;
164
             when "1001" =>
165
                    data_out <= dat_reg9;
166
             when "1010" =>
167
                    data_out <= dat_reg10;
168
             when "1011" =>
169
                    data_out <= dat_reg11;
170
             when "1100" =>
171
                    data_out <= dat_reg12;
172
             when "1101" =>
173
                    data_out <= dat_reg13;
174
             when "1110" =>
175
                    data_out <= dat_reg14;
176
             when "1111" =>
177
                    data_out <= dat_reg15;
178
        when others =>
179
                    null;
180
                end case;
181
end process;
182
 
183
end datram_arch;
184
 

powered by: WebSVN 2.1.0

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