@ -0,0 +1,68 @@ | |||||
-- This design should display incrementing binary numbers | |||||
-- at LED1-LED8 of the GateMate FPGA Starter Kit. | |||||
library ieee ; | |||||
use ieee.std_logic_1164.all; | |||||
use ieee.numeric_std.all; | |||||
library gatemate; | |||||
use gatemate.components.all; | |||||
entity uart_reg is | |||||
port ( | |||||
clk_i : in std_logic; -- 10 MHz clock | |||||
rst_n_i : in std_logic; -- SW3 button | |||||
uart_rx_i : in std_logic; | |||||
uart_tx_o : out std_logic; | |||||
led_n_o : out std_logic_vector(2 downto 0) -- LED1..LED2 | |||||
); | |||||
end entity uart_reg; | |||||
architecture rtl of uart_reg is | |||||
signal s_pll_clk : std_logic; | |||||
signal s_pll_lock : std_logic; | |||||
signal s_clk_en : boolean; | |||||
signal s_rst_n : std_logic; | |||||
signal s_cfg_end : std_logic; | |||||
begin | |||||
pll : CC_PLL | |||||
generic map ( | |||||
REF_CLK => "10", | |||||
OUT_CLK => "1", | |||||
PERF_MD => "ECONOMY" | |||||
) | |||||
port map ( | |||||
CLK_REF => clk_i, | |||||
CLK_FEEDBACK => '0', | |||||
USR_CLK_REF => '0', | |||||
USR_LOCKED_STDY_RST => '0', | |||||
USR_PLL_LOCKED_STDY => open, | |||||
USR_PLL_LOCKED => s_pll_lock, | |||||
CLK270 => open, | |||||
CLK180 => open, | |||||
CLK0 => s_pll_clk, | |||||
CLK90 => open, | |||||
CLK_REF_OUT => open | |||||
); | |||||
cfg_end_inst : CC_CFG_END | |||||
port map ( | |||||
CFG_END => s_cfg_end | |||||
); | |||||
s_rst_n <= rst_n_i and s_pll_lock and s_cfg_end; | |||||
-- Start with simple loop | |||||
uart_tx_o <= uart_rx_i; | |||||
-- Debug output | |||||
led_n_o <= s_rst_n & not (s_pll_lock, s_cfg_end); | |||||
end architecture; |
@ -0,0 +1,37 @@ | |||||
DESIGN_NAME := uart_reg | |||||
WORK_FILES := ../rtl/uart_reg.vhd | |||||
GM_FILES := ../../lib/components.vhd | |||||
GHDL_FLAGS := --std=08 --workdir=build -Pbuild | |||||
YOSYSPIPE := -nomx8 -luttree -retime | |||||
PNRFLAGS := -sp off -om 2 -cCP on | |||||
PNRTOOL := $(shell which p_r) | |||||
.PHONY: all syn imp prog | |||||
all: imp | |||||
syn: ${DESIGN_NAME}.v | |||||
imp: ${DESIGN_NAME}.bit | |||||
build/work-obj08.cf: ${WORK_FILES} build/gatemate-obj08.cf | |||||
ghdl -a ${GHDL_FLAGS} --work=work ${WORK_FILES} | |||||
build/gatemate-obj08.cf: ${GM_FILES} | |||||
mkdir -p build | |||||
ghdl -a ${GHDL_FLAGS} --work=gatemate ${GM_FILES} | |||||
${DESIGN_NAME}.v: build/work-obj08.cf | |||||
yosys -m ghdl -p 'ghdl ${GHDL_FLAGS} --no-formal ${DESIGN_NAME}; synth_gatemate -top $(DESIGN_NAME) ${YOSYSPIPE} -vlog $@' \ | |||||
2>&1 | tee build/yosys-report.txt | |||||
${DESIGN_NAME}.bit: ${DESIGN_NAME}.v ${DESIGN_NAME}.ccf | |||||
cd build && \ | |||||
${PNRTOOL} -i ../${DESIGN_NAME}.v -o $@ --ccf ../${DESIGN_NAME}.ccf $(PNRFLAGS) \ | |||||
2>&1 | tee p_r-report.txt && \ | |||||
mv ${DESIGN_NAME}*.bit ../$@ | |||||
prog: ${DESIGN_NAME}.bit | |||||
openFPGALoader -b gatemate_evb_jtag $< | |||||
clean : | |||||
echo "# Cleaning files" | |||||
rm -rf build ${DESIGN_NAME}.v ${DESIGN_NAME}.bit |
@ -0,0 +1,16 @@ | |||||
# Configuration for the Gatemate eval board | |||||
Pin_in "clk_i" Loc = "IO_SB_A8" | SCHMITT_TRIGGER=true; | |||||
Pin_in "rst_n_i" Loc = "IO_EB_B0"; # SW3 | |||||
Pin_out "led_n_o[0]" Loc = "IO_EB_B1"; # LED D1 | |||||
Pin_out "led_n_o[1]" Loc = "IO_EB_B2"; # LED D2 | |||||
Pin_out "led_n_o[2]" Loc = "IO_EB_B3"; # LED D3 | |||||
#Pin_out "led_n_o[3]" Loc = "IO_EB_B4"; # LED D4 | |||||
#Pin_out "led_n_o[4]" Loc = "IO_EB_B5"; # LED D5 | |||||
#Pin_out "led_n_o[5]" Loc = "IO_EB_B6"; # LED D6 | |||||
#Pin_out "led_n_o[6]" Loc = "IO_EB_B7"; # LED D7 | |||||
#Pin_out "led_n_o[7]" Loc = "IO_EB_B8"; # LED D8 | |||||
Pin_in "uart_rx_i" Loc = "IO_NB_A1"; # PMODA IO3 | |||||
Pin_out "uart_tx_o" Loc = "IO_NB_A2"; # PMODA IO5 |