From 937ccab442cf51f7da09da2c294916b5118e8e39 Mon Sep 17 00:00:00 2001 From: Tomasz Michalak Date: Tue, 8 Dec 2020 13:06:54 +0100 Subject: [PATCH] picosoc: Add arty35 and arty100 boards Signed-off-by: Tomasz Michalak --- xc7/picosoc_demo/Makefile | 25 +++++- xc7/picosoc_demo/arty.pcf | 12 +++ xc7/picosoc_demo/arty.v | 86 +++++++++++++++++++ .../{basys3_demo_no_roi.v => basys3.v} | 4 +- xc7/picosoc_demo/{basys3.sdc => picosoc.sdc} | 0 5 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 xc7/picosoc_demo/arty.pcf create mode 100644 xc7/picosoc_demo/arty.v rename xc7/picosoc_demo/{basys3_demo_no_roi.v => basys3.v} (98%) rename xc7/picosoc_demo/{basys3.sdc => picosoc.sdc} (100%) diff --git a/xc7/picosoc_demo/Makefile b/xc7/picosoc_demo/Makefile index fb70132..26fba42 100644 --- a/xc7/picosoc_demo/Makefile +++ b/xc7/picosoc_demo/Makefile @@ -1,8 +1,7 @@ mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) current_dir := $(patsubst %/,%,$(dir $(mkfile_path))) -TOP := basys3_demo -VERILOG := ${current_dir}/basys3_demo_no_roi.v \ - ${current_dir}/picosoc_noflash.v \ +TOP := top +VERILOG := ${current_dir}/picosoc_noflash.v \ ${current_dir}/picorv32.v \ ${current_dir}/simpleuart.v \ ${current_dir}/progmem.v @@ -10,9 +9,27 @@ PARTNAME := xc7a35tcpg236-1 DEVICE := xc7a50t_test BITSTREAM_DEVICE := artix7 PCF := ${current_dir}/basys3.pcf -SDC := ${current_dir}/basys3.sdc +SDC := ${current_dir}/picosoc.sdc BUILDDIR := build +ifeq ($(TARGET),arty_35) + VERILOG += ${current_dir}/arty.v + PARTNAME := xc7a35tcsg324-1 + PCF :=${current_dir}/arty.pcf + BOARD_BUILDDIR := ${BUILDDIR}/arty_35 +else ifeq ($(TARGET),arty_100) + VERILOG += ${current_dir}/arty.v + PARTNAME := xc7a100tcsg324-1 + PCF:=${current_dir}/arty.pcf + DEVICE := xc7a100t_test + BOARD_BUILDDIR := ${BUILDDIR}/arty_100 +else + VERILOG += ${current_dir}/basys3.v + PARTNAME := xc7a35tcpg236-1 + PCF := ${current_dir}/basys3.pcf + BOARD_BUILDDIR := ${BUILDDIR}/basys3 +endif + all: ${BUILDDIR}/${TOP}.bit ${BUILDDIR}: diff --git a/xc7/picosoc_demo/arty.pcf b/xc7/picosoc_demo/arty.pcf new file mode 100644 index 0000000..0defbed --- /dev/null +++ b/xc7/picosoc_demo/arty.pcf @@ -0,0 +1,12 @@ +# 100 MHz CLK +set_io clk E3 + +# UART +set_io rx A9 +set_io tx D10 + +# LEDs +set_io led[0] H5 +set_io led[1] J5 +set_io led[2] T9 +set_io led[3] T10 diff --git a/xc7/picosoc_demo/arty.v b/xc7/picosoc_demo/arty.v new file mode 100644 index 0000000..3292cf7 --- /dev/null +++ b/xc7/picosoc_demo/arty.v @@ -0,0 +1,86 @@ +/* + * PicoSoC - A simple example SoC using PicoRV32 + * + * Copyright (C) 2017 Clifford Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +module top ( + input clk, + + output tx, + input rx, + + input [3:0] sw, + output [3:0] led +); + + wire clk_bufg; + BUFG bufg (.I(clk), .O(clk_bufg)); + + reg [5:0] reset_cnt = 0; + wire resetn = &reset_cnt; + + always @(posedge clk_bufg) begin + reset_cnt <= reset_cnt + !resetn; + end + + wire iomem_valid; + reg iomem_ready; + wire [3:0] iomem_wstrb; + wire [31:0] iomem_addr; + wire [31:0] iomem_wdata; + reg [31:0] iomem_rdata; + + reg [31:0] gpio; + + assign led = gpio[3:0]; + + always @(posedge clk_bufg) begin + if (!resetn) begin + gpio <= 0; + end else begin + iomem_ready <= 0; + if (iomem_valid && !iomem_ready && iomem_addr[31:24] == 8'h 03) begin + iomem_ready <= 1; + iomem_rdata <= {4{sw, gpio[3:0]}}; + if (iomem_wstrb[0]) gpio[ 7: 0] <= iomem_wdata[ 7: 0]; + if (iomem_wstrb[1]) gpio[15: 8] <= iomem_wdata[15: 8]; + if (iomem_wstrb[2]) gpio[23:16] <= iomem_wdata[23:16]; + if (iomem_wstrb[3]) gpio[31:24] <= iomem_wdata[31:24]; + end + end + end + + picosoc_noflash soc ( + .clk (clk_bufg), + .resetn (resetn ), + + .ser_tx (tx), + .ser_rx (rx), + + .irq_5 (1'b0 ), + .irq_6 (1'b0 ), + .irq_7 (1'b0 ), + + .iomem_valid (iomem_valid ), + .iomem_ready (iomem_ready ), + .iomem_wstrb (iomem_wstrb ), + .iomem_addr (iomem_addr ), + .iomem_wdata (iomem_wdata ), + .iomem_rdata (iomem_rdata ) + ); + +endmodule diff --git a/xc7/picosoc_demo/basys3_demo_no_roi.v b/xc7/picosoc_demo/basys3.v similarity index 98% rename from xc7/picosoc_demo/basys3_demo_no_roi.v rename to xc7/picosoc_demo/basys3.v index 26c0282..61909c4 100644 --- a/xc7/picosoc_demo/basys3_demo_no_roi.v +++ b/xc7/picosoc_demo/basys3.v @@ -17,13 +17,13 @@ * */ -module basys3_demo ( +module top ( input clk, output tx, input rx, - input [15:0] sw, + input [15:0] sw, output [15:0] led ); diff --git a/xc7/picosoc_demo/basys3.sdc b/xc7/picosoc_demo/picosoc.sdc similarity index 100% rename from xc7/picosoc_demo/basys3.sdc rename to xc7/picosoc_demo/picosoc.sdc