Skip to content

Commit

Permalink
Add iCESugar-nano board
Browse files Browse the repository at this point in the history
Follow the 6 steps to add support for a new target.

Step 1: Locate input and output pins.

Step 2: Add pin constraint file. This covers clock input, LED and UART
        output.

Step 3: Create a clock generator. The chip has no internal clock
        generator so the external 12 MHz clock is used.

Step 4: Add top level servant_ice40_cm36 which connects the one-wire
        output of servant to both the LED and UART pin.

Step 5: Add fileset including the new top level and pin constraints.

Step 6: Add target icesugar-nano.
  • Loading branch information
paller committed Feb 28, 2025
1 parent 01e74ef commit 9ecaa33
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 0 deletions.
8 changes: 8 additions & 0 deletions data/icesugar_nano.pcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# 12 MHz external clock
set_io i_clk D1

# LED
set_io o_led B6

# UART
set_io o_uart_tx B3
16 changes: 16 additions & 0 deletions servant.core
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@ filesets:

icesugar : {files: [data/icesugar.pcf : {file_type : PCF}]}

icesugar_nano:
files:
- data/icesugar_nano.pcf : {file_type : PCF}
- servant/servant_ice40_cm36.v : {file_type : verilogSource}

icev_wireless : {files: [data/icev_wireless.pcf : {file_type : PCF}]}

gmm7550:
Expand Down Expand Up @@ -440,6 +445,17 @@ targets:
pnr: next
toplevel : service

icesugar-nano:
default_tool : icestorm
description : iCE40LP1K Development Board by MuseLab
filesets : [mem_files, soc, icesugar_nano]
parameters : [memfile=blinky.hex, memsize=7168]
tools:
icestorm:
nextpnr_options: [--lp1k, --package, cm36, --freq, 12]
pnr: next
toplevel : servant_ice40_cm36

icev_wireless:
default_tool : icestorm
description: ICE-V Wireless
Expand Down
34 changes: 34 additions & 0 deletions servant/servant_ice40_cm36.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
`default_nettype none
module servant_ice40_cm36 (
input wire i_clk,
output wire o_led,
output wire o_uart_tx
);

parameter memfile = "blinky.hex";
parameter memsize = 7168;

wire wb_clk;
wire wb_rst;
wire q;

/* Duplicate the SERV output to both LED and UART pins. */
assign o_led = q;
assign o_uart_tx = q;

/* iCE40 CM36 has no PLL. Drive everything from the external clock. */
assign wb_clk = i_clk;

/* Board has no button that can be used for reset. */
assign wb_rst = 1'b0;

servant #(
.memfile(memfile),
.memsize(memsize)
) servant (
.wb_clk(wb_clk),
.wb_rst(wb_rst),
.q (q)
);

endmodule

0 comments on commit 9ecaa33

Please sign in to comment.