summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Phillips <david@yeah.nah.nz>2021-10-25 14:54:57 +1300
committerDavid Phillips <david@yeah.nah.nz>2021-10-25 21:03:32 +1300
commite7a3f6377c18b346f455f5f7e5ad2a73d0a032f7 (patch)
treef9fc1134c9ef7ab3519f9dcff1420c6b5d67309c
downloadcolorlight-5a-75e-blinky-e7a3f6377c18b346f455f5f7e5ad2a73d0a032f7.tar.xz
Initial commit
-rw-r--r--.gitignore4
-rw-r--r--Makefile38
-rw-r--r--blink.v23
-rw-r--r--top.lpf24
-rw-r--r--top.v17
5 files changed, 106 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..de9b7e5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.svf
+*.bit
+*.json
+*.config
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a1842aa
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,38 @@
+TOP = top
+OBJS = top.v blink.v
+
+FREQ_MHZ = 65
+DEVICE_TYPE = 25k
+PACKAGE = CABGA256
+SPEED_GRADE = 6
+
+.PHONY: all clean program
+all: $(TOP).svf
+
+clean:
+ rm -f *.svf *.bit *.json
+
+program: $(TOP).svf
+ # probably not very useful to anyone without more configurable paths
+ openocd -f /usr/share/openocd/scripts/interface/ftdi/dp_busblaster_kt-link.cfg \
+ -f ~/jtag/5a-75e.cfg \
+ -c "init; svf $^; shutdown"
+
+%.json: $(OBJS)
+ yosys -p "synth_ecp5 -json $@" $(OBJS)
+
+%.config: %.json %.lpf
+ nextpnr-ecp5 \
+ --$(DEVICE_TYPE) \
+ --package $(PACKAGE) \
+ --speed $(SPEED_GRADE) \
+ --freq $(FREQ_MHZ) \
+ --json $< \
+ --textcfg $@ \
+ --lpf $(word 2,$^)
+
+%.bit %.svf: %.config
+ ecppack \
+ --bit "$*.bit" \
+ --svf "$*.svf" \
+ --input "$^"
diff --git a/blink.v b/blink.v
new file mode 100644
index 0000000..d11cd1c
--- /dev/null
+++ b/blink.v
@@ -0,0 +1,23 @@
+module blink(
+ input rst_i,
+ input clk_i,
+ output reg led_o
+);
+
+parameter COUNTER_WIDTH = 32;
+parameter OVERFLOW = 25_000_000;
+
+reg[COUNTER_WIDTH-1:0] counter;
+
+always @(posedge clk_i) begin
+ if (rst_i) begin
+ counter <= 0;
+ led <= 1;
+ end else if (counter == OVERFLOW-1) begin
+ led_o <= ~led_o;
+ counter <= 0;
+ end else
+ counter <= counter + 1;
+end
+
+endmodule
diff --git a/top.lpf b/top.lpf
new file mode 100644
index 0000000..16ad6e7
--- /dev/null
+++ b/top.lpf
@@ -0,0 +1,24 @@
+LOCATE COMP "clk_i" SITE "P6";
+IOBUF PORT "clk_i" IO_TYPE=LVCMOS33;
+FREQUENCY PORT "clk_i" 25 MHZ;
+
+LOCATE COMP "led_o" SITE "P11";
+IOBUF PORT "led_o" IO_TYPE=LVCMOS33;
+
+LOCATE COMP "oe_n_o" SITE "F12";
+IOBUF PORT "oe_n_o" IO_TYPE=LVCMOS33;
+
+#LOCATE COMP "clk25M_o" SITE "J14";
+#IOBUF PORT "clk25M_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk12M5_o" SITE "K2";
+#IOBUF PORT "clk12M5_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk6M25_o" SITE "K1";
+#IOBUF PORT "clk6M25_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk5M_o" SITE "F15";
+#IOBUF PORT "clk5M_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk4M17_o" SITE "F13";
+#IOBUF PORT "clk4M17_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk3M57_o" SITE "G12";
+#IOBUF PORT "clk3M57_o" IO_TYPE=LVCMOS33;
+#LOCATE COMP "clk3M125_o" SITE "G13";
+#IOBUF PORT "clk3M125_o" IO_TYPE=LVCMOS33;
diff --git a/top.v b/top.v
new file mode 100644
index 0000000..6d98150
--- /dev/null
+++ b/top.v
@@ -0,0 +1,17 @@
+module top(
+ input clk_i,
+ output led_o,
+);
+
+blink #(
+ .COUNTER_WIDTH(24),
+ // 25 MHz clock => 1 Hz
+ .OVERFLOW(12_500_000)
+)
+blink_inst(
+ .clk_i(clk_i),
+ .rst_i(1'b0),
+ .led_o(led_o)
+);
+
+endmodule