2 use IEEE.STD_LOGIC_1164.ALL;
3 use IEEE.STD_LOGIC_ARITH.ALL;
4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
6 entity openMSP430_fpga is
8 CLK_24MHz: in std_logic;
10 DISPLAY1: out std_logic_vector(6 downto 0);
11 DISPLAY2: out std_logic_vector(6 downto 0)
15 --------------------------------------------------------------------------------
17 architecture rtl of openMSP430_fpga is
18 component openMSP430 is
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
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)
54 addr: in std_logic_VECTOR(8 downto 0);
56 din: in std_logic_VECTOR(7 downto 0);
57 dout: out std_logic_VECTOR(7 downto 0);
65 addr: in std_logic_VECTOR(10 downto 0);
67 din: in std_logic_VECTOR(7 downto 0);
68 dout: out std_logic_VECTOR(7 downto 0);
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);
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)
122 signal mclk : std_logic;
123 signal puc : std_logic;
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;
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);
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);
141 --------------------------------------------------------------------------------
144 openMSP430_0 : openMSP430 port map (
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,
154 per_addr => per_addr,
158 pmem_addr => pmem_addr,
159 pmem_cen => pmem_cen,
166 dco_clk => CLK_24MHz,
167 dmem_dout => dmem_dout,
168 irq => (others => '0'),
171 per_dout => per_dout,
172 pmem_dout => pmem_dout,
176 ram_8x512_hi : ram_8x512 port map (
179 din => dmem_din (15 downto 8),
180 dout => dmem_dout (15 downto 8),
185 ram_8x512_lo : ram_8x512 port map (
188 din => dmem_din (7 downto 0),
189 dout => dmem_dout (7 downto 0),
194 rom_8x2k_hi : rom_8x2k port map (
197 din => (others => '0'),
198 dout => pmem_dout (15 downto 8),
203 rom_8x2k_lo : rom_8x2k port map (
206 din => (others => '0'),
207 dout => pmem_dout (7 downto 0),
213 omsp_gpio_0 : omsp_gpio
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
225 p1_dout (6 downto 0) => DISPLAY1,
229 p2_dout (6 downto 0) => DISPLAY2,
245 per_dout => per_dout,
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,