Initial commit
This commit is contained in:
8
Libs/RiscV/NEORV32/setups/osflow/.gitignore
vendored
Normal file
8
Libs/RiscV/NEORV32/setups/osflow/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
*.asc
|
||||
*.bit
|
||||
*.cfg
|
||||
*.dfu
|
||||
*.history
|
||||
*.json
|
||||
*.svf
|
||||
*-report.txt
|
134
Libs/RiscV/NEORV32/setups/osflow/Makefile
Normal file
134
Libs/RiscV/NEORV32/setups/osflow/Makefile
Normal file
@ -0,0 +1,134 @@
|
||||
TEMPLATES := ../../rtl/processor_templates
|
||||
MV := mv
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
TASK := clean $(BITSTREAM)
|
||||
|
||||
FOMU_REV ?= pvt
|
||||
OrangeCrab_REV ?= r02-25F
|
||||
UPduino_REV ?= v3
|
||||
|
||||
#ifndef BOARD
|
||||
#$(error BOARD needs to be set to 'Fomu', 'iCESugar', 'UPDuino', 'iCEBreaker' or 'OrangeCrab' !)
|
||||
#endif
|
||||
|
||||
run:
|
||||
$(eval TASK ?= clean $(BITSTREAM))
|
||||
$(MAKE) -f common.mk \
|
||||
BOARD_SRC=./board_tops/neorv32_$(BOARD)_BoardTop_$(DESIGN).vhd \
|
||||
TOP=neorv32_$(BOARD)_BoardTop_$(DESIGN) \
|
||||
ID=$(DESIGN) \
|
||||
$(TASK)
|
||||
IMPL="$${BITSTREAM%%.*}"; for item in ".bit" ".svf"; do \
|
||||
if [ -f "./$$IMPL$$item" ]; then \
|
||||
$(MV) "./$$IMPL$$item" ./; \
|
||||
fi \
|
||||
done
|
||||
|
||||
# Boards
|
||||
|
||||
Fomu:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(FOMU_REV)_$(DESIGN).bit)
|
||||
ifeq ($(DESIGN),Minimal)
|
||||
$(eval IMEM_SRC := ../../rtl/core/mem/neorv32_imem.default.vhd)
|
||||
else
|
||||
$(eval IMEM_SRC := devices/ice40/neorv32_imem.ice40up_spram.vhd)
|
||||
endif
|
||||
$(eval NEORV32_MEM_SRC ?= ${IMEM_SRC} devices/ice40/neorv32_dmem.ice40up_spram.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
iCESugar:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
UPduino:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(UPduino_REV)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
OrangeCrab:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(OrangeCrab_REV)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
AlhambraII:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
ULX3S:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
iCEBreaker:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
|
||||
# Designs
|
||||
|
||||
Minimal:
|
||||
$(eval DESIGN ?= $@)
|
||||
$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_Minimal*.vhd)
|
||||
$(MAKE) \
|
||||
DESIGN="$(DESIGN)" \
|
||||
DESIGN_SRC="$(DESIGN_SRC)" \
|
||||
$(BOARD)
|
||||
|
||||
MinimalBoot:
|
||||
$(eval DESIGN ?= $@)
|
||||
$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_MinimalBoot.vhd)
|
||||
$(MAKE) \
|
||||
DESIGN="$(DESIGN)" \
|
||||
DESIGN_SRC="$(DESIGN_SRC)" \
|
||||
$(BOARD)
|
||||
|
||||
UP5KDemo:
|
||||
$(eval DESIGN ?= $@)
|
||||
$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_UP5KDemo.vhd)
|
||||
$(MAKE) \
|
||||
DESIGN="$(DESIGN)" \
|
||||
DESIGN_SRC="$(DESIGN_SRC)" \
|
||||
$(BOARD)
|
||||
|
||||
MixedLanguage:
|
||||
$(eval DESIGN ?= $@)
|
||||
$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_Minimal*.vhd)
|
||||
$(eval NEORV32_VERILOG_SRC ?= devices/ice40/sb_ice40_components.v board_tops/neorv32_Fomu_MixedLanguage_ClkGen.v)
|
||||
$(MAKE) \
|
||||
DESIGN="$(DESIGN)" \
|
||||
DESIGN_SRC="$(DESIGN_SRC)" \
|
||||
NEORV32_VERILOG_SRC="$(NEORV32_VERILOG_SRC)" \
|
||||
$(BOARD)
|
||||
|
||||
# Help
|
||||
|
||||
help:
|
||||
@echo "Open-Source Synthesis, P&R, Routing and Bitstream Generation"
|
||||
@echo "Usage: make BOARD=<fpga board> <board top>"
|
||||
@echo "Example: make BOARD=Fomu Minimal"
|
||||
|
14
Libs/RiscV/NEORV32/setups/osflow/PnR_Bit.mk
Normal file
14
Libs/RiscV/NEORV32/setups/osflow/PnR_Bit.mk
Normal file
@ -0,0 +1,14 @@
|
||||
${IMPL}.${PNR2BIT_EXT}: $(IMPL).json $(CONSTRAINTS)
|
||||
$(NEXTPNR) \
|
||||
$(PNRFLAGS) \
|
||||
--$(CONSTRAINTS_FORMAT) $(CONSTRAINTS) \
|
||||
--json $(IMPL).json \
|
||||
--${NEXTPNR_OUT} $@ 2>&1 | tee nextpnr-report.txt
|
||||
|
||||
${IMPL}.bit: ${IMPL}.${PNR2BIT_EXT}
|
||||
$(PACKTOOL) $< $@
|
||||
|
||||
ifeq ($(DEVICE_SERIES),ecp5)
|
||||
${IMPL}.svf: ${IMPL}.${PNR2BIT_EXT}
|
||||
$(PACKTOOL) $(PACKARGS) --svf $@ $<
|
||||
endif
|
145
Libs/RiscV/NEORV32/setups/osflow/README.md
Normal file
145
Libs/RiscV/NEORV32/setups/osflow/README.md
Normal file
@ -0,0 +1,145 @@
|
||||
# Exemplary FPAG Board Setups - Using Open Source Toolchains
|
||||
|
||||
* [Folder Structure](#Folder-Structure)
|
||||
* [Prerequisites](#Prerequisites)
|
||||
* [How To Run](#How-To-Run)
|
||||
* [Porting to a new FPGA or Board](#Porting-to-a-new-FPGA-or-Board)
|
||||
|
||||
This folder provides the infrastructure for generating bitstream for various FPGAs using
|
||||
open-source toolchains. Synthesis is based on [ghdl-yosys](https://github.com/ghdl/ghdl-yosys-plugin).
|
||||
|
||||
:information_source: Note that the provided setups just implement very basic SoC configurations.
|
||||
These setups are intended as minimal example (how to synthesize the processor) for a given FPGA + board
|
||||
that can be used as starting point to build more complex user-defined SoCs.
|
||||
|
||||
## Folder Structure
|
||||
|
||||
* `.`: Main makefile (main entry point) and partial-makefiles for synthesis, place & route and bitstream generation
|
||||
* `boards`: board-specific _partial makefiles_ (used by main makefile "`Makefile`") for generating bitstreams
|
||||
* `board_top`: board-specific top entities (board wrappers; may include FPGA-specific modules)
|
||||
* `constraints`: physical constraints (mainly pin mappings)
|
||||
* `devices`: FPGA-specific primitives and optimized processor modules (like memories)
|
||||
|
||||
|
||||
## Prerequisites
|
||||
|
||||
:construction: TODO :construction:
|
||||
|
||||
* local installation of the tools
|
||||
* using containers
|
||||
|
||||
|
||||
## How To Run
|
||||
|
||||
:construction: TODO :construction:
|
||||
|
||||
The `Makefile` in this folder is the main entry point. To run the whole process of synthesis, place & route and bitstream
|
||||
generation run:
|
||||
|
||||
**Prototype:**
|
||||
```
|
||||
make BOARD=<FPGA_board> <System_Top_HDL>
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```
|
||||
make BOARD=Fomu Minimal
|
||||
```
|
||||
|
||||
`<FPGA_board>` specifies the actual FPGA board and implicitly sets the FPGA type. The currently supported FPGA board
|
||||
targets are listed in the `boards/` folder where each partial-makefile corresponds to a supported platform.
|
||||
|
||||
`<System_Top_HDL>` is used to define the actual SoC top. Available SoCs are located in
|
||||
[`rtl/processor_templates`](https://github.com/stnolting/neorv32/tree/master/rtl/processor_templates).
|
||||
|
||||
|
||||
## Porting to a new FPGA or Board
|
||||
|
||||
This sections illustrates how to add a new basic setup for a specific FPGA and board. This tutorial used the iCEBreaker
|
||||
"MinimalBoot" setup as reference.
|
||||
|
||||
#### 1. Setup a board- and FPGA-specific top entity
|
||||
|
||||
1. Write a new top design unit that instantiates one of the provided processor templates from
|
||||
[`rtl/processor_templates`](https://github.com/stnolting/neorv32/tree/master/rtl/processor_templates).
|
||||
This new top unit can be a Verilog or VHDL file.
|
||||
2. _Optional:_ You can also include FPGA-specific primitives like PLLs or block RAMs (but keep it simple). These components
|
||||
need to be added to a FPGA-specific library in [`setups/osflow/devices`](https://github.com/stnolting/neorv32/tree/master/setups/osflow/devices).
|
||||
3. Try to keep the external IO at a minimum even if the targeted FPGA boards provides cool features. Besides of clock and reset
|
||||
you need to add at least one kind of IO interface like a UART, GPIO or PWM.
|
||||
4. Give your new top entity file a specific name that includes the board's name and the instantiated processor template.
|
||||
The name scheme is `neorv32_[board-name]_BoardTop_[template-name].[v/vhd]`.
|
||||
5. Put this file in `setups/osflow/board_tops`.
|
||||
6. Take a look at the iCEBreaker MinimalBoot top entity as a reference:
|
||||
[`setups/osflow/board_tops/neorv32_iCEBreaker_BoardTop_MinimalBoot.vhd`](https://github.com/stnolting/neorv32/blob/master/setups/osflow/board_tops/neorv32_iCEBreaker_BoardTop_MinimalBoot.vhd)
|
||||
|
||||
#### 2. Pin mapping
|
||||
|
||||
1. Add a new constraints file to define the mapping between the your top unit's IO and the FPGA's physical pins.
|
||||
You can add _all_ of the FPGA's physical pins even though just a subset is used by the new setup.
|
||||
2. Name the new constraints file according to the board `[board-name].pcf`.
|
||||
3. Put this file in `setups/osflow/constraints`.
|
||||
4. Take a look at the iCEBreaker pin mapping as a reference:
|
||||
[`setups/osflow/constraints/iCEBreaker.pcf`](https://github.com/stnolting/neorv32/blob/master/setups/osflow/constraints/iCEBreaker.pcf)
|
||||
|
||||
#### 3. Adding a board-specific makefile
|
||||
|
||||
1. Add a board-specific makefile to the `setups/osflow/boards` folder. Name the new constraints file according to the board `[board-name].mk`.
|
||||
2. The makefile contains (at least) one target to build the final bitstream:
|
||||
```makefile
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
||||
```
|
||||
3. Take a look at the iCEBreaker pin mapping as a reference:
|
||||
[` setups/osflow/boards/iCEBreaker.mk`](https://github.com/stnolting/neorv32/blob/master/setups/osflow/boards/iCEBreaker.mk)
|
||||
|
||||
#### 4. Adding a new target to `index.mk`
|
||||
|
||||
1. Add a new conditional section to the boards management makefile `setups/osflow/boards/index.mk`.
|
||||
2. This board-specific section sets variables that are required to run synthesis, mapping, place & route and bitstream generation:
|
||||
* `CONSTRAINTS` defines the physical pin mapping file
|
||||
* `PNRFLAGS` defines the FPGA-specific flags for mapping and place & route
|
||||
* `IMPL` defines the setup's implementation name
|
||||
```makefile
|
||||
ifeq ($(BOARD),iCEBreaker)
|
||||
$(info Setting constraints and implementation args for BOARD iCEBreaker)
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).pcf
|
||||
PNRFLAGS ?= --up5k --package sg48 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(ID)
|
||||
|
||||
endif
|
||||
```
|
||||
|
||||
#### 5. Adding a new target to the main makefile
|
||||
|
||||
1. As final step add the new setup to the main osflow makefile `setups/osflow/Makefile`.
|
||||
2. Use the board's name to create a new makefile target.
|
||||
* The new target should set the final bitstream's name using the `BITSTREAM` variable.
|
||||
* Alternative _memory_ HDL sources like FPGA-optimized module can be set using the `NEORV32_MEM_SRC` variable.
|
||||
```makefile
|
||||
iCEBreaker:
|
||||
$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
|
||||
$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
|
||||
$(MAKE) \
|
||||
BITSTREAM="$(BITSTREAM)" \
|
||||
NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
|
||||
run
|
||||
```
|
||||
|
||||
#### 6. _Optional:_ Add the new setup to the automatic "Implementation" github workflow
|
||||
|
||||
If you like you can add the new setup to the automatic build environment of the project. The project's "Implementation"
|
||||
workflow will generate bitstreams for all configured osflow setups on every repository push. This is used to check for
|
||||
regressions and also to provide up-to-date bitstreams that can be used right away.
|
||||
|
||||
1. Add the new setup to the job matrix file `.github/generate-job-matrix.py`.
|
||||
```python
|
||||
{
|
||||
'board': 'iCEBreaker',
|
||||
'design': 'MinimalBoot',
|
||||
'bitstream': 'neorv32_iCEBreaker_MinimalBoot.bit'
|
||||
},
|
||||
```
|
@ -0,0 +1,128 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the AlhambraII (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_AlhambraII_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- external clock (12 MHz)
|
||||
AlhambraII_CLK : in std_logic;
|
||||
-- LED outputs
|
||||
AlhambraII_LED0 : out std_logic;
|
||||
AlhambraII_LED1 : out std_logic;
|
||||
AlhambraII_LED2 : out std_logic;
|
||||
AlhambraII_LED3 : out std_logic;
|
||||
AlhambraII_LED4 : out std_logic;
|
||||
AlhambraII_LED5 : out std_logic;
|
||||
AlhambraII_LED6 : out std_logic;
|
||||
AlhambraII_LED7 : out std_logic;
|
||||
-- UART0
|
||||
AlhambraII_RX : in std_logic;
|
||||
AlhambraII_TX : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_AlhambraII_BoardTop_MinimalBoot_rtl of neorv32_AlhambraII_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 12000000; -- clock frequency in Hz
|
||||
|
||||
-- reset generator --
|
||||
signal rst_cnt : std_logic_vector(8 downto 0) := (others => '0'); -- initialized by bitstream
|
||||
signal sys_rstn : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Reset Generator ------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
reset_generator: process(AlhambraII_CLK)
|
||||
begin
|
||||
if rising_edge(AlhambraII_CLK) then
|
||||
if (rst_cnt(rst_cnt'left) = '0') then
|
||||
rst_cnt <= std_logic_vector(unsigned(rst_cnt) + 1);
|
||||
end if;
|
||||
end if;
|
||||
end process reset_generator;
|
||||
|
||||
sys_rstn <= rst_cnt(rst_cnt'left);
|
||||
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c, -- clock frequency of clk_i in Hz
|
||||
MEM_INT_IMEM_SIZE => 4*1024, -- size of processor-internal instruction memory in bytes
|
||||
MEM_INT_DMEM_SIZE => 2*1024 -- size of processor-internal data memory in bytes
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(AlhambraII_CLK),
|
||||
rstn_i => std_ulogic(sys_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => AlhambraII_TX, -- UART0 send data
|
||||
uart_rxd_i => AlhambraII_RX, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
AlhambraII_LED0 <= con_gpio_o(0);
|
||||
AlhambraII_LED1 <= con_gpio_o(1);
|
||||
AlhambraII_LED2 <= con_gpio_o(2);
|
||||
AlhambraII_LED3 <= con_gpio_o(3);
|
||||
AlhambraII_LED4 <= '0'; -- unused
|
||||
AlhambraII_LED5 <= con_pwm(0);
|
||||
AlhambraII_LED6 <= con_pwm(1);
|
||||
AlhambraII_LED7 <= con_pwm(2);
|
||||
|
||||
|
||||
end architecture;
|
@ -0,0 +1,149 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example minimal setup for the Fomu (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_Fomu_BoardTop_Minimal is
|
||||
port (
|
||||
-- 48MHz Clock input
|
||||
clki : in std_logic;
|
||||
-- LED outputs
|
||||
rgb : out std_logic_vector(2 downto 0);
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
usb_dp : out std_logic;
|
||||
usb_dn : out std_logic;
|
||||
usb_dp_pu : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_Fomu_BoardTop_Minimal_rtl of neorv32_Fomu_BoardTop_Minimal is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 22000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect Fomu from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
usb_dp <= '0';
|
||||
usb_dn <= '0';
|
||||
usb_dp_pu <= '0';
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 48 -o 21:
|
||||
-- F_PLLIN: 48.000 MHz (given)
|
||||
-- F_PLLOUT: 22.000 MHz (requested)
|
||||
-- F_PLLOUT: 22.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 16.000 MHz
|
||||
-- F_VCO: 704.000 MHz
|
||||
-- DIVR: 2 (4'b0010)
|
||||
-- DIVF: 43 (7'b0101011)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"2",
|
||||
DIVF => 7x"2B",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => clki,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_Minimal
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => rgb(2), -- O - blue
|
||||
RGB1 => rgb(1), -- O - red
|
||||
RGB0 => rgb(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,174 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the Fomu (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_Fomu_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- 48MHz Clock input
|
||||
clki : in std_logic;
|
||||
-- LED outputs
|
||||
rgb : out std_logic_vector(2 downto 0);
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
usb_dp : out std_logic;
|
||||
usb_dn : out std_logic;
|
||||
usb_dp_pu : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_Fomu_BoardTop_MinimalBoot_rtl of neorv32_Fomu_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect Fomu from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
usb_dp <= '0';
|
||||
usb_dn <= '0';
|
||||
usb_dp_pu <= '0';
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => open, -- UART0 send data
|
||||
uart_rxd_i => '0', -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1) or con_gpio_o(0), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => rgb(2), -- O - blue
|
||||
RGB1 => rgb(1), -- O - red
|
||||
RGB0 => rgb(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,139 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the Fomu (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_Fomu_BoardTop_MixedLanguage is
|
||||
port (
|
||||
-- 48MHz Clock input
|
||||
clki : in std_logic;
|
||||
-- LED outputs
|
||||
rgb : out std_logic_vector(2 downto 0);
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
usb_dp : out std_logic;
|
||||
usb_dn : out std_logic;
|
||||
usb_dp_pu : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_Fomu_BoardTop_MixedLanguage_rtl of neorv32_Fomu_BoardTop_MixedLanguage is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
component neorv32_Fomu_MixedLanguage_ClkGen
|
||||
port (
|
||||
clk_o : out std_logic;
|
||||
rstn_o : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect Fomu from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
usb_dp <= '0';
|
||||
usb_dn <= '0';
|
||||
usb_dp_pu <= '0';
|
||||
|
||||
-- On-Chip HF Oscillator and System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
Clk_inst : neorv32_Fomu_MixedLanguage_ClkGen
|
||||
port map (
|
||||
clk_o => pll_clk,
|
||||
rstn_o => pll_rstn
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => open, -- UART0 send data
|
||||
uart_rxd_i => '0', -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1) or con_gpio_o(0), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => rgb(2), -- O - blue
|
||||
RGB1 => rgb(1), -- O - red
|
||||
RGB0 => rgb(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,185 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup for the Fomu (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_Fomu_BoardTop_UP5KDemo is
|
||||
port (
|
||||
-- 48MHz Clock input
|
||||
clki : in std_logic;
|
||||
-- LED outputs
|
||||
rgb : out std_logic_vector(2 downto 0);
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
usb_dp : out std_logic;
|
||||
usb_dn : out std_logic;
|
||||
usb_dp_pu : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_Fomu_BoardTop_UP5KDemo_rtl of neorv32_Fomu_BoardTop_UP5KDemo is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_ulogic_vector(2 downto 0);
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect Fomu from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
usb_dp <= '0';
|
||||
usb_dn <= '0';
|
||||
usb_dp_pu <= '0';
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_UP5KDemo
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
-- primary UART --
|
||||
uart_txd_o => open,
|
||||
uart_rxd_i => '0',
|
||||
uart_rts_o => open,
|
||||
uart_cts_i => '0',
|
||||
-- SPI to on-board flash --
|
||||
flash_sck_o => open,
|
||||
flash_sdo_o => open,
|
||||
flash_sdi_i => '0',
|
||||
flash_csn_o => open,
|
||||
-- SPI to IO pins --
|
||||
spi_sck_o => open,
|
||||
spi_sdo_o => open,
|
||||
spi_sdi_i => '0',
|
||||
spi_csn_o => open,
|
||||
-- TWI --
|
||||
twi_sda_io => open,
|
||||
twi_scl_io => open,
|
||||
-- GPIO --
|
||||
gpio_i => (others=>'0'),
|
||||
gpio_o => con_gpio_o,
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1) or con_gpio_o(0), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => rgb(2), -- O - blue
|
||||
RGB1 => rgb(1), -- O - red
|
||||
RGB0 => rgb(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,130 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the OrangeCrab (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library ECP5;
|
||||
use ECP5.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_OrangeCrab_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- Clock and Reset inputs
|
||||
OrangeCrab_CLK : in std_logic;
|
||||
OrangeCrab_RST_N : in std_logic;
|
||||
-- LED outputs
|
||||
OrangeCrab_LED_RGB_R : out std_logic;
|
||||
OrangeCrab_LED_RGB_G : out std_logic;
|
||||
OrangeCrab_LED_RGB_B : out std_logic;
|
||||
-- UART0
|
||||
OrangeCrab_GPIO_0 : in std_logic;
|
||||
OrangeCrab_GPIO_1 : out std_logic;
|
||||
OrangeCrab_GPIO_9 : out std_logic;
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
OrangeCrab_USB_D_P : out std_logic;
|
||||
OrangeCrab_USB_D_N : out std_logic;
|
||||
OrangeCrab_USB_DP_PU : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_OrangeCrab_BoardTop_MinimalBoot_rtl of neorv32_OrangeCrab_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 24000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- Globals
|
||||
signal pll_clk: std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect OrangeCrab from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
OrangeCrab_USB_D_P <= '0';
|
||||
OrangeCrab_USB_D_N <= '0';
|
||||
OrangeCrab_USB_DP_PU <= '0';
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
PLL_inst: EHXPLLL
|
||||
generic map (
|
||||
CLKI_DIV => 2, -- from `ecppll -i 48 -o 24`
|
||||
CLKFB_DIV => 1,
|
||||
CLKOP_DIV => 25
|
||||
)
|
||||
port map (
|
||||
CLKI => OrangeCrab_CLK,
|
||||
CLKFB => pll_clk,
|
||||
ENCLKOP => '1',
|
||||
CLKOP => pll_clk,
|
||||
LOCK => OrangeCrab_GPIO_9
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c, -- clock frequency of clk_i in Hz
|
||||
MEM_INT_IMEM_SIZE => 16*1024,
|
||||
MEM_INT_DMEM_SIZE => 8*1024
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(OrangeCrab_RST_N),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => OrangeCrab_GPIO_1, -- UART0 send data
|
||||
uart_rxd_i => OrangeCrab_GPIO_0, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
OrangeCrab_LED_RGB_R <= con_pwm(0) or not con_gpio_o(0);
|
||||
OrangeCrab_LED_RGB_G <= con_pwm(1);
|
||||
OrangeCrab_LED_RGB_B <= con_pwm(2);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,110 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the ULX3S (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library ECP5;
|
||||
use ECP5.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_ULX3S_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- Clock and Reset inputs
|
||||
ULX3S_CLK : in std_logic;
|
||||
ULX3S_RST_N : in std_logic;
|
||||
-- LED outputs
|
||||
ULX3S_LED0 : out std_logic;
|
||||
ULX3S_LED1 : out std_logic;
|
||||
ULX3S_LED2 : out std_logic;
|
||||
ULX3S_LED3 : out std_logic;
|
||||
ULX3S_LED4 : out std_logic;
|
||||
ULX3S_LED5 : out std_logic;
|
||||
ULX3S_LED6 : out std_logic;
|
||||
ULX3S_LED7 : out std_logic;
|
||||
-- UART0
|
||||
ULX3S_RX : in std_logic;
|
||||
ULX3S_TX : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_ULX3S_BoardTop_MinimalBoot_rtl of neorv32_ULX3S_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 25000000; -- clock frequency in Hz
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c, -- clock frequency of clk_i in Hz
|
||||
MEM_INT_IMEM_SIZE => 16*1024,
|
||||
MEM_INT_DMEM_SIZE => 8*1024
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(ULX3S_CLK),
|
||||
rstn_i => std_ulogic(ULX3S_RST_N),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => ULX3S_TX, -- UART0 send data
|
||||
uart_rxd_i => ULX3S_RX, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
ULX3S_LED0 <= con_gpio_o(0);
|
||||
ULX3S_LED1 <= con_gpio_o(1);
|
||||
ULX3S_LED2 <= con_gpio_o(2);
|
||||
ULX3S_LED3 <= con_gpio_o(3);
|
||||
ULX3S_LED4 <= '0'; -- unused
|
||||
ULX3S_LED5 <= con_pwm(0);
|
||||
ULX3S_LED6 <= con_pwm(1);
|
||||
ULX3S_LED7 <= con_pwm(2);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,163 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup for the tinyVision.ai Inc. "UPduino v3" (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_UPduino_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- UART (uart0) --
|
||||
uart_txd_o : out std_ulogic;
|
||||
uart_rxd_i : in std_ulogic;
|
||||
-- GPIO --
|
||||
gpio_o : out std_ulogic_vector(3 downto 0);
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o : out std_logic_vector(2 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_UPduino_BoardTop_MinimalBoot_rtl of neorv32_UPduino_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => uart_txd_o, -- UART0 send data
|
||||
uart_rxd_i => uart_rxd_i, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB0PWM => con_pwm(1), -- I - green - pwm channel 1
|
||||
RGB1PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB2PWM => con_pwm(0), -- I - red - pwm channel 0
|
||||
RGB2 => pwm_o(2), -- O - red
|
||||
RGB1 => pwm_o(1), -- O - blue
|
||||
RGB0 => pwm_o(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,204 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup for the tinyVision.ai Inc. "UPduino v3" (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_UPduino_BoardTop_UP5KDemo is
|
||||
port (
|
||||
-- UART (uart0) --
|
||||
uart_txd_o : out std_ulogic;
|
||||
uart_rxd_i : in std_ulogic;
|
||||
-- SPI to on-board flash --
|
||||
flash_sck_o : out std_ulogic;
|
||||
flash_sdo_o : out std_ulogic;
|
||||
flash_sdi_i : in std_ulogic;
|
||||
flash_csn_o : out std_ulogic; -- NEORV32.SPI_CS(0)
|
||||
-- SPI to IO pins --
|
||||
spi_sck_o : out std_ulogic;
|
||||
spi_sdo_o : out std_ulogic;
|
||||
spi_sdi_i : in std_ulogic;
|
||||
spi_csn_o : out std_ulogic; -- NEORV32.SPI_CS(1)
|
||||
-- TWI --
|
||||
twi_sda_io : inout std_logic;
|
||||
twi_scl_io : inout std_logic;
|
||||
-- GPIO --
|
||||
gpio_i : in std_ulogic_vector(3 downto 0);
|
||||
gpio_o : out std_ulogic_vector(3 downto 0);
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o : out std_ulogic_vector(2 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_UPduino_BoardTop_UP5KDemo_rtl of neorv32_UPduino_BoardTop_UP5KDemo is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_ulogic_vector(2 downto 0);
|
||||
signal con_spi_sdi : std_ulogic;
|
||||
signal con_spi_csn : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_UP5KDemo
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => uart_txd_o,
|
||||
uart_rxd_i => uart_rxd_i,
|
||||
uart_rts_o => open,
|
||||
uart_cts_i => '0',
|
||||
|
||||
-- SPI to on-board flash --
|
||||
flash_sck_o => flash_sck_o,
|
||||
flash_sdo_o => flash_sdo_o,
|
||||
flash_sdi_i => flash_sdi_i,
|
||||
flash_csn_o => flash_csn_o,
|
||||
|
||||
-- SPI to IO pins --
|
||||
spi_sck_o => spi_sck_o,
|
||||
spi_sdo_o => spi_sdo_o,
|
||||
spi_sdi_i => con_spi_sdi,
|
||||
spi_csn_o => con_spi_csn,
|
||||
|
||||
-- TWI --
|
||||
twi_sda_io => twi_sda_io,
|
||||
twi_scl_io => twi_scl_io,
|
||||
|
||||
-- GPIO --
|
||||
gpio_i => gpio_i,
|
||||
gpio_o => gpio_o,
|
||||
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
-- SPI sdi read-back --
|
||||
spi_csn_o <= con_spi_csn;
|
||||
con_spi_sdi <= flash_sdi_i when (con_spi_csn = '0') else spi_sdi_i;
|
||||
|
||||
-- RGB --
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000001",
|
||||
RGB1_CURRENT => "0b000001",
|
||||
RGB2_CURRENT => "0b000001"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB0PWM => con_pwm(1), -- I - green - pwm channel 1
|
||||
RGB1PWM => con_pwm(2), -- I - bluee - pwm channel 2
|
||||
RGB2PWM => con_pwm(0), -- I - red - pwm channel 0
|
||||
RGB2 => pwm_o(2), -- O - red
|
||||
RGB1 => pwm_o(1), -- O - blue
|
||||
RGB0 => pwm_o(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,163 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup for the tinyVision.ai Inc. "UPduino v3" (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_iCEBreaker_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- UART (uart0) --
|
||||
uart_txd_o : out std_ulogic;
|
||||
uart_rxd_i : in std_ulogic;
|
||||
-- GPIO --
|
||||
gpio_o : out std_ulogic_vector(3 downto 0);
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o : out std_logic_vector(2 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_iCEBreaker_BoardTop_MinimalBoot_rtl of neorv32_iCEBreaker_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => uart_txd_o, -- UART0 send data
|
||||
uart_rxd_i => uart_rxd_i, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB0PWM => con_pwm(1), -- I - green - pwm channel 1
|
||||
RGB1PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB2PWM => con_pwm(0), -- I - red - pwm channel 0
|
||||
RGB2 => pwm_o(2), -- O - red
|
||||
RGB1 => pwm_o(1), -- O - blue
|
||||
RGB0 => pwm_o(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,205 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup for the tinyVision.ai Inc. "UPduino v3" (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_iCEBreaker_BoardTop_UP5KDemo is
|
||||
port (
|
||||
user_reset_btn : in std_ulogic;
|
||||
-- UART (uart0) --
|
||||
uart_txd_o : out std_ulogic;
|
||||
uart_rxd_i : in std_ulogic;
|
||||
-- SPI to on-board flash --
|
||||
flash_sck_o : out std_ulogic;
|
||||
flash_sdo_o : out std_ulogic;
|
||||
flash_sdi_i : in std_ulogic;
|
||||
flash_csn_o : out std_ulogic; -- NEORV32.SPI_CS(0)
|
||||
-- SPI to IO pins --
|
||||
spi_sck_o : out std_ulogic;
|
||||
spi_sdo_o : out std_ulogic;
|
||||
spi_sdi_i : in std_ulogic;
|
||||
spi_csn_o : out std_ulogic; -- NEORV32.SPI_CS(1)
|
||||
-- TWI --
|
||||
twi_sda_io : inout std_logic;
|
||||
twi_scl_io : inout std_logic;
|
||||
-- GPIO --
|
||||
gpio_i : in std_ulogic_vector(3 downto 0);
|
||||
gpio_o : out std_ulogic_vector(3 downto 0);
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o : out std_ulogic_vector(2 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_iCEBreaker_BoardTop_UP5KDemo_rtl of neorv32_iCEBreaker_BoardTop_UP5KDemo is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_pwm : std_ulogic_vector(2 downto 0);
|
||||
signal con_spi_sdi : std_ulogic;
|
||||
signal con_spi_csn : std_ulogic;
|
||||
|
||||
begin
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => user_reset_btn,
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_UP5KDemo
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => uart_txd_o,
|
||||
uart_rxd_i => uart_rxd_i,
|
||||
uart_rts_o => open,
|
||||
uart_cts_i => '0',
|
||||
|
||||
-- SPI to on-board flash --
|
||||
flash_sck_o => flash_sck_o,
|
||||
flash_sdo_o => flash_sdo_o,
|
||||
flash_sdi_i => flash_sdi_i,
|
||||
flash_csn_o => flash_csn_o,
|
||||
|
||||
-- SPI to IO pins --
|
||||
spi_sck_o => spi_sck_o,
|
||||
spi_sdo_o => spi_sdo_o,
|
||||
spi_sdi_i => con_spi_sdi,
|
||||
spi_csn_o => con_spi_csn,
|
||||
|
||||
-- TWI --
|
||||
twi_sda_io => twi_sda_io,
|
||||
twi_scl_io => twi_scl_io,
|
||||
|
||||
-- GPIO --
|
||||
gpio_i => gpio_i,
|
||||
gpio_o => gpio_o,
|
||||
|
||||
-- PWM (to on-board RGB power LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
-- SPI sdi read-back --
|
||||
spi_csn_o <= con_spi_csn;
|
||||
con_spi_sdi <= flash_sdi_i when (con_spi_csn = '0') else spi_sdi_i;
|
||||
|
||||
-- RGB --
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000001",
|
||||
RGB1_CURRENT => "0b000001",
|
||||
RGB2_CURRENT => "0b000001"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB0PWM => con_pwm(1), -- I - green - pwm channel 1
|
||||
RGB1PWM => con_pwm(2), -- I - bluee - pwm channel 2
|
||||
RGB2PWM => con_pwm(0), -- I - red - pwm channel 0
|
||||
RGB2 => pwm_o(2), -- O - red
|
||||
RGB1 => pwm_o(1), -- O - blue
|
||||
RGB0 => pwm_o(0) -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,172 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup with an external clock, for the iCESugar (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_iCESugar_BoardTop_Minimal is
|
||||
port (
|
||||
-- 48MHz Clock input
|
||||
iCESugarv15_CLK : in std_logic;
|
||||
-- UART0
|
||||
iCESugarv15_RX : in std_logic;
|
||||
iCESugarv15_TX : out std_logic;
|
||||
-- LED outputs
|
||||
iCESugarv15_LED_R : out std_logic;
|
||||
iCESugarv15_LED_G : out std_logic;
|
||||
iCESugarv15_LED_B : out std_logic;
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
iCESugarv15_USB_DP : out std_logic;
|
||||
iCESugarv15_USB_DN : out std_logic;
|
||||
iCESugarv15_USB_DP_PU : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_iCESugar_BoardTop_Minimal_rtl of neorv32_iCESugar_BoardTop_Minimal is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 22000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect iCESugar from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
iCESugarv15_USB_DP <= '0';
|
||||
iCESugarv15_USB_DN <= '0';
|
||||
iCESugarv15_USB_DP_PU <= '0';
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 22:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 22.000 MHz (requested)
|
||||
-- F_PLLOUT: 22.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 708.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 58 (7'b0111010)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_PAD
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"3A",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
PACKAGEPIN => iCESugarv15_CLK,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c, -- clock frequency of clk_i in Hz
|
||||
CPU_EXTENSION_RISCV_A => false,
|
||||
CPU_EXTENSION_RISCV_C => false,
|
||||
CPU_EXTENSION_RISCV_E => false,
|
||||
CPU_EXTENSION_RISCV_M => false,
|
||||
CPU_EXTENSION_RISCV_U => false,
|
||||
CPU_EXTENSION_RISCV_Zfinx => false,
|
||||
CPU_EXTENSION_RISCV_Zicsr => true,
|
||||
CPU_EXTENSION_RISCV_Zifencei => false
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => iCESugarv15_TX, -- UART0 send data
|
||||
uart_rxd_i => iCESugarv15_RX, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1) or con_gpio_o(0), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => iCESugarv15_LED_B, -- O - blue
|
||||
RGB1 => iCESugarv15_LED_R, -- O - red
|
||||
RGB0 => iCESugarv15_LED_G -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
@ -0,0 +1,177 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Example setup including the bootloader, for the iCESugar (c) Board >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all; -- for device primitives and macros
|
||||
|
||||
entity neorv32_iCESugar_BoardTop_MinimalBoot is
|
||||
port (
|
||||
-- LED outputs
|
||||
iCESugarv15_LED_R : out std_logic;
|
||||
iCESugarv15_LED_G : out std_logic;
|
||||
iCESugarv15_LED_B : out std_logic;
|
||||
-- UART0
|
||||
iCESugarv15_RX : in std_logic;
|
||||
iCESugarv15_TX : out std_logic;
|
||||
-- USB Pins (which should be statically driven if not being used)
|
||||
iCESugarv15_USB_DP : out std_logic;
|
||||
iCESugarv15_USB_DN : out std_logic;
|
||||
iCESugarv15_USB_DP_PU : out std_logic
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture neorv32_iCESugar_BoardTop_MinimalBoot_rtl of neorv32_iCESugar_BoardTop_MinimalBoot is
|
||||
|
||||
-- configuration --
|
||||
constant f_clock_c : natural := 18000000; -- PLL output clock frequency in Hz
|
||||
|
||||
-- On-chip oscillator --
|
||||
signal hf_osc_clk : std_logic;
|
||||
|
||||
-- Globals
|
||||
signal pll_rstn : std_logic;
|
||||
signal pll_clk : std_logic;
|
||||
|
||||
-- internal IO connection --
|
||||
signal con_gpio_o : std_ulogic_vector(3 downto 0);
|
||||
signal con_pwm : std_logic_vector(2 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
-- Assign USB pins to "0" so as to disconnect iCESugar from
|
||||
-- the host system. Otherwise it would try to talk to
|
||||
-- us over USB, which wouldn't work since we have no stack.
|
||||
iCESugarv15_USB_DP <= '0';
|
||||
iCESugarv15_USB_DN <= '0';
|
||||
iCESugarv15_USB_DP_PU <= '0';
|
||||
|
||||
-- On-Chip HF Oscillator ------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
HSOSC_inst : SB_HFOSC
|
||||
generic map (
|
||||
CLKHF_DIV => "0b10" -- 12 MHz
|
||||
)
|
||||
port map (
|
||||
CLKHFPU => '1',
|
||||
CLKHFEN => '1',
|
||||
CLKHF => hf_osc_clk
|
||||
);
|
||||
|
||||
-- System PLL -----------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
-- Settings generated by icepll -i 12 -o 18:
|
||||
-- F_PLLIN: 12.000 MHz (given)
|
||||
-- F_PLLOUT: 18.000 MHz (requested)
|
||||
-- F_PLLOUT: 18.000 MHz (achieved)
|
||||
-- FEEDBACK: SIMPLE
|
||||
-- F_PFD: 12.000 MHz
|
||||
-- F_VCO: 576.000 MHz
|
||||
-- DIVR: 0 (4'b0000)
|
||||
-- DIVF: 47 (7'b0101111)
|
||||
-- DIVQ: 5 (3'b101)
|
||||
-- FILTER_RANGE: 1 (3'b001)
|
||||
Pll_inst : SB_PLL40_CORE
|
||||
generic map (
|
||||
FEEDBACK_PATH => "SIMPLE",
|
||||
DIVR => x"0",
|
||||
DIVF => 7x"2F",
|
||||
DIVQ => 3x"5",
|
||||
FILTER_RANGE => 3x"1"
|
||||
)
|
||||
port map (
|
||||
REFERENCECLK => hf_osc_clk,
|
||||
PLLOUTCORE => open,
|
||||
PLLOUTGLOBAL => pll_clk,
|
||||
EXTFEEDBACK => '0',
|
||||
DYNAMICDELAY => x"00",
|
||||
LOCK => pll_rstn,
|
||||
BYPASS => '0',
|
||||
RESETB => '1',
|
||||
LATCHINPUTVALUE => '0',
|
||||
SDO => open,
|
||||
SDI => '0',
|
||||
SCLK => '0'
|
||||
);
|
||||
|
||||
-- The core of the problem ----------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
neorv32_inst: entity work.neorv32_ProcessorTop_MinimalBoot
|
||||
generic map (
|
||||
CLOCK_FREQUENCY => f_clock_c -- clock frequency of clk_i in Hz
|
||||
)
|
||||
port map (
|
||||
-- Global control --
|
||||
clk_i => std_ulogic(pll_clk),
|
||||
rstn_i => std_ulogic(pll_rstn),
|
||||
|
||||
-- GPIO --
|
||||
gpio_o => con_gpio_o,
|
||||
|
||||
-- primary UART --
|
||||
uart_txd_o => iCESugarv15_TX, -- UART0 send data
|
||||
uart_rxd_i => iCESugarv15_RX, -- UART0 receive data
|
||||
uart_rts_o => open, -- hw flow control: UART0.RX ready to receive ("RTR"), low-active, optional
|
||||
uart_cts_i => '0', -- hw flow control: UART0.TX allowed to transmit, low-active, optional
|
||||
|
||||
-- PWM (to on-board RGB LED) --
|
||||
pwm_o => con_pwm
|
||||
);
|
||||
|
||||
-- IO Connection --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
|
||||
RGB_inst: SB_RGBA_DRV
|
||||
generic map (
|
||||
CURRENT_MODE => "0b1",
|
||||
RGB0_CURRENT => "0b000011",
|
||||
RGB1_CURRENT => "0b000011",
|
||||
RGB2_CURRENT => "0b000011"
|
||||
)
|
||||
port map (
|
||||
CURREN => '1', -- I
|
||||
RGBLEDEN => '1', -- I
|
||||
RGB2PWM => con_pwm(2), -- I - blue - pwm channel 2
|
||||
RGB1PWM => con_pwm(1) or con_gpio_o(0), -- I - red - pwm channel 1 || BOOT blink
|
||||
RGB0PWM => con_pwm(0), -- I - green - pwm channel 0
|
||||
RGB2 => iCESugarv15_LED_B, -- O - blue
|
||||
RGB1 => iCESugarv15_LED_R, -- O - red
|
||||
RGB0 => iCESugarv15_LED_G -- O - green
|
||||
);
|
||||
|
||||
end architecture;
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/AlhambraII.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/AlhambraII.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
16
Libs/RiscV/NEORV32/setups/osflow/boards/Fomu.mk
Normal file
16
Libs/RiscV/NEORV32/setups/osflow/boards/Fomu.mk
Normal file
@ -0,0 +1,16 @@
|
||||
.PHONY: all
|
||||
|
||||
# Default target: run all required targets to build the DFU image.
|
||||
all: $(IMPL).dfu
|
||||
echo "! Built $(IMPL) for $(BOARD) $(FOMU_REV)"
|
||||
|
||||
# Use dfu-suffix to generate the DFU image from the FPGA bitstream.
|
||||
${IMPL}.dfu: $(IMPL).bit
|
||||
$(COPY) $< $@
|
||||
dfu-suffix -v 1209 -p 70b1 -a $@
|
||||
|
||||
# Use df-util to load the DFU image onto the Fomu.
|
||||
load: $(IMPL).dfu
|
||||
dfu-util -D $<
|
||||
|
||||
.PHONY: load
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/OrangeCrab.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/OrangeCrab.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/ULX3S.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/ULX3S.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/UPduino.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/UPduino.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/iCEBreaker.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/iCEBreaker.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
4
Libs/RiscV/NEORV32/setups/osflow/boards/iCESugar.mk
Normal file
4
Libs/RiscV/NEORV32/setups/osflow/boards/iCESugar.mk
Normal file
@ -0,0 +1,4 @@
|
||||
.PHONY: all
|
||||
|
||||
all: bit
|
||||
echo "! Built $(IMPL) for $(BOARD)"
|
107
Libs/RiscV/NEORV32/setups/osflow/boards/index.mk
Normal file
107
Libs/RiscV/NEORV32/setups/osflow/boards/index.mk
Normal file
@ -0,0 +1,107 @@
|
||||
PCF_PATH ?= constraints
|
||||
|
||||
|
||||
ifeq ($(BOARD),Fomu)
|
||||
|
||||
$(info Setting constraints and implementation args for BOARD Fomu)
|
||||
|
||||
# Different Fomu hardware revisions are wired differently and thus
|
||||
# require different configurations for yosys and nextpnr.
|
||||
# Configuration is performed by setting the environment variable FOMU_REV accordingly.
|
||||
|
||||
FOMU_REV ?= pvt
|
||||
|
||||
ifeq ($(FOMU_REV),evt1)
|
||||
YOSYSFLAGS ?= -D EVT=1 -D EVT1=1 -D HAVE_PMOD=1
|
||||
PNRFLAGS ?= --up5k --package sg48
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)-evt2.pcf
|
||||
else ifeq ($(FOMU_REV),evt2)
|
||||
YOSYSFLAGS ?= -D EVT=1 -D EVT2=1 -D HAVE_PMOD=1
|
||||
PNRFLAGS ?= --up5k --package sg48
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)-$(FOMU_REV).pcf
|
||||
else ifeq ($(FOMU_REV),evt3)
|
||||
YOSYSFLAGS ?= -D EVT=1 -D EVT3=1 -D HAVE_PMOD=1
|
||||
PNRFLAGS ?= --up5k --package sg48
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)-$(FOMU_REV).pcf
|
||||
else ifeq ($(FOMU_REV),hacker)
|
||||
YOSYSFLAGS ?= -D HACKER=1
|
||||
PNRFLAGS ?= --up5k --package uwg30
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)-$(FOMU_REV).pcf
|
||||
else ifeq ($(FOMU_REV),pvt)
|
||||
YOSYSFLAGS ?= -D PVT=1
|
||||
PNRFLAGS ?= --up5k --package uwg30
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)-$(FOMU_REV).pcf
|
||||
else
|
||||
$(error Unrecognized FOMU_REV value. must be "evt1", "evt2", "evt3", "pvt", or "hacker")
|
||||
endif
|
||||
|
||||
IMPL := neorv32_Fomu_$(FOMU_REV)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(BOARD),iCESugar)
|
||||
$(info Setting constraints and implementation args for BOARD iCESugar)
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).pcf
|
||||
PNRFLAGS ?= --up5k --package sg48 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(BOARD),UPduino)
|
||||
$(info Setting constraints and implementation args for BOARD UPduino)
|
||||
|
||||
UPduino_REV ?= v3
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD)_v3.pcf
|
||||
PNRFLAGS ?= --up5k --package sg48 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(UPduino_REV)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(BOARD),iCEBreaker)
|
||||
$(info Setting constraints and implementation args for BOARD iCEBreaker)
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).pcf
|
||||
PNRFLAGS ?= --up5k --package sg48 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
|
||||
ifeq ($(BOARD),OrangeCrab)
|
||||
$(info Setting constraints and implementation args for BOARD OrangeCrab)
|
||||
|
||||
DEVICE_SERIES = ecp5
|
||||
|
||||
OrangeCrab_REV ?= r02-25F
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).lpf
|
||||
PNRFLAGS ?= --25k --package CSFBGA285 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(OrangeCrab_REV)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(BOARD),AlhambraII)
|
||||
$(info Setting constraints and implementation args for BOARD AlhambraII)
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).pcf
|
||||
PNRFLAGS ?= --hx8k --package tq144:4k --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(ID)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(BOARD),ULX3S)
|
||||
$(info Setting constraints and implementation args for BOARD ULX3S)
|
||||
|
||||
DEVICE_SERIES = ecp5
|
||||
|
||||
CONSTRAINTS ?= $(PCF_PATH)/$(BOARD).lpf
|
||||
PNRFLAGS ?= --85k --freq 25 --package CABGA381 --ignore-loops --timing-allow-fail
|
||||
IMPL ?= neorv32_$(BOARD)_$(ID)
|
||||
|
||||
endif
|
39
Libs/RiscV/NEORV32/setups/osflow/common.mk
Normal file
39
Libs/RiscV/NEORV32/setups/osflow/common.mk
Normal file
@ -0,0 +1,39 @@
|
||||
ID ?= impl_1
|
||||
|
||||
include boards/index.mk
|
||||
|
||||
ifndef TOP
|
||||
$(error TOP needs to be specified!)
|
||||
endif
|
||||
|
||||
include filesets.mk
|
||||
|
||||
ifndef DESIGN_SRC
|
||||
ifndef BOARD_SRC
|
||||
$(error Neither DESIGN_SRC nor BOARD_SRC were set!)
|
||||
endif
|
||||
endif
|
||||
|
||||
include tools.mk
|
||||
|
||||
ifdef GHDL_PLUGIN_MODULE
|
||||
YOSYSFLAGS += -m $(GHDL_PLUGIN_MODULE)
|
||||
endif
|
||||
|
||||
include synthesis.mk
|
||||
include PnR_Bit.mk
|
||||
|
||||
.PHONY: syn impl bit svf clean
|
||||
|
||||
syn: ${IMPL}.json
|
||||
impl: ${IMPL}.${PNR2BIT_EXT}
|
||||
bit: ${IMPL}.bit
|
||||
|
||||
ifeq ($(DEVICE_SERIES),ecp5)
|
||||
svf: ${IMPL}.svf
|
||||
endif
|
||||
|
||||
clean:
|
||||
rm -rf *.{${PNR2BIT_EXT},bit,cf,dfu,history,json,o,svf} *-report.txt
|
||||
|
||||
include boards/$(BOARD).mk
|
24
Libs/RiscV/NEORV32/setups/osflow/constraints/AlhambraII.pcf
Normal file
24
Libs/RiscV/NEORV32/setups/osflow/constraints/AlhambraII.pcf
Normal file
@ -0,0 +1,24 @@
|
||||
# -----------------------------------------------------------------------------
|
||||
#- Alhambra II constraint file (.pcf)
|
||||
#- By Carlos Dominguez
|
||||
#- May - 2021
|
||||
#- GPL license
|
||||
#- Repo: https://github.com/zipotron/neorv32
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# UART port (on-board FTDI)
|
||||
set_io AlhambraII_TX 61 # output (ser-tx)
|
||||
set_io AlhambraII_RX 62 # input (ser-rx)
|
||||
|
||||
#> External clock (12 MHz)
|
||||
set_io AlhambraII_CLK 49
|
||||
|
||||
#> On-Board LEDs
|
||||
set_io AlhambraII_LED0 45
|
||||
set_io AlhambraII_LED1 44
|
||||
set_io AlhambraII_LED2 43
|
||||
set_io AlhambraII_LED3 42
|
||||
set_io AlhambraII_LED4 41
|
||||
set_io AlhambraII_LED5 39
|
||||
set_io AlhambraII_LED6 38
|
||||
set_io AlhambraII_LED7 37
|
34
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-evt2.pcf
Normal file
34
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-evt2.pcf
Normal file
@ -0,0 +1,34 @@
|
||||
# Configuration for the Fomu 'evt2' board
|
||||
set_io clki 44
|
||||
set_io clki_alt 20
|
||||
set_io rgb[0] 39
|
||||
set_io rgb[1] 40
|
||||
set_io rgb[2] 41
|
||||
set_io pmod[0] 25
|
||||
set_io pmod[1] 26
|
||||
set_io pmod[2] 27
|
||||
set_io pmod[3] 28
|
||||
set_io user[0] 48
|
||||
set_io user[1] 47
|
||||
set_io user[2] 46
|
||||
set_io user[3] 45
|
||||
set_io user[4] 42
|
||||
set_io user[5] 38
|
||||
set_io spi_mosi 14
|
||||
set_io spi_miso 17
|
||||
set_io spi_clk 15
|
||||
set_io spi_cs 16
|
||||
set_io spi_io2 18
|
||||
set_io spi_io3 19
|
||||
set_io uart_tx 21
|
||||
set_io uart_rx 13
|
||||
set_io usb_dn 37
|
||||
set_io usb_dp 34
|
||||
set_io usb_dp_pu 35
|
||||
set_io usb_dn_pu 36
|
||||
set_io dbg[0] 20
|
||||
set_io dbg[1] 12
|
||||
set_io dbg[2] 11
|
||||
set_io dbg[3] 23
|
||||
set_io dbg[4] 10
|
||||
set_io dbg[5] 9
|
34
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-evt3.pcf
Normal file
34
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-evt3.pcf
Normal file
@ -0,0 +1,34 @@
|
||||
# Configuration for the Fomu 'evt3' board
|
||||
set_io rgb[0] 39
|
||||
set_io rgb[1] 40
|
||||
set_io rgb[2] 41
|
||||
set_io pmod[0] 28
|
||||
set_io pmod[1] 27
|
||||
set_io pmod[2] 26
|
||||
set_io pmod[3] 23
|
||||
set_io clki_alt 20
|
||||
set_io clki 44
|
||||
set_io user[0] 48
|
||||
set_io user[1] 47
|
||||
set_io user[2] 46
|
||||
set_io user[3] 45
|
||||
set_io user[4] 42
|
||||
set_io user[5] 38
|
||||
set_io spi_mosi 14
|
||||
set_io spi_miso 17
|
||||
set_io spi_clk 15
|
||||
set_io spi_io2 18
|
||||
set_io spi_io3 19
|
||||
set_io spi_cs 16
|
||||
set_io uart_tx 21
|
||||
set_io uart_rx 13
|
||||
set_io usb_dn 37
|
||||
set_io usb_dp 34
|
||||
set_io usb_dp_pu 35
|
||||
set_io usb_dn_pu 36
|
||||
set_io dbg[0] 20
|
||||
set_io dbg[1] 12
|
||||
set_io dbg[2] 11
|
||||
set_io dbg[3] 25
|
||||
set_io dbg[4] 10
|
||||
set_io dbg[5] 9
|
16
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-hacker.pcf
Normal file
16
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-hacker.pcf
Normal file
@ -0,0 +1,16 @@
|
||||
# Configuration for the Fomu 'hacker' board
|
||||
set_io clki F5 # Clock input from 48MHz Oscillator
|
||||
set_io rgb[0] A5 # Blue LED
|
||||
set_io rgb[1] B5 # Green LED
|
||||
set_io rgb[2] C5 # Red LED
|
||||
set_io user[0] F4 # User touch pad 1
|
||||
set_io user[1] E5 # User touch pad 2
|
||||
set_io user[2] E4 # User touch pad 3
|
||||
set_io user[3] F2 # User touch pad 4
|
||||
set_io spi_mosi F1 # SPI Master Out, Slave In Pin
|
||||
set_io spi_miso E1 # SPI Master In, Slave Out Pin
|
||||
set_io spi_clk D1 # SPI Master Clock Output Pin
|
||||
set_io spi_cs C1 # SPI Chip Select
|
||||
set_io usb_dn A2 # USB D- pad
|
||||
set_io usb_dp A4 # USB D+ pad
|
||||
set_io usb_dp_pu D5 # USB D+ pull up (indicates device connected)
|
18
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-pvt.pcf
Normal file
18
Libs/RiscV/NEORV32/setups/osflow/constraints/Fomu-pvt.pcf
Normal file
@ -0,0 +1,18 @@
|
||||
# Configuration for the Fomu 'pvt' board
|
||||
set_io clki F4 # Clock input from 48MHz Oscillator
|
||||
set_io rgb[0] A5 # Blue LED
|
||||
set_io rgb[1] B5 # Green LED
|
||||
set_io rgb[2] C5 # Red LED
|
||||
set_io user[0] E4 # User touch pad 1
|
||||
set_io user[1] D5 # User touch pad 2
|
||||
set_io user[2] E5 # User touch pad 3
|
||||
set_io user[3] F5 # User touch pad 4
|
||||
set_io spi_mosi F1 # SPI Master Out, Slave In Pin
|
||||
set_io spi_miso E1 # SPI Master In, Slave Out Pin
|
||||
set_io spi_clk D1 # SPI Master Clock Output Pin
|
||||
set_io spi_cs C1 # SPI Chip Select
|
||||
set_io spi_io2 F2
|
||||
set_io spi_io3 B1
|
||||
set_io usb_dn A2 # USB D- pad
|
||||
set_io usb_dp A1 # USB D+ pad
|
||||
set_io usb_dp_pu A4 # USB D+ pull up (indicates device connected)
|
278
Libs/RiscV/NEORV32/setups/osflow/constraints/OrangeCrab.lpf
Normal file
278
Libs/RiscV/NEORV32/setups/osflow/constraints/OrangeCrab.lpf
Normal file
@ -0,0 +1,278 @@
|
||||
#| OrangeCrab-r02-25F
|
||||
|
||||
|
||||
LOCATE COMP "OrangeCrab_CLK" SITE "A9";
|
||||
IOBUF PORT "OrangeCrab_CLK" IO_TYPE=LVCMOS33;
|
||||
FREQUENCY PORT "OrangeCrab_CLK" 48.0 MHz;
|
||||
|
||||
LOCATE COMP "OrangeCrab_RST_N" SITE "V17";
|
||||
IOBUF PORT "OrangeCrab_RST_N" IO_TYPE=LVCMOS33;
|
||||
|
||||
LOCATE COMP "OrangeCrab_LED_RGB_R" SITE "K4";
|
||||
IOBUF PORT "OrangeCrab_LED_RGB_R" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_LED_RGB_G" SITE "M3";
|
||||
IOBUF PORT "OrangeCrab_LED_RGB_G" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_LED_RGB_B" SITE "J3";
|
||||
IOBUF PORT "OrangeCrab_LED_RGB_B" IO_TYPE=LVCMOS33;
|
||||
|
||||
LOCATE COMP "OrangeCrab_USR_BTN" SITE "J17";
|
||||
IOBUF PORT "OrangeCrab_USR_BTN" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_USB_D_P" SITE "N1";
|
||||
IOBUF PORT "OrangeCrab_USB_D_P" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_USB_D_N" SITE "M2";
|
||||
IOBUF PORT "OrangeCrab_USB_D_N" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_USB_DP_PU" SITE "N2";
|
||||
IOBUF PORT "OrangeCrab_USB_DP_PU" IO_TYPE=LVCMOS33;
|
||||
|
||||
LOCATE COMP "OrangeCrab_GPIO_0" SITE "N17";
|
||||
IOBUF PORT "OrangeCrab_GPIO_0" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_0" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_1" SITE "M18";
|
||||
IOBUF PORT "OrangeCrab_GPIO_1" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_1" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_5" SITE "B10";
|
||||
IOBUF PORT "OrangeCrab_GPIO_5" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_5" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_6" SITE "B9";
|
||||
IOBUF PORT "OrangeCrab_GPIO_6" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_6" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_9" SITE "C8";
|
||||
IOBUF PORT "OrangeCrab_GPIO_9" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_9" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_10" SITE "B8";
|
||||
IOBUF PORT "OrangeCrab_GPIO_10" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_10" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_11" SITE "A8";
|
||||
IOBUF PORT "OrangeCrab_GPIO_11" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_11" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_12" SITE "H2";
|
||||
IOBUF PORT "OrangeCrab_GPIO_12" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_12" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_13" SITE "J2";
|
||||
IOBUF PORT "OrangeCrab_GPIO_13" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_13" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_A0" SITE "L4";
|
||||
IOBUF PORT "OrangeCrab_GPIO_A0" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_A0" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_A1" SITE "N3";
|
||||
IOBUF PORT "OrangeCrab_GPIO_A1" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_A1" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_A2" SITE "N4";
|
||||
IOBUF PORT "OrangeCrab_GPIO_A2" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_A2" PULLMODE=DOWN;
|
||||
LOCATE COMP "OrangeCrab_GPIO_A3" SITE "H4";
|
||||
IOBUF PORT "OrangeCrab_GPIO_A3" IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "OrangeCrab_GPIO_A3" PULLMODE=DOWN;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[0]" SITE "C4";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[0]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[1]" SITE "D2";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[1]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[2]" SITE "D3";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[2]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[2]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[3]" SITE "A3";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[3]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[3]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[4]" SITE "A4";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[4]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[4]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[5]" SITE "D4";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[5]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[5]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[6]" SITE "C3";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[6]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[6]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[7]" SITE "B2";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[7]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[7]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[8]" SITE "B1";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[8]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[8]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[9]" SITE "D1";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[9]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[9]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[10]" SITE "A7";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[10]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[10]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[11]" SITE "C2";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[11]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[11]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[12]" SITE "B6";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[12]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[12]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[13]" SITE "C1";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[13]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[13]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[14]" SITE "A2";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[14]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[14]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_A[15]" SITE "C7";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[15]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_A[15]" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_BA[0]" SITE "D6";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[0]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_BA[1]" SITE "B7";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[1]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_BA[2]" SITE "A6";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[2]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_BA[2]" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_RAS_N" SITE "C12";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_RAS_N" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_RAS_N" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_CAS_N" SITE "D13";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CAS_N" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CAS_N" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_WE_N" SITE "B12";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_WE_N" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_WE_N" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_CS_N" SITE "A12";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CS_N" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CS_N" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DM[0]" SITE "D16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DM[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DM[0]" IO_TYPE=SSTL135_I;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DM[1]" SITE "G16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DM[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DM[1]" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[0]" SITE "C17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[0]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[0]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[1]" SITE "D15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[1]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[1]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[2]" SITE "B17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[2]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[2]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[2]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[3]" SITE "C16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[3]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[3]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[3]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[4]" SITE "A15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[4]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[4]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[4]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[5]" SITE "B13";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[5]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[5]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[5]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[6]" SITE "A17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[6]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[6]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[6]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[7]" SITE "A13";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[7]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[7]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[7]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[8]" SITE "F17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[8]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[8]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[8]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[9]" SITE "F16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[9]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[9]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[9]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[10]" SITE "G15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[10]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[10]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[10]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[11]" SITE "F15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[11]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[11]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[11]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[12]" SITE "J16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[12]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[12]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[12]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[13]" SITE "C18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[13]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[13]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[13]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[14]" SITE "H16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[14]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[14]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[14]" TERMINATION=OFF;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQ[15]" SITE "F18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[15]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[15]" IO_TYPE=SSTL135_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQ[15]" TERMINATION=OFF;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQS_P[0]" SITE "B15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[0]" IO_TYPE=SSTL135D_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[0]" TERMINATION=OFF;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[0]" DIFFRESISTOR=100;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_DQS_P[1]" SITE "G18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[1]" IO_TYPE=SSTL135D_I;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[1]" TERMINATION=OFF;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_DQS_P[1]" DIFFRESISTOR=100;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_CLK_P" SITE "J18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CLK_P" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CLK_P" IO_TYPE=SSTL135D_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_CKE" SITE "D18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CKE" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_CKE" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_ODT" SITE "C13";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_ODT" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_ODT" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_RESET_N" SITE "L18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_RESET_N" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_RESET_N" IO_TYPE=SSTL135_I;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[0]" SITE "K16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[0]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[1]" SITE "D17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[1]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[2]" SITE "K15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[2]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[2]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[3]" SITE "K17";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[3]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[3]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[4]" SITE "B18";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[4]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[4]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_VCCIO[5]" SITE "C6";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[5]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_VCCIO[5]" IO_TYPE=SSTL135_II;
|
||||
|
||||
LOCATE COMP "OrangeCrab_DDRAM_GND[0]" SITE "L15";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_GND[0]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_GND[0]" IO_TYPE=SSTL135_II;
|
||||
LOCATE COMP "OrangeCrab_DDRAM_GND[1]" SITE "L16";
|
||||
IOBUF PORT "OrangeCrab_DDRAM_GND[1]" SLEWRATE=FAST;
|
||||
IOBUF PORT "OrangeCrab_DDRAM_GND[1]" IO_TYPE=SSTL135_II;
|
||||
|
||||
LOCATE COMP "OrangeCrab_SPIFLASH_CS_N" SITE "U17";
|
||||
IOBUF PORT "OrangeCrab_SPIFLASH_CS_N" IO_TYPE=LVCMOS33;
|
||||
|
||||
LOCATE COMP "OrangeCrab_SPIFLASH_DQ[0]" SITE "U18";
|
||||
IOBUF PORT "OrangeCrab_SPIFLASH_DQ[0]" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_SPIFLASH_DQ[1]" SITE "T18";
|
||||
IOBUF PORT "OrangeCrab_SPIFLASH_DQ[1]" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_SPIFLASH_DQ[2]" SITE "R18";
|
||||
IOBUF PORT "OrangeCrab_SPIFLASH_DQ[2]" IO_TYPE=LVCMOS33;
|
||||
LOCATE COMP "OrangeCrab_SPIFLASH_DQ[3]" SITE "N18";
|
||||
IOBUF PORT "OrangeCrab_SPIFLASH_DQ[3]" IO_TYPE=LVCMOS33;
|
598
Libs/RiscV/NEORV32/setups/osflow/constraints/ULX3S.lpf
Normal file
598
Libs/RiscV/NEORV32/setups/osflow/constraints/ULX3S.lpf
Normal file
@ -0,0 +1,598 @@
|
||||
BLOCK RESETPATHS;
|
||||
BLOCK ASYNCPATHS;
|
||||
## ULX3S v2.x.x and v3.0.x
|
||||
|
||||
# The clock "usb" and "gpdi" sheet
|
||||
LOCATE COMP "ULX3S_CLK" SITE "G2";
|
||||
IOBUF PORT "ULX3S_CLK" PULLMODE=NONE IO_TYPE=LVCMOS33;
|
||||
FREQUENCY PORT "ULX3S_CLK" 25 MHZ;
|
||||
|
||||
# JTAG and SPI FLASH voltage 3.3V and options to boot from SPI flash
|
||||
# write to FLASH possible any time from JTAG:
|
||||
SYSCONFIG CONFIG_IOVOLTAGE=3.3 COMPRESS_CONFIG=ON MCCLK_FREQ=62 SLAVE_SPI_PORT=DISABLE MASTER_SPI_PORT=ENABLE SLAVE_PARALLEL_PORT=DISABLE;
|
||||
# write to FLASH possible from user bitstream:
|
||||
# SYSCONFIG CONFIG_IOVOLTAGE=3.3 COMPRESS_CONFIG=ON MCCLK_FREQ=62 SLAVE_SPI_PORT=DISABLE MASTER_SPI_PORT=DISABLE SLAVE_PARALLEL_PORT=DISABLE;
|
||||
|
||||
## USBSERIAL FTDI-FPGA serial port "usb" sheet
|
||||
LOCATE COMP "ULX3S_TX" SITE "L4"; # FPGA transmits to ftdi
|
||||
LOCATE COMP "ULX3S_RX" SITE "M1"; # FPGA receives from ftdi
|
||||
LOCATE COMP "ftdi_nrts" SITE "M3"; # FPGA receives
|
||||
LOCATE COMP "ftdi_ndtr" SITE "N1"; # FPGA receives
|
||||
LOCATE COMP "ftdi_txden" SITE "L3"; # FPGA receives
|
||||
IOBUF PORT "ULX3S_TX" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_RX" PULLMODE=UP IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "ftdi_nrts" PULLMODE=UP IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "ftdi_ndtr" PULLMODE=UP IO_TYPE=LVCMOS33;
|
||||
IOBUF PORT "ftdi_txden" PULLMODE=UP IO_TYPE=LVCMOS33;
|
||||
|
||||
## LED indicators "blinkey" and "gpio" sheet
|
||||
LOCATE COMP "ULX3S_LED7" SITE "H3";
|
||||
LOCATE COMP "ULX3S_LED6" SITE "E1";
|
||||
LOCATE COMP "ULX3S_LED5" SITE "E2";
|
||||
LOCATE COMP "ULX3S_LED4" SITE "D1";
|
||||
LOCATE COMP "ULX3S_LED3" SITE "D2";
|
||||
LOCATE COMP "ULX3S_LED2" SITE "C1";
|
||||
LOCATE COMP "ULX3S_LED1" SITE "C2";
|
||||
LOCATE COMP "ULX3S_LED0" SITE "B2";
|
||||
IOBUF PORT "ULX3S_LED0" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED1" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED2" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED3" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED4" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED5" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED6" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "ULX3S_LED7" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## Pushbuttons "blinkey", "flash", "power", "gpdi" sheet
|
||||
LOCATE COMP "ULX3S_RST_N" SITE "D6"; # BTN_PWRn (inverted logic)
|
||||
LOCATE COMP "btn[1]" SITE "R1"; # FIRE1
|
||||
LOCATE COMP "btn[2]" SITE "T1"; # FIRE2
|
||||
LOCATE COMP "btn[3]" SITE "R18"; # UP W1->R18
|
||||
LOCATE COMP "btn[4]" SITE "V1"; # DOWN
|
||||
LOCATE COMP "btn[5]" SITE "U1"; # LEFT
|
||||
LOCATE COMP "btn[6]" SITE "H16"; # RIGHT Y2->H16
|
||||
IOBUF PORT "ULX3S_RST_N" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[1]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[2]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[3]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[4]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[5]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "btn[6]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## DIP switch "blinkey", "gpio" sheet
|
||||
LOCATE COMP "sw[0]" SITE "E8"; # SW1
|
||||
LOCATE COMP "sw[1]" SITE "D8"; # SW2
|
||||
LOCATE COMP "sw[2]" SITE "D7"; # SW3
|
||||
LOCATE COMP "sw[3]" SITE "E7"; # SW4
|
||||
IOBUF PORT "sw[0]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sw[1]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sw[2]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sw[3]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## SPI OLED DISPLAY SSD1331 (Color) or SSD1306 (B/W) "blinkey", "usb" sheet
|
||||
LOCATE COMP "oled_clk" SITE "P4";
|
||||
LOCATE COMP "oled_mosi" SITE "P3";
|
||||
LOCATE COMP "oled_dc" SITE "P1";
|
||||
LOCATE COMP "oled_resn" SITE "P2";
|
||||
LOCATE COMP "oled_csn" SITE "N2";
|
||||
IOBUF PORT "oled_clk" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "oled_mosi" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "oled_dc" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "oled_resn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "oled_csn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## SPI Flash chip "flash" sheet
|
||||
LOCATE COMP "flash_csn" SITE "R2";
|
||||
LOCATE COMP "flash_clk" SITE "U3";
|
||||
LOCATE COMP "flash_mosi" SITE "W2";
|
||||
LOCATE COMP "flash_miso" SITE "V2";
|
||||
LOCATE COMP "flash_holdn" SITE "W1";
|
||||
LOCATE COMP "flash_wpn" SITE "Y2";
|
||||
#LOCATE COMP "flash_csspin" SITE "AJ3";
|
||||
#LOCATE COMP "flash_initn" SITE "AG4";
|
||||
#LOCATE COMP "flash_done" SITE "AJ4";
|
||||
#LOCATE COMP "flash_programn" SITE "AH4";
|
||||
#LOCATE COMP "flash_cfg_select[0]" SITE "AM4";
|
||||
#LOCATE COMP "flash_cfg_select[1]" SITE "AL4";
|
||||
#LOCATE COMP "flash_cfg_select[2]" SITE "AK4";
|
||||
IOBUF PORT "flash_csn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "flash_clk" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "flash_mosi" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "flash_miso" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "flash_holdn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "flash_wpn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_csspin" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_initn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_done" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_programn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_cfg_select[0]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_cfg_select[1]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "flash_cfg_select[2]" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## SD card "sdcard", "usb" sheet
|
||||
# wifi_gpio2,4,12,13,14,15 are shared with SD card.
|
||||
# If any of wifi_gpio2,4,12,13 is used in toplevel, don't use sd_d[].
|
||||
# If SD is used in 1-bit SPI mode, wifi_gpio4,12 = sd_d[1,2] are free,
|
||||
LOCATE COMP "sd_clk" SITE "H2"; # sd_clk WiFi_GPIO14
|
||||
LOCATE COMP "sd_cmd" SITE "J1"; # sd_cmd_di (MOSI) WiFi GPIO15
|
||||
LOCATE COMP "sd_d[0]" SITE "J3"; # sd_d0_do (MISO) WiFi GPIO2
|
||||
LOCATE COMP "sd_d[1]" SITE "H1"; # sd_d1_irq WiFi GPIO4
|
||||
LOCATE COMP "sd_d[2]" SITE "K1"; # sd_d2 WiFi_GPIO12
|
||||
LOCATE COMP "sd_d[3]" SITE "K2"; # sd_d3_csn WiFi_GPIO13
|
||||
LOCATE COMP "sd_wp" SITE "P5"; # not connected
|
||||
LOCATE COMP "sd_cdn" SITE "N5"; # not connected
|
||||
IOBUF PORT "sd_clk" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_cmd" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_d[0]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_d[1]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_d[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4; # WiFi GPIO12 pulldown bootstrapping without 3.3V efuse
|
||||
IOBUF PORT "sd_d[3]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_wp" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sd_cdn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## ADC SPI (MAX11123) "analog", "ram" sheet
|
||||
# input lines shared with GP,GN14-17
|
||||
LOCATE COMP "adc_csn" SITE "R17";
|
||||
LOCATE COMP "adc_mosi" SITE "R16";
|
||||
LOCATE COMP "adc_miso" SITE "U16";
|
||||
LOCATE COMP "adc_sclk" SITE "P17";
|
||||
IOBUF PORT "adc_csn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "adc_mosi" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "adc_miso" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "adc_sclk" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## Audio 4-bit DAC "analog", "gpio" sheet
|
||||
# output impedance: 75 ohm
|
||||
# Stereo 16 ohm earphones, analog audio,
|
||||
# SPDIF digital audio and composite video.
|
||||
LOCATE COMP "audio_l[3]" SITE "B3"; # JACK TIP (left audio)
|
||||
LOCATE COMP "audio_l[2]" SITE "C3";
|
||||
LOCATE COMP "audio_l[1]" SITE "D3";
|
||||
LOCATE COMP "audio_l[0]" SITE "E4";
|
||||
LOCATE COMP "audio_r[3]" SITE "C5"; # JACK RING1 (right audio)
|
||||
LOCATE COMP "audio_r[2]" SITE "D5";
|
||||
LOCATE COMP "audio_r[1]" SITE "B5";
|
||||
LOCATE COMP "audio_r[0]" SITE "A3";
|
||||
LOCATE COMP "audio_v[3]" SITE "E5"; # JACK RING2 (video or digital audio)
|
||||
LOCATE COMP "audio_v[2]" SITE "F5";
|
||||
LOCATE COMP "audio_v[1]" SITE "F2";
|
||||
LOCATE COMP "audio_v[0]" SITE "H5";
|
||||
IOBUF PORT "audio_l[3]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_l[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_l[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_l[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_r[3]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_r[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_r[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_r[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_v[3]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_v[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_v[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "audio_v[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
|
||||
## WiFi ESP-32 "wifi", "usb", "flash" sheet
|
||||
# wifi_gpio2,4,12,13,14,15 are shared with SD card.
|
||||
# If any of wifi_gpio2,4,12,13 is used in toplevel, don't use sd_d[].
|
||||
# If SD is used in 1-bit SPI mode, wifi_gpio4,12 = sd_d[1,2] are free,
|
||||
# other pins are shared with GP/GN, and JTAG
|
||||
LOCATE COMP "wifi_en" SITE "F1"; # enable/reset WiFi
|
||||
LOCATE COMP "wifi_rxd" SITE "K3"; # FPGA transmits to WiFi
|
||||
LOCATE COMP "wifi_txd" SITE "K4"; # FPGA receives from WiFi
|
||||
LOCATE COMP "wifi_gpio0" SITE "L2";
|
||||
LOCATE COMP "wifi_gpio5" SITE "N4"; # WIFI LED
|
||||
LOCATE COMP "wifi_gpio16" SITE "L1"; # Serial1 RX
|
||||
LOCATE COMP "wifi_gpio17" SITE "N3"; # Serial1 TX
|
||||
# LOCATE COMP "prog_done" SITE "Y3"; # not GPIO, always active
|
||||
# wifi lines shared with SD card
|
||||
LOCATE COMP "wifi_gpio2" SITE "J3"; # sd_d0_do (MISO) WiFi GPIO2
|
||||
LOCATE COMP "wifi_gpio4" SITE "H1"; # sd_d1_irq WiFi GPIO4
|
||||
LOCATE COMP "wifi_gpio12" SITE "K1"; # sd_d2 WiFi_GPIO12
|
||||
LOCATE COMP "wifi_gpio13" SITE "K2"; # sd_d3_csn WiFi_GPIO13
|
||||
LOCATE COMP "wifi_gpio14" SITE "H2"; # sd_clk WiFi_GPIO14
|
||||
LOCATE COMP "wifi_gpio15" SITE "J1"; # sd_cmd_di (MOSI) WiFi GPIO15
|
||||
# wifi lines shared with JTAG
|
||||
# LOCATE COMP "wifi_gpio21" SITE "U5"; # JTAG TMS
|
||||
# LOCATE COMP "wifi_gpio18" SITE "T5"; # JTAG TCK
|
||||
# LOCATE COMP "wifi_gpio23" SITE "R5"; # JTAG TDI
|
||||
# LOCATE COMP "wifi_gpio19" SITE "V4"; # JTAG TDO
|
||||
IOBUF PORT "wifi_en" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "wifi_rxd" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "wifi_txd" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "wifi_gpio0" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "wifi_gpio5" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4; # pull down or drive 0 for esp32 programming
|
||||
IOBUF PORT "wifi_gpio16" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "wifi_gpio17" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
# IOBUF PORT "prog_done" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## PCB antenna 433 MHz (may be also used for FM) "usb" sheet
|
||||
LOCATE COMP "ant_433mhz" SITE "G1";
|
||||
IOBUF PORT "ant_433mhz" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## Second USB port "US2" going directly into FPGA "usb", "ram" sheet
|
||||
LOCATE COMP "ULX3S_USB_D_P" SITE "E16"; # single ended or differential input only
|
||||
LOCATE COMP "ULX3S_USB_D_N" SITE "F16";
|
||||
IOBUF PORT "ULX3S_USB_D_P" PULLMODE=NONE IO_TYPE=LVCMOS33D DRIVE=16;
|
||||
IOBUF PORT "ULX3S_USB_D_N" PULLMODE=NONE IO_TYPE=LVCMOS33D DRIVE=16;
|
||||
LOCATE COMP "usb_fpga_bd_dp" SITE "D15"; # single-ended bidirectional
|
||||
LOCATE COMP "usb_fpga_bd_dn" SITE "E15";
|
||||
IOBUF PORT "usb_fpga_bd_dp" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "usb_fpga_bd_dn" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "ULX3S_USB_DP_PU" SITE "B12"; # pull up/down control
|
||||
LOCATE COMP "ULX3S_USB_DN_PU" SITE "C12";
|
||||
IOBUF PORT "ULX3S_USB_DP_PU" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
IOBUF PORT "ULX3S_USB_DN_PU" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=16;
|
||||
|
||||
## JTAG ESP-32 "usb" sheet
|
||||
# connected to FT231X and ESP-32
|
||||
# commented out because those are dedicated pins, not directly useable as GPIO
|
||||
# but could be used by some vendor-specific JTAG bridging (boundary scan) module
|
||||
#LOCATE COMP "jtag_tdi" SITE "R5"; # FTDI_nRI FPGA receives
|
||||
#LOCATE COMP "jtag_tdo" SITE "V4"; # FTDI_nCTS FPGA transmits
|
||||
#LOCATE COMP "jtag_tck" SITE "T5"; # FTDI_nDSR FPGA receives
|
||||
#LOCATE COMP "jtag_tms" SITE "U5"; # FTDI_nDCD FPGA receives
|
||||
#IOBUF PORT "jtag_tdi" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "jtag_tdo" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "jtag_tck" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
#IOBUF PORT "jtag_tms" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## SDRAM "ram" sheet
|
||||
LOCATE COMP "sdram_clk" SITE "F19";
|
||||
LOCATE COMP "sdram_cke" SITE "F20";
|
||||
LOCATE COMP "sdram_csn" SITE "P20";
|
||||
LOCATE COMP "sdram_wen" SITE "T20";
|
||||
LOCATE COMP "sdram_rasn" SITE "R20";
|
||||
LOCATE COMP "sdram_casn" SITE "T19";
|
||||
LOCATE COMP "sdram_a[0]" SITE "M20";
|
||||
LOCATE COMP "sdram_a[1]" SITE "M19";
|
||||
LOCATE COMP "sdram_a[2]" SITE "L20";
|
||||
LOCATE COMP "sdram_a[3]" SITE "L19";
|
||||
LOCATE COMP "sdram_a[4]" SITE "K20";
|
||||
LOCATE COMP "sdram_a[5]" SITE "K19";
|
||||
LOCATE COMP "sdram_a[6]" SITE "K18";
|
||||
LOCATE COMP "sdram_a[7]" SITE "J20";
|
||||
LOCATE COMP "sdram_a[8]" SITE "J19";
|
||||
LOCATE COMP "sdram_a[9]" SITE "H20";
|
||||
LOCATE COMP "sdram_a[10]" SITE "N19";
|
||||
LOCATE COMP "sdram_a[11]" SITE "G20";
|
||||
LOCATE COMP "sdram_a[12]" SITE "G19";
|
||||
LOCATE COMP "sdram_ba[0]" SITE "P19";
|
||||
LOCATE COMP "sdram_ba[1]" SITE "N20";
|
||||
LOCATE COMP "sdram_dqm[0]" SITE "U19";
|
||||
LOCATE COMP "sdram_dqm[1]" SITE "E20";
|
||||
LOCATE COMP "sdram_d[0]" SITE "J16";
|
||||
LOCATE COMP "sdram_d[1]" SITE "L18";
|
||||
LOCATE COMP "sdram_d[2]" SITE "M18";
|
||||
LOCATE COMP "sdram_d[3]" SITE "N18";
|
||||
LOCATE COMP "sdram_d[4]" SITE "P18";
|
||||
LOCATE COMP "sdram_d[5]" SITE "T18";
|
||||
LOCATE COMP "sdram_d[6]" SITE "T17";
|
||||
LOCATE COMP "sdram_d[7]" SITE "U20";
|
||||
LOCATE COMP "sdram_d[8]" SITE "E19";
|
||||
LOCATE COMP "sdram_d[9]" SITE "D20";
|
||||
LOCATE COMP "sdram_d[10]" SITE "D19";
|
||||
LOCATE COMP "sdram_d[11]" SITE "C20";
|
||||
LOCATE COMP "sdram_d[12]" SITE "E18";
|
||||
LOCATE COMP "sdram_d[13]" SITE "F18";
|
||||
LOCATE COMP "sdram_d[14]" SITE "J18";
|
||||
LOCATE COMP "sdram_d[15]" SITE "J17";
|
||||
IOBUF PORT "sdram_clk" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_cke" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_csn" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_wen" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_rasn" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_casn" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[3]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[4]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[5]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[6]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[7]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[8]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[9]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[10]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[11]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_a[12]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_ba[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_ba[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_dqm[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_dqm[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[0]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[1]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[2]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[3]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[4]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[5]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[6]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[7]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[8]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[9]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[10]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[11]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[12]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[13]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[14]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "sdram_d[15]" PULLMODE=NONE IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
# GPDI differential interface (Video) "gpdi" sheet
|
||||
LOCATE COMP "gpdi_dp[0]" SITE "A16"; # Blue +
|
||||
LOCATE COMP "gpdi_dn[0]" SITE "B16"; # Blue -
|
||||
LOCATE COMP "gpdi_dp[1]" SITE "A14"; # Green +
|
||||
LOCATE COMP "gpdi_dn[1]" SITE "C14"; # Green -
|
||||
LOCATE COMP "gpdi_dp[2]" SITE "A12"; # Red +
|
||||
LOCATE COMP "gpdi_dn[2]" SITE "A13"; # Red -
|
||||
LOCATE COMP "gpdi_dp[3]" SITE "A17"; # Clock +
|
||||
LOCATE COMP "gpdi_dn[3]" SITE "B18"; # Clock -
|
||||
LOCATE COMP "gpdi_util" SITE "A19"; # add 10k parallel to C
|
||||
LOCATE COMP "gpdi_hpd" SITE "B20"; # add 549ohm parallel to C
|
||||
LOCATE COMP "gpdi_cec" SITE "A18";
|
||||
LOCATE COMP "gpdi_sda" SITE "B19"; # I2C shared with RTC
|
||||
LOCATE COMP "gpdi_scl" SITE "E12"; # I2C shared with RTC C12->E12
|
||||
IOBUF PORT "gpdi_dp[0]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dn[0]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dp[1]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dn[1]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dp[2]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dn[2]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dp[3]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_dn[3]" IO_TYPE=LVCMOS33D DRIVE=4;
|
||||
IOBUF PORT "gpdi_util" IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gpdi_hpd" IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gpdi_cec" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gpdi_sda" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gpdi_scl" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
# GPIO (default single-ended) "gpio", "ram", "gpdi" sheet
|
||||
# Pins enumerated gp[0-27], gn[0-27].
|
||||
# With differential mode enabled on Lattice,
|
||||
# gp[] (+) are used, gn[] (-) are ignored from design
|
||||
# as they handle inverted signal by default.
|
||||
# To enable differential, rename LVCMOS33->LVCMOS33D
|
||||
# FEMALE ANGLED (90 deg PMOD) on TOP or
|
||||
# MALE VERTICAL ( 0 deg pins) on BOTTOM and flat cable
|
||||
LOCATE COMP "gp[0]" SITE "B11"; # PCLK
|
||||
LOCATE COMP "gn[0]" SITE "C11"; # PCLK
|
||||
LOCATE COMP "gp[1]" SITE "A10"; # PCLK
|
||||
LOCATE COMP "gn[1]" SITE "A11"; # PCLK
|
||||
LOCATE COMP "gp[2]" SITE "A9"; # GR_PCLK
|
||||
LOCATE COMP "gn[2]" SITE "B10"; # GR_PCLK
|
||||
LOCATE COMP "gp[3]" SITE "B9";
|
||||
LOCATE COMP "gn[3]" SITE "C10";
|
||||
LOCATE COMP "gp[4]" SITE "A7";
|
||||
LOCATE COMP "gn[4]" SITE "A8";
|
||||
LOCATE COMP "gp[5]" SITE "C8";
|
||||
LOCATE COMP "gn[5]" SITE "B8";
|
||||
LOCATE COMP "gp[6]" SITE "C6";
|
||||
LOCATE COMP "gn[6]" SITE "C7";
|
||||
IOBUF PORT "gp[0]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[0]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[1]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[1]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[2]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[2]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[3]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[3]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[4]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[4]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[5]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[5]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[6]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[6]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp[7]" SITE "A6";
|
||||
LOCATE COMP "gn[7]" SITE "B6";
|
||||
LOCATE COMP "gp[8]" SITE "A4"; # DIFF
|
||||
LOCATE COMP "gn[8]" SITE "A5"; # DIFF
|
||||
LOCATE COMP "gp[9]" SITE "A2"; # DIFF
|
||||
LOCATE COMP "gn[9]" SITE "B1"; # DIFF
|
||||
LOCATE COMP "gp[10]" SITE "C4"; # DIFF
|
||||
LOCATE COMP "gn[10]" SITE "B4"; # DIFF
|
||||
LOCATE COMP "gp[11]" SITE "F4"; # DIFF wifi_gpio26
|
||||
LOCATE COMP "gn[11]" SITE "E3"; # DIFF wifi_gpio25
|
||||
LOCATE COMP "gp[12]" SITE "G3"; # DIFF wifi_gpio33 PCLK
|
||||
LOCATE COMP "gn[12]" SITE "F3"; # DIFF wifi_gpio32 PCLK
|
||||
LOCATE COMP "gp[13]" SITE "H4"; # DIFF wifi_gpio35
|
||||
LOCATE COMP "gn[13]" SITE "G5"; # DIFF wifi_gpio34
|
||||
IOBUF PORT "gp[7]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[7]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[8]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[8]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[9]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[9]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[10]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[10]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[11]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[11]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[12]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[12]" PULLMODE=NONE IO_TYPE=LVCMOS33;
|
||||
FREQUENCY PORT "gn[12]" 50 MHZ;
|
||||
IOBUF PORT "gp[13]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[13]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp[14]" SITE "U18"; # DIFF ADC AIN1
|
||||
LOCATE COMP "gn[14]" SITE "U17"; # DIFF ADC AIN0
|
||||
LOCATE COMP "gp[15]" SITE "N17"; # DIFF ADC AIN3
|
||||
LOCATE COMP "gn[15]" SITE "P16"; # DIFF ADC AIN2
|
||||
LOCATE COMP "gp[16]" SITE "N16"; # DIFF ADC AIN5
|
||||
LOCATE COMP "gn[16]" SITE "M17"; # DIFF ADC AIN4
|
||||
LOCATE COMP "gp[17]" SITE "L16"; # DIFF ADC AIN7 GR_PCLK
|
||||
LOCATE COMP "gn[17]" SITE "L17"; # DIFF ADC AIN6
|
||||
LOCATE COMP "gp[18]" SITE "H18"; # DIFF
|
||||
LOCATE COMP "gn[18]" SITE "H17"; # DIFF
|
||||
LOCATE COMP "gp[19]" SITE "F17"; # DIFF
|
||||
LOCATE COMP "gn[19]" SITE "G18"; # DIFF
|
||||
LOCATE COMP "gp[20]" SITE "D18"; # DIFF
|
||||
LOCATE COMP "gn[20]" SITE "E17"; # DIFF
|
||||
IOBUF PORT "gp[14]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[14]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[15]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[15]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[16]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[16]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[17]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[17]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[18]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[18]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[19]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[19]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[20]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[20]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp[21]" SITE "C18"; # DIFF
|
||||
LOCATE COMP "gn[21]" SITE "D17"; # DIFF
|
||||
LOCATE COMP "gp[22]" SITE "B15";
|
||||
LOCATE COMP "gn[22]" SITE "C15";
|
||||
LOCATE COMP "gp[23]" SITE "B17";
|
||||
LOCATE COMP "gn[23]" SITE "C17";
|
||||
LOCATE COMP "gp[24]" SITE "C16";
|
||||
LOCATE COMP "gn[24]" SITE "D16";
|
||||
LOCATE COMP "gp[25]" SITE "D14";
|
||||
LOCATE COMP "gn[25]" SITE "E14";
|
||||
LOCATE COMP "gp[26]" SITE "B13";
|
||||
LOCATE COMP "gn[26]" SITE "C13";
|
||||
LOCATE COMP "gp[27]" SITE "D13";
|
||||
LOCATE COMP "gn[27]" SITE "E13";
|
||||
IOBUF PORT "gp[21]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[21]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[22]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[22]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[23]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[23]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[24]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[24]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[25]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[25]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[26]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[26]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp[27]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn[27]" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## GPIO repeated as individual signals (non-vector)
|
||||
# Allows mixed input, output, bidirectional, clock, differential
|
||||
# If any of individual gp is used, then don't use gp[] vector.
|
||||
# Same for gn and gn[].
|
||||
# FEMALE ANGLED (90 deg PMOD) on TOP or
|
||||
# MALE VERTICAL ( 0 deg pins) on BOTTOM and flat cable
|
||||
LOCATE COMP "gp0" SITE "B11"; # PCLK
|
||||
LOCATE COMP "gn0" SITE "C11"; # PCLK
|
||||
LOCATE COMP "gp1" SITE "A10"; # PCLK
|
||||
LOCATE COMP "gn1" SITE "A11"; # PCLK
|
||||
LOCATE COMP "gp2" SITE "A9"; # GR_PCLK
|
||||
LOCATE COMP "gn2" SITE "B10"; # GR_PCLK
|
||||
LOCATE COMP "gp3" SITE "B9";
|
||||
LOCATE COMP "gn3" SITE "C10";
|
||||
LOCATE COMP "gp4" SITE "A7";
|
||||
LOCATE COMP "gn4" SITE "A8";
|
||||
LOCATE COMP "gp5" SITE "C8";
|
||||
LOCATE COMP "gn5" SITE "B8";
|
||||
LOCATE COMP "gp6" SITE "C6";
|
||||
LOCATE COMP "gn6" SITE "C7";
|
||||
IOBUF PORT "gp0" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn0" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp1" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn1" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp2" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn2" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp3" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn3" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp4" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn4" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp5" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn5" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp6" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn6" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp7" SITE "A6";
|
||||
LOCATE COMP "gn7" SITE "B6";
|
||||
LOCATE COMP "gp8" SITE "A4"; # DIFF
|
||||
LOCATE COMP "gn8" SITE "A5"; # DIFF
|
||||
LOCATE COMP "gp9" SITE "A2"; # DIFF
|
||||
LOCATE COMP "gn9" SITE "B1"; # DIFF
|
||||
LOCATE COMP "gp10" SITE "C4"; # DIFF
|
||||
LOCATE COMP "gn10" SITE "B4"; # DIFF
|
||||
LOCATE COMP "gp11" SITE "F4"; # DIFF wifi_gpio26
|
||||
LOCATE COMP "gn11" SITE "E3"; # DIFF wifi_gpio25
|
||||
LOCATE COMP "gp12" SITE "G3"; # DIFF wifi_gpio33 PCLK
|
||||
LOCATE COMP "gn12" SITE "F3"; # DIFF wifi_gpio32 PCLK
|
||||
LOCATE COMP "gp13" SITE "H4"; # DIFF wifi_gpio35
|
||||
LOCATE COMP "gn13" SITE "G5"; # DIFF wifi_gpio34
|
||||
# wifi sharing PCB v2.0.6-v3.0.8
|
||||
# prior to v2.0.6 see schematics
|
||||
IOBUF PORT "gp7" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn7" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp8" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn8" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp9" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn9" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp10" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn10" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp11" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn11" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp12" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn12" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
FREQUENCY PORT "gn12" 50 MHZ;
|
||||
IOBUF PORT "gp13" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn13" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp14" SITE "U18"; # DIFF ADC AIN1
|
||||
LOCATE COMP "gn14" SITE "U17"; # DIFF ADC AIN0
|
||||
LOCATE COMP "gp15" SITE "N17"; # DIFF ADC AIN3
|
||||
LOCATE COMP "gn15" SITE "P16"; # DIFF ADC AIN2
|
||||
LOCATE COMP "gp16" SITE "N16"; # DIFF ADC AIN5
|
||||
LOCATE COMP "gn16" SITE "M17"; # DIFF ADC AIN4
|
||||
LOCATE COMP "gp17" SITE "L16"; # DIFF ADC AIN7 GR_PCLK
|
||||
LOCATE COMP "gn17" SITE "L17"; # DIFF ADC AIN6
|
||||
LOCATE COMP "gp18" SITE "H18"; # DIFF
|
||||
LOCATE COMP "gn18" SITE "H17"; # DIFF
|
||||
LOCATE COMP "gp19" SITE "F17"; # DIFF
|
||||
LOCATE COMP "gn19" SITE "G18"; # DIFF
|
||||
LOCATE COMP "gp20" SITE "D18"; # DIFF
|
||||
LOCATE COMP "gn20" SITE "E17"; # DIFF
|
||||
IOBUF PORT "gp14" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn14" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp15" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn15" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp16" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn16" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp17" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn17" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp18" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn18" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp19" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn19" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp20" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn20" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
LOCATE COMP "gp21" SITE "C18"; # DIFF
|
||||
LOCATE COMP "gn21" SITE "D17"; # DIFF
|
||||
LOCATE COMP "gp22" SITE "B15";
|
||||
LOCATE COMP "gn22" SITE "C15";
|
||||
LOCATE COMP "gp23" SITE "B17";
|
||||
LOCATE COMP "gn23" SITE "C17";
|
||||
LOCATE COMP "gp24" SITE "C16";
|
||||
LOCATE COMP "gn24" SITE "D16";
|
||||
LOCATE COMP "gp25" SITE "D14";
|
||||
LOCATE COMP "gn25" SITE "E14";
|
||||
LOCATE COMP "gp26" SITE "B13";
|
||||
LOCATE COMP "gn26" SITE "C13";
|
||||
LOCATE COMP "gp27" SITE "D13";
|
||||
LOCATE COMP "gn27" SITE "E13";
|
||||
IOBUF PORT "gp21" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn21" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp22" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn22" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp23" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn23" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp24" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn24" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp25" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn25" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp26" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn26" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gp27" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
IOBUF PORT "gn27" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## PROGRAMN (reload bitstream from FLASH, exit from bootloader)
|
||||
# PCB v2.0.5 and higher
|
||||
LOCATE COMP "user_programn" SITE "M4";
|
||||
IOBUF PORT "user_programn" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4;
|
||||
|
||||
## SHUTDOWN "power", "ram" sheet (connected from PCB v1.7.5)
|
||||
# on PCB v1.7 shutdown is not connected to FPGA
|
||||
LOCATE COMP "shutdown" SITE "G16"; # FPGA receives
|
||||
IOBUF PORT "shutdown" PULLMODE=DOWN IO_TYPE=LVCMOS33 DRIVE=4;
|
36
Libs/RiscV/NEORV32/setups/osflow/constraints/UPduino_v3.pcf
Normal file
36
Libs/RiscV/NEORV32/setups/osflow/constraints/UPduino_v3.pcf
Normal file
@ -0,0 +1,36 @@
|
||||
## UART (uart0)
|
||||
set_io uart_txd_o 38
|
||||
set_io uart_rxd_i 28
|
||||
|
||||
## SPI - on-board flash
|
||||
set_io flash_sdo_o 14
|
||||
set_io flash_sck_o 15
|
||||
set_io flash_csn_o 16
|
||||
set_io flash_sdi_i 17
|
||||
|
||||
## SPI - user port
|
||||
set_io spi_sdo_o 34
|
||||
set_io spi_sck_o 43
|
||||
set_io spi_csn_o 36
|
||||
set_io spi_sdi_i 42
|
||||
|
||||
## TWI
|
||||
set_io twi_sda_io 31
|
||||
set_io twi_scl_io 37
|
||||
|
||||
## GPIO - input
|
||||
set_io gpio_i[0] 44
|
||||
set_io gpio_i[1] 4
|
||||
set_io gpio_i[2] 3
|
||||
set_io gpio_i[3] 48
|
||||
|
||||
## GPIO - output
|
||||
set_io gpio_o[0] 45
|
||||
set_io gpio_o[1] 47
|
||||
set_io gpio_o[2] 46
|
||||
set_io gpio_o[3] 2
|
||||
|
||||
## RGB power LED
|
||||
set_io pwm_o[0] 39
|
||||
set_io pwm_o[1] 40
|
||||
set_io pwm_o[2] 41
|
39
Libs/RiscV/NEORV32/setups/osflow/constraints/iCEBreaker.pcf
Normal file
39
Libs/RiscV/NEORV32/setups/osflow/constraints/iCEBreaker.pcf
Normal file
@ -0,0 +1,39 @@
|
||||
## UART (uart0)
|
||||
set_io uart_txd_o 9
|
||||
set_io uart_rxd_i 6
|
||||
|
||||
## SPI - on-board flash
|
||||
set_io flash_sdo_o 14
|
||||
set_io flash_sck_o 15
|
||||
set_io flash_csn_o 16
|
||||
set_io flash_sdi_i 17
|
||||
|
||||
## SPI - user port
|
||||
set_io spi_sdo_o 43
|
||||
set_io spi_sck_o 38
|
||||
set_io spi_csn_o 34
|
||||
set_io spi_sdi_i 31
|
||||
|
||||
## TWI
|
||||
set_io twi_sda_io 2
|
||||
set_io twi_scl_io 4
|
||||
|
||||
## GPIO - input
|
||||
set_io gpio_i[0] 18
|
||||
set_io gpio_i[1] 19
|
||||
set_io gpio_i[2] 20
|
||||
set_io gpio_i[3] 28
|
||||
|
||||
## GPIO - output
|
||||
set_io gpio_o[0] 25
|
||||
set_io gpio_o[1] 26
|
||||
set_io gpio_o[2] 27
|
||||
set_io gpio_o[3] 23
|
||||
|
||||
## RGB power LED
|
||||
set_io pwm_o[0] 39
|
||||
set_io pwm_o[1] 40
|
||||
set_io pwm_o[2] 41
|
||||
|
||||
#User Reset Btn
|
||||
set_io user_reset_btn 10
|
69
Libs/RiscV/NEORV32/setups/osflow/constraints/iCESugar.pcf
Normal file
69
Libs/RiscV/NEORV32/setups/osflow/constraints/iCESugar.pcf
Normal file
@ -0,0 +1,69 @@
|
||||
#| iCESugar-v1.5
|
||||
|
||||
|
||||
#> Clock (12 MHz)
|
||||
set_io --warn-no-port iCESugarv15_CLK 35
|
||||
|
||||
|
||||
#> Tri-colour LED
|
||||
set_io --warn-no-port iCESugarv15_LED_G 41
|
||||
set_io --warn-no-port iCESugarv15_LED_R 40
|
||||
set_io --warn-no-port iCESugarv15_LED_B 39
|
||||
|
||||
|
||||
#> UART
|
||||
set_io --warn-no-port iCESugarv15_RX 4
|
||||
set_io --warn-no-port iCESugarv15_TX 6
|
||||
|
||||
|
||||
#> USB
|
||||
set_io --warn-no-port iCESugarv15_USB_DN 9
|
||||
set_io --warn-no-port iCESugarv15_USB_DP 10
|
||||
set_io --warn-no-port iCESugarv15_USB_DP_PU 11
|
||||
|
||||
|
||||
#> PMOD 1
|
||||
set_io --warn-no-port iCESugarv15_PMOD1A_0 10
|
||||
set_io --warn-no-port iCESugarv15_PMOD1A_1 6
|
||||
set_io --warn-no-port iCESugarv15_PMOD1A_2 3
|
||||
set_io --warn-no-port iCESugarv15_PMOD1A_3 48
|
||||
set_io --warn-no-port iCESugarv15_PMOD1B_0 47
|
||||
set_io --warn-no-port iCESugarv15_PMOD1B_1 2
|
||||
set_io --warn-no-port iCESugarv15_PMOD1B_2 4
|
||||
set_io --warn-no-port iCESugarv15_PMOD1B_3 9
|
||||
|
||||
|
||||
#> PMOD 2
|
||||
set_io --warn-no-port iCESugarv15_PMOD2A_0 46
|
||||
set_io --warn-no-port iCESugarv15_PMOD2A_1 44
|
||||
set_io --warn-no-port iCESugarv15_PMOD2A_2 42
|
||||
set_io --warn-no-port iCESugarv15_PMOD2A_3 37
|
||||
set_io --warn-no-port iCESugarv15_PMOD2B_0 36
|
||||
set_io --warn-no-port iCESugarv15_PMOD2B_1 38
|
||||
set_io --warn-no-port iCESugarv15_PMOD2B_2 43
|
||||
set_io --warn-no-port iCESugarv15_PMOD2B_3 45
|
||||
|
||||
|
||||
#> PMOD 3
|
||||
set_io --warn-no-port iCESugarv15_PMOD3A_0 34
|
||||
set_io --warn-no-port iCESugarv15_PMOD3A_1 31
|
||||
set_io --warn-no-port iCESugarv15_PMOD3A_2 27
|
||||
set_io --warn-no-port iCESugarv15_PMOD3A_3 25
|
||||
set_io --warn-no-port iCESugarv15_PMOD3B_0 23
|
||||
set_io --warn-no-port iCESugarv15_PMOD3B_1 26
|
||||
set_io --warn-no-port iCESugarv15_PMOD3B_2 28
|
||||
set_io --warn-no-port iCESugarv15_PMOD3B_3 32
|
||||
|
||||
|
||||
#> PMOD 4 | Switches
|
||||
set_io --warn-no-port iCESugarv15_PMOD4_0 21
|
||||
set_io --warn-no-port iCESugarv15_PMOD4_1 20
|
||||
set_io --warn-no-port iCESugarv15_PMOD4_2 19
|
||||
set_io --warn-no-port iCESugarv15_PMOD4_3 18
|
||||
|
||||
|
||||
#> SPI
|
||||
set_io --warn-no-port iCESugarv15_SPI_SS 16
|
||||
set_io --warn-no-port iCESugarv15_SPI_SCK 15
|
||||
set_io --warn-no-port iCESugarv15_SPI_MOSI 17
|
||||
set_io --warn-no-port iCESugarv15_SPI_MISO 14
|
@ -0,0 +1,75 @@
|
||||
library ieee ;
|
||||
use ieee.std_logic_1164.all;
|
||||
|
||||
package components is
|
||||
|
||||
-- Yosys wrapper components
|
||||
|
||||
component EHXPLLL
|
||||
generic
|
||||
(
|
||||
CLKI_DIV : integer := 1;
|
||||
CLKFB_DIV : integer := 1;
|
||||
CLKOP_DIV : integer := 8;
|
||||
CLKOS_DIV : integer := 8;
|
||||
CLKOS2_DIV : integer := 8;
|
||||
CLKOS3_DIV : integer := 8;
|
||||
CLKOP_ENABLE : string := "ENABLED";
|
||||
CLKOS_ENABLE : string := "DISABLED";
|
||||
CLKOS2_ENABLE : string := "DISABLED";
|
||||
CLKOS3_ENABLE : string := "DISABLED";
|
||||
CLKOP_CPHASE : integer := 0;
|
||||
CLKOS_CPHASE : integer := 0;
|
||||
CLKOS2_CPHASE : integer := 0;
|
||||
CLKOS3_CPHASE : integer := 0;
|
||||
CLKOP_FPHASE : integer := 0;
|
||||
CLKOS_FPHASE : integer := 0;
|
||||
CLKOS2_FPHASE : integer := 0;
|
||||
CLKOS3_FPHASE : integer := 0;
|
||||
FEEDBK_PATH : string := "CLKOP";
|
||||
CLKOP_TRIM_POL : string := "RISING";
|
||||
CLKOP_TRIM_DELAY : integer := 0;
|
||||
CLKOS_TRIM_POL : string := "RISING";
|
||||
CLKOS_TRIM_DELAY : integer := 0;
|
||||
OUTDIVIDER_MUXA : string := "DIVA";
|
||||
OUTDIVIDER_MUXB : string := "DIVB";
|
||||
OUTDIVIDER_MUXC : string := "DIVC";
|
||||
OUTDIVIDER_MUXD : string := "DIVD";
|
||||
PLL_LOCK_MODE : integer := 0;
|
||||
PLL_LOCK_DELAY : integer := 200;
|
||||
STDBY_ENABLE : string := "DISABLED";
|
||||
REFIN_RESET : string := "DISABLED";
|
||||
SYNC_ENABLE : string := "DISABLED";
|
||||
INT_LOCK_STICKY : string := "ENABLED";
|
||||
DPHASE_SOURCE : string := "DISABLED";
|
||||
PLLRST_ENA : string := "DISABLED";
|
||||
INTFB_WAKE : string := "DISABLED"
|
||||
);
|
||||
port
|
||||
(
|
||||
CLKI : IN std_logic := 'X';
|
||||
CLKFB : IN std_logic := 'X';
|
||||
RST : IN std_logic := 'X';
|
||||
STDBY : IN std_logic := 'X';
|
||||
PLLWAKESYNC : IN std_logic := 'X';
|
||||
PHASESEL1 : IN std_logic := 'X';
|
||||
PHASESEL0 : IN std_logic := 'X';
|
||||
PHASEDIR : IN std_logic := 'X';
|
||||
PHASESTEP : IN std_logic := 'X';
|
||||
PHASELOADREG : IN std_logic := 'X';
|
||||
ENCLKOP : IN std_logic := 'X';
|
||||
ENCLKOS : IN std_logic := 'X';
|
||||
ENCLKOS2 : IN std_logic := 'X';
|
||||
ENCLKOS3 : IN std_logic := 'X';
|
||||
CLKOP : OUT std_logic := 'X';
|
||||
CLKOS : OUT std_logic := 'X';
|
||||
CLKOS2 : OUT std_logic := 'X';
|
||||
CLKOS3 : OUT std_logic := 'X';
|
||||
LOCK : OUT std_logic := 'X';
|
||||
INTLOCK : OUT std_logic := 'X';
|
||||
REFCLK : OUT std_logic := 'X';
|
||||
CLKINTFB : OUT std_logic := 'X'
|
||||
);
|
||||
end component;
|
||||
|
||||
end package;
|
@ -0,0 +1,145 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Processor-Internal DMEM for Lattice iCE40 UltraPlus >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # Memory has a physical size of 64kb (2 x SPRAMs). #
|
||||
-- # Logical size DMEM_SIZE must be less or equal. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library neorv32;
|
||||
use neorv32.neorv32_package.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all;
|
||||
|
||||
architecture neorv32_dmem_rtl of neorv32_dmem is
|
||||
|
||||
-- advanced configuration --------------------------------------------------------------------------------
|
||||
constant spram_sleep_mode_en_c : boolean := false; -- put DMEM into sleep mode when idle (for low power)
|
||||
-- -------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- IO space: module base address --
|
||||
constant hi_abb_c : natural := 31; -- high address boundary bit
|
||||
constant lo_abb_c : natural := index_size_f(64*1024); -- low address boundary bit
|
||||
|
||||
-- local signals --
|
||||
signal acc_en : std_ulogic;
|
||||
signal mem_cs : std_ulogic;
|
||||
signal rdata : std_ulogic_vector(31 downto 0);
|
||||
signal rden : std_ulogic;
|
||||
|
||||
-- SPRAM signals --
|
||||
signal spram_clk : std_logic;
|
||||
signal spram_addr : std_logic_vector(13 downto 0);
|
||||
signal spram_di_lo : std_logic_vector(15 downto 0);
|
||||
signal spram_di_hi : std_logic_vector(15 downto 0);
|
||||
signal spram_do_lo : std_logic_vector(15 downto 0);
|
||||
signal spram_do_hi : std_logic_vector(15 downto 0);
|
||||
signal spram_be_lo : std_logic_vector(03 downto 0);
|
||||
signal spram_be_hi : std_logic_vector(03 downto 0);
|
||||
signal spram_we : std_logic;
|
||||
signal spram_pwr_n : std_logic;
|
||||
signal spram_cs : std_logic;
|
||||
|
||||
begin
|
||||
|
||||
-- Sanity Checks --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
assert false report "NEORV32 PROCESSOR CONFIG NOTE: Using iCE40up SPRAM-based DMEM." severity note;
|
||||
assert not (DMEM_SIZE > 64*1024) report "NEORV32 PROCESSOR CONFIG ERROR: DMEM has a fixed physical size of 64kB. Logical size must be less or equal." severity error;
|
||||
|
||||
|
||||
-- Access Control -------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
acc_en <= '1' when (addr_i(hi_abb_c downto lo_abb_c) = DMEM_BASE(hi_abb_c downto lo_abb_c)) else '0';
|
||||
mem_cs <= acc_en and (rden_i or wren_i);
|
||||
|
||||
|
||||
-- Memory Access --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
imem_spram_lo_inst : SB_SPRAM256KA
|
||||
port map (
|
||||
ADDRESS => spram_addr, -- I
|
||||
DATAIN => spram_di_lo, -- I
|
||||
MASKWREN => spram_be_lo, -- I
|
||||
WREN => spram_we, -- I
|
||||
CHIPSELECT => spram_cs, -- I
|
||||
CLOCK => spram_clk, -- I
|
||||
STANDBY => '0', -- I
|
||||
SLEEP => spram_pwr_n, -- I
|
||||
POWEROFF => '1', -- I
|
||||
DATAOUT => spram_do_lo -- O
|
||||
);
|
||||
|
||||
imem_spram_hi_inst : SB_SPRAM256KA
|
||||
port map (
|
||||
ADDRESS => spram_addr, -- I
|
||||
DATAIN => spram_di_hi, -- I
|
||||
MASKWREN => spram_be_hi, -- I
|
||||
WREN => spram_we, -- I
|
||||
CHIPSELECT => spram_cs, -- I
|
||||
CLOCK => spram_clk, -- I
|
||||
STANDBY => '0', -- I
|
||||
SLEEP => spram_pwr_n, -- I
|
||||
POWEROFF => '1', -- I
|
||||
DATAOUT => spram_do_hi -- O
|
||||
);
|
||||
|
||||
-- access logic and signal type conversion --
|
||||
spram_clk <= std_logic(clk_i);
|
||||
spram_addr <= std_logic_vector(addr_i(13+2 downto 0+2));
|
||||
spram_di_lo <= std_logic_vector(data_i(15 downto 00));
|
||||
spram_di_hi <= std_logic_vector(data_i(31 downto 16));
|
||||
spram_we <= '1' when ((acc_en and wren_i) = '1') else '0'; -- global write enable
|
||||
spram_cs <= std_logic(mem_cs);
|
||||
spram_be_lo <= std_logic(ben_i(1)) & std_logic(ben_i(1)) & std_logic(ben_i(0)) & std_logic(ben_i(0)); -- low byte write enable
|
||||
spram_be_hi <= std_logic(ben_i(3)) & std_logic(ben_i(3)) & std_logic(ben_i(2)) & std_logic(ben_i(2)); -- high byte write enable
|
||||
spram_pwr_n <= '0' when ((spram_sleep_mode_en_c = false) or (mem_cs = '1')) else '1'; -- LP mode disabled or IMEM selected
|
||||
rdata <= std_ulogic_vector(spram_do_hi) & std_ulogic_vector(spram_do_lo);
|
||||
|
||||
buffer_ff: process(clk_i)
|
||||
begin
|
||||
if rising_edge(clk_i) then
|
||||
ack_o <= mem_cs;
|
||||
rden <= acc_en and rden_i;
|
||||
end if;
|
||||
end process buffer_ff;
|
||||
|
||||
-- output gate --
|
||||
data_o <= rdata when (rden = '1') else (others => '0');
|
||||
|
||||
|
||||
end neorv32_dmem_rtl;
|
@ -0,0 +1,146 @@
|
||||
-- #################################################################################################
|
||||
-- # << NEORV32 - Processor-Internal IMEM for Lattice iCE40 UltraPlus >> #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # Memory has a physical size of 64kb (2 x SPRAMs). #
|
||||
-- # Logical size IMEM_SIZE must be less or equal. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # BSD 3-Clause License #
|
||||
-- # #
|
||||
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. #
|
||||
-- # #
|
||||
-- # Redistribution and use in source and binary forms, with or without modification, are #
|
||||
-- # permitted provided that the following conditions are met: #
|
||||
-- # #
|
||||
-- # 1. Redistributions of source code must retain the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer. #
|
||||
-- # #
|
||||
-- # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
|
||||
-- # conditions and the following disclaimer in the documentation and/or other materials #
|
||||
-- # provided with the distribution. #
|
||||
-- # #
|
||||
-- # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
|
||||
-- # endorse or promote products derived from this software without specific prior written #
|
||||
-- # permission. #
|
||||
-- # #
|
||||
-- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
|
||||
-- # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
|
||||
-- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
|
||||
-- # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
|
||||
-- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
|
||||
-- # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
|
||||
-- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
|
||||
-- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
|
||||
-- # OF THE POSSIBILITY OF SUCH DAMAGE. #
|
||||
-- # ********************************************************************************************* #
|
||||
-- # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
|
||||
-- #################################################################################################
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
library neorv32;
|
||||
use neorv32.neorv32_package.all;
|
||||
|
||||
library iCE40;
|
||||
use iCE40.components.all;
|
||||
|
||||
architecture neorv32_imem_rtl of neorv32_imem is
|
||||
|
||||
-- advanced configuration --------------------------------------------------------------------------------
|
||||
constant spram_sleep_mode_en_c : boolean := false; -- put IMEM into sleep mode when idle (for low power)
|
||||
-- -------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- IO space: module base address --
|
||||
constant hi_abb_c : natural := 31; -- high address boundary bit
|
||||
constant lo_abb_c : natural := index_size_f(64*1024); -- low address boundary bit
|
||||
|
||||
-- local signals --
|
||||
signal acc_en : std_ulogic;
|
||||
signal mem_cs : std_ulogic;
|
||||
signal rdata : std_ulogic_vector(31 downto 0);
|
||||
signal rden : std_ulogic;
|
||||
|
||||
-- SPRAM signals --
|
||||
signal spram_clk : std_logic;
|
||||
signal spram_addr : std_logic_vector(13 downto 0);
|
||||
signal spram_di_lo : std_logic_vector(15 downto 0);
|
||||
signal spram_di_hi : std_logic_vector(15 downto 0);
|
||||
signal spram_do_lo : std_logic_vector(15 downto 0);
|
||||
signal spram_do_hi : std_logic_vector(15 downto 0);
|
||||
signal spram_be_lo : std_logic_vector(03 downto 0);
|
||||
signal spram_be_hi : std_logic_vector(03 downto 0);
|
||||
signal spram_we : std_logic;
|
||||
signal spram_pwr_n : std_logic;
|
||||
signal spram_cs : std_logic;
|
||||
|
||||
begin
|
||||
|
||||
-- Sanity Checks --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
assert false report "NEORV32 PROCESSOR CONFIG NOTE: Using iCE40up SPRAM-based IMEM." severity note;
|
||||
assert not (IMEM_AS_IROM = true) report "NEORV32 PROCESSOR CONFIG ERROR: ICE40 Ultra Plus SPRAM cannot be initialized by bitstream!" severity failure;
|
||||
assert not (IMEM_SIZE > 64*1024) report "NEORV32 PROCESSOR CONFIG ERROR: IMEM has a fixed physical size of 64kB. Logical size must be less or equal." severity error;
|
||||
|
||||
|
||||
-- Access Control -------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
acc_en <= '1' when (addr_i(hi_abb_c downto lo_abb_c) = IMEM_BASE(hi_abb_c downto lo_abb_c)) else '0';
|
||||
mem_cs <= acc_en and (rden_i or wren_i);
|
||||
|
||||
|
||||
-- Memory Access --------------------------------------------------------------------------
|
||||
-- -------------------------------------------------------------------------------------------
|
||||
imem_spram_lo_inst : SB_SPRAM256KA
|
||||
port map (
|
||||
ADDRESS => spram_addr, -- I
|
||||
DATAIN => spram_di_lo, -- I
|
||||
MASKWREN => spram_be_lo, -- I
|
||||
WREN => spram_we, -- I
|
||||
CHIPSELECT => spram_cs, -- I
|
||||
CLOCK => spram_clk, -- I
|
||||
STANDBY => '0', -- I
|
||||
SLEEP => spram_pwr_n, -- I
|
||||
POWEROFF => '1', -- I
|
||||
DATAOUT => spram_do_lo -- O
|
||||
);
|
||||
|
||||
imem_spram_hi_inst : SB_SPRAM256KA
|
||||
port map (
|
||||
ADDRESS => spram_addr, -- I
|
||||
DATAIN => spram_di_hi, -- I
|
||||
MASKWREN => spram_be_hi, -- I
|
||||
WREN => spram_we, -- I
|
||||
CHIPSELECT => spram_cs, -- I
|
||||
CLOCK => spram_clk, -- I
|
||||
STANDBY => '0', -- I
|
||||
SLEEP => spram_pwr_n, -- I
|
||||
POWEROFF => '1', -- I
|
||||
DATAOUT => spram_do_hi -- O
|
||||
);
|
||||
|
||||
-- access logic and signal type conversion --
|
||||
spram_clk <= std_logic(clk_i);
|
||||
spram_addr <= std_logic_vector(addr_i(13+2 downto 0+2));
|
||||
spram_di_lo <= std_logic_vector(data_i(15 downto 00));
|
||||
spram_di_hi <= std_logic_vector(data_i(31 downto 16));
|
||||
spram_we <= '1' when ((acc_en and wren_i) = '1') else '0'; -- global write enable
|
||||
spram_cs <= std_logic(mem_cs);
|
||||
spram_be_lo <= std_logic(ben_i(1)) & std_logic(ben_i(1)) & std_logic(ben_i(0)) & std_logic(ben_i(0)); -- low byte write enable
|
||||
spram_be_hi <= std_logic(ben_i(3)) & std_logic(ben_i(3)) & std_logic(ben_i(2)) & std_logic(ben_i(2)); -- high byte write enable
|
||||
spram_pwr_n <= '0' when ((spram_sleep_mode_en_c = false) or (mem_cs = '1')) else '1'; -- LP mode disabled or IMEM selected
|
||||
rdata <= std_ulogic_vector(spram_do_hi) & std_ulogic_vector(spram_do_lo);
|
||||
|
||||
buffer_ff: process(clk_i)
|
||||
begin
|
||||
if rising_edge(clk_i) then
|
||||
ack_o <= mem_cs;
|
||||
rden <= acc_en and rden_i;
|
||||
end if;
|
||||
end process buffer_ff;
|
||||
|
||||
-- output gate --
|
||||
data_o <= rdata when (rden = '1') else (others => '0');
|
||||
|
||||
|
||||
end neorv32_imem_rtl;
|
@ -0,0 +1,126 @@
|
||||
library ieee ;
|
||||
use ieee.std_logic_1164.all;
|
||||
|
||||
package components is
|
||||
|
||||
-- Yosys / IceCube wrapper components
|
||||
|
||||
component SB_GB
|
||||
port(
|
||||
GLOBAL_BUFFER_OUTPUT : out std_logic;
|
||||
USER_SIGNAL_TO_GLOBAL_BUFFER : in std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component SB_HFOSC
|
||||
generic (
|
||||
CLKHF_DIV : string
|
||||
);
|
||||
port (
|
||||
CLKHFPU : in std_logic;
|
||||
CLKHFEN : in std_logic;
|
||||
CLKHF : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component SB_PLL40_CORE is
|
||||
generic (
|
||||
FEEDBACK_PATH : string := "SIMPLE";
|
||||
DELAY_ADJUSTMENT_MODE_FEEDBACK : string := "FIXED";
|
||||
DELAY_ADJUSTMENT_MODE_RELATIVE : string := "FIXED";
|
||||
SHIFTREG_DIV_MODE : std_logic := '0';
|
||||
FDA_FEEDBACK : std_logic_vector(3 downto 0) := x"0";
|
||||
FDA_RELATIVE : std_logic_vector(3 downto 0) := x"0";
|
||||
PLLOUT_SELECT : string := "GENCLK";
|
||||
DIVR : std_logic_vector(3 downto 0) := x"0";
|
||||
DIVF : std_logic_vector(6 downto 0) := "0000000";
|
||||
DIVQ : std_logic_vector(2 downto 0) := "000";
|
||||
FILTER_RANGE : std_logic_vector(2 downto 0) := "000";
|
||||
ENABLE_ICEGATE : bit := '0';
|
||||
TEST_MODE : bit := '0';
|
||||
EXTERNAL_DIVIDE_FACTOR : integer := 1
|
||||
);
|
||||
port (
|
||||
REFERENCECLK : in std_logic;
|
||||
PLLOUTCORE : out std_logic;
|
||||
PLLOUTGLOBAL : out std_logic;
|
||||
EXTFEEDBACK : in std_logic;
|
||||
DYNAMICDELAY : in std_logic_vector(7 downto 0);
|
||||
LOCK : out std_logic;
|
||||
BYPASS : in std_logic;
|
||||
RESETB : in std_logic;
|
||||
LATCHINPUTVALUE : in std_logic;
|
||||
SDO : out std_logic;
|
||||
SDI : in std_logic;
|
||||
SCLK : in std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component SB_PLL40_PAD
|
||||
generic (
|
||||
FEEDBACK_PATH : string := "SIMPLE";
|
||||
DELAY_ADJUSTMENT_MODE_FEEDBACK : string := "FIXED";
|
||||
DELAY_ADJUSTMENT_MODE_RELATIVE : string := "FIXED";
|
||||
SHIFTREG_DIV_MODE : bit_vector(1 downto 0) := "00";
|
||||
FDA_FEEDBACK : bit_vector(3 downto 0) := "0000";
|
||||
FDA_RELATIVE : bit_vector(3 downto 0) := "0000";
|
||||
PLLOUT_SELECT : string := "GENCLK";
|
||||
DIVR : bit_vector(3 downto 0) := x"0";
|
||||
DIVF : bit_vector(6 downto 0) := "0000000";
|
||||
DIVQ : bit_vector(2 downto 0) := "000";
|
||||
FILTER_RANGE : bit_vector(2 downto 0) := "000";
|
||||
ENABLE_ICEGATE : bit := '0';
|
||||
TEST_MODE : bit := '0';
|
||||
EXTERNAL_DIVIDE_FACTOR : integer := 1
|
||||
);
|
||||
port (
|
||||
PACKAGEPIN : in std_logic;
|
||||
PLLOUTCORE : out std_logic;
|
||||
PLLOUTGLOBAL : out std_logic;
|
||||
EXTFEEDBACK : in std_logic;
|
||||
DYNAMICDELAY : in std_logic_vector(7 downto 0);
|
||||
LOCK : out std_logic;
|
||||
BYPASS : in std_logic;
|
||||
RESETB : in std_logic;
|
||||
LATCHINPUTVALUE : in std_logic;
|
||||
SDO : out std_logic;
|
||||
SDI : in std_logic;
|
||||
SCLK : in std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component SB_RGBA_DRV
|
||||
generic (
|
||||
CURRENT_MODE : string := "0b0";
|
||||
RGB0_CURRENT : string := "0b000000";
|
||||
RGB1_CURRENT : string := "0b000000";
|
||||
RGB2_CURRENT : string := "0b000000"
|
||||
);
|
||||
port (
|
||||
RGB0PWM : in std_logic;
|
||||
RGB1PWM : in std_logic;
|
||||
RGB2PWM : in std_logic;
|
||||
CURREN : in std_logic;
|
||||
RGBLEDEN : in std_logic;
|
||||
RGB0 : out std_logic;
|
||||
RGB1 : out std_logic;
|
||||
RGB2 : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
component SB_SPRAM256KA
|
||||
port (
|
||||
ADDRESS : in std_logic_vector(13 downto 0);
|
||||
DATAIN : in std_logic_vector(15 downto 0);
|
||||
MASKWREN : in std_logic_vector(3 downto 0);
|
||||
WREN : in std_logic;
|
||||
CHIPSELECT : in std_logic;
|
||||
CLOCK : in std_logic;
|
||||
STANDBY : in std_logic;
|
||||
SLEEP : in std_logic;
|
||||
POWEROFF : in std_logic;
|
||||
DATAOUT : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
end component;
|
||||
|
||||
end package;
|
66
Libs/RiscV/NEORV32/setups/osflow/filesets.mk
Normal file
66
Libs/RiscV/NEORV32/setups/osflow/filesets.mk
Normal file
@ -0,0 +1,66 @@
|
||||
RTL_CORE_SRC := ../../rtl/core
|
||||
|
||||
NEORV32_PKG := $(RTL_CORE_SRC)/neorv32_package.vhd
|
||||
|
||||
NEORV32_APP_SRC := \
|
||||
$(RTL_CORE_SRC)/neorv32_application_image.vhd \
|
||||
|
||||
NEORV32_MEM_ENTITIES := \
|
||||
$(RTL_CORE_SRC)/neorv32_dmem.entity.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_imem.entity.vhd
|
||||
|
||||
NEORV32_CORE_SRC := \
|
||||
$(RTL_CORE_SRC)/neorv32_bootloader_image.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_boot_rom.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_bus_keeper.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_busswitch.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cfs.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_alu.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_bus.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_control.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_cp_bitmanip.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_cp_fpu.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_cp_muldiv.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_cp_shifter.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_decompressor.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_cpu_regfile.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_debug_dm.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_debug_dtm.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_fifo.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_gpio.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_gptmr.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_icache.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_mtime.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_neoled.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_pwm.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_slink.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_spi.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_sysinfo.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_top.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_trng.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_twi.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_uart.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_wdt.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_wishbone.vhd \
|
||||
$(RTL_CORE_SRC)/neorv32_xirq.vhd
|
||||
|
||||
# Before including this partial makefile, NEORV32_MEM_SRC needs to be set
|
||||
# (containing two VHDL sources: one for IMEM and one for DMEM)
|
||||
|
||||
NEORV32_SRC := ${NEORV32_PKG} ${NEORV32_APP_SRC} ${NEORV32_MEM_ENTITIES} ${NEORV32_MEM_SRC} ${NEORV32_MEM_SRC_EXTRA} ${NEORV32_CORE_SRC} ${NEORV32_CORE_SRC_EXTRA}
|
||||
NEORV32_VERILOG_ALL := ${NEORV32_VERILOG_SRC} ${NEORV32_VERILOG_SRC_EXTRA}
|
||||
|
||||
ICE40_SRC := \
|
||||
devices/ice40/sb_ice40_components.vhd
|
||||
|
||||
ECP5_SRC := \
|
||||
devices/ecp5/ecp5_components.vhd
|
||||
|
||||
ifeq ($(DEVICE_SERIES),ecp5)
|
||||
DEVICE_SRC := ${ECP5_SRC}
|
||||
else
|
||||
DEVICE_SRC := ${ICE40_SRC}
|
||||
endif
|
||||
|
||||
# Optionally NEORV32_VERILOG_SRC can be set to a list of Verilog sources
|
16
Libs/RiscV/NEORV32/setups/osflow/synthesis.mk
Normal file
16
Libs/RiscV/NEORV32/setups/osflow/synthesis.mk
Normal file
@ -0,0 +1,16 @@
|
||||
${DEVICE_LIB}-obj08.cf: ${DEVICE_SRC}
|
||||
ghdl -a $(GHDL_FLAGS) --work=${DEVICE_LIB} ${DEVICE_SRC}
|
||||
|
||||
neorv32-obj08.cf: ${DEVICE_LIB}-obj08.cf ${NEORV32_SRC}
|
||||
ghdl -a $(GHDL_FLAGS) --work=neorv32 ${NEORV32_SRC}
|
||||
|
||||
work-obj08.cf: neorv32-obj08.cf ${DESIGN_SRC} ${BOARD_SRC}
|
||||
ghdl -a $(GHDL_FLAGS) --work=work ${DESIGN_SRC} ${BOARD_SRC}
|
||||
|
||||
${IMPL}.json: work-obj08.cf $(NEORV32_VERILOG_ALL)
|
||||
$(YOSYS) $(YOSYSFLAGS) \
|
||||
-p \
|
||||
"$(GHDLSYNTH) $(GHDL_FLAGS) --no-formal $(TOP); \
|
||||
synth_${YOSYSSYNTH} \
|
||||
-top $(TOP) $(YOSYSPIPE) \
|
||||
-json $@" $(NEORV32_VERILOG_ALL) 2>&1 | tee yosys-report.txt
|
28
Libs/RiscV/NEORV32/setups/osflow/tools.mk
Normal file
28
Libs/RiscV/NEORV32/setups/osflow/tools.mk
Normal file
@ -0,0 +1,28 @@
|
||||
GHDL_FLAGS += --std=08
|
||||
GHDL ?= ghdl
|
||||
GHDLSYNTH ?= ghdl
|
||||
YOSYS ?= yosys
|
||||
ICEPACK ?= icepack
|
||||
ECPPACK ?= ecppack
|
||||
OPENOCD ?= openocd
|
||||
COPY ?= cp -a
|
||||
|
||||
DEVICE_SERIES ?= ice40
|
||||
DEVICE_LIB ?= $(DEVICE_SERIES)
|
||||
YOSYSSYNTH ?= $(DEVICE_SERIES)
|
||||
NEXTPNR ?= nextpnr-$(DEVICE_SERIES)
|
||||
|
||||
ifeq ($(DEVICE_SERIES),ice40)
|
||||
YOSYSPIPE ?= -dsp
|
||||
CONSTRAINTS_FORMAT ?= pcf
|
||||
NEXTPNR_OUT ?= asc
|
||||
PNR2BIT_EXT ?= asc
|
||||
PACKTOOL ?= $(ICEPACK)
|
||||
PACKARGS ?=
|
||||
else
|
||||
CONSTRAINTS_FORMAT ?= lpf
|
||||
NEXTPNR_OUT ?= textcfg
|
||||
PNR2BIT_EXT ?= cfg
|
||||
PACKTOOL ?= $(ECPPACK)
|
||||
PACKARGS ?= --compress
|
||||
endif
|
Reference in New Issue
Block a user