aboutsummaryrefslogtreecommitdiff
path: root/contrib/firmware/angie/hdl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/firmware/angie/hdl')
-rw-r--r--contrib/firmware/angie/hdl/Makefile109
-rw-r--r--contrib/firmware/angie/hdl/README18
-rw-r--r--contrib/firmware/angie/hdl/set_env.sh14
-rw-r--r--contrib/firmware/angie/hdl/src/angie_openocd.ucf35
-rw-r--r--contrib/firmware/angie/hdl/src/angie_openocd.vhd66
5 files changed, 242 insertions, 0 deletions
diff --git a/contrib/firmware/angie/hdl/Makefile b/contrib/firmware/angie/hdl/Makefile
new file mode 100644
index 0000000..c2c74a0
--- /dev/null
+++ b/contrib/firmware/angie/hdl/Makefile
@@ -0,0 +1,109 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 by NanoXplore, France - all rights reserved
+
+# Needed by timing test
+export PROJECT := angie_openocd
+TARGET_PART := xc6slx9-2tqg144
+export TOPLEVEL := S609
+
+# Detects the ROOT dir from the .git marker
+sp :=
+sp +=
+_walk = $(if $1,$(wildcard /$(subst $(sp),/,$1)/$2) $(call _walk,$(wordlist 2,$(words $1),x $1),$2))
+_find = $(firstword $(call _walk,$(strip $(subst /, ,$1)),$2))
+_ROOT := $(patsubst %/.git,%,$(call _find,$(CURDIR),.git))
+
+SHELL := /bin/bash
+TOP_DIR := $(realpath $(_ROOT))
+HDL_DIR := $(CURDIR)
+SRC_DIR := $(HDL_DIR)/src
+TOOLS_DIR := $(TOP_DIR)/tools/build
+COMMON_DIR := $(TOP_DIR)/common/hdl
+COMMON_HDL_DIR := $(COMMON_DIR)/src
+COMMON_LIBS := $(COMMON_DIR)/libs
+HDL_BUILD_DIR := $(HDL_DIR)/build
+OUTPUT_DIR ?= $(HDL_BUILD_DIR)/output
+FINAL_OUTPUT_DIR := $(OUTPUT_DIR)/$(PROJECT)
+
+# Tools
+MKDIR := mkdir -p
+CP := cp -f
+
+HDL_SRC_PATH := $(addprefix $(COMMON_DIR)/ips/, $(HDL_IPS)) $(HDL_DIR)
+VHDSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vhd))
+VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.v))
+VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vh))
+
+CONSTRAINTS ?= $(SRC_DIR)/$(PROJECT).ucf
+
+COMMON_OPTS := -intstyle xflow
+XST_OPTS :=
+NGDBUILD_OPTS :=
+MAP_OPTS := -mt 2
+PAR_OPTS := -mt 4
+BITGEN_OPTS := -g Binary:Yes
+
+XILINX_PLATFORM := lin64
+PATH := $(PATH):$(XILINX_HOME)/bin/$(XILINX_PLATFORM)
+
+RUN = @echo -ne "\n\n\e[1;33m======== $(1) ========\e[m\n\n"; \
+ cd $(HDL_BUILD_DIR) && $(XILINX_HOME)/bin/$(XILINX_PLATFORM)/$(1)
+
+compile: $(HDL_BUILD_DIR)/$(PROJECT).bin
+
+install: $(HDL_BUILD_DIR)/$(PROJECT).bin
+ $(MKDIR) $(FINAL_OUTPUT_DIR)
+ $(CP) $(HDL_BUILD_DIR)/$(PROJECT).bin $(FINAL_OUTPUT_DIR)
+
+clean:
+ rm -rf $(HDL_BUILD_DIR)
+
+$(HDL_BUILD_DIR)/$(PROJECT).bin: $(HDL_BUILD_DIR)/$(PROJECT).ncd
+ $(call RUN,bitgen) $(COMMON_OPTS) $(BITGEN_OPTS) \
+ -w $(PROJECT).ncd $(PROJECT).bit
+
+$(HDL_BUILD_DIR)/$(PROJECT).ncd: $(HDL_BUILD_DIR)/$(PROJECT).map.ncd
+ $(call RUN,par) $(COMMON_OPTS) $(PAR_OPTS) \
+ -w $(PROJECT).map.ncd $(PROJECT).ncd $(PROJECT).pcf
+
+$(HDL_BUILD_DIR)/$(PROJECT).map.ncd: $(HDL_BUILD_DIR)/$(PROJECT).ngd
+ $(call RUN,map) $(COMMON_OPTS) $(MAP_OPTS) \
+ -p $(TARGET_PART) \
+ -w $(PROJECT).ngd -o $(PROJECT).map.ncd $(PROJECT).pcf
+
+$(HDL_BUILD_DIR)/$(PROJECT).ngd: $(HDL_BUILD_DIR)/$(PROJECT).ngc
+ $(call RUN,ngdbuild) $(COMMON_OPTS) $(NGDBUILD_OPTS) \
+ -p $(TARGET_PART) -uc $(CONSTRAINTS) \
+ $(PROJECT).ngc $(PROJECT).ngd
+
+$(HDL_BUILD_DIR)/$(PROJECT).ngc: $(HDL_BUILD_DIR)/$(PROJECT).prj $(HDL_BUILD_DIR)/$(PROJECT).scr
+ $(call RUN,xst) $(COMMON_OPTS) -ifn $(PROJECT).scr
+
+$(HDL_BUILD_DIR)/$(PROJECT).scr: | $(HDL_BUILD_DIR)
+ @echo "Updating $@"
+ @mkdir -p $(HDL_BUILD_DIR)
+ @rm -f $@
+ @echo "run" \
+ "-ifn $(PROJECT).prj" \
+ "-ofn $(PROJECT).ngc" \
+ "-ifmt mixed" \
+ "$(XST_OPTS)" \
+ "-top $(TOPLEVEL)" \
+ "-ofmt NGC" \
+ "-p $(TARGET_PART)" \
+ > $(HDL_BUILD_DIR)/$(PROJECT).scr
+
+$(HDL_BUILD_DIR)/$(PROJECT).prj: | $(HDL_BUILD_DIR)
+ @echo "Updating $@"
+ @rm -f $@
+ @$(foreach file,$(VSOURCE),echo "verilog work \"$(file)\"" >> $@;)
+ @$(foreach file,$(VHDSOURCE),echo "vhdl work \"$(file)\"" >> $@;)
+ @$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vhd),echo "vhdl $(lib) \"$(file)\"" >> $@;))
+ @$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.v),echo "verilog $(lib) \"$(file)\"" >> $@;))
+ @$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vh),echo "verilog $(lib) \"$(file)\"" >> $@;))
+
+$(HDL_BUILD_DIR):
+ $(MKDIR) $(HDL_BUILD_DIR)
+
+.PHONY: clean compile install
+
diff --git a/contrib/firmware/angie/hdl/README b/contrib/firmware/angie/hdl/README
new file mode 100644
index 0000000..00578ff
--- /dev/null
+++ b/contrib/firmware/angie/hdl/README
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 by NanoXplore, France - all rights reserved
+
+This is the source code of Nanoxplore USB-JTAG Adapter Angie's bitstream.
+This bitstream is for the "xc6slx9-2tqg144" Spartan-6 Xilinx FPGA.
+
+To generate this bitstream, you need to install Xilinx ISE Webpack 14.7
+You will need to give the ISE software path : export XILINX_HOME=path/to/ise/sw
+Please set the enviromnent first by executing the ". ./set_env.sh"
+
+All you have to do now is to write your vhd and constrains codes.
+
+One all is setup, you can use the make commands:
+ make compile : to compile your (.vhd & .ucf) files in the "src" directory
+ A directory named "build" will be created, which contains all the generated
+ files including the bitstream file.
+
+ make clean : to delete the build directory.
diff --git a/contrib/firmware/angie/hdl/set_env.sh b/contrib/firmware/angie/hdl/set_env.sh
new file mode 100644
index 0000000..60e9737
--- /dev/null
+++ b/contrib/firmware/angie/hdl/set_env.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 by NanoXplore, France - all rights reserved
+
+[ -z "${XILINX_HOME}" ] && export XILINX_HOME=/home/software/Xilinx/ISE/14.7/ISE_DS/ISE
+export PATH="$XILINX_HOME:$PATH"
+echo "SET XILINX_HOME to ${XILINX_HOME}"
+# This is needed for isim
+XILINX_HOME_BASE=${XILINX_HOME}/..
+for part in common EDK PlanAhead ISE
+do
+ el=${XILINX_HOME_BASE}/${part}
+ . ${el}/.settings64.sh ${el}
+done
diff --git a/contrib/firmware/angie/hdl/src/angie_openocd.ucf b/contrib/firmware/angie/hdl/src/angie_openocd.ucf
new file mode 100644
index 0000000..fda3cda
--- /dev/null
+++ b/contrib/firmware/angie/hdl/src/angie_openocd.ucf
@@ -0,0 +1,35 @@
+## SPDX-License-Identifier: BSD-3-Clause
+##--------------------------------------------------------------------------
+## Project Context: nanoXplore USB-JTAG Adapter Board, Spartan6
+## Design Name: NJTAG USB-JTAG Adapter FPGA source code
+## Module Name: _angie_openocd.ucf
+## Target Device: XC6SLX9-2 TQ144
+## Tool versions: ISE Webpack 13.2 -> 14.2
+## Author: Ahmed BOUDJELIDA nanoXplore SAS
+##--------------------------------------------------------------------------
+# WARNING: PullUps on JTAG inputs should be enabled after configuration
+# (bitgen option) since the pins are not connected.
+
+net TRST LOC = 'P48' ;
+net TMS LOC = 'P43' ;
+net TCK LOC = 'P44' ;
+net TDI LOC = 'P45' ;
+net TDO LOC = 'P46' ;
+net SRST LOC = 'P61' ;
+net SI_TDO LOC = 'P16' ;
+net SO_TRST LOC = 'P32' ;
+net SO_TMS LOC = 'P27' ;
+net SO_TCK LOC = 'P30' ;
+net SO_TDI LOC = 'P26' ;
+net SO_SRST LOC = 'P12' ;
+net ST_0 LOC = 'P29' ;
+net ST_1 LOC = 'P21' ;
+net ST_2 LOC = 'P11' ;
+net FTP<0> LOC = 'P121' ;
+net FTP<1> LOC = 'P120' ;
+net FTP<2> LOC = 'P119' ;
+net FTP<3> LOC = 'P116' ;
+net FTP<4> LOC = 'P111' ;
+net FTP<5> LOC = 'P112' ;
+net FTP<6> LOC = 'P115' ;
+net FTP<7> LOC = 'P114' ;
diff --git a/contrib/firmware/angie/hdl/src/angie_openocd.vhd b/contrib/firmware/angie/hdl/src/angie_openocd.vhd
new file mode 100644
index 0000000..d79c0fe
--- /dev/null
+++ b/contrib/firmware/angie/hdl/src/angie_openocd.vhd
@@ -0,0 +1,66 @@
+-- SPDX-License-Identifier: BSD-3-Clause
+----------------------------------------------------------------------------
+-- Project Context: nanoXplore USB-JTAG Adapter Board, Spartan6
+-- Design Name: NJTAG USB-JTAG Adapter FPGA source code
+-- Module Name: _angie_openocd.vhd
+-- Target Device: XC6SLX9-2 TQ144
+-- Tool versions: ISE Webpack 13.2 -> 14.2
+-- Author: Ahmed BOUDJELIDA nanoXplore SAS
+----------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+use ieee.std_logic_unsigned.all;
+library UNISIM;
+use UNISIM.VComponents.all;
+
+entity S609 is port(
+ TRST : in std_logic;
+ TMS : in std_logic;
+ TCK : in std_logic;
+ TDI : in std_logic;
+ TDO : out std_logic;
+ SRST : in std_logic;
+ FTP : out std_logic_vector(7 downto 0); -- Test points
+ SI_TDO : in std_logic;
+ ST_0 : out std_logic;
+ ST_1 : out std_logic;
+ ST_2 : out std_logic;
+ SO_TRST : out std_logic;
+ SO_TMS : out std_logic;
+ SO_TCK : out std_logic;
+ SO_TDI : out std_logic;
+ SO_SRST :out std_logic
+);
+end S609;
+
+architecture A_S609 of S609 is
+begin
+
+--Directions:
+ST_0 <= '0';
+ST_1 <= '1';
+
+--TDO:
+TDO <= not SI_TDO;
+
+--TRST - TCK - TMS - TDI:
+SO_TRST <= TRST;
+SO_TMS <= TMS;
+SO_TCK <= TCK;
+SO_TDI <= TDI;
+ST_2 <= SRST;
+SO_SRST <= '0';
+
+--Points de test:
+FTP(0) <= TRST;
+FTP(1) <= TMS;
+FTP(2) <= TCK;
+FTP(3) <= TDI;
+FTP(5) <= SRST;
+FTP(4) <= SI_TDO;
+FTP(6) <= '1';
+FTP(7) <= '1';
+
+end A_S609;