aboutsummaryrefslogtreecommitdiffstats
path: root/picosoc/hx8kdemo.v
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2017-08-07 15:13:27 +0200
committerClifford Wolf <clifford@clifford.at>2017-08-07 15:13:27 +0200
commitdb2222ec02a926a26a450d11382e9f7414a519f6 (patch)
tree9ceb3f0bd52963825a16e77da54259a1ed05b56e /picosoc/hx8kdemo.v
parentcaef4e3753d2c76de5d7030fcc2e3a1c331c64c6 (diff)
downloadpicorv32-db2222ec02a926a26a450d11382e9f7414a519f6.tar.gz
picorv32-db2222ec02a926a26a450d11382e9f7414a519f6.zip
Refactor picosoc code
Diffstat (limited to 'picosoc/hx8kdemo.v')
-rw-r--r--picosoc/hx8kdemo.v109
1 files changed, 109 insertions, 0 deletions
diff --git a/picosoc/hx8kdemo.v b/picosoc/hx8kdemo.v
new file mode 100644
index 0000000..42adcc5
--- /dev/null
+++ b/picosoc/hx8kdemo.v
@@ -0,0 +1,109 @@
+/*
+ * PicoSoC - A simple example SoC using PicoRV32
+ *
+ * Copyright (C) 2017 Clifford Wolf <clifford@clifford.at>
+ *
+ * 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 hx8kdemo (
+ input clk,
+
+ input ser_tx,
+ input ser_rx,
+
+ output [7:0] leds,
+
+ output flash_csb,
+ output flash_clk,
+ inout flash_io0,
+ inout flash_io1,
+ inout flash_io2,
+ inout flash_io3
+);
+ reg [5:0] reset_cnt = 0;
+ wire resetn = &reset_cnt;
+
+ always @(posedge clk) begin
+ reset_cnt <= reset_cnt + !resetn;
+ end
+
+ wire flash_io0_oe, flash_io0_do, flash_io0_di;
+ wire flash_io1_oe, flash_io1_do, flash_io1_di;
+ wire flash_io2_oe, flash_io2_do, flash_io2_di;
+ wire flash_io3_oe, flash_io3_do, flash_io3_di;
+
+ SB_IO #(
+ .PIN_TYPE(6'b 1010_01),
+ .PULLUP(1'b 0)
+ ) flash_io_buf [3:0] (
+ .PACKAGE_PIN({flash_io3, flash_io2, flash_io1, flash_io0}),
+ .OUTPUT_ENABLE({flash_io3_oe, flash_io2_oe, flash_io1_oe, flash_io0_oe}),
+ .D_OUT_0({flash_io3_do, flash_io2_do, flash_io1_do, flash_io0_do}),
+ .D_IN_0({flash_io3_di, flash_io2_di, flash_io1_di, flash_io0_di})
+ );
+
+ 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 leds = gpio >> 12;
+
+ always @(posedge clk) begin
+ iomem_ready <= 0;
+ if (iomem_valid && !iomem_ready && iomem_addr[31:24] == 8'h 02) begin
+ iomem_ready <= 1;
+ iomem_rdata <= gpio;
+ 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
+
+ picosoc uut (
+ .clk (clk ),
+ .resetn (resetn ),
+
+ .flash_csb (flash_csb ),
+ .flash_clk (flash_clk ),
+
+ .flash_io0_oe (flash_io0_oe),
+ .flash_io1_oe (flash_io1_oe),
+ .flash_io2_oe (flash_io2_oe),
+ .flash_io3_oe (flash_io3_oe),
+
+ .flash_io0_do (flash_io0_do),
+ .flash_io1_do (flash_io1_do),
+ .flash_io2_do (flash_io2_do),
+ .flash_io3_do (flash_io3_do),
+
+ .flash_io0_di (flash_io0_di),
+ .flash_io1_di (flash_io1_di),
+ .flash_io2_di (flash_io2_di),
+ .flash_io3_di (flash_io3_di),
+
+ .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