aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2018-02-06 14:57:28 +0100
committerClifford Wolf <clifford@clifford.at>2018-02-06 15:02:16 +0100
commitd3a753f7d747b007f464a831d6b2b21e87991e46 (patch)
tree3f20fd5c95294e4dd76ed628e602e5ba0316fbdf /examples
parent722790ad3cdb497e1b13cd1b4368d8380371eb37 (diff)
downloadicestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.tar.gz
icestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.tar.bz2
icestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.zip
Add icebreaker example project
Diffstat (limited to 'examples')
-rw-r--r--examples/icebreaker/.gitignore4
-rw-r--r--examples/icebreaker/Makefile46
-rw-r--r--examples/icebreaker/example.v39
-rw-r--r--examples/icebreaker/icebreaker.pcf64
4 files changed, 153 insertions, 0 deletions
diff --git a/examples/icebreaker/.gitignore b/examples/icebreaker/.gitignore
new file mode 100644
index 0000000..797fcc0
--- /dev/null
+++ b/examples/icebreaker/.gitignore
@@ -0,0 +1,4 @@
+example.asc
+example.bin
+example.blif
+example.rpt
diff --git a/examples/icebreaker/Makefile b/examples/icebreaker/Makefile
new file mode 100644
index 0000000..e91de63
--- /dev/null
+++ b/examples/icebreaker/Makefile
@@ -0,0 +1,46 @@
+PROJ = example
+
+PIN_DEF = icebreaker.pcf
+DEVICE = up5k
+
+all: $(PROJ).rpt $(PROJ).bin
+
+%.blif: %.v
+ yosys -p 'synth_ice40 -top top -blif $@' $<
+
+%.asc: $(PIN_DEF) %.blif
+ arachne-pnr -d $(subst up,,$(subst hx,,$(subst lp,,$(DEVICE)))) -o $@ -p $^
+
+%.bin: %.asc
+ icepack $< $@
+
+%.rpt: %.asc
+ icetime -d $(DEVICE) -mtr $@ $<
+
+%_tb: %_tb.v %.v
+ iverilog -o $@ $^
+
+%_tb.vcd: %_tb
+ vvp -N $< +vcd=$@
+
+%_syn.v: %.blif
+ yosys -p 'read_blif -wideports $^; write_verilog $@'
+
+%_syntb: %_tb.v %_syn.v
+ iverilog -o $@ $^ `yosys-config --datdir/ice40/cells_sim.v`
+
+%_syntb.vcd: %_syntb
+ vvp -N $< +vcd=$@
+
+prog: $(PROJ).bin
+ iceprog $<
+
+sudo-prog: $(PROJ).bin
+ @echo 'Executing prog as root!!!'
+ sudo iceprog $<
+
+clean:
+ rm -f $(PROJ).blif $(PROJ).asc $(PROJ).rpt $(PROJ).bin
+
+.SECONDARY:
+.PHONY: all prog clean
diff --git a/examples/icebreaker/example.v b/examples/icebreaker/example.v
new file mode 100644
index 0000000..8985f9e
--- /dev/null
+++ b/examples/icebreaker/example.v
@@ -0,0 +1,39 @@
+module top (
+ input CLK,
+
+ output LED1,
+ output LED2,
+ output LED3,
+ output LED4,
+ output LED5,
+
+ input BTN_N,
+ input BTN1,
+ input BTN2,
+ input BTN3,
+
+ output LEDR_N,
+ output LEDG_N,
+
+ output P1A1, P1A2, P1A3, P1A4, P1A7, P1A8, P1A9, P1A10,
+ output P1B1, P1B2, P1B3, P1B4, P1B7, P1B8, P1B9, P1B10
+);
+
+ localparam BITS = 5;
+ localparam LOG2DELAY = 22;
+
+ reg [BITS+LOG2DELAY-1:0] counter = 0;
+ reg [BITS-1:0] outcnt;
+
+ always @(posedge CLK) begin
+ counter <= counter + 1;
+ outcnt <= counter >> LOG2DELAY;
+ end
+
+ assign {LED1, LED2, LED3, LED4, LED5} = outcnt ^ (outcnt >> 1);
+
+ assign {LEDR_N, LEDG_N} = ~(!BTN_N + BTN1 + BTN2 + BTN3);
+
+ assign {P1A1, P1A2, P1A3, P1A4, P1A7, P1A8, P1A9, P1A10,
+ P1B1, P1B2, P1B3, P1B4, P1B7, P1B8, P1B9, P1B10} = 1 << (outcnt & 15);
+endmodule
diff --git a/examples/icebreaker/icebreaker.pcf b/examples/icebreaker/icebreaker.pcf
new file mode 100644
index 0000000..8780f6d
--- /dev/null
+++ b/examples/icebreaker/icebreaker.pcf
@@ -0,0 +1,64 @@
+# 12 MHz clock
+set_io -nowarn CLK 35
+
+# RS232
+set_io -nowarn RX 6
+set_io -nowarn TX 9
+
+# LEDs and Button
+set_io -nowarn BTN_N 10
+set_io -nowarn LEDR_N 11
+set_io -nowarn LEDG_N 37
+
+# RGB LED Driver
+set_io -nowarn LED_RED_N 39
+set_io -nowarn LED_GRN_N 40
+set_io -nowarn LED_BLU_N 41
+
+# SPI Flash
+set_io -nowarn FLASH_SCK 15
+set_io -nowarn FLASH_SSB 16
+set_io -nowarn FLASH_IO0 14
+set_io -nowarn FLASH_IO1 17
+set_io -nowarn FLASH_IO2 12
+set_io -nowarn FLASH_IO3 13
+
+# PMOD 1A
+set_io -nowarn P1A1 4
+set_io -nowarn P1A2 2
+set_io -nowarn P1A3 47
+set_io -nowarn P1A4 45
+set_io -nowarn P1A7 3
+set_io -nowarn P1A8 48
+set_io -nowarn P1A9 46
+set_io -nowarn P1A10 44
+
+# PMOD 1B
+set_io -nowarn P1B1 43
+set_io -nowarn P1B2 38
+set_io -nowarn P1B3 34
+set_io -nowarn P1B4 31
+set_io -nowarn P1B7 42
+set_io -nowarn P1B8 36
+set_io -nowarn P1B9 32
+set_io -nowarn P1B10 28
+
+# PMOD 2
+set_io -nowarn P2_1 27
+set_io -nowarn P2_2 25
+set_io -nowarn P2_3 21
+set_io -nowarn P2_4 19
+set_io -nowarn P2_7 26
+set_io -nowarn P2_8 23
+set_io -nowarn P2_9 20
+set_io -nowarn P2_10 18
+
+# LEDs and Buttons (PMOD 2)
+set_io -nowarn LED1 27
+set_io -nowarn LED2 25
+set_io -nowarn LED3 21
+set_io -nowarn BTN2 19
+set_io -nowarn LED5 26
+set_io -nowarn LED4 23
+set_io -nowarn BTN1 20
+set_io -nowarn BTN3 18