Update FPGA experiments.
+ Separate out into per-board directories. + Add icestick hello world. + Add TinyFPGA hello world, beacon, button-triggered LED, and TinyAdder. + Add platform constraint files for the iCEStick and TinyFPGA.
This commit is contained in:
parent
d47661659c
commit
2f086a2c28
|
@ -0,0 +1,91 @@
|
||||||
|
module half_adder (
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
output sum,
|
||||||
|
output carry
|
||||||
|
);
|
||||||
|
|
||||||
|
sum = a ^ b;
|
||||||
|
carry = a & b;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module full_adder (
|
||||||
|
input a;
|
||||||
|
input b;
|
||||||
|
input carry_in;
|
||||||
|
output sum;
|
||||||
|
output carry_out;
|
||||||
|
);
|
||||||
|
|
||||||
|
wire carry_1;
|
||||||
|
wire carry_2;
|
||||||
|
|
||||||
|
// Intermediate output from first half-adder.
|
||||||
|
wire sum_1;
|
||||||
|
|
||||||
|
half_adder ha_low (
|
||||||
|
.a(a),
|
||||||
|
.b(b),
|
||||||
|
.carry(carry_1),
|
||||||
|
.sum(sum_1)
|
||||||
|
);
|
||||||
|
|
||||||
|
half_adder ha_high (
|
||||||
|
.a(sum_1),
|
||||||
|
.b(carry_1),
|
||||||
|
.carry(carry_2),
|
||||||
|
.sum(sum)
|
||||||
|
);
|
||||||
|
|
||||||
|
assign carry_out = carry_1 | carry_2;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module addition_unit #(
|
||||||
|
ADDER_WIDTH = 4
|
||||||
|
) (
|
||||||
|
input carry_in;
|
||||||
|
input [ADDER_WIDTH-1:0] a,
|
||||||
|
input [ADDER_WIDTH-1:0] b,
|
||||||
|
|
||||||
|
output [ADDER_WIDTH-1:0] sum,
|
||||||
|
output carry_out
|
||||||
|
)
|
||||||
|
|
||||||
|
wire [ADDER_WIDTH-1:0] carry_chain;
|
||||||
|
|
||||||
|
genvar i;
|
||||||
|
generate
|
||||||
|
for (i = 0; i < ADDER_WIDTH; i = i + 1) begin
|
||||||
|
full_adder fa (
|
||||||
|
.a(a[i]),
|
||||||
|
.b(b[i]),
|
||||||
|
.sum(sum[i]),
|
||||||
|
.carry_in(carry_chain[i]),
|
||||||
|
.carry_out(carry_chain[i+1])
|
||||||
|
);
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
// Assign carry_in and carry_out to the beginning and end of the
|
||||||
|
// carry chain.
|
||||||
|
assign carry_chain[0] = carry_in;
|
||||||
|
assign carry_chain[ADDER_WIDTH] = carry_out;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module better_addition_unit #(
|
||||||
|
ADDER_WIDTH = 8
|
||||||
|
) (
|
||||||
|
input carry_in;
|
||||||
|
input [ADDER_WIDTH-1:0] a,
|
||||||
|
input [ADDER_WIDTH-1:0] b,
|
||||||
|
|
||||||
|
output [ADDER_WIDTH-1:0] sum,
|
||||||
|
output carry_out
|
||||||
|
);
|
||||||
|
|
||||||
|
wire [ADDER_WIDTH:0] full_sum;
|
||||||
|
|
||||||
|
assign full_sum = carry_in + a + b;
|
||||||
|
assign carry_out = full_sum[ADDER_WIDTH];
|
||||||
|
endmodule
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
#- Icestick constraint file (.pcf)
|
||||||
|
#- By Juan Gonzalez (Obijuan)
|
||||||
|
#- April - 2016
|
||||||
|
#- GPL license
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# -- Pinout: http://www.pighixxx.com/test/2016/02/icestick-pinout/
|
||||||
|
# -- Guide: https://github.com/Obijuan/open-fpga-verilog-tutorial/blob/master/tutorial/doc/icestickusermanual.pdf
|
||||||
|
|
||||||
|
# -- Icestick leds map
|
||||||
|
#
|
||||||
|
# D1
|
||||||
|
# D4 D5 D2
|
||||||
|
# D3
|
||||||
|
#
|
||||||
|
# -- D1-D4: Red leds
|
||||||
|
# -- D5: green led
|
||||||
|
|
||||||
|
|
||||||
|
# ------------ Red leds ------------------------------------------------------
|
||||||
|
set_io --warn-no-port D1 99
|
||||||
|
set_io --warn-no-port D2 98
|
||||||
|
set_io --warn-no-port D3 97
|
||||||
|
set_io --warn-no-port D4 96
|
||||||
|
|
||||||
|
# ------------ Green led -----------------------------------------------------
|
||||||
|
set_io --warn-no-port D5 95
|
||||||
|
|
||||||
|
# ------------ IrDA ----------------------------------------------------------
|
||||||
|
set_io --warn-no-port IrDA_TX 105
|
||||||
|
set_io --warn-no-port IrDA_RX 106
|
||||||
|
|
||||||
|
#-- SD = 0, enable IrDA
|
||||||
|
set_io --warn-no-port SD 107
|
||||||
|
|
||||||
|
# ------------ PMOD connector ------------------------------------------------
|
||||||
|
#
|
||||||
|
# Pmod standar numeration (Oriented according the icestick, with the
|
||||||
|
# usb connector pointing to the left and IRda to the right)
|
||||||
|
#
|
||||||
|
# --------
|
||||||
|
# | 12 6 |
|
||||||
|
# | 11 5 |
|
||||||
|
# | 10 4 |
|
||||||
|
# | 9 3 |
|
||||||
|
# | 8 2 |
|
||||||
|
# | 7 1 | <
|
||||||
|
# --------
|
||||||
|
#
|
||||||
|
# FPGA pins:
|
||||||
|
#
|
||||||
|
# ----------
|
||||||
|
# | 3V3 3V3 |
|
||||||
|
# | GND GND |
|
||||||
|
# | 91 81 |
|
||||||
|
# | 90 80 |
|
||||||
|
# | 88 79 |
|
||||||
|
# | 87 78 | <
|
||||||
|
# ----------
|
||||||
|
#
|
||||||
|
set_io --warn-no-port PMOD1 78
|
||||||
|
set_io --warn-no-port PMOD2 79
|
||||||
|
set_io --warn-no-port PMOD3 80
|
||||||
|
set_io --warn-no-port PMOD4 81
|
||||||
|
set_io --warn-no-port PMOD7 87
|
||||||
|
set_io --warn-no-port PMOD8 88
|
||||||
|
set_io --warn-no-port PMOD9 90
|
||||||
|
set_io --warn-no-port PMOD10 91
|
||||||
|
|
||||||
|
# ------------------------ EXPANSION I/O ------------------------------------
|
||||||
|
#
|
||||||
|
# -- Numeration
|
||||||
|
#
|
||||||
|
# Top Row (TR):
|
||||||
|
# v
|
||||||
|
# --------------------------------
|
||||||
|
# | 10 9 8 7 6 5 4 3 2 1 |
|
||||||
|
# --------------------------------
|
||||||
|
#
|
||||||
|
# Bottom Row (BR):
|
||||||
|
#
|
||||||
|
# v
|
||||||
|
# --------------------------------
|
||||||
|
# | 10 9 8 7 6 5 4 3 2 1 |
|
||||||
|
# --------------------------------
|
||||||
|
#
|
||||||
|
# --- FPGA pins
|
||||||
|
#
|
||||||
|
# Top Row (TR)
|
||||||
|
# v
|
||||||
|
# --------------------------------------------------
|
||||||
|
# | 119 118 117 116 115 114 113 112 GND 3v3 |
|
||||||
|
# --------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Bottom Row (BR)
|
||||||
|
#
|
||||||
|
# v
|
||||||
|
# -------------------------------------------------
|
||||||
|
# | 44 45 47 48 56 60 61 62 GND 3v3 |
|
||||||
|
# -------------------------------------------------
|
||||||
|
#
|
||||||
|
# -- Top Row
|
||||||
|
set_io --warn-no-port TR3 112
|
||||||
|
set_io --warn-no-port TR4 113
|
||||||
|
set_io --warn-no-port TR5 114
|
||||||
|
set_io --warn-no-port TR6 115
|
||||||
|
set_io --warn-no-port TR7 116
|
||||||
|
set_io --warn-no-port TR8 117
|
||||||
|
set_io --warn-no-port TR9 118
|
||||||
|
set_io --warn-no-port TR10 119
|
||||||
|
#
|
||||||
|
# -- Bottom Row
|
||||||
|
set_io --warn-no-port BR3 62
|
||||||
|
set_io --warn-no-port BR4 61
|
||||||
|
set_io --warn-no-port BR5 60
|
||||||
|
set_io --warn-no-port BR6 56
|
||||||
|
set_io --warn-no-port BR7 48
|
||||||
|
set_io --warn-no-port BR8 47
|
||||||
|
set_io --warn-no-port BR9 45
|
||||||
|
set_io --warn-no-port BR10 44
|
||||||
|
|
||||||
|
# -------------------------- SYSTEM CLOCK ------------------------------------
|
||||||
|
set_io --warn-no-port CLK 21
|
||||||
|
|
||||||
|
# -------------------------- FTDI --------------------------------------------
|
||||||
|
# --- FTDI 0:
|
||||||
|
set_io --warn-no-port RES 66
|
||||||
|
set_io --warn-no-port DONE 65
|
||||||
|
set_io --warn-no-port SS 71
|
||||||
|
set_io --warn-no-port MISO 67
|
||||||
|
set_io --warn-no-port MOSI 68
|
||||||
|
set_io --warn-no-port SCK 70
|
||||||
|
#
|
||||||
|
# --- FTDI 1: (Serial port)
|
||||||
|
set_io --warn-no-port DCD 1
|
||||||
|
set_io --warn-no-port DSR 2
|
||||||
|
set_io --warn-no-port DTR 3
|
||||||
|
set_io --warn-no-port CTS 4
|
||||||
|
set_io --warn-no-port RTS 7
|
||||||
|
set_io --warn-no-port TX 8
|
||||||
|
set_io --warn-no-port RX 9
|
|
@ -0,0 +1,3 @@
|
||||||
|
[env]
|
||||||
|
board = icestick
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
#- Icestick constraint file (.pcf)
|
||||||
|
#- By Juan Gonzalez (Obijuan)
|
||||||
|
#- April - 2016
|
||||||
|
#- GPL license
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# -- Pinout: http://www.pighixxx.com/test/2016/02/icestick-pinout/
|
||||||
|
# -- Guide: https://github.com/Obijuan/open-fpga-verilog-tutorial/blob/master/tutorial/doc/icestickusermanual.pdf
|
||||||
|
|
||||||
|
# -- Icestick leds map
|
||||||
|
#
|
||||||
|
# D1
|
||||||
|
# D4 D5 D2
|
||||||
|
# D3
|
||||||
|
#
|
||||||
|
# -- D1-D4: Red leds
|
||||||
|
# -- D5: green led
|
||||||
|
|
||||||
|
|
||||||
|
# ------------ Red leds ------------------------------------------------------
|
||||||
|
set_io --warn-no-port D1 99
|
||||||
|
set_io --warn-no-port D2 98
|
||||||
|
set_io --warn-no-port D3 97
|
||||||
|
set_io --warn-no-port D4 96
|
||||||
|
|
||||||
|
# ------------ Green led -----------------------------------------------------
|
||||||
|
set_io --warn-no-port D5 95
|
||||||
|
|
||||||
|
# ------------ IrDA ----------------------------------------------------------
|
||||||
|
set_io --warn-no-port IrDA_TX 105
|
||||||
|
set_io --warn-no-port IrDA_RX 106
|
||||||
|
|
||||||
|
#-- SD = 0, enable IrDA
|
||||||
|
set_io --warn-no-port SD 107
|
||||||
|
|
||||||
|
# ------------ PMOD connector ------------------------------------------------
|
||||||
|
#
|
||||||
|
# Pmod standar numeration (Oriented according the icestick, with the
|
||||||
|
# usb connector pointing to the left and IRda to the right)
|
||||||
|
#
|
||||||
|
# --------
|
||||||
|
# | 12 6 |
|
||||||
|
# | 11 5 |
|
||||||
|
# | 10 4 |
|
||||||
|
# | 9 3 |
|
||||||
|
# | 8 2 |
|
||||||
|
# | 7 1 | <
|
||||||
|
# --------
|
||||||
|
#
|
||||||
|
# FPGA pins:
|
||||||
|
#
|
||||||
|
# ----------
|
||||||
|
# | 3V3 3V3 |
|
||||||
|
# | GND GND |
|
||||||
|
# | 91 81 |
|
||||||
|
# | 90 80 |
|
||||||
|
# | 88 79 |
|
||||||
|
# | 87 78 | <
|
||||||
|
# ----------
|
||||||
|
#
|
||||||
|
set_io --warn-no-port PMOD1 78
|
||||||
|
set_io --warn-no-port PMOD2 79
|
||||||
|
set_io --warn-no-port PMOD3 80
|
||||||
|
set_io --warn-no-port PMOD4 81
|
||||||
|
set_io --warn-no-port PMOD7 87
|
||||||
|
set_io --warn-no-port PMOD8 88
|
||||||
|
set_io --warn-no-port PMOD9 90
|
||||||
|
set_io --warn-no-port PMOD10 91
|
||||||
|
|
||||||
|
# ------------------------ EXPANSION I/O ------------------------------------
|
||||||
|
#
|
||||||
|
# -- Numeration
|
||||||
|
#
|
||||||
|
# Top Row (TR):
|
||||||
|
# v
|
||||||
|
# --------------------------------
|
||||||
|
# | 10 9 8 7 6 5 4 3 2 1 |
|
||||||
|
# --------------------------------
|
||||||
|
#
|
||||||
|
# Bottom Row (BR):
|
||||||
|
#
|
||||||
|
# v
|
||||||
|
# --------------------------------
|
||||||
|
# | 10 9 8 7 6 5 4 3 2 1 |
|
||||||
|
# --------------------------------
|
||||||
|
#
|
||||||
|
# --- FPGA pins
|
||||||
|
#
|
||||||
|
# Top Row (TR)
|
||||||
|
# v
|
||||||
|
# --------------------------------------------------
|
||||||
|
# | 119 118 117 116 115 114 113 112 GND 3v3 |
|
||||||
|
# --------------------------------------------------
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Bottom Row (BR)
|
||||||
|
#
|
||||||
|
# v
|
||||||
|
# -------------------------------------------------
|
||||||
|
# | 44 45 47 48 56 60 61 62 GND 3v3 |
|
||||||
|
# -------------------------------------------------
|
||||||
|
#
|
||||||
|
# -- Top Row
|
||||||
|
set_io --warn-no-port TR3 112
|
||||||
|
set_io --warn-no-port TR4 113
|
||||||
|
set_io --warn-no-port TR5 114
|
||||||
|
set_io --warn-no-port TR6 115
|
||||||
|
set_io --warn-no-port TR7 116
|
||||||
|
set_io --warn-no-port TR8 117
|
||||||
|
set_io --warn-no-port TR9 118
|
||||||
|
set_io --warn-no-port TR10 119
|
||||||
|
#
|
||||||
|
# -- Bottom Row
|
||||||
|
set_io --warn-no-port BR3 62
|
||||||
|
set_io --warn-no-port BR4 61
|
||||||
|
set_io --warn-no-port BR5 60
|
||||||
|
set_io --warn-no-port BR6 56
|
||||||
|
set_io --warn-no-port BR7 48
|
||||||
|
set_io --warn-no-port BR8 47
|
||||||
|
set_io --warn-no-port BR9 45
|
||||||
|
set_io --warn-no-port BR10 44
|
||||||
|
|
||||||
|
# -------------------------- SYSTEM CLOCK ------------------------------------
|
||||||
|
set_io --warn-no-port CLK 21
|
||||||
|
|
||||||
|
# -------------------------- FTDI --------------------------------------------
|
||||||
|
# --- FTDI 0:
|
||||||
|
set_io --warn-no-port RES 66
|
||||||
|
set_io --warn-no-port DONE 65
|
||||||
|
set_io --warn-no-port SS 71
|
||||||
|
set_io --warn-no-port MISO 67
|
||||||
|
set_io --warn-no-port MOSI 68
|
||||||
|
set_io --warn-no-port SCK 70
|
||||||
|
#
|
||||||
|
# --- FTDI 1: (Serial port)
|
||||||
|
set_io --warn-no-port DCD 1
|
||||||
|
set_io --warn-no-port DSR 2
|
||||||
|
set_io --warn-no-port DTR 3
|
||||||
|
set_io --warn-no-port CTS 4
|
||||||
|
set_io --warn-no-port RTS 7
|
||||||
|
set_io --warn-no-port TX 8
|
||||||
|
set_io --warn-no-port RX 9
|
|
@ -0,0 +1,28 @@
|
||||||
|
module top (
|
||||||
|
input CLK,
|
||||||
|
output D1,
|
||||||
|
output D2,
|
||||||
|
output D3,
|
||||||
|
output D4,
|
||||||
|
output D5
|
||||||
|
);
|
||||||
|
|
||||||
|
reg [20:0] clock_counter;
|
||||||
|
reg [3:0] active = 0;
|
||||||
|
reg [9:0] pattern = 10'b1010000000;
|
||||||
|
wire [4:0] leds;
|
||||||
|
assign leds = {D5, D4, D3, D2, D1};
|
||||||
|
|
||||||
|
always @(posedge CLK) begin
|
||||||
|
clock_counter <= clock_counter + 1;
|
||||||
|
if (clock_counter == 21'b100100100111110000000) begin
|
||||||
|
if (pattern[active] == 1)
|
||||||
|
leds = 5'b11111;
|
||||||
|
else
|
||||||
|
leds = 5'b00000;
|
||||||
|
active <= active + 1;
|
||||||
|
if (active == 4'b1011) active <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
|
@ -28,7 +28,7 @@ module segment7 (
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// look in pins.pcf for all the pin names on the TinyFPGA BX board
|
// look in pins.pcf for all the pin names on the TinyFPGA BX board
|
||||||
module top (
|
module TinyAdder (
|
||||||
input CLK, // 16MHz clock
|
input CLK, // 16MHz clock
|
||||||
input PIN_1, // A[0]
|
input PIN_1, // A[0]
|
||||||
input PIN_2, // A[1]
|
input PIN_2, // A[1]
|
|
@ -0,0 +1,94 @@
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# TinyFPGA BX constraint file (.pcf)
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018, Luke Valenty
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# 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 OWNER 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 views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of the <project name> project.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
####
|
||||||
|
# TinyFPGA BX information: https://github.com/tinyfpga/TinyFPGA-BX/
|
||||||
|
####
|
||||||
|
|
||||||
|
# Left side of board
|
||||||
|
set_io --warn-no-port PIN_1 A2
|
||||||
|
set_io --warn-no-port PIN_2 A1
|
||||||
|
set_io --warn-no-port PIN_3 B1
|
||||||
|
set_io --warn-no-port PIN_4 C2
|
||||||
|
set_io --warn-no-port PIN_5 C1
|
||||||
|
set_io --warn-no-port PIN_6 D2
|
||||||
|
set_io --warn-no-port PIN_7 D1
|
||||||
|
set_io --warn-no-port PIN_8 E2
|
||||||
|
set_io --warn-no-port PIN_9 E1
|
||||||
|
set_io --warn-no-port PIN_10 G2
|
||||||
|
set_io --warn-no-port PIN_11 H1
|
||||||
|
set_io --warn-no-port PIN_12 J1
|
||||||
|
set_io --warn-no-port PIN_13 H2
|
||||||
|
|
||||||
|
# Right side of board
|
||||||
|
set_io --warn-no-port PIN_14 H9
|
||||||
|
set_io --warn-no-port PIN_15 D9
|
||||||
|
set_io --warn-no-port PIN_16 D8
|
||||||
|
set_io --warn-no-port PIN_17 C9
|
||||||
|
set_io --warn-no-port PIN_18 A9
|
||||||
|
set_io --warn-no-port PIN_19 B8
|
||||||
|
set_io --warn-no-port PIN_20 A8
|
||||||
|
set_io --warn-no-port PIN_21 B7
|
||||||
|
set_io --warn-no-port PIN_22 A7
|
||||||
|
set_io --warn-no-port PIN_23 B6
|
||||||
|
set_io --warn-no-port PIN_24 A6
|
||||||
|
|
||||||
|
# SPI flash interface on bottom of board
|
||||||
|
set_io --warn-no-port SPI_SS F7
|
||||||
|
set_io --warn-no-port SPI_SCK G7
|
||||||
|
set_io --warn-no-port SPI_IO0 G6
|
||||||
|
set_io --warn-no-port SPI_IO1 H7
|
||||||
|
set_io --warn-no-port SPI_IO2 H4
|
||||||
|
set_io --warn-no-port SPI_IO3 J8
|
||||||
|
|
||||||
|
# General purpose pins on bottom of board
|
||||||
|
set_io --warn-no-port PIN_25 G1
|
||||||
|
set_io --warn-no-port PIN_26 J3
|
||||||
|
set_io --warn-no-port PIN_27 J4
|
||||||
|
set_io --warn-no-port PIN_28 G9
|
||||||
|
set_io --warn-no-port PIN_29 J9
|
||||||
|
set_io --warn-no-port PIN_30 E8
|
||||||
|
set_io --warn-no-port PIN_31 J2
|
||||||
|
|
||||||
|
# LED
|
||||||
|
set_io --warn-no-port LED B3
|
||||||
|
|
||||||
|
# USB
|
||||||
|
set_io --warn-no-port USBP B4
|
||||||
|
set_io --warn-no-port USBN A4
|
||||||
|
set_io --warn-no-port USBPU A3
|
||||||
|
|
||||||
|
# 16MHz clock
|
||||||
|
set_io --warn-no-port CLK B2 # input
|
|
@ -0,0 +1 @@
|
||||||
|
{"board": "TinyFPGA-BX"}
|
|
@ -0,0 +1,94 @@
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# TinyFPGA BX constraint file (.pcf)
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018, Luke Valenty
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# 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 OWNER 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 views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of the <project name> project.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
####
|
||||||
|
# TinyFPGA BX information: https://github.com/tinyfpga/TinyFPGA-BX/
|
||||||
|
####
|
||||||
|
|
||||||
|
# Left side of board
|
||||||
|
set_io --warn-no-port PIN_1 A2
|
||||||
|
set_io --warn-no-port PIN_2 A1
|
||||||
|
set_io --warn-no-port PIN_3 B1
|
||||||
|
set_io --warn-no-port PIN_4 C2
|
||||||
|
set_io --warn-no-port PIN_5 C1
|
||||||
|
set_io --warn-no-port PIN_6 D2
|
||||||
|
set_io --warn-no-port PIN_7 D1
|
||||||
|
set_io --warn-no-port PIN_8 E2
|
||||||
|
set_io --warn-no-port PIN_9 E1
|
||||||
|
set_io --warn-no-port PIN_10 G2
|
||||||
|
set_io --warn-no-port PIN_11 H1
|
||||||
|
set_io --warn-no-port PIN_12 J1
|
||||||
|
set_io --warn-no-port PIN_13 H2
|
||||||
|
|
||||||
|
# Right side of board
|
||||||
|
set_io --warn-no-port PIN_14 H9
|
||||||
|
set_io --warn-no-port PIN_15 D9
|
||||||
|
set_io --warn-no-port PIN_16 D8
|
||||||
|
set_io --warn-no-port PIN_17 C9
|
||||||
|
set_io --warn-no-port PIN_18 A9
|
||||||
|
set_io --warn-no-port PIN_19 B8
|
||||||
|
set_io --warn-no-port PIN_20 A8
|
||||||
|
set_io --warn-no-port PIN_21 B7
|
||||||
|
set_io --warn-no-port PIN_22 A7
|
||||||
|
set_io --warn-no-port PIN_23 B6
|
||||||
|
set_io --warn-no-port PIN_24 A6
|
||||||
|
|
||||||
|
# SPI flash interface on bottom of board
|
||||||
|
set_io --warn-no-port SPI_SS F7
|
||||||
|
set_io --warn-no-port SPI_SCK G7
|
||||||
|
set_io --warn-no-port SPI_IO0 G6
|
||||||
|
set_io --warn-no-port SPI_IO1 H7
|
||||||
|
set_io --warn-no-port SPI_IO2 H4
|
||||||
|
set_io --warn-no-port SPI_IO3 J8
|
||||||
|
|
||||||
|
# General purpose pins on bottom of board
|
||||||
|
set_io --warn-no-port PIN_25 G1
|
||||||
|
set_io --warn-no-port PIN_26 J3
|
||||||
|
set_io --warn-no-port PIN_27 J4
|
||||||
|
set_io --warn-no-port PIN_28 G9
|
||||||
|
set_io --warn-no-port PIN_29 J9
|
||||||
|
set_io --warn-no-port PIN_30 E8
|
||||||
|
set_io --warn-no-port PIN_31 J2
|
||||||
|
|
||||||
|
# LED
|
||||||
|
set_io --warn-no-port LED B3
|
||||||
|
|
||||||
|
# USB
|
||||||
|
set_io --warn-no-port USBP B4
|
||||||
|
set_io --warn-no-port USBN A4
|
||||||
|
set_io --warn-no-port USBPU A3
|
||||||
|
|
||||||
|
# 16MHz clock
|
||||||
|
set_io --warn-no-port CLK B2 # input
|
|
@ -0,0 +1,14 @@
|
||||||
|
/// bled
|
||||||
|
/// Button-press LED
|
||||||
|
///
|
||||||
|
/// This connects a pushbutton on pin 6 to the LED. The pushbutton has one
|
||||||
|
/// side connected to Vcc, and the other side to both pin 6 and a 10K
|
||||||
|
/// Ω resistor (because, for some reason, that's what I have on hand).
|
||||||
|
module top (
|
||||||
|
input PIN_6,
|
||||||
|
output LED
|
||||||
|
);
|
||||||
|
|
||||||
|
assign LED = PIN_6;
|
||||||
|
|
||||||
|
endmodule
|
|
@ -0,0 +1,3 @@
|
||||||
|
[env]
|
||||||
|
board = TinyFPGA-BX
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
pip install apio==0.4.0b3 tinyprog
|
||||||
|
apio install system scons icestorm drivers
|
||||||
|
apio drivers --serial-enable
|
||||||
|
@pause
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
pip install apio==0.4.0b3 tinyprog
|
||||||
|
apio install system scons icestorm drivers
|
||||||
|
apio drivers --serial-enable
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# TinyFPGA BX constraint file (.pcf)
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# Copyright (c) 2018, Luke Valenty
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# 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 OWNER 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 views and conclusions contained in the software and documentation are those
|
||||||
|
# of the authors and should not be interpreted as representing official policies,
|
||||||
|
# either expressed or implied, of the <project name> project.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
####
|
||||||
|
# TinyFPGA BX information: https://github.com/tinyfpga/TinyFPGA-BX/
|
||||||
|
####
|
||||||
|
|
||||||
|
# Left side of board
|
||||||
|
set_io --warn-no-port PIN_1 A2
|
||||||
|
set_io --warn-no-port PIN_2 A1
|
||||||
|
set_io --warn-no-port PIN_3 B1
|
||||||
|
set_io --warn-no-port PIN_4 C2
|
||||||
|
set_io --warn-no-port PIN_5 C1
|
||||||
|
set_io --warn-no-port PIN_6 D2
|
||||||
|
set_io --warn-no-port PIN_7 D1
|
||||||
|
set_io --warn-no-port PIN_8 E2
|
||||||
|
set_io --warn-no-port PIN_9 E1
|
||||||
|
set_io --warn-no-port PIN_10 G2
|
||||||
|
set_io --warn-no-port PIN_11 H1
|
||||||
|
set_io --warn-no-port PIN_12 J1
|
||||||
|
set_io --warn-no-port PIN_13 H2
|
||||||
|
|
||||||
|
# Right side of board
|
||||||
|
set_io --warn-no-port PIN_14 H9
|
||||||
|
set_io --warn-no-port PIN_15 D9
|
||||||
|
set_io --warn-no-port PIN_16 D8
|
||||||
|
set_io --warn-no-port PIN_17 C9
|
||||||
|
set_io --warn-no-port PIN_18 A9
|
||||||
|
set_io --warn-no-port PIN_19 B8
|
||||||
|
set_io --warn-no-port PIN_20 A8
|
||||||
|
set_io --warn-no-port PIN_21 B7
|
||||||
|
set_io --warn-no-port PIN_22 A7
|
||||||
|
set_io --warn-no-port PIN_23 B6
|
||||||
|
set_io --warn-no-port PIN_24 A6
|
||||||
|
|
||||||
|
# SPI flash interface on bottom of board
|
||||||
|
set_io --warn-no-port SPI_SS F7
|
||||||
|
set_io --warn-no-port SPI_SCK G7
|
||||||
|
set_io --warn-no-port SPI_IO0 G6
|
||||||
|
set_io --warn-no-port SPI_IO1 H7
|
||||||
|
set_io --warn-no-port SPI_IO2 H4
|
||||||
|
set_io --warn-no-port SPI_IO3 J8
|
||||||
|
|
||||||
|
# General purpose pins on bottom of board
|
||||||
|
set_io --warn-no-port PIN_25 G1
|
||||||
|
set_io --warn-no-port PIN_26 J3
|
||||||
|
set_io --warn-no-port PIN_27 J4
|
||||||
|
set_io --warn-no-port PIN_28 G9
|
||||||
|
set_io --warn-no-port PIN_29 J9
|
||||||
|
set_io --warn-no-port PIN_30 E8
|
||||||
|
set_io --warn-no-port PIN_31 J2
|
||||||
|
|
||||||
|
# LED
|
||||||
|
set_io --warn-no-port LED B3
|
||||||
|
|
||||||
|
# USB
|
||||||
|
set_io --warn-no-port USBP B4
|
||||||
|
set_io --warn-no-port USBN A4
|
||||||
|
set_io --warn-no-port USBPU A3
|
||||||
|
|
||||||
|
# 16MHz clock
|
||||||
|
set_io --warn-no-port CLK B2 # input
|
|
@ -0,0 +1,27 @@
|
||||||
|
// look in pins.pcf for all the pin names on the TinyFPGA BX board
|
||||||
|
module top (
|
||||||
|
input CLK, // 16MHz clock
|
||||||
|
output LED, // User/boot LED next to power LED
|
||||||
|
output USBPU // USB pull-up resistor
|
||||||
|
);
|
||||||
|
// drive USB pull-up resistor to '0' to disable USB
|
||||||
|
assign USBPU = 0;
|
||||||
|
|
||||||
|
////////
|
||||||
|
// make a simple blink circuit
|
||||||
|
////////
|
||||||
|
|
||||||
|
// keep track of time and location in blink_pattern
|
||||||
|
reg [25:0] blink_counter;
|
||||||
|
|
||||||
|
// pattern that will be flashed over the LED over time
|
||||||
|
wire [31:0] blink_pattern = 32'b101010001110111011100010101;
|
||||||
|
|
||||||
|
// increment the blink_counter every clock
|
||||||
|
always @(posedge CLK) begin
|
||||||
|
blink_counter <= blink_counter + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
// light up the LED according to the pattern
|
||||||
|
assign LED = blink_pattern[blink_counter[25:21]];
|
||||||
|
endmodule
|
Loading…
Reference in New Issue