diff options
-rw-r--r-- | .gitignore | 8 | ||||
-rw-r--r-- | .gitmodules | 6 | ||||
-rw-r--r-- | Makefile | 23 | ||||
-rw-r--r-- | src/.gitignore | 3 | ||||
m--------- | src/ghdl | 0 | ||||
m--------- | src/ghdl-yosys-plugin | 0 | ||||
-rw-r--r-- | src/vhdl-demo/.gitignore | 1 | ||||
-rw-r--r-- | src/vhdl-demo/Makefile | 45 | ||||
-rw-r--r-- | src/vhdl-demo/ice40hx8k-evb.pcf | 5 | ||||
-rw-r--r-- | src/vhdl-demo/top.vhd | 40 |
10 files changed, 125 insertions, 6 deletions
@@ -1,4 +1,6 @@ -bin/ -sbin/ -share/ +/bin +/sbin +/share +/include +/lib diff --git a/.gitmodules b/.gitmodules index 5f5cd9c..56456e8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,9 @@ [submodule "src/flashrom"] path = src/flashrom url = git://git.panaceas.org/iCE40/flashrom +[submodule "src/ghdl"] + path = src/ghdl + url = git://git.panaceas.org/iCE40/ghdl +[submodule "src/ghdl-yosys-plugin"] + path = src/ghdl-yosys-plugin + url = git://git.panaceas.org/iCE40/ghdl-yosys-plugin @@ -1,16 +1,35 @@ PREFIX=${PWD} -default:src/tools.stamp src/evb-yosys-demo.stamp +default:src/tools.stamp src/evb-yosys-demo.stamp src/vhdl-demo.stamp + +src/vhdl-demo.stamp: src/tools.stamp + ${MAKE} -C src/vhdl-demo + touch $@ src/evb-yosys-demo.stamp: src/tools.stamp ${MAKE} -C src/evb-yosys-demo/ice40hx8k-evb ${MAKE} -C src/evb-yosys-demo/ice40-io-video touch $@ -src/tools.stamp: src/nextpnr.stamp src/yosys.stamp src/flashrom.stamp +src/tools.stamp: src/nextpnr.stamp src/yosys.stamp src/flashrom.stamp src/ghdl-yosys-plugin.stamp src/ghdl.stamp + touch $@ + + +src/ghdl-yosys-plugin.stamp: src/ghdl.stamp src/yosys.stamp + ${MAKE} -C src/ghdl-yosys-plugin GHDL=${PREFIX}/bin/ghdl YOSYS_CONFIG=${PREFIX}/bin/yosys-config + ${MAKE} -C src/ghdl-yosys-plugin GHDL=${PREFIX}/bin/ghdl YOSYS_CONFIG=${PREFIX}/bin/yosys-config install + touch $@ + +src/ghdl.stamp: src/ghdl-build/Makefile + ${MAKE} -C src/ghdl-build + ${MAKE} -C src/ghdl-build install touch $@ +src/ghdl-build/Makefile: + mkdir -p src/ghdl-build + (cd src/ghdl-build && ../ghdl/configure --prefix=${PREFIX}) + src/yosys.stamp:#src/yosys/Makefile # the muppets did not make this easy if [ -d src/yosys/abc]; then ln -s ../abc src/yosys/abc; fi diff --git a/src/.gitignore b/src/.gitignore index ac5abaf..d41d203 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1,2 @@ -*.stamp +/*.stamp +/ghdl-build diff --git a/src/ghdl b/src/ghdl new file mode 160000 +Subproject 635824fbd90bb79d0c0e617bd5457fd1c2c015f diff --git a/src/ghdl-yosys-plugin b/src/ghdl-yosys-plugin new file mode 160000 +Subproject 5b64ccfdeee6c75f70487c1ea153ec3e1fb26cd diff --git a/src/vhdl-demo/.gitignore b/src/vhdl-demo/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/src/vhdl-demo/.gitignore @@ -0,0 +1 @@ +/build diff --git a/src/vhdl-demo/Makefile b/src/vhdl-demo/Makefile new file mode 100644 index 0000000..8a68e1f --- /dev/null +++ b/src/vhdl-demo/Makefile @@ -0,0 +1,45 @@ +PREFIX=../.. +BINDIR=${PREFIX}/bin + +YOSYS=${BINDIR}/yosys +NEXTPNR=${BINDIR}/nextpnr-ice40 +ICEPACK=${BINDIR}/icepack +ICETIME=${BINDIR}/icetime +FLASH=${BINDIR}/flash +GHDL=${BINDIR}/ghdl + +BUILDDIR = ./build +FPGA_TYPE = hx8k +FPGA_PKG = ct256 +PCF = ice40hx8k-evb.pcf +RMDIR = rmdir + +# Targets +top: $(BUILDDIR)/top.rpt $(BUILDDIR)/top.bin + +flash: $(BUILDDIR)/top.bin + ${FLASH} $(BUILDDIR)/top.bin + +$(BUILDDIR)/%.json: %.vhd + @mkdir -p $(@D) + ${YOSYS} -m ghdl -ql $(subst .json,,$@).log -p 'ghdl $< -e ${<:%.vhd=%}; synth_ice40 -abc9 -device u -top top -json $@' + +%.asc: %.json + ${NEXTPNR} --${FPGA_TYPE} --package ${FPGA_PKG} --json $< --pcf ${PCF} --asc $@ + +%.bin: %.asc + ${ICEPACK} $< $@ + +%.rpt: %.asc + ${ICETIME} -d $(FPGA_TYPE) -mtr $@ $< + +all: top + +clean: + rm -f $(BUILDDIR)/*.asc $(BUILDDIR)/*.bin $(BUILDDIR)/*.rpt $(BUILDDIR)/*.log $(BUILDDIR)/*.json + $(RMDIR) $(BUILDDIR) + +# Uncomment this line if you want to keep the intermediate .json and .asc files +# .PRECIOUS: $(BUILDDIR)/%.json %.asc + +.PHONY: all prog clean top diff --git a/src/vhdl-demo/ice40hx8k-evb.pcf b/src/vhdl-demo/ice40hx8k-evb.pcf new file mode 100644 index 0000000..43f6208 --- /dev/null +++ b/src/vhdl-demo/ice40hx8k-evb.pcf @@ -0,0 +1,5 @@ +set_io CLK100MHZ J3
+set_io btns[0] K11
+set_io btns[1] P13
+set_io leds[0] M12
+set_io leds[1] R16
diff --git a/src/vhdl-demo/top.vhd b/src/vhdl-demo/top.vhd new file mode 100644 index 0000000..99d0293 --- /dev/null +++ b/src/vhdl-demo/top.vhd @@ -0,0 +1,40 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + + +entity top is + port ( + CLK100MHZ: in std_logic; + + -- various stuff defined in the xdc file needs to be defined somewhere + leds: out std_logic_vector(1 downto 0); + btns: in std_logic_vector(1 downto 0) + + ); +end top; + + +architecture rtl of top is + signal led: std_logic; +begin + resetLogic: process (CLK100MHZ) + variable i: unsigned(31 downto 0) := to_unsigned(0, 32); + begin + if rising_edge(CLK100MHZ) then + if i >= to_unsigned(100000000, 32) then + led <= not led; + i := to_unsigned(0,32); + else + i := i + 1; + end if; + end if; + end process; + + leds(0) <= led; + leds(1) <= not led; +end rtl; + + + + |