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

Subversion Repositories pdp1

[/] [pdp1/] [trunk/] [rtl/] [vhdl/] [io.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 yannv
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: 
4
-- 
5
-- Create Date:    21:25:57 02/09/2009 
6
-- Design Name: 
7
-- Module Name:    pdp1io - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: I/O subsystem for PDP-1, connect to CPU. Instantiates I/O devices.
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
 
23
---- Uncomment the following library declaration if instantiating
24
---- any Xilinx primitives in this code.
25
--library UNISIM;
26
--use UNISIM.VComponents.all;
27
 
28
entity pdp1io is
29
   Port (
30
                CLK_50M : in  STD_LOGIC;
31
                CLK_PDP : in STD_LOGIC;
32
 
33
                IO_SET : out STD_LOGIC;
34
                IO_TO_CPU : out STD_LOGIC_VECTOR(0 to 17);
35
                AC, IO_FROM_CPU : in STD_LOGIC_VECTOR(0 to 17);
36
                IOT : in STD_LOGIC_VECTOR(0 to 63);
37
                IO_RESTART : out STD_LOGIC;
38
                IO_DORESTART : in STD_LOGIC;
39
 
40
                -- SPI is in use for DAC outputs to oscilloscope
41
                SPI_MOSI : OUT std_logic;
42
                DAC_CS : OUT std_logic;
43
                SPI_SCK : OUT std_logic;
44
                DAC_CLR : OUT std_logic;
45
                DAC_OUT : IN std_logic;
46
 
47
                -- DCE serial port is used for communications with PC
48
                RS232_DCE_RXD : IN std_logic;
49
                RS232_DCE_TXD : OUT std_logic
50
        );
51
end pdp1io;
52
 
53
architecture Behavioral of pdp1io is
54
        subtype word is std_logic_vector(0 to 17);
55
 
56
        COMPONENT flagcross
57
        generic ( width : integer := 0 );
58
        PORT(
59
                ClkA, ClkB, FastClk : IN std_logic;
60
                A : IN std_logic := '0';
61
                B : OUT std_logic;
62
                A_reg : in STD_LOGIC_VECTOR(0 to width-1) := (others => '0');
63
                B_reg : out STD_LOGIC_VECTOR(0 to width-1)
64
                );
65
        END COMPONENT;
66
 
67
        COMPONENT display
68
        PORT(
69
                X : IN std_logic_vector(0 to 9);
70
                Y : IN std_logic_vector(0 to 9);
71
                CLK : IN std_logic;
72
 
73
                TRIG, DOPULSE : IN std_logic;
74
                DONE : OUT std_logic;
75
 
76
                SPI_MOSI : OUT std_logic;
77
                DAC_CS : OUT std_logic;
78
                SPI_SCK : OUT std_logic;
79
                DAC_CLR : OUT std_logic
80
                );
81
        END COMPONENT;
82
 
83
        COMPONENT papertapereader
84
        PORT(
85
                clk : IN std_logic;
86
                dopulse : IN std_logic;
87
                ptr_rpa : IN std_logic;
88
                ptr_rpb : IN std_logic;
89
                ptr_rrb : IN std_logic;
90
                RXD : IN std_logic;
91
                done : OUT std_logic;
92
                io : OUT std_logic_vector(0 to 17);
93
                io_set : out  STD_LOGIC := 'L';
94
                rb_loaded : OUT std_logic;
95
                TXD : OUT std_logic
96
                );
97
        END COMPONENT;
98
        signal ptr_rpa, ptr_rpb, ptr_rrb, ptr_done, ptr_io_set: std_logic;
99
        signal ptr_io : word;
100
 
101
        signal display_trig, display_done, combined_done: std_logic;
102
begin
103
        -- no need to cross-transfer I/O because display is faster than cpu
104
        disppulse: flagcross PORT MAP(
105
                ClkA => CLK_PDP,
106
                ClkB => CLK_50M,
107
                FastCLK => CLK_50M,
108
                A => IOT(7),
109
                B => display_trig,
110
                A_reg => open,
111
                B_reg => open
112
        );
113
        Inst_display: display PORT MAP(
114
                X => AC(0 to 9),
115
                Y => IO_FROM_CPU(0 to 9),
116
                CLK => CLK_50M,
117
 
118
                TRIG => display_trig,
119
                DONE => display_done,
120
                DOPULSE => IO_DORESTART,
121
 
122
                SPI_MOSI => SPI_MOSI,
123
                DAC_CS => DAC_CS,
124
                SPI_SCK => SPI_SCK,
125
                DAC_CLR => DAC_CLR
126
        );
127
 
128
        Inst_papertapereader: papertapereader PORT MAP(
129
                clk => CLK_50M,
130
                dopulse => IO_DORESTART,
131
                done => ptr_done,
132
                io => ptr_io,
133
                io_set => ptr_io_set,
134
                ptr_rpa => ptr_rpa,
135
                ptr_rpb => ptr_rpb,
136
                ptr_rrb => ptr_rrb,
137
                rb_loaded => open,      -- for sequence break
138
                RXD => RS232_DCE_RXD,
139
                TXD => RS232_DCE_TXD
140
        );
141
        ptrio: flagcross GENERIC MAP(width=>18) PORT MAP(
142
                ClkA => CLK_50M,
143
                ClkB => CLK_PDP,
144
                FastClk => CLK_50M,
145
                A => ptr_io_set,
146
                B => io_set,
147
                A_reg => ptr_io,
148
                B_reg => IO_TO_CPU
149
        );
150
        ptrrpa: flagcross PORT MAP(
151
                ClkA => CLK_PDP,
152
                ClkB => CLK_50M,
153
                FastClk => CLK_50M,
154
                A => iot(1),
155
                B => ptr_rpa,
156
                A_reg => open,
157
                B_reg => open
158
        );
159
        ptrrpb: flagcross PORT MAP(
160
                ClkA => CLK_PDP,
161
                ClkB => CLK_50M,
162
                FastClk => CLK_50M,
163
                A => iot(2),
164
                B => ptr_rpb,
165
                A_reg => open,
166
                B_reg => open
167
        );
168
        ptrrrb: flagcross PORT MAP(
169
                ClkA => CLK_PDP,
170
                ClkB => CLK_50M,
171
                FastClk => CLK_50M,
172
                A => iot(8#30#),                -- I/O manual and PDP-1 manual disagree on IOT#.
173
                B => ptr_rrb,
174
                A_reg => open,
175
                B_reg => open
176
        );
177
 
178
        combined_done <= display_done or ptr_done;
179
        restart : flagcross port map (
180
          ClkA    => CLK_50M,
181
          ClkB    => CLK_PDP,
182
          FastClk => CLK_50M,
183
          A       => combined_done,
184
          B       => IO_RESTART,
185
          A_reg => open,
186
          B_reg => open);
187
end Behavioral;

powered by: WebSVN 2.1.0

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