diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-02-06 14:57:28 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-02-06 15:02:16 +0100 |
commit | d3a753f7d747b007f464a831d6b2b21e87991e46 (patch) | |
tree | 3f20fd5c95294e4dd76ed628e602e5ba0316fbdf /examples/icebreaker | |
parent | 722790ad3cdb497e1b13cd1b4368d8380371eb37 (diff) | |
download | icestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.tar.gz icestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.tar.bz2 icestorm-d3a753f7d747b007f464a831d6b2b21e87991e46.zip |
Add icebreaker example project
Diffstat (limited to 'examples/icebreaker')
-rw-r--r-- | examples/icebreaker/.gitignore | 4 | ||||
-rw-r--r-- | examples/icebreaker/Makefile | 46 | ||||
-rw-r--r-- | examples/icebreaker/example.v | 39 | ||||
-rw-r--r-- | examples/icebreaker/icebreaker.pcf | 64 |
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 |