]> rtime.felk.cvut.cz Git - fpga/virtex2/blink.git/blob - openMSP430_fpga.vhd
+ Top level design
[fpga/virtex2/blink.git] / openMSP430_fpga.vhd
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3 use IEEE.STD_LOGIC_ARITH.ALL;
4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6 entity openMSP430_fpga is
7   port (
8     CLK_24MHz: in std_logic;
9     RESET: in std_logic;
10     DISPLAY1: out std_logic_vector(6 downto 0);
11     DISPLAY2: out std_logic_vector(6 downto 0)
12   );
13 end openMSP430_fpga;
14
15 --------------------------------------------------------------------------------
16
17 architecture rtl of openMSP430_fpga is
18   component openMSP430 is
19     port(  
20       aclk_en       :  out std_logic;                        -- ACLK enable
21       dbg_freeze    :  out std_logic;                        -- Freeze peripherals
22       dbg_uart_txd  :  out std_logic;                        -- Debug interface: UART TXD
23       dmem_addr     :  out std_logic_vector (8  downto 0);   -- Data Memory address
24       dmem_cen      :  out std_logic;                        -- Data Memory chip enable (low active)
25       dmem_din      :  out std_logic_vector (15 downto 0);   -- Data Memory data input
26       dmem_wen      :  out std_logic_vector (1  downto 0);   -- Data Memory write enable (low active)
27       irq_acc       :  out std_logic_vector (13 downto 0);   -- Interrupt request accepted (one-hot signal)
28       mclk          :  out std_logic;                        -- Main system clock
29       per_addr      :  out std_logic_vector (7  downto 0);   -- Peripheral address
30       per_din       :  out std_logic_vector (15 downto 0);   -- Peripheral data input
31       per_wen       :  out std_logic_vector (1  downto 0);   -- Peripheral write enable (high active)
32       per_en        :  out std_logic;                        -- Peripheral enable (high active)
33       pmem_addr     :  out std_logic_vector (10 downto 0);   -- Program Memory address
34       pmem_cen      :  out std_logic;                        -- Program Memory chip enable (low active)
35       pmem_din      :  out std_logic_vector (15 downto 0);   -- Program Memory data input (optional)
36       pmem_wen      :  out std_logic_vector (1  downto 0);   -- Program Memory write enable (low active) (optional)
37       puc           :  out std_logic;                        -- Main system reset
38       smclk_en      :  out std_logic;                        -- SMCLK enable
39
40       dbg_uart_rxd  :  in  std_logic;                        -- Debug interface: UART RXD
41       dco_clk       :  in  std_logic;                        -- Fast oscillator (fast clock)
42       dmem_dout     :  in  std_logic_vector (15 downto 0);   -- Data Memory data output
43       irq           :  in  std_logic_vector (13 downto 0);   -- Maskable interrupts
44       lfxt_clk      :  in  std_logic;                        -- Low frequency oscillator (typ 32kHz)
45       nmi           :  in  std_logic;                        -- Non-maskable interrupt (asynchronous)
46       per_dout      :  in  std_logic_vector (15 downto 0);   -- Peripheral data output
47       pmem_dout     :  in  std_logic_vector (15 downto 0);   -- Program Memory data output
48       reset_n       :  in  std_logic                         -- Reset Pin (low active)
49     );
50   end component;
51
52   component ram_8x512
53     port (
54       addr: in std_logic_VECTOR(8 downto 0);
55       clk: in std_logic;
56       din: in std_logic_VECTOR(7 downto 0);
57       dout: out std_logic_VECTOR(7 downto 0);
58       en: in std_logic;
59       we: in std_logic
60     );
61   end component;
62   
63   component rom_8x2k
64     port (
65       addr: in std_logic_VECTOR(10 downto 0);
66       clk: in std_logic;
67       din: in std_logic_VECTOR(7 downto 0);
68       dout: out std_logic_VECTOR(7 downto 0);
69       en: in std_logic;
70       we: in std_logic
71     );
72   end component;
73
74
75   component omsp_gpio
76     generic (
77       P1_EN : std_logic;
78       P2_EN : std_logic;
79       P3_EN : std_logic;
80       P4_EN : std_logic;
81       P5_EN : std_logic;
82       P6_EN : std_logic
83     );
84     port(
85       mclk : in std_logic;
86       p1_din : in std_logic_vector(7 downto 0);
87       p2_din : in std_logic_vector(7 downto 0);
88       p3_din : in std_logic_vector(7 downto 0);
89       p4_din : in std_logic_vector(7 downto 0);
90       p5_din : in std_logic_vector(7 downto 0);
91       p6_din : in std_logic_vector(7 downto 0);
92       per_addr : in std_logic_vector(7 downto 0);
93       per_din : in std_logic_vector(15 downto 0);
94       per_en : in std_logic;
95       per_wen : in std_logic_vector(1 downto 0);
96       puc : in std_logic;          
97       irq_port1 : out std_logic;
98       irq_port2 : out std_logic;
99       p1_dout : out std_logic_vector(7 downto 0);
100       p1_dout_en : out std_logic_vector(7 downto 0);
101       p1_sel : out std_logic_vector(7 downto 0);
102       p2_dout : out std_logic_vector(7 downto 0);
103       p2_dout_en : out std_logic_vector(7 downto 0);
104       p2_sel : out std_logic_vector(7 downto 0);
105       p3_dout : out std_logic_vector(7 downto 0);
106       p3_dout_en : out std_logic_vector(7 downto 0);
107       p3_sel : out std_logic_vector(7 downto 0);
108       p4_dout : out std_logic_vector(7 downto 0);
109       p4_dout_en : out std_logic_vector(7 downto 0);
110       p4_sel : out std_logic_vector(7 downto 0);
111       p5_dout : out std_logic_vector(7 downto 0);
112       p5_dout_en : out std_logic_vector(7 downto 0);
113       p5_sel : out std_logic_vector(7 downto 0);
114       p6_dout : out std_logic_vector(7 downto 0);
115       p6_dout_en : out std_logic_vector(7 downto 0);
116       p6_sel : out std_logic_vector(7 downto 0);
117       per_dout : out std_logic_vector(15 downto 0)
118     );
119   end component;
120
121
122   signal mclk : std_logic;
123   signal puc : std_logic;
124
125   signal pmem_addr : std_logic_vector (10 downto 0);
126   signal pmem_dout : std_logic_vector (15 downto 0);
127   signal pmem_cen   : std_logic;
128
129   signal dmem_addr : std_logic_vector (8 downto 0);
130   signal dmem_cen  : std_logic;
131   signal dmem_wen  : std_logic_vector (1  downto 0);
132   signal dmem_din  : std_logic_vector (15 downto 0);
133   signal dmem_dout : std_logic_vector (15 downto 0);
134   
135   signal per_din : std_logic_vector (15 downto 0);
136   signal per_dout : std_logic_Vector (15 downto 0);
137   signal per_wen : std_logic_vector (1 downto 0);
138   signal per_en : std_logic;
139   signal per_addr : std_logic_vector (7 downto 0);
140
141 --------------------------------------------------------------------------------
142
143 begin
144   openMSP430_0 : openMSP430 port map (
145     aclk_en       => open,
146     dbg_freeze    => open,
147     dbg_uart_txd  => open,
148     dmem_addr     => dmem_addr,
149     dmem_cen      => dmem_cen,
150     dmem_din      => dmem_din,
151     dmem_wen      => dmem_wen,
152     irq_acc       => open,
153     mclk          => mclk,
154     per_addr      => per_addr,
155     per_din       => per_din,
156     per_wen       => per_wen,
157     per_en        => per_en,
158     pmem_addr     => pmem_addr,
159     pmem_cen      => pmem_cen,
160     pmem_din      => open,
161     pmem_wen      => open,
162     puc           => puc,
163     smclk_en      => open,
164   
165     dbg_uart_rxd  => '0',
166     dco_clk       => CLK_24MHz,
167     dmem_dout     => dmem_dout,
168     irq           => (others => '0'),
169     lfxt_clk      => '0',
170     nmi           => '0',
171     per_dout      => per_dout,
172     pmem_dout     => pmem_dout,
173     reset_n       => RESET
174   );
175
176   ram_8x512_hi : ram_8x512 port map (
177     addr => dmem_addr,
178     clk => mclk,
179     din => dmem_din (15 downto 8),
180     dout => dmem_dout (15 downto 8),
181     en => dmem_cen,
182     we => dmem_wen (1)
183   );
184   
185   ram_8x512_lo : ram_8x512 port map (
186     addr => dmem_addr,
187     clk => mclk,
188     din => dmem_din (7 downto 0),
189     dout => dmem_dout (7 downto 0),
190     en => dmem_cen,
191     we => dmem_wen (0)
192   );
193   
194   rom_8x2k_hi : rom_8x2k port map (
195     addr => pmem_addr,
196     clk => mclk,
197     din => (others => '0'),
198     dout => pmem_dout (15 downto 8),
199     en => pmem_cen,
200     we => '1'
201   );
202       
203   rom_8x2k_lo : rom_8x2k port map (
204     addr => pmem_addr,
205     clk => mclk,
206     din => (others => '0'),
207     dout => pmem_dout (7 downto 0),
208     en => pmem_cen,
209     we => '1'
210   );
211
212
213   omsp_gpio_0 : omsp_gpio
214     generic map (
215       P1_EN => '1',  -- Enable Port 1
216       P2_EN => '1',  -- Enable Port 2
217       P3_EN => '0',  -- Enable Port 3
218       P4_EN => '0',  -- Enable Port 4
219       P5_EN => '0',  -- Enable Port 5
220       P6_EN => '0'   -- Enable Port 6
221     )
222     port map (
223       irq_port1 => open,
224       irq_port2 => open,
225       p1_dout (6 downto 0) => DISPLAY1,
226       p1_dout (7) => open,
227       p1_dout_en => open,
228       p1_sel => open,
229       p2_dout (6 downto 0) => DISPLAY2,
230       p2_dout (7) => open,
231       p2_dout_en => open,
232       p2_sel => open,
233       p3_dout => open,
234       p3_dout_en => open,
235       p3_sel => open,
236       p4_dout => open,
237       p4_dout_en => open,
238       p4_sel => open,
239       p5_dout => open,
240       p5_dout_en => open,
241       p5_sel => open,
242       p6_dout => open,
243       p6_dout_en => open,
244       p6_sel => open,
245       per_dout => per_dout,
246       mclk => mclk,
247       p1_din => (others => '0'),
248       p2_din => (others => '0'),
249       p3_din => (others => '0'),
250       p4_din => (others => '0'),
251       p5_din => (others => '0'),
252       p6_din => (others => '0'),
253       per_addr => per_addr,
254       per_din => per_din,
255       per_en => per_en,
256       per_wen => per_wen,
257       puc => puc
258     );
259
260   
261 end rtl;
262