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
83 per_addr : in std_logic_vector (7 downto 0);
84 per_din : in std_logic_vector (15 downto 0); -- unused
85 per_en : in std_logic;
86 per_wen : in std_logic_vector (1 downto 0); -- unused
87 puc : in std_logic; -- unused
88 per_irq_acc : in std_logic; -- unused
89 per_irq : out std_logic; -- unused
90 per_dout : out std_logic_vector (15 downto 0);
92 qcount : in std_logic_vector (31 downto 0)
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);
113 component qcounter is
115 clock : in std_logic;
116 reset : in std_logic;
117 a0, b0 : in std_logic;
118 qcount : out std_logic_vector (31 downto 0);
119 a_rise, a_fall, b_rise, b_fall, ab_event : out std_logic;
120 ab_error : out std_logic
125 signal mclk : std_logic;
126 signal puc : std_logic;
127 signal aclk_en : std_logic;
128 signal smclk_en : std_logic;
130 signal irq_acc : std_logic_vector (13 downto 0);
131 signal irq : std_logic_vector (13 downto 0);
133 signal pmem_addr : std_logic_vector (10 downto 0);
134 signal pmem_dout : std_logic_vector (15 downto 0);
135 signal pmem_cen : std_logic;
137 signal dmem_addr : std_logic_vector (8 downto 0);
138 signal dmem_cen : std_logic;
139 signal dmem_wen : std_logic_vector (1 downto 0);
140 signal dmem_din : std_logic_vector (15 downto 0);
141 signal dmem_dout : std_logic_vector (15 downto 0);
143 signal per_din : std_logic_vector (15 downto 0);
144 signal per_dout : std_logic_Vector (15 downto 0);
145 signal per_wen : std_logic_vector (1 downto 0);
146 signal per_en : std_logic;
147 signal per_addr : std_logic_vector (7 downto 0);
150 signal omsp_quadcount_dout : std_logic_vector (15 downto 0);
151 signal omsp_quadcount_irq : std_logic;
153 signal uart_dout : std_logic_vector (15 downto 0);
154 signal uart_irq : std_logic;
156 signal qcount : std_logic_vector (31 downto 0);
158 --------------------------------------------------------------------------------
161 openMSP430_0 : openMSP430 port map (
164 dbg_uart_txd => open,
165 dmem_addr => dmem_addr,
166 dmem_cen => dmem_cen,
167 dmem_din => dmem_din,
168 dmem_wen => dmem_wen,
171 per_addr => per_addr,
175 pmem_addr => pmem_addr,
176 pmem_cen => pmem_cen,
180 smclk_en => smclk_en,
183 dco_clk => CLK_24MHz,
184 dmem_dout => dmem_dout,
188 per_dout => per_dout,
189 pmem_dout => pmem_dout,
193 ram_8x512_hi : ram_8x512 port map (
196 din => dmem_din (15 downto 8),
197 dout => dmem_dout (15 downto 8),
202 ram_8x512_lo : ram_8x512 port map (
205 din => dmem_din (7 downto 0),
206 dout => dmem_dout (7 downto 0),
211 rom_8x2k_hi : rom_8x2k port map (
214 din => (others => '0'),
215 dout => pmem_dout (15 downto 8),
220 rom_8x2k_lo : rom_8x2k port map (
223 din => (others => '0'),
224 dout => pmem_dout (7 downto 0),
229 omsp_quadcount_0 : omsp_quadcount port map (
231 per_addr => per_addr,
232 per_din => (others => '0'),
237 per_irq => omsp_quadcount_irq,
238 per_dout => omsp_quadcount_dout,
243 uart_o : uart port map (
245 per_addr => per_addr,
252 per_dout => uart_dout,
258 qcounter_0 : qcounter port map (
272 --------------------------------------------------------------------------------
274 per_dout <= uart_dout or omsp_quadcount_dout;
276 irq <= (6 => uart_irq,
277 7 => omsp_quadcount_irq,