Skip to content

Commit d69daef

Browse files
author
Mike Stirling
committed
Added top-level, PLL, MOS ROM and CRTC. CRTC seems to behave strangely although the design is passing timing.
1 parent 3975fdf commit d69daef

8 files changed

+1407
-0
lines changed

bbc_micro_de1.vhd

+563
Large diffs are not rendered by default.

bbc_micro_de1_tb.vhd

+262
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
library IEEE;
2+
use IEEE.STD_LOGIC_1164.ALL;
3+
use IEEE.NUMERIC_STD.ALL;
4+
5+
entity bbc_micro_tb is
6+
end entity;
7+
8+
architecture tb of bbc_micro_tb is
9+
component bbc_micro_de1 is
10+
port (
11+
-- Clocks
12+
CLOCK_24 : in std_logic_vector(1 downto 0);
13+
CLOCK_27 : in std_logic_vector(1 downto 0);
14+
CLOCK_50 : in std_logic;
15+
EXT_CLOCK : in std_logic;
16+
17+
-- Switches
18+
SW : in std_logic_vector(9 downto 0);
19+
-- Buttons
20+
KEY : in std_logic_vector(3 downto 0);
21+
22+
-- 7 segment displays
23+
HEX0 : out std_logic_vector(6 downto 0);
24+
HEX1 : out std_logic_vector(6 downto 0);
25+
HEX2 : out std_logic_vector(6 downto 0);
26+
HEX3 : out std_logic_vector(6 downto 0);
27+
-- Red LEDs
28+
LEDR : out std_logic_vector(9 downto 0);
29+
-- Green LEDs
30+
LEDG : out std_logic_vector(7 downto 0);
31+
32+
-- VGA
33+
VGA_R : out std_logic_vector(3 downto 0);
34+
VGA_G : out std_logic_vector(3 downto 0);
35+
VGA_B : out std_logic_vector(3 downto 0);
36+
VGA_HS : out std_logic;
37+
VGA_VS : out std_logic;
38+
39+
-- Serial
40+
UART_RXD : in std_logic;
41+
UART_TXD : out std_logic;
42+
43+
-- PS/2 Keyboard
44+
PS2_CLK : inout std_logic;
45+
PS2_DAT : inout std_logic;
46+
47+
-- I2C
48+
I2C_SCLK : inout std_logic;
49+
I2C_SDAT : inout std_logic;
50+
51+
-- Audio
52+
AUD_XCK : out std_logic;
53+
AUD_BCLK : out std_logic;
54+
AUD_ADCLRCK : out std_logic;
55+
AUD_ADCDAT : in std_logic;
56+
AUD_DACLRCK : out std_logic;
57+
AUD_DACDAT : out std_logic;
58+
59+
-- SRAM
60+
SRAM_ADDR : out std_logic_vector(17 downto 0);
61+
SRAM_DQ : inout std_logic_vector(15 downto 0);
62+
SRAM_CE_N : out std_logic;
63+
SRAM_OE_N : out std_logic;
64+
SRAM_WE_N : out std_logic;
65+
SRAM_UB_N : out std_logic;
66+
SRAM_LB_N : out std_logic;
67+
68+
-- SDRAM
69+
DRAM_ADDR : out std_logic_vector(11 downto 0);
70+
DRAM_DQ : inout std_logic_vector(15 downto 0);
71+
DRAM_BA_0 : in std_logic;
72+
DRAM_BA_1 : in std_logic;
73+
DRAM_CAS_N : in std_logic;
74+
DRAM_CKE : in std_logic;
75+
DRAM_CLK : in std_logic;
76+
DRAM_CS_N : in std_logic;
77+
DRAM_LDQM : in std_logic;
78+
DRAM_RAS_N : in std_logic;
79+
DRAM_UDQM : in std_logic;
80+
DRAM_WE_N : in std_logic;
81+
82+
-- Flash
83+
FL_ADDR : out std_logic_vector(21 downto 0);
84+
FL_DQ : inout std_logic_vector(7 downto 0);
85+
FL_RST_N : in std_logic;
86+
FL_OE_N : in std_logic;
87+
FL_WE_N : in std_logic;
88+
89+
-- GPIO
90+
GPIO_0 : inout std_logic_vector(35 downto 0);
91+
GPIO_1 : inout std_logic_vector(35 downto 0)
92+
);
93+
end component;
94+
95+
96+
signal clock_24 : std_logic_vector(1 downto 0) := "00";
97+
signal clock_27 : std_logic_vector(1 downto 0) := "00";
98+
signal clock_50 : std_logic := '0';
99+
signal ext_clock : std_logic := '0';
100+
signal sw : std_logic_vector(9 downto 0);
101+
signal key : std_logic_vector(3 downto 0);
102+
signal hex0 : std_logic_vector(6 downto 0);
103+
signal hex1 : std_logic_vector(6 downto 0);
104+
signal hex2 : std_logic_vector(6 downto 0);
105+
signal hex3 : std_logic_vector(6 downto 0);
106+
signal ledr : std_logic_vector(9 downto 0);
107+
signal ledg : std_logic_vector(7 downto 0);
108+
signal vga_r : std_logic_vector(3 downto 0);
109+
signal vga_g : std_logic_vector(3 downto 0);
110+
signal vga_b : std_logic_vector(3 downto 0);
111+
signal vga_hs : std_logic;
112+
signal vga_vs : std_logic;
113+
signal uart_rxd : std_logic;
114+
signal uart_txd : std_logic;
115+
signal ps2_clk : std_logic;
116+
signal ps2_dat : std_logic;
117+
signal i2c_sclk : std_logic;
118+
signal i2c_sdat : std_logic;
119+
signal aud_xck : std_logic;
120+
signal aud_bclk : std_logic;
121+
signal aud_adclrck : std_logic;
122+
signal aud_adcdat : std_logic;
123+
signal aud_daclrck : std_logic;
124+
signal aud_dacdat : std_logic;
125+
signal sram_addr : std_logic_vector(17 downto 0);
126+
signal sram_dq : std_logic_vector(15 downto 0);
127+
signal sram_ce_n : std_logic;
128+
signal sram_oe_n : std_logic;
129+
signal sram_we_n : std_logic;
130+
signal sram_ub_n : std_logic;
131+
signal sram_lb_n : std_logic;
132+
signal dram_addr : std_logic_vector(11 downto 0);
133+
signal dram_dq : std_logic_vector(15 downto 0);
134+
signal dram_ba_0 : std_logic;
135+
signal dram_ba_1 : std_logic;
136+
signal dram_cas_n : std_logic;
137+
signal dram_cke : std_logic;
138+
signal dram_clk : std_logic;
139+
signal dram_cs_n : std_logic;
140+
signal dram_ldqm : std_logic;
141+
signal dram_ras_n : std_logic;
142+
signal dram_udqm : std_logic;
143+
signal dram_we_n : std_logic;
144+
signal fl_addr : std_logic_vector(21 downto 0);
145+
signal fl_dq : std_logic_vector(7 downto 0);
146+
signal fl_rst_n : std_logic;
147+
signal fl_oe_n : std_logic;
148+
signal fl_we_n : std_logic;
149+
signal gpio_0 : std_logic_vector(35 downto 0);
150+
signal gpio_1 : std_logic_vector(35 downto 0);
151+
152+
signal n_reset : std_logic := '0';
153+
signal slow : std_logic := '0';
154+
155+
type ram_t is array(0 to 65535) of std_logic_vector(15 downto 0);
156+
signal ram : ram_t;
157+
signal ram_a : std_logic_vector(15 downto 0);
158+
begin
159+
160+
uut: bbc_micro_de1 port map (
161+
clock_24,
162+
clock_27,
163+
clock_50,
164+
ext_clock,
165+
sw,
166+
key,
167+
hex0,
168+
hex1,
169+
hex2,
170+
hex3,
171+
ledr,
172+
ledg,
173+
vga_r,
174+
vga_g,
175+
vga_b,
176+
vga_hs,
177+
vga_vs,
178+
uart_rxd,
179+
uart_txd,
180+
ps2_clk,
181+
ps2_dat,
182+
i2c_sclk,
183+
i2c_sdat,
184+
aud_xck,
185+
aud_bclk,
186+
aud_adclrck,
187+
aud_adcdat,
188+
aud_daclrck,
189+
aud_dacdat,
190+
sram_addr,
191+
sram_dq,
192+
sram_ce_n,
193+
sram_oe_n,
194+
sram_we_n,
195+
sram_ub_n,
196+
sram_lb_n,
197+
dram_addr,
198+
dram_dq,
199+
dram_ba_0,
200+
dram_ba_1,
201+
dram_cas_n,
202+
dram_cke,
203+
dram_clk,
204+
dram_cs_n,
205+
dram_ldqm,
206+
dram_ras_n,
207+
dram_udqm,
208+
dram_we_n,
209+
fl_addr,
210+
fl_dq,
211+
fl_rst_n,
212+
fl_oe_n,
213+
fl_we_n,
214+
gpio_0,
215+
gpio_1
216+
);
217+
218+
sw <= n_reset & slow & "00000000";
219+
clock_50 <= not clock_50 after 10 ns;
220+
clock_27(0) <= not clock_27(0) after 18.5 ns;
221+
clock_27(1) <= not clock_27(1) after 18.5 ns;
222+
clock_24(0) <= not clock_24(0) after 20.8 ns;
223+
clock_24(1) <= not clock_24(1) after 20.8 ns;
224+
225+
reset: process
226+
begin
227+
wait for 100 ns;
228+
n_reset <= '1';
229+
end process;
230+
231+
sram: process(sram_addr,sram_dq,sram_ce_n,sram_oe_n,sram_we_n,sram_ub_n,sram_lb_n)
232+
begin
233+
if sram_ce_n = '0' then
234+
if sram_oe_n = '0' and sram_we_n = '1' then
235+
if sram_ub_n = '0' then
236+
sram_dq(15 downto 8) <= ram(to_integer(unsigned(sram_addr(15 downto 0))))(15 downto 8);
237+
else
238+
sram_dq(15 downto 8) <= (others => 'Z');
239+
end if;
240+
if sram_lb_n = '0' then
241+
sram_dq(7 downto 0) <= ram(to_integer(unsigned(sram_addr(15 downto 0))))(7 downto 0);
242+
else
243+
sram_dq(7 downto 0) <= (others => 'Z');
244+
end if;
245+
else
246+
sram_dq(15 downto 0) <= (others => 'Z');
247+
if sram_we_n = '0' then
248+
if sram_ub_n = '0' then
249+
ram(to_integer(unsigned(sram_addr(15 downto 0))))(15 downto 8) <= sram_dq(15 downto 8);
250+
end if;
251+
if sram_lb_n = '0' then
252+
ram(to_integer(unsigned(sram_addr(15 downto 0))))(7 downto 0) <= sram_dq(7 downto 0);
253+
end if;
254+
end if;
255+
end if;
256+
else
257+
sram_dq <= (others => 'Z');
258+
end if;
259+
end process;
260+
261+
262+
end architecture;

os12.qip

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT"
2+
set_global_assignment -name IP_TOOL_VERSION "9.1"
3+
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "os12.vhd"]

0 commit comments

Comments
 (0)