Add icemulti example

This commit is contained in:
Clifford Wolf 2017-09-14 19:09:52 +02:00
parent d0f5b2ee8e
commit 5c4d4db08d
8 changed files with 153 additions and 0 deletions

4
examples/icemulti/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/app?.asc
/app?.bin
/app?.blif
/config.bin

View File

@ -0,0 +1,20 @@
prog: config.bin
sudo iceprog config.bin
sudo-prog: config.bin
@echo 'Executing prog as root!!!'
sudo iceprog config.bin
config.bin: app0.bin app1.bin app2.bin app3.bin
icemulti -v -A16 -p0 -o config.bin app0.bin app1.bin app2.bin app3.bin
app%.bin: app%.v icestick.pcf
yosys -p "synth_ice40 -top top -blif $(basename $<).blif" $<
arachne-pnr -o $(basename $<).asc -d 1k -P tq144 -p icestick.pcf $(basename $<).blif
icetime -d hx1k -c 25 $(basename $<).asc
icepack $(basename $<).asc $(basename $<).bin
clean:
rm -f app?.asc app?.bin app?.blif config.bin
.PHONY: prog sudo-prog clean

6
examples/icemulti/README Normal file
View File

@ -0,0 +1,6 @@
A simple example for icemulti using the iCEstick dev board.
Each of the four images blinks another LED. After 7 blinks
the next image is loaded automatically.

28
examples/icemulti/app0.v Normal file
View File

@ -0,0 +1,28 @@
module top (
input clk,
output LED1, LED2, LED3, LED4, LED5
);
localparam LOG2DELAY = 22;
reg [LOG2DELAY-1:0] counter = 0;
reg [3:0] counter2 = 0;
reg state = 0;
always @(posedge clk) begin
counter <= counter + 1;
counter2 <= counter2 + !counter;
state <= state ^ !counter;
end
assign LED1 = state;
assign LED2 = 0;
assign LED3 = 0;
assign LED4 = 0;
assign LED5 = 1;
SB_WARMBOOT WB (
.BOOT(&counter2),
.S1(1'b 0),
.S0(1'b 1)
);
endmodule

28
examples/icemulti/app1.v Normal file
View File

@ -0,0 +1,28 @@
module top (
input clk,
output LED1, LED2, LED3, LED4, LED5
);
localparam LOG2DELAY = 22;
reg [LOG2DELAY-1:0] counter = 0;
reg [3:0] counter2 = 0;
reg state = 0;
always @(posedge clk) begin
counter <= counter + 1;
counter2 <= counter2 + !counter;
state <= state ^ !counter;
end
assign LED1 = 0;
assign LED2 = state;
assign LED3 = 0;
assign LED4 = 0;
assign LED5 = 1;
SB_WARMBOOT WB (
.BOOT(&counter2),
.S1(1'b 1),
.S0(1'b 0)
);
endmodule

28
examples/icemulti/app2.v Normal file
View File

@ -0,0 +1,28 @@
module top (
input clk,
output LED1, LED2, LED3, LED4, LED5
);
localparam LOG2DELAY = 22;
reg [LOG2DELAY-1:0] counter = 0;
reg [3:0] counter2 = 0;
reg state = 0;
always @(posedge clk) begin
counter <= counter + 1;
counter2 <= counter2 + !counter;
state <= state ^ !counter;
end
assign LED1 = 0;
assign LED2 = 0;
assign LED3 = state;
assign LED4 = 0;
assign LED5 = 1;
SB_WARMBOOT WB (
.BOOT(&counter2),
.S1(1'b 1),
.S0(1'b 1)
);
endmodule

28
examples/icemulti/app3.v Normal file
View File

@ -0,0 +1,28 @@
module top (
input clk,
output LED1, LED2, LED3, LED4, LED5
);
localparam LOG2DELAY = 22;
reg [LOG2DELAY-1:0] counter = 0;
reg [3:0] counter2 = 0;
reg state = 0;
always @(posedge clk) begin
counter <= counter + 1;
counter2 <= counter2 + !counter;
state <= state ^ !counter;
end
assign LED1 = 0;
assign LED2 = 0;
assign LED3 = 0;
assign LED4 = state;
assign LED5 = 1;
SB_WARMBOOT WB (
.BOOT(&counter2),
.S1(1'b 0),
.S0(1'b 0)
);
endmodule

View File

@ -0,0 +1,11 @@
# full iCEstick pinout:
# http://www.pighixxx.com/test/portfolio-items/icestick/
set_io --warn-no-port RX 9
set_io --warn-no-port TX 8
set_io LED1 99
set_io LED2 98
set_io LED3 97
set_io LED4 96
set_io LED5 95
set_io clk 21