-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuzzer.py
More file actions
52 lines (43 loc) · 1.66 KB
/
Copy pathbuzzer.py
File metadata and controls
52 lines (43 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env nmigen
from nmigen import *
from nmigen.build import *
from nmigen_boards.icebreaker import ICEBreakerPlatform
from nmigen_lib.buzzer import Buzzer
from nmigen_lib.i2s import I2SOut
from nmigen_lib.pll import PLL
class Top(Elaboratable):
def elaborate(self, platform):
i2s_pins = platform.request('i2s', 0)
clk_pin = platform.request(platform.default_clk, dir='-')
freq_in = platform.default_clk_frequency
pll_freq = 24_000_000
freq_in_mhz = freq_in / 1_000_000
pll_freq_mhz = pll_freq / 1_000_000
buzz_freq = 440 * 2**(-9/12) # Middle C
m = Module()
pll = PLL(freq_in_mhz=freq_in_mhz, freq_out_mhz=pll_freq_mhz)
i2s = I2SOut(pll_freq)
buzzer = Buzzer(buzz_freq, i2s.sample_frequency)
m.domains += pll.domain # override the default 'sync' domain
m.submodules += [pll, buzzer, i2s]
m.d.comb += [
pll.clk_pin.eq(clk_pin),
buzzer.enable.eq(True),
buzzer.ack.eq(i2s.ack),
i2s.samples[0].eq(buzzer.sample),
i2s.samples[1].eq(buzzer.sample),
i2s.stb.eq(buzzer.stb),
i2s_pins.eq(i2s.i2s),
]
return m
if __name__ == '__main__':
platform = ICEBreakerPlatform()
platform.add_resources([
Resource('i2s', 0,
Subsignal('mclk', Pins('1', conn=('pmod', 0), dir='o')),
Subsignal('lrck', Pins('2', conn=('pmod', 0), dir='o')),
Subsignal('sck', Pins('3', conn=('pmod', 0), dir='o')),
Subsignal('sd', Pins('4', conn=('pmod', 0), dir='o')),
),
])
platform.build(Top(), do_program=True)