2 use IEEE.STD_LOGIC_1164.ALL;
3 use IEEE.STD_LOGIC_ARITH.ALL;
4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
6 entity openMSP430_uart is
8 CLK_24MHz: in std_logic;
14 ROT_FEED : out std_logic;
17 ROT_PRESS : in std_logic
21 --------------------------------------------------------------------------------
23 architecture rtl of openMSP430_uart is
24 component openMSP430 is
26 aclk_en : out std_logic; -- ACLK enable
27 dbg_freeze : out std_logic; -- Freeze peripherals
28 dbg_uart_txd : out std_logic; -- Debug interface: UART TXD
29 dmem_addr : out std_logic_vector (8 downto 0); -- Data Memory address
30 dmem_cen : out std_logic; -- Data Memory chip enable (low active)
31 dmem_din : out std_logic_vector (15 downto 0); -- Data Memory data input
32 dmem_wen : out std_logic_vector (1 downto 0); -- Data Memory write enable (low active)
33 irq_acc : out std_logic_vector (13 downto 0); -- Interrupt request accepted (one-hot signal)
34 mclk : out std_logic; -- Main system clock
35 per_addr : out std_logic_vector (7 downto 0); -- Peripheral address
36 per_din : out std_logic_vector (15 downto 0); -- Peripheral data input
37 per_wen : out std_logic_vector (1 downto 0); -- Peripheral write enable (high active)
38 per_en : out std_logic; -- Peripheral enable (high active)
39 pmem_addr : out std_logic_vector (10 downto 0); -- Program Memory address
40 pmem_cen : out std_logic; -- Program Memory chip enable (low active)
41 pmem_din : out std_logic_vector (15 downto 0); -- Program Memory data input (optional)
42 pmem_wen : out std_logic_vector (1 downto 0); -- Program Memory write enable (low active) (optional)
43 puc : out std_logic; -- Main system reset
44 smclk_en : out std_logic; -- SMCLK enable
46 dbg_uart_rxd : in std_logic; -- Debug interface: UART RXD
47 dco_clk : in std_logic; -- Fast oscillator (fast clock)
48 dmem_dout : in std_logic_vector (15 downto 0); -- Data Memory data output
49 irq : in std_logic_vector (13 downto 0); -- Maskable interrupts
50 lfxt_clk : in std_logic; -- Low frequency oscillator (typ 32kHz)
51 nmi : in std_logic; -- Non-maskable interrupt (asynchronous)
52 per_dout : in std_logic_vector (15 downto 0); -- Peripheral data output
53 pmem_dout : in std_logic_vector (15 downto 0); -- Program Memory data output
54 reset_n : in std_logic -- Reset Pin (low active)
60 addr: in std_logic_VECTOR(8 downto 0);
62 din: in std_logic_VECTOR(7 downto 0);
63 dout: out std_logic_VECTOR(7 downto 0);
71 addr: in std_logic_VECTOR(10 downto 0);
73 din: in std_logic_VECTOR(7 downto 0);
74 dout: out std_logic_VECTOR(7 downto 0);
80 component omsp_quadcount is
82 ADDR : std_logic_vector (15 downto 0));
86 per_addr : in std_logic_vector (7 downto 0);
87 per_en : in std_logic;
88 per_irq : out std_logic;
89 per_dout : out std_logic_vector (15 downto 0);
91 qreset : in std_logic;
92 a0, b0 : in std_logic;
93 qcount : out std_logic_vector (31 downto 0));
94 end component omsp_quadcount;
99 per_addr : in std_logic_vector (7 downto 0);
100 per_din : in std_logic_vector (15 downto 0);
101 per_en : in std_logic;
102 per_wen : in std_logic_vector (1 downto 0);
104 per_irq_acc : in std_logic;
105 per_irq : out std_logic;
106 per_dout : out std_logic_vector (15 downto 0);
114 signal mclk : std_logic;
115 signal puc : std_logic;
116 signal aclk_en : std_logic;
117 signal smclk_en : std_logic;
119 signal irq_acc : std_logic_vector (13 downto 0);
120 signal irq : std_logic_vector (13 downto 0);
122 signal pmem_addr : std_logic_vector (10 downto 0);
123 signal pmem_dout : std_logic_vector (15 downto 0);
124 signal pmem_cen : std_logic;
126 signal dmem_addr : std_logic_vector (8 downto 0);
127 signal dmem_cen : std_logic;
128 signal dmem_wen : std_logic_vector (1 downto 0);
129 signal dmem_din : std_logic_vector (15 downto 0);
130 signal dmem_dout : std_logic_vector (15 downto 0);
132 signal per_din : std_logic_vector (15 downto 0);
133 signal per_dout : std_logic_Vector (15 downto 0);
134 signal per_wen : std_logic_vector (1 downto 0);
135 signal per_en : std_logic;
136 signal per_addr : std_logic_vector (7 downto 0);
139 signal omsp_quadcount_dout : std_logic_vector (15 downto 0);
140 signal omsp_quadcount_irq : std_logic;
142 signal uart_dout : std_logic_vector (15 downto 0);
143 signal uart_irq : std_logic;
146 --------------------------------------------------------------------------------
149 openMSP430_0 : openMSP430 port map (
152 dbg_uart_txd => open,
153 dmem_addr => dmem_addr,
154 dmem_cen => dmem_cen,
155 dmem_din => dmem_din,
156 dmem_wen => dmem_wen,
159 per_addr => per_addr,
163 pmem_addr => pmem_addr,
164 pmem_cen => pmem_cen,
168 smclk_en => smclk_en,
171 dco_clk => CLK_24MHz,
172 dmem_dout => dmem_dout,
176 per_dout => per_dout,
177 pmem_dout => pmem_dout,
181 ram_8x512_hi : ram_8x512 port map (
184 din => dmem_din (15 downto 8),
185 dout => dmem_dout (15 downto 8),
190 ram_8x512_lo : ram_8x512 port map (
193 din => dmem_din (7 downto 0),
194 dout => dmem_dout (7 downto 0),
199 rom_8x2k_hi : rom_8x2k port map (
202 din => (others => '0'),
203 dout => pmem_dout (15 downto 8),
208 rom_8x2k_lo : rom_8x2k port map (
211 din => (others => '0'),
212 dout => pmem_dout (7 downto 0),
217 omsp_quadcount_1: omsp_quadcount
223 per_addr => per_addr,
225 per_irq => omsp_quadcount_irq,
226 per_dout => omsp_quadcount_dout,
234 uart_o : uart port map (
236 per_addr => per_addr,
243 per_dout => uart_dout,
250 --------------------------------------------------------------------------------
252 per_dout <= uart_dout or omsp_quadcount_dout;
254 irq <= (6 => uart_irq,
255 7 => omsp_quadcount_irq,